i965/miptree: Replace is_lossless_compressed with mt->aux_usage checks
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_queryobj.c
index 04ce12493e6f1108ad5e791eadf615e4d4748334..baf7081994c78f2d8f0ecf8beb877fe9e806fe29 100644 (file)
 #include "radeon_debug.h"
 
 #include "main/imports.h"
-#include "main/simple_list.h"
 
-static void radeonQueryGetResult(GLcontext *ctx, struct gl_query_object *q)
+#include <inttypes.h>
+
+static void radeonQueryGetResult(struct gl_context *ctx, struct gl_query_object *q)
 {
-       radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = (struct radeon_query_object *)q;
         uint32_t *result;
        int i;
 
        radeon_print(RADEON_STATE, RADEON_VERBOSE,
                        "%s: query id %d, result %d\n",
-                       __FUNCTION__, query->Base.Id, (int) query->Base.Result);
+                       __func__, query->Base.Id, (int) query->Base.Result);
 
        radeon_bo_map(query->bo, GL_FALSE);
         result = query->bo->ptr;
 
        query->Base.Result = 0;
-       if (IS_R600_CLASS(radeon->radeonScreen)) {
-               /* ZPASS EVENT writes alternating qwords
-                * At query start we set the start offset to 0 and
-                * hw writes zpass start counts to qwords 0, 2, 4, 6.
-                * At query end we set the start offset to 8 and
-                * hw writes zpass end counts to qwords 1, 3, 5, 7.
-                * then we substract. MSB is the valid bit.
-                */
-               for (i = 0; i < 16; 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]) |
-                                      (uint64_t)LE32_TO_CPU(result[i + 3]) << 32;
-                       if ((start & 0x8000000000000000) && (end & 0x8000000000000000)) {
-                               uint64_t query_count = end - start;
-                               query->Base.Result += query_count;
-
-                       }
-                       radeon_print(RADEON_STATE, RADEON_TRACE,
-                                    "%d start: %llx, end: %llx %lld\n", i, start, end, end - start);
-               }
-       } else {
-               for (i = 0; i < query->curr_offset/sizeof(uint32_t); ++i) {
-                       query->Base.Result += LE32_TO_CPU(result[i]);
-                       radeon_print(RADEON_STATE, RADEON_TRACE, "result[%d] = %d\n", i, LE32_TO_CPU(result[i]));
-               }
+       for (i = 0; i < query->curr_offset/sizeof(uint32_t); ++i) {
+               query->Base.Result += LE32_TO_CPU(result[i]);
+               radeon_print(RADEON_STATE, RADEON_TRACE, "result[%d] = %d\n", i, LE32_TO_CPU(result[i]));
        }
 
        radeon_bo_unmap(query->bo);
 }
 
-static struct gl_query_object * radeonNewQueryObject(GLcontext *ctx, GLuint id)
+static struct gl_query_object * radeonNewQueryObject(struct gl_context *ctx, GLuint id)
 {
        struct radeon_query_object *query;
 
@@ -88,16 +65,16 @@ static struct gl_query_object * radeonNewQueryObject(GLcontext *ctx, GLuint id)
        query->Base.Active = GL_FALSE;
        query->Base.Ready = GL_TRUE;
 
-       radeon_print(RADEON_STATE, RADEON_VERBOSE,"%s: query id %d\n", __FUNCTION__, query->Base.Id);
+       radeon_print(RADEON_STATE, RADEON_VERBOSE,"%s: query id %d\n", __func__, query->Base.Id);
 
        return &query->Base;
 }
 
-static void radeonDeleteQuery(GLcontext *ctx, struct gl_query_object *q)
+static void radeonDeleteQuery(struct gl_context *ctx, struct gl_query_object *q)
 {
        struct radeon_query_object *query = (struct radeon_query_object *)q;
 
-       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __FUNCTION__, q->Id);
+       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __func__, q->Id);
 
        if (query->bo) {
                radeon_bo_unref(query->bo);
@@ -106,7 +83,7 @@ static void radeonDeleteQuery(GLcontext *ctx, struct gl_query_object *q)
        free(query);
 }
 
-static void radeonWaitQuery(GLcontext *ctx, struct gl_query_object *q)
+static void radeonWaitQuery(struct gl_context *ctx, struct gl_query_object *q)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = (struct radeon_query_object *)q;
@@ -115,7 +92,7 @@ static void radeonWaitQuery(GLcontext *ctx, struct gl_query_object *q)
        if (radeon_bo_is_referenced_by_cs(query->bo, radeon->cmdbuf.cs))
                ctx->Driver.Flush(ctx);
 
-       radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s: query id %d, bo %p, offset %d\n", __FUNCTION__, q->Id, query->bo, query->curr_offset);
+       radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s: query id %d, bo %p, offset %d\n", __func__, q->Id, query->bo, query->curr_offset);
 
        radeonQueryGetResult(ctx, q);
 
@@ -123,17 +100,17 @@ static void radeonWaitQuery(GLcontext *ctx, struct gl_query_object *q)
 }
 
 
-static void radeonBeginQuery(GLcontext *ctx, struct gl_query_object *q)
+static void radeonBeginQuery(struct gl_context *ctx, struct gl_query_object *q)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = (struct radeon_query_object *)q;
 
