diff options
author | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2017-07-27 14:06:59 +0200 |
---|---|---|
committer | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2017-07-31 18:32:08 +0200 |
commit | ae3b25d436a5cadfb3c376f710c5817044af0448 (patch) | |
tree | 53381c4e718abafc4126f389176e2a279cade062 | |
parent | 5c33d4d567dbafd23c4152db0b5159ba92c99f4b (diff) |
gallium/radeon: fix ARB_query_buffer_object conversion to boolean
The issue here is that the immediate is treated as a 64-bit value,
and fetching it does not work reliably with swizzles that are different
from xy and zw.
Cc: mesa-stable@lists.freedesktop.org
-rw-r--r-- | src/gallium/drivers/radeon/r600_query.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c index e716d4bf15..6d264f8a4c 100644 --- a/src/gallium/drivers/radeon/r600_query.c +++ b/src/gallium/drivers/radeon/r600_query.c @@ -1379,6 +1379,7 @@ static void r600_create_query_result_shader(struct r600_common_context *rctx) "IMM[1] UINT32 {1, 2, 4, 8}\n" "IMM[2] UINT32 {16, 32, 64, 128}\n" "IMM[3] UINT32 {1000000, 0, %u, 0}\n" /* for timestamp conversion */ + "IMM[4] UINT32 {0, 0, 0, 0}\n" "AND TEMP[5], CONST[0].wwww, IMM[2].xxxx\n" "UIF TEMP[5]\n" @@ -1478,7 +1479,7 @@ static void r600_create_query_result_shader(struct r600_common_context *rctx) /* Convert to boolean */ "AND TEMP[4], CONST[0].wwww, IMM[1].wwww\n" "UIF TEMP[4]\n" - "U64SNE TEMP[0].x, TEMP[0].xyxy, IMM[0].xxxx\n" + "U64SNE TEMP[0].x, TEMP[0].xyxy, IMM[4].zwzw\n" "AND TEMP[0].x, TEMP[0].xxxx, IMM[1].xxxx\n" "MOV TEMP[0].y, IMM[0].xxxx\n" "ENDIF\n" |