glsl: Track whether uniforms are active per stage
for finer granularity state flagging v2: Marek - use a bitmask, add shader cache support Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
670c4dd395
commit
b7ba745032
|
@ -106,6 +106,11 @@ struct gl_uniform_storage {
|
|||
|
||||
struct gl_opaque_uniform_index opaque[MESA_SHADER_STAGES];
|
||||
|
||||
/**
|
||||
* Mask of shader stages (1 << MESA_SHADER_xxx) where this uniform is used.
|
||||
*/
|
||||
unsigned active_shader_mask;
|
||||
|
||||
/**
|
||||
* Storage used by the driver for the uniform
|
||||
*/
|
||||
|
|
|
@ -766,6 +766,8 @@ private:
|
|||
this->uniforms[id].opaque[shader_type].index = ~0;
|
||||
this->uniforms[id].opaque[shader_type].active = false;
|
||||
|
||||
this->uniforms[id].active_shader_mask |= 1 << shader_type;
|
||||
|
||||
/* This assigns uniform indices to sampler and image uniforms. */
|
||||
handle_samplers(base_type, &this->uniforms[id], name);
|
||||
handle_images(base_type, &this->uniforms[id], name);
|
||||
|
|
|
@ -576,6 +576,7 @@ write_uniforms(struct blob *metadata, struct gl_shader_program *prog)
|
|||
blob_write_uint32(metadata, prog->data->UniformStorage[i].array_stride);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].hidden);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].is_shader_storage);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].active_shader_mask);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].matrix_stride);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].row_major);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].is_bindless);
|
||||
|
@ -641,6 +642,7 @@ read_uniforms(struct blob_reader *metadata, struct gl_shader_program *prog)
|
|||
uniforms[i].array_stride = blob_read_uint32(metadata);
|
||||
uniforms[i].hidden = blob_read_uint32(metadata);
|
||||
uniforms[i].is_shader_storage = blob_read_uint32(metadata);
|
||||
uniforms[i].active_shader_mask = blob_read_uint32(metadata);
|
||||
uniforms[i].matrix_stride = blob_read_uint32(metadata);
|
||||
uniforms[i].row_major = blob_read_uint32(metadata);
|
||||
uniforms[i].is_bindless = blob_read_uint32(metadata);
|
||||
|
|
Loading…
Reference in New Issue