On 07.09.2017 19:17, Eric Anholt wrote:
Only one of the three checks for dim was updated, so we would try to set a
UBO buffer index source value on a nir_load_uniform, and wouldn't actually
declare non-UBO uniforms.

Fixes: 37dd8e8dee1d ("gallium: all drivers should accept two-dimensional constant 
buffer indexing")

Reviewed-by: Nicolai Hähnle <[email protected]>

---
  src/gallium/auxiliary/nir/tgsi_to_nir.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c 
b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index aa715dcae2db..1b630096ffaa 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -314,7 +314,8 @@ ttn_emit_declaration(struct ttn_compile *c)
               file == TGSI_FILE_CONSTANT);
/* nothing to do for UBOs: */
-      if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension) {
+      if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension &&
+          decl->Dim.Index2D != 0) {
           b->shader->info.num_ubos =
              MAX2(b->shader->info.num_ubos, decl->Dim.Index2D);
           return;
@@ -638,7 +639,7 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned 
file, unsigned index,
        load = nir_intrinsic_instr_create(b->shader, op);
load->num_components = 4;
-      if (dim) {
+      if (dim && (dim->Index > 0 || dim->Indirect)) {
           if (dimind) {
              load->src[srcn] =
                 ttn_src_for_file_and_index(c, dimind->File, dimind->Index,



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to