r600g: optimise the draw emission packets for r600/eg
[mesa.git] / src / gallium / drivers / softpipe / sp_query.c
index 9328334c5c437998eff4b32cf833fef51c850a6c..4ae69c1c2bdaf5cbdf147f37394860e4fd4b1b3c 100644 (file)
@@ -59,7 +59,8 @@ softpipe_create_query(struct pipe_context *pipe,
    assert(type == PIPE_QUERY_OCCLUSION_COUNTER ||
           type == PIPE_QUERY_TIME_ELAPSED ||
           type == PIPE_QUERY_SO_STATISTICS ||
-          type == PIPE_QUERY_GPU_FINISHED);
+          type == PIPE_QUERY_GPU_FINISHED ||
+          type == PIPE_QUERY_TIMESTAMP_DISJOINT);
    sq = CALLOC_STRUCT( softpipe_query );
    sq->type = type;
 
@@ -93,6 +94,7 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
       break;
    case PIPE_QUERY_GPU_FINISHED:
       break;
+   case PIPE_QUERY_TIMESTAMP_DISJOINT:
    default:
       assert(0);
       break;
@@ -123,6 +125,7 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
          softpipe->so_stats.primitives_storage_needed;
       break;
    case PIPE_QUERY_GPU_FINISHED:
+   case PIPE_QUERY_TIMESTAMP_DISJOINT:
       break;
    default:
       assert(0);
@@ -149,6 +152,15 @@ softpipe_get_query_result(struct pipe_context *pipe,
    case PIPE_QUERY_GPU_FINISHED:
       *result = TRUE;
       break;
+   case PIPE_QUERY_TIMESTAMP_DISJOINT: {
+      struct pipe_query_data_timestamp_disjoint td;
+      /*os_get_time is in microseconds*/
+      td.frequency = 1000000;
+      td.disjoint = FALSE;
+      memcpy(vresult, &sq->so,
+             sizeof(struct pipe_query_data_timestamp_disjoint));
+   }
+      break;
    default:
       *result = sq->end - sq->start;
       break;