r600g: Use virtual address for PIPE_QUERY_SO* in r600_emit_query_end
authorMartin Andersson <g02maran@gmail.com>
Mon, 25 Mar 2013 22:11:34 +0000 (23:11 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 25 Mar 2013 22:18:23 +0000 (18:18 -0400)
Virtual address is used for PIPE_QUERY_SO* queries in
r600_emit_query_begin, but not in r600_emit_query_end.

This will trigger a GPU fault when one of those queries is
made and virtual address is enabled.

Note: this is a candidate for the 9.1 branch

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/r600/r600_query.c

index 0335189297817344cf768cc293d41667e017cbe8..782ad26e3b26a275e285f98fbf6484be737c5f9a 100644 (file)
@@ -186,10 +186,11 @@ static void r600_emit_query_end(struct r600_context *ctx, struct r600_query *que
        case PIPE_QUERY_PRIMITIVES_GENERATED:
        case PIPE_QUERY_SO_STATISTICS:
        case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
+               va += query->buffer.results_end + query->result_size/2;
                cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 2, 0);
                cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_SAMPLE_STREAMOUTSTATS) | EVENT_INDEX(3);
-               cs->buf[cs->cdw++] = query->buffer.results_end + query->result_size/2;
-               cs->buf[cs->cdw++] = 0;
+               cs->buf[cs->cdw++] = va;
+               cs->buf[cs->cdw++] = (va >> 32UL) & 0xFF;
                break;
        case PIPE_QUERY_TIME_ELAPSED:
                va += query->buffer.results_end + query->result_size/2;