From aa2f609f7009199999f824970f9c13f016994364 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 5 Feb 2018 12:58:06 +0000 Subject: [PATCH] broadcom/vc5: Ignore samplers for finding uniform offsets. Fixes: KHR-GLES3.shaders.struct.uniform.sampler_array_fragment KHR-GLES3.shaders.struct.uniform.sampler_array_vertex KHR-GLES3.shaders.struct.uniform.sampler_nested_fragment KHR-GLES3.shaders.struct.uniform.sampler_nested_vertex --- src/gallium/drivers/vc5/vc5_program.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/vc5/vc5_program.c b/src/gallium/drivers/vc5/vc5_program.c index 881bd4501d8..eb5b6105455 100644 --- a/src/gallium/drivers/vc5/vc5_program.c +++ b/src/gallium/drivers/vc5/vc5_program.c @@ -35,6 +35,7 @@ #include "compiler/v3d_compiler.h" #include "vc5_context.h" #include "broadcom/cle/v3d_packet_v33_pack.h" +#include "mesa/state_tracker/st_glsl_types.h" static gl_varying_slot vc5_get_slot_for_driver_location(nir_shader *s, uint32_t driver_location) @@ -128,6 +129,12 @@ type_size(const struct glsl_type *type) return glsl_count_attribute_slots(type, false); } +static int +uniforms_type_size(const struct glsl_type *type) +{ + return st_glsl_storage_type_size(type, false); +} + static void * vc5_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_state *cso) @@ -147,7 +154,11 @@ vc5_shader_state_create(struct pipe_context *pctx, */ s = cso->ir.nir; - NIR_PASS_V(s, nir_lower_io, nir_var_all, type_size, + NIR_PASS_V(s, nir_lower_io, nir_var_all & ~nir_var_uniform, + type_size, + (nir_lower_io_options)0); + NIR_PASS_V(s, nir_lower_io, nir_var_uniform, + uniforms_type_size, (nir_lower_io_options)0); } else { assert(cso->type == PIPE_SHADER_IR_TGSI);