X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Fcso_cache%2Fcso_cache.h;h=cc1f1c0e123aaa098d73f00e3da912a67ac73ba1;hb=a15cbabb8b546fa063cfb6f528dd67ee0037079b;hp=e5edbbb5566a3371fdfe51f25baef36b8607e45b;hpb=03ec66375889f049b09f39ba98515aa35ac48164;p=mesa.git diff --git a/src/gallium/auxiliary/cso_cache/cso_cache.h b/src/gallium/auxiliary/cso_cache/cso_cache.h index e5edbbb5566..cc1f1c0e123 100644 --- a/src/gallium/auxiliary/cso_cache/cso_cache.h +++ b/src/gallium/auxiliary/cso_cache/cso_cache.h @@ -53,6 +53,7 @@ * - rasterizer (old setup) * - sampler * - vertex shader + * - vertex elements * * Things that are not constant state objects include: * - blend_color @@ -84,8 +85,22 @@ extern "C" { #endif +enum cso_cache_type { + CSO_RASTERIZER, + CSO_BLEND, + CSO_DEPTH_STENCIL_ALPHA, + CSO_SAMPLER, + CSO_VELEMENTS, + CSO_CACHE_MAX, +}; + typedef void (*cso_state_callback)(void *ctx, void *obj); +typedef void (*cso_sanitize_callback)(struct cso_hash *hash, + enum cso_cache_type type, + int max_size, + void *user_data); + struct cso_cache; struct cso_blend { @@ -109,42 +124,34 @@ struct cso_rasterizer { struct pipe_context *context; }; -struct cso_fragment_shader { - struct pipe_shader_state state; +struct cso_sampler { + struct pipe_sampler_state state; void *data; cso_state_callback delete_state; struct pipe_context *context; }; -struct cso_vertex_shader { - struct pipe_shader_state state; - void *data; - cso_state_callback delete_state; - struct pipe_context *context; +struct cso_velems_state { + unsigned count; + struct pipe_vertex_element velems[PIPE_MAX_ATTRIBS]; }; -struct cso_sampler { - struct pipe_sampler_state state; +struct cso_velements { + struct cso_velems_state state; void *data; cso_state_callback delete_state; struct pipe_context *context; }; - -enum cso_cache_type { - CSO_BLEND, - CSO_SAMPLER, - CSO_DEPTH_STENCIL_ALPHA, - CSO_RASTERIZER, - CSO_FRAGMENT_SHADER, - CSO_VERTEX_SHADER -}; - unsigned cso_construct_key(void *item, int item_size); struct cso_cache *cso_cache_create(void); void cso_cache_delete(struct cso_cache *sc); +void cso_cache_set_sanitize_callback(struct cso_cache *sc, + cso_sanitize_callback cb, + void *user_data); + struct cso_hash_iter cso_insert_state(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type, void *state); @@ -152,7 +159,7 @@ struct cso_hash_iter cso_find_state(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type); struct cso_hash_iter cso_find_state_template(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type, - void *templ); + void *templ, unsigned size); void cso_for_each_state(struct cso_cache *sc, enum cso_cache_type type, cso_state_callback func, void *user_data); void * cso_take_state(struct cso_cache *sc, unsigned hash_key,