Mesa (staging/19.3): nir: Add clone/hash/serialize support for non-uniform tex instructions.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jan 6 17:45:32 UTC 2020
Module: Mesa
Branch: staging/19.3
Commit: abe5b977bd0577d001a60bd5e5984bb5da9e9d6a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=abe5b977bd0577d001a60bd5e5984bb5da9e9d6a
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Wed Jan 1 14:42:58 2020 +0100
nir: Add clone/hash/serialize support for non-uniform tex instructions.
These were missed when the fields got added. Added it everywhere where
texture_index got used and it made sense.
Found this in "The Surge 2", where the inliner does not copy the fields,
resulting in corruption and hangs.
Fixes: 3bd54576415 "nir: Add a lowering pass for non-uniform resource access"
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1203
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3246>
(cherry picked from commit 69bdc1c5fccbd9c0ef5354675b069ffb1383769e)
---
src/compiler/nir/nir_clone.c | 3 +++
src/compiler/nir/nir_instr_set.c | 2 ++
src/compiler/nir/nir_serialize.c | 8 +++++++-
3 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/compiler/nir/nir_clone.c b/src/compiler/nir/nir_clone.c
index 682a1a274a7..1ff085845f8 100644
--- a/src/compiler/nir/nir_clone.c
+++ b/src/compiler/nir/nir_clone.c
@@ -422,6 +422,9 @@ clone_tex(clone_state *state, const nir_tex_instr *tex)
ntex->texture_array_size = tex->texture_array_size;
ntex->sampler_index = tex->sampler_index;
+ ntex->texture_non_uniform = tex->texture_non_uniform;
+ ntex->sampler_non_uniform = tex->sampler_non_uniform;
+
return ntex;
}
diff --git a/src/compiler/nir/nir_instr_set.c b/src/compiler/nir/nir_instr_set.c
index fdab2a4fb1e..cb0f2befa86 100644
--- a/src/compiler/nir/nir_instr_set.c
+++ b/src/compiler/nir/nir_instr_set.c
@@ -276,6 +276,8 @@ hash_tex(uint32_t hash, const nir_tex_instr *instr)
hash = HASH(hash, instr->texture_index);
hash = HASH(hash, instr->texture_array_size);
hash = HASH(hash, instr->sampler_index);
+ hash = HASH(hash, instr->texture_non_uniform);
+ hash = HASH(hash, instr->sampler_non_uniform);
return hash;
}
diff --git a/src/compiler/nir/nir_serialize.c b/src/compiler/nir/nir_serialize.c
index 558bd6c97a3..9d1e2d45445 100644
--- a/src/compiler/nir/nir_serialize.c
+++ b/src/compiler/nir/nir_serialize.c
@@ -605,7 +605,9 @@ union packed_tex_data {
unsigned is_shadow:1;
unsigned is_new_style_shadow:1;
unsigned component:2;
- unsigned unused:10; /* Mark unused for valgrind. */
+ unsigned texture_non_uniform:1;
+ unsigned sampler_non_uniform:1;
+ unsigned unused:8; /* Mark unused for valgrind. */
} u;
};
@@ -628,6 +630,8 @@ write_tex(write_ctx *ctx, const nir_tex_instr *tex)
.u.is_shadow = tex->is_shadow,
.u.is_new_style_shadow = tex->is_new_style_shadow,
.u.component = tex->component,
+ .u.texture_non_uniform = tex->texture_non_uniform,
+ .u.sampler_non_uniform = tex->sampler_non_uniform,
};
blob_write_uint32(ctx->blob, packed.u32);
@@ -659,6 +663,8 @@ read_tex(read_ctx *ctx)
tex->is_shadow = packed.u.is_shadow;
tex->is_new_style_shadow = packed.u.is_new_style_shadow;
tex->component = packed.u.component;
+ tex->texture_non_uniform = packed.u.texture_non_uniform;
+ tex->sampler_non_uniform = packed.u.sampler_non_uniform;
read_dest(ctx, &tex->dest, &tex->instr);
for (unsigned i = 0; i < tex->num_srcs; i++) {
More information about the mesa-commit
mailing list