Mesa (master): r600: fix sampler indexing with texture buffers sampling

Roland Scheidegger sroland at kemper.freedesktop.org
Wed Jan 10 04:03:54 UTC 2018


Module: Mesa
Branch: master
Commit: 762ccf483aa0f5f853e75c886d49c4025cebaf00
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=762ccf483aa0f5f853e75c886d49c4025cebaf00

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Tue Jan  2 23:03:44 2018 +0100

r600: fix sampler indexing with texture buffers sampling

This fixes the new piglit test.
While here also fix up the logic for early exit of setting up driver consts.

Tested-by: Konstantin Kharlamov <hi-angel at yandex.ru>
Reviewed-by: Reviewed-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/drivers/r600/r600_shader.c       | 2 ++
 src/gallium/drivers/r600/r600_state_common.c | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index bb7cc177ae..716a829273 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -6856,6 +6856,7 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx *ctx, boolean src_requires_l
 	struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
 	int src_gpr, r, i;
 	int id = tgsi_tex_get_src_gpr(ctx, 1);
+	int sampler_index_mode = inst->Src[1].Indirect.Index == 2 ? 2 : 0; // CF_INDEX_1 : CF_INDEX_NONE
 
 	src_gpr = tgsi_tex_get_src_gpr(ctx, 0);
 	if (src_requires_loading) {
@@ -6887,6 +6888,7 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx *ctx, boolean src_requires_l
 	vtx.dst_sel_z = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7;		/* SEL_Z */
 	vtx.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;		/* SEL_W */
 	vtx.use_const_fields = 1;
+	vtx.buffer_index_mode = sampler_index_mode;
 
 	if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
 		return r;
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index e7fa1bbf57..1d9ff7bd6e 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -1380,8 +1380,8 @@ void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type)
 	}
 
 	if (!samplers->views.dirty_buffer_constants &&
-	    (images && !images->dirty_buffer_constants) &&
-	    (buffers && !buffers->dirty_buffer_constants))
+	    !(images && images->dirty_buffer_constants) &&
+	    !(buffers && buffers->dirty_buffer_constants))
 		return;
 
 	if (images)




More information about the mesa-commit mailing list