[Mesa-dev] [PATCH] st/glsl_to_tgsi: only the first (inner-most) array reference can be a 2D index

Nicolai Hähnle nhaehnle at gmail.com
Fri Sep 8 17:03:02 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

Don't get distracted by record dereferences between array references.

Fixes dEQP-GLES31.functional.tessellation.user_defined_io.per_vertex_block.*

Cc: mesa-stable at lists.freedesktop.org
---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 026aea5d53d..cf6e8f8fde1 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -2525,21 +2525,21 @@ glsl_to_tgsi_visitor::visit(ir_dereference_array *ir)
     */
    int element_size = ir->type->without_array()->is_record() ?
       st_glsl_storage_type_size(ir->type, var->data.bindless) :
       type_size(ir->type);
 
    index = ir->array_index->constant_expression_value(ralloc_parent(ir));
 
    ir->array->accept(this);
    src = this->result;
 
-   if (ir->array->ir_type != ir_type_dereference_array) {
+   if (!src.has_index2) {
       switch (this->prog->Target) {
       case GL_TESS_CONTROL_PROGRAM_NV:
          is_2D = (src.file == PROGRAM_INPUT || src.file == PROGRAM_OUTPUT) &&
                  !ir->variable_referenced()->data.patch;
          break;
       case GL_TESS_EVALUATION_PROGRAM_NV:
          is_2D = src.file == PROGRAM_INPUT &&
                  !ir->variable_referenced()->data.patch;
          break;
       case GL_GEOMETRY_PROGRAM_NV:
-- 
2.11.0



More information about the mesa-dev mailing list