[Mesa-dev] [PATCH 5/6] glsl: Make lower_const_arrays_to_uniforms work directly on constants.

Kenneth Graunke kenneth at whitecape.org
Wed Jun 22 03:02:54 UTC 2016


There's really no point in looking at ir_dereference_array of a
constant.  It also misses cases like:

  (assign () (var_ref tmp) (constant (array ...) ...))

No changes in shader-db, but keeps it working after the next commit.

Cc: mesa-stable at lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/compiler/glsl/lower_const_arrays_to_uniforms.cpp | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp b/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
index 2d024d4..9948150 100644
--- a/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
+++ b/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
@@ -70,17 +70,13 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue)
    if (!*rvalue)
       return;
 
-   ir_dereference_array *dra = (*rvalue)->as_dereference_array();
-   if (!dra)
-      return;
-
-   ir_constant *con = dra->array->as_constant();
+   ir_constant *con = (*rvalue)->as_constant();
    if (!con || !con->type->is_array())
       return;
 
    void *mem_ctx = ralloc_parent(con);
 
-   char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%p", dra);
+   char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%p", con);
 
    ir_variable *uni =
       new(mem_ctx) ir_variable(con->type, uniform_name, ir_var_uniform);
@@ -93,8 +89,7 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue)
    uni->data.max_array_access = uni->type->length - 1;
    instructions->push_head(uni);
 
-   ir_dereference_variable *varref = new(mem_ctx) ir_dereference_variable(uni);
-   *rvalue = new(mem_ctx) ir_dereference_array(varref, dra->array_index);
+   *rvalue = new(mem_ctx) ir_dereference_variable(uni);
 
    progress = true;
 }
-- 
2.9.0



More information about the mesa-dev mailing list