diff options
author | Eric Anholt <eric@anholt.net> | 2012-05-01 14:26:09 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2012-07-20 10:43:52 -0700 |
commit | 0cea8a56b627cea297e4213266b57b7a1085dcca (patch) | |
tree | dc164d3b2cd9aff86395334959777d22b11c8348 /src/glsl/opt_dead_code.cpp | |
parent | 548bce473367a53f45275356f8d5b9e7d98be5ce (diff) |
glsl: Don't dead-code eliminiate uniforms declared in uniform blocks.
This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/glsl/opt_dead_code.cpp')
-rw-r--r-- | src/glsl/opt_dead_code.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp index 0578f1737b0..de8475f956e 100644 --- a/src/glsl/opt_dead_code.cpp +++ b/src/glsl/opt_dead_code.cpp @@ -95,9 +95,15 @@ do_dead_code(exec_list *instructions, bool uniform_locations_assigned) /* uniform initializers are precious, and could get used by another * stage. Also, once uniform locations have been assigned, the * declaration cannot be deleted. + * + * Also, GL_ARB_uniform_buffer_object says that std140 + * uniforms will not be eliminated. Since we always do + * std140, just don't eliminate uniforms in UBOs. */ if (entry->var->mode == ir_var_uniform && - (uniform_locations_assigned || entry->var->constant_value)) + (uniform_locations_assigned || + entry->var->constant_value || + entry->var->uniform_block != -1)) continue; entry->var->remove(); |