Browse Source

r600g: fix OQ on evergreen

6xx/7xx have a max of 4 DBs, evergreen have a max of 8.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
tags/android-x86-2.2-r2
Alex Deucher 15 years ago
parent
commit
26a4c1cb65
2 changed files with 7 additions and 4 deletions
  1. 1
    1
      src/gallium/drivers/r600/r600.h
  2. 6
    3
      src/gallium/winsys/r600/drm/r600_hw_context.c

+ 1
- 1
src/gallium/drivers/r600/r600.h View File

@@ -250,7 +250,7 @@ struct r600_context {
struct list_head query_list;
unsigned num_query_running;
struct list_head fenced_bo;
unsigned num_db; /* for OQ */
unsigned max_db; /* for OQ */
};

struct r600_draw {

+ 6
- 3
src/gallium/winsys/r600/drm/r600_hw_context.c View File

@@ -753,7 +753,10 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)
LIST_INITHEAD(&ctx->dirty);

/* TODO update this value correctly */
ctx->num_db = 4;
if (radeon->family >= CHIP_CEDAR)
ctx->max_db = 8;
else
ctx->max_db = 4;

return 0;
out_err:
@@ -1265,7 +1268,7 @@ static boolean r600_query_result(struct r600_context *ctx, struct r600_query *qu
if (!results)
return FALSE;

size = query->num_results * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->num_db : 1);
size = query->num_results * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
for (i = 0; i < size; i += 4) {
start = (u64)results[i] | (u64)results[i + 1] << 32;
end = (u64)results[i + 2] | (u64)results[i + 3] << 32;
@@ -1344,7 +1347,7 @@ void r600_query_end(struct r600_context *ctx, struct r600_query *query)
ctx->pm4[ctx->pm4_cdwords++] = 0;
r600_context_bo_reloc(ctx, &ctx->pm4[ctx->pm4_cdwords - 1], query->buffer);

query->num_results += 4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->num_db : 1);
query->num_results += 4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
query->state ^= R600_QUERY_STATE_STARTED;
query->state |= R600_QUERY_STATE_ENDED;
ctx->num_query_running--;

Loading…
Cancel
Save