-       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __FUNCTION__, q->Id);
+       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __func__, q->Id);
 
        assert(radeon->query.current == NULL);
 
        if (radeon->dma.flush)
-               radeon->dma.flush(radeon->glCtx);
+               radeon->dma.flush(&radeon->glCtx);
 
        if (!query->bo) {
                query->bo = radeon_bo_open(radeon->radeonScreen->bom, 0, RADEON_QUERY_PAGE_SIZE, RADEON_QUERY_PAGE_SIZE, RADEON_GEM_DOMAIN_GTT, 0);
@@ -146,7 +123,7 @@ static void radeonBeginQuery(GLcontext *ctx, struct gl_query_object *q)
        radeon->hw.is_dirty = GL_TRUE;
 }
 
-void radeonEmitQueryEnd(GLcontext *ctx)
+void radeonEmitQueryEnd(struct gl_context *ctx)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = radeon->query.current;
@@ -157,7 +134,7 @@ void radeonEmitQueryEnd(GLcontext *ctx)
        if (query->emitted_begin == GL_FALSE)
                return;
 
-       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d, bo %p, offset %d\n", __FUNCTION__, query->Base.Id, query->bo, query->curr_offset);
+       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d, bo %p, offset %d\n", __func__, query->Base.Id, query->bo, query->curr_offset);
 
        radeon_cs_space_check_with_bo(radeon->cmdbuf.cs,
                                      query->bo,
@@ -166,41 +143,37 @@ void radeonEmitQueryEnd(GLcontext *ctx)
        radeon->vtbl.emit_query_finish(radeon);
 }
 
-static void radeonEndQuery(GLcontext *ctx, struct gl_query_object *q)
+static void radeonEndQuery(struct gl_context *ctx, struct gl_query_object *q)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
 
-       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __FUNCTION__, q->Id);
+       radeon_print(RADEON_STATE, RADEON_NORMAL, "%s: query id %d\n", __func__, q->Id);
 
        if (radeon->dma.flush)
-               radeon->dma.flush(radeon->glCtx);
+               radeon->dma.flush(&radeon->glCtx);
        radeonEmitQueryEnd(ctx);
 
        radeon->query.current = NULL;
 }
 
-static void radeonCheckQuery(GLcontext *ctx, struct gl_query_object *q)
+static void radeonCheckQuery(struct gl_context *ctx, struct gl_query_object *q)
 {
-       radeon_print(RADEON_STATE, RADEON_TRACE, "%s: query id %d\n", __FUNCTION__, q->Id);
-
+       radeon_print(RADEON_STATE, RADEON_TRACE, "%s: query id %d\n", __func__, q->Id);
+\
 #ifdef DRM_RADEON_GEM_BUSY
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
 
-       if (radeon->radeonScreen->kernel_mm) {
-               struct radeon_query_object *query = (struct radeon_query_object *)q;
-               uint32_t domain;
-
-               /* Need to perform a flush, as per ARB_occlusion_query spec */
-               if (radeon_bo_is_referenced_by_cs(query->bo, radeon->cmdbuf.cs)) {
-                       ctx->Driver.Flush(ctx);
-               }
-
-               if (radeon_bo_is_busy(query->bo, &domain) == 0) {
-                       radeonQueryGetResult(ctx, q);
-                       query->Base.Ready = GL_TRUE;
-               }
-       } else {
-               radeonWaitQuery(ctx, q);
+       struct radeon_query_object *query = (struct radeon_query_object *)q;
+       uint32_t domain;
+
+       /* Need to perform a flush, as per ARB_occlusion_query spec */
+       if (radeon_bo_is_referenced_by_cs(query->bo, radeon->cmdbuf.cs)) {
+               ctx->Driver.Flush(ctx);
+       }
+
+       if (radeon_bo_is_busy(query->bo, &domain) == 0) {
+               radeonQueryGetResult(ctx, q);
+               query->Base.Ready = GL_TRUE;
        }
 #else
        radeonWaitQuery(ctx, q);
@@ -217,7 +190,7 @@ void radeonInitQueryObjFunctions(struct dd_function_table *functions)
        functions->WaitQuery = radeonWaitQuery;
 }
 
-int radeon_check_query_active(GLcontext *ctx, struct radeon_state_atom *atom)
+int radeon_check_query_active(struct gl_context *ctx, struct radeon_state_atom *atom)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        struct radeon_query_object *query = radeon->query.current;
@@ -227,15 +200,15 @@ int radeon_check_query_active(GLcontext *ctx, struct radeon_state_atom *atom)
        return atom->cmd_size;
 }
 
-void radeon_emit_queryobj(GLcontext *ctx, struct radeon_state_atom *atom)
+void radeon_emit_queryobj(struct gl_context *ctx, struct radeon_state_atom *atom)
 {
        radeonContextPtr radeon = RADEON_CONTEXT(ctx);
        BATCH_LOCALS(radeon);
        int dwords;
 
-       dwords = (*atom->check) (ctx, atom);
+       dwords = atom->check(ctx, atom);
 
-       BEGIN_BATCH_NO_AUTOSTATE(dwords);
+       BEGIN_BATCH(dwords);
        OUT_BATCH_TABLE(atom->cmd, dwords);
        END_BATCH();