diff options
author | Eric Anholt <[email protected]> | 2010-08-05 16:00:46 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-08-06 00:42:59 -0700 |
commit | 8d61a23b1a1d0d4b21f0fab64f6d863a8ee3d7f1 (patch) | |
tree | 99eab30c2a0a4fc426bf3ef39045237656db380a /src | |
parent | 658e25987fbec3b826f500baa6d4d936b9552b13 (diff) |
glsl2: Don't assert in a couple of places when encountering sampler arrays.
Fixes glean shaderAPI.
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/linker.cpp | 10 | ||||
-rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 9d6de242f5f..e93c2f55549 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -793,11 +793,13 @@ assign_uniform_locations(struct gl_shader_program *prog) if ((var == NULL) || (var->mode != ir_var_uniform)) continue; - if (var->type->is_sampler()) - continue; - const unsigned vec4_slots = (var->component_slots() + 3) / 4; - assert(vec4_slots != 0); + if (vec4_slots == 0) { + /* If we've got a sampler or an aggregate of them, the size can + * end up zero. Don't allocate any space. + */ + continue; + } uniform_node *n = (uniform_node *) hash_table_find(ht, var->name); if (n == NULL) { diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 9979e6e3e07..66b1a2f9d9a 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -518,6 +518,11 @@ type_size(const struct glsl_type *type) size += type_size(type->fields.structure[i].type); } return size; + case GLSL_TYPE_SAMPLER: + /* Samplers take up no register space, since they're baked in at + * link time. + */ + return 0; default: assert(0); } |