[Mesa-dev] [PATCH 1/3] mesa: remove obsolete and broken sampler code
Timothy Arceri
t_arceri at yahoo.com.au
Fri May 29 07:04:04 PDT 2015
Please ignore the first two patches turns out the name generation is
used for structs (although there seems to be no piglit tests for this)
like:
struct S {
sampler2D tex[2];
};
uniform S i[3];
Where name would become: i[2].tex
On Fri, 2015-05-29 at 23:16 +1000, Timothy Arceri wrote:
> The warning is now handled earlier in the ast to hir code,
> and the name was only generated for arrays of arrays in which
> case this just breaks the Uniform hash lookup.
> ---
> src/mesa/program/sampler.cpp | 38 +++++++++++++-------------------------
> 1 file changed, 13 insertions(+), 25 deletions(-)
>
> diff --git a/src/mesa/program/sampler.cpp b/src/mesa/program/sampler.cpp
> index ea3024d..34567d2 100644
> --- a/src/mesa/program/sampler.cpp
> +++ b/src/mesa/program/sampler.cpp
> @@ -38,14 +38,12 @@
> class get_sampler_name : public ir_hierarchical_visitor
> {
> public:
> - get_sampler_name(ir_dereference *last,
> - struct gl_shader_program *shader_program)
> + get_sampler_name(struct gl_shader_program *shader_program)
> {
> this->mem_ctx = ralloc_context(NULL);
> this->shader_program = shader_program;
> this->name = NULL;
> this->offset = 0;
> - this->last = last;
> }
>
> ~get_sampler_name()
> @@ -68,29 +66,20 @@ public:
> virtual ir_visitor_status visit_leave(ir_dereference_array *ir)
> {
> ir_constant *index = ir->array_index->as_constant();
> - int i;
> +
> + /* GLSL 1.10 and 1.20 allowed variable sampler array indices,
> + * while GLSL 1.30 requires that the array indices be
> + * constant integer expressions. We don't expect any driver
> + * to actually work with a really variable array index, so
> + * all that would work would be an unrolled loop counter so
> + * the index must be constant at this point.
> + */
> + assert(index != NULL);
>
> if (index) {
> - i = index->value.i[0];
> - } else {
> - /* GLSL 1.10 and 1.20 allowed variable sampler array indices,
> - * while GLSL 1.30 requires that the array indices be
> - * constant integer expressions. We don't expect any driver
> - * to actually work with a really variable array index, so
> - * all that would work would be an unrolled loop counter that ends
> - * up being constant above.
> - */
> - ralloc_strcat(&shader_program->InfoLog,
> - "warning: Variable sampler array index unsupported.\n"
> - "This feature of the language was removed in GLSL 1.20 "
> - "and is unlikely to be supported for 1.10 in Mesa.\n");
> - i = 0;
> - }
> - if (ir != last) {
> - this->name = ralloc_asprintf(mem_ctx, "%s[%d]", name, i);
> - } else {
> - offset = i;
> + offset = index->value.i[0];
> }
> +
> return visit_continue;
> }
>
> @@ -98,7 +87,6 @@ public:
> const char *name;
> void *mem_ctx;
> int offset;
> - ir_dereference *last;
> };
>
>
> @@ -107,7 +95,7 @@ _mesa_get_sampler_uniform_value(class ir_dereference *sampler,
> struct gl_shader_program *shader_program,
> const struct gl_program *prog)
> {
> - get_sampler_name getname(sampler, shader_program);
> + get_sampler_name getname(shader_program);
>
> GLuint shader = _mesa_program_enum_to_shader_stage(prog->Target);
>
More information about the mesa-dev
mailing list