summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2019-02-06 02:05:01 -0800
committerDylan Baker <dylan@pnwbakers.com>2019-05-08 16:40:18 -0700
commit6b74d3392866e11fa2761a2c181bf8369b6c3d45 (patch)
treed426545e3d56526372ada486f6ea750408ca3043
parent06ca5c0a64c1ab9866b066f2c90f14d08b2810f9 (diff)
glsl: Don't look at sampler uniform storage for internal vars
Passes like nir_lower_drawpixels add additional sampler variables, and set an explicit binding which never changes. These extra samplers don't have proper uniform storage associated with them, and there is no way to update bindings via the API. So, for any 'hidden' variables, just trust that there's an explicit binding set. Reviewed-by: Eric Anholt <eric@anholt.net> (cherry picked from commit 529a0711c1d07c109f83286583ed359a890f5a75)
-rw-r--r--src/compiler/glsl/gl_nir_lower_samplers_as_deref.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
index 5d0430c0add..87718112db7 100644
--- a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
+++ b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c
@@ -147,16 +147,18 @@ lower_deref(nir_builder *b, struct lower_samplers_as_deref_state *state,
remove_struct_derefs_prep(path.path, &name, &location, &type);
- if (state->shader_program) {
+ if (state->shader_program && var->data.how_declared != nir_var_hidden) {
/* For GLSL programs, look up the bindings in the uniform storage. */
assert(location < state->shader_program->data->NumUniformStorage &&
state->shader_program->data->UniformStorage[location].opaque[stage].active);
binding = state->shader_program->data->UniformStorage[location].opaque[stage].index;
} else {
- /* For ARB programs or built-in shaders, assume that whoever created
- * the shader set the bindings correctly already.
+ /* For ARB programs, built-in shaders, or internally generated sampler
+ * variables in GLSL programs, assume that whoever created the shader
+ * set the bindings correctly already.
*/
+ assert(var->data.explicit_binding);
binding = var->data.binding;
}