gallium/radeon: fix ARB_query_buffer_object conversion to boolean
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 27 Jul 2017 12:06:59 +0000 (14:06 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 2 Aug 2017 07:46:41 +0000 (09:46 +0200)
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
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/r600_query.c

index e716d4bf156d8c95cc2ed3b579f2f95bd84c1098..6d264f8a4cf472b9722e22294ae1ca75aaa49cb1 100644 (file)
@@ -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"