- sq->type = SVGA3D_QUERYTYPE_OCCLUSION;
-
- sq->hwbuf = svga_winsys_buffer_create(svgascreen,
- 1,
- SVGA_BUFFER_USAGE_PINNED,
- sizeof *sq->queryResult);
- if(!sq->hwbuf)
- goto no_hwbuf;
-
- sq->queryResult = (SVGA3dQueryResult *)sws->buffer_map(sws,
- sq->hwbuf,
- PIPE_BUFFER_USAGE_CPU_WRITE);
- if(!sq->queryResult)
- goto no_query_result;
-
- sq->queryResult->totalSize = sizeof *sq->queryResult;
- sq->queryResult->state = SVGA3D_QUERYSTATE_NEW;
-
- /*
- * We request the buffer to be pinned and assume it is always mapped.
- *
- * The reason is that we don't want to wait for fences when checking the
- * query status.
- */
- sws->buffer_unmap(sws, sq->hwbuf);
+ switch (query_type) {
+ case PIPE_QUERY_OCCLUSION_COUNTER:
+ sq->svga_type = SVGA3D_QUERYTYPE_OCCLUSION;
+
+ sq->hwbuf = svga_winsys_buffer_create(svga, 1,
+ SVGA_BUFFER_USAGE_PINNED,
+ sizeof *sq->queryResult);
+ if (!sq->hwbuf) {
+ debug_printf("svga: failed to alloc query object!\n");
+ goto no_hwbuf;
+ }
+
+ sq->queryResult = (SVGA3dQueryResult *)
+ sws->buffer_map(sws, sq->hwbuf, PIPE_TRANSFER_WRITE);
+ if (!sq->queryResult) {
+ debug_printf("svga: failed to map query object!\n");
+ goto no_query_result;
+ }
+
+ sq->queryResult->totalSize = sizeof *sq->queryResult;
+ sq->queryResult->state = SVGA3D_QUERYSTATE_NEW;
+
+ /* We request the buffer to be pinned and assume it is always mapped.
+ * The reason is that we don't want to wait for fences when checking the
+ * query status.
+ */
+ sws->buffer_unmap(sws, sq->hwbuf);
+ break;
+ case SVGA_QUERY_DRAW_CALLS:
+ case SVGA_QUERY_FALLBACKS:
+ case SVGA_QUERY_MEMORY_USED:
+ break;
+ default:
+ assert(!"unexpected query type in svga_create_query()");
+ }
+
+ sq->type = query_type;