iris: Don't assume UBO indices are constant
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 29 May 2019 02:56:04 +0000 (21:56 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Wed, 29 May 2019 21:09:16 +0000 (21:09 +0000)
It will be true for the constant/system value buffer because they use a
constant zero but it's not true in general.  If we ever got here when
the source wasn't constant, nir_src_as_uint would assert.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/iris/iris_program.c

index 37cf123ae6b68134f099545be82bd7b375afa0d5..e0a6a5c1edd5a13a32a647e0e066007b6261d9ee 100644 (file)
@@ -491,7 +491,8 @@ iris_setup_uniforms(const struct brw_compiler *compiler,
             if (load->src[0].ssa == temp_ubo_name) {
                nir_instr_rewrite_src(instr, &load->src[0],
                                      nir_src_for_ssa(nir_imm_int(&b, 0)));
-            } else if (nir_src_as_uint(load->src[0]) == 0) {
+            } else if (nir_src_is_const(load->src[0]) &&
+                       nir_src_as_uint(load->src[0]) == 0) {
                nir_ssa_def *offset =
                   nir_iadd(&b, load->src[1].ssa,
                            nir_imm_int(&b, 4 * num_system_values));