r600c: get OQ results only for 4 DBs on r600 class
authorAndre Maasikas <amaasikas@gmail.com>
Fri, 21 Jan 2011 09:48:03 +0000 (11:48 +0200)
committerAndre Maasikas <amaasikas@gmail.com>
Fri, 21 Jan 2011 09:48:03 +0000 (11:48 +0200)
- since evergreen addition which increased this to 8 depth backends
  other bytes may contain garbage values

src/mesa/drivers/dri/radeon/radeon_queryobj.c

index a45ca7cad0d1ddb4332433bd4c46323a4ac8016e..cc395e9eab4b34a7649c241f86f8d23ff1209bfb 100644 (file)
@@ -38,7 +38,7 @@ static void radeonQueryGetResult(struct gl_context *ctx, struct gl_query_object
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = (struct radeon_query_object *)q;
         uint32_t *result;
-       int i;
+       int i, max_idx;
 
        radeon_print(RADEON_STATE, RADEON_VERBOSE,
                        "%s: query id %d, result %d\n",
@@ -56,7 +56,11 @@ static void radeonQueryGetResult(struct gl_context *ctx, struct gl_query_object
                 * hw writes zpass end counts to qwords 1, 3, 5, 7.
                 * then we substract. MSB is the valid bit.
                 */
-               for (i = 0; i < 32; i += 4) {
+               if (radeon->radeonScreen->chip_family >= CHIP_FAMILY_CEDAR)
+                       max_idx = 8 * 4; /* 8 DB's */
+               else
+                       max_idx = 4 * 4; /* 4 DB's for r600, r700 */
+               for (i = 0; i < max_idx; i += 4) {
                        uint64_t start = (uint64_t)LE32_TO_CPU(result[i]) |
                                         (uint64_t)LE32_TO_CPU(result[i + 1]) << 32;
                        uint64_t end = (uint64_t)LE32_TO_CPU(result[i + 2]) |