Mesa (master): r600/ssbo: fix multi-dword buffer loads.

Dave Airlie airlied at kemper.freedesktop.org
Tue Dec 5 20:08:29 UTC 2017


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Dec  5 08:38:26 2017 +0000

r600/ssbo: fix multi-dword buffer loads.

This fixes loading from different channels.

Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/drivers/r600/r600_shader.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 93b86eae26..02e8354baa 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -8005,17 +8005,19 @@ static int tgsi_load_buffer(struct r600_shader_ctx *ctx)
 	vtx.format_comp_all = 1;
 	vtx.srf_mode_all = 0;
 
-	if (inst->Dst[0].Register.WriteMask == 0xf) {
+	if (inst->Dst[0].Register.WriteMask & 8) {
 		vtx.data_format = FMT_32_32_32_32;
 		vtx.use_const_fields = 0;
-	} else if (inst->Dst[0].Register.WriteMask == 0x7) {
+	} else if (inst->Dst[0].Register.WriteMask & 4) {
 		vtx.data_format = FMT_32_32_32;
 		vtx.use_const_fields = 0;
-	} else if (inst->Dst[0].Register.WriteMask == 0x3) {
+	} else if (inst->Dst[0].Register.WriteMask & 2) {
 		vtx.data_format = FMT_32_32;
 		vtx.use_const_fields = 0;
-	} else
-		vtx.use_const_fields = 1;
+	} else {
+		vtx.data_format = FMT_32;
+		vtx.use_const_fields = 0;
+	}
 
 	r = r600_bytecode_add_vtx_tc(ctx->bc, &vtx);
 	if (r)




More information about the mesa-commit mailing list