svga: add new surface-write-flushes HUD query

To know when we're flushing the command buffer because we need to
write to surface in the command buffer.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
Brian Paul 2016-03-04 15:59:32 -07:00
parent 7e8cf34546
commit 3af78b426e
4 changed files with 23 additions and 8 deletions

View file

@ -54,16 +54,17 @@
#define SVGA_QUERY_NUM_BYTES_UPLOADED (PIPE_QUERY_DRIVER_SPECIFIC + 6) #define SVGA_QUERY_NUM_BYTES_UPLOADED (PIPE_QUERY_DRIVER_SPECIFIC + 6)
#define SVGA_QUERY_COMMAND_BUFFER_SIZE (PIPE_QUERY_DRIVER_SPECIFIC + 7) #define SVGA_QUERY_COMMAND_BUFFER_SIZE (PIPE_QUERY_DRIVER_SPECIFIC + 7)
#define SVGA_QUERY_FLUSH_TIME (PIPE_QUERY_DRIVER_SPECIFIC + 8) #define SVGA_QUERY_FLUSH_TIME (PIPE_QUERY_DRIVER_SPECIFIC + 8)
#define SVGA_QUERY_SURFACE_WRITE_FLUSHES (PIPE_QUERY_DRIVER_SPECIFIC + 9)
/* running total counters */ /* running total counters */
#define SVGA_QUERY_MEMORY_USED (PIPE_QUERY_DRIVER_SPECIFIC + 9) #define SVGA_QUERY_MEMORY_USED (PIPE_QUERY_DRIVER_SPECIFIC + 10)
#define SVGA_QUERY_NUM_SHADERS (PIPE_QUERY_DRIVER_SPECIFIC + 10) #define SVGA_QUERY_NUM_SHADERS (PIPE_QUERY_DRIVER_SPECIFIC + 11)
#define SVGA_QUERY_NUM_RESOURCES (PIPE_QUERY_DRIVER_SPECIFIC + 11) #define SVGA_QUERY_NUM_RESOURCES (PIPE_QUERY_DRIVER_SPECIFIC + 12)
#define SVGA_QUERY_NUM_STATE_OBJECTS (PIPE_QUERY_DRIVER_SPECIFIC + 12) #define SVGA_QUERY_NUM_STATE_OBJECTS (PIPE_QUERY_DRIVER_SPECIFIC + 13)
#define SVGA_QUERY_NUM_SURFACE_VIEWS (PIPE_QUERY_DRIVER_SPECIFIC + 13) #define SVGA_QUERY_NUM_SURFACE_VIEWS (PIPE_QUERY_DRIVER_SPECIFIC + 14)
#define SVGA_QUERY_NUM_GENERATE_MIPMAP (PIPE_QUERY_DRIVER_SPECIFIC + 14) #define SVGA_QUERY_NUM_GENERATE_MIPMAP (PIPE_QUERY_DRIVER_SPECIFIC + 15)
/*SVGA_QUERY_MAX has to be last because it is size of an array*/ /*SVGA_QUERY_MAX has to be last because it is size of an array*/
#define SVGA_QUERY_MAX (PIPE_QUERY_DRIVER_SPECIFIC + 15) #define SVGA_QUERY_MAX (PIPE_QUERY_DRIVER_SPECIFIC + 16)
/** /**
* Maximum supported number of constant buffers per shader * Maximum supported number of constant buffers per shader
@ -506,6 +507,7 @@ struct svga_context
uint64_t num_resources_mapped; /**< SVGA_QUERY_NUM_RESOURCES_MAPPED */ uint64_t num_resources_mapped; /**< SVGA_QUERY_NUM_RESOURCES_MAPPED */
uint64_t command_buffer_size; /**< SVGA_QUERY_COMMAND_BUFFER_SIZE */ uint64_t command_buffer_size; /**< SVGA_QUERY_COMMAND_BUFFER_SIZE */
uint64_t flush_time; /**< SVGA_QUERY_FLUSH_TIME */ uint64_t flush_time; /**< SVGA_QUERY_FLUSH_TIME */
uint64_t surface_write_flushes; /**< SVGA_QUERY_SURFACE_WRITE_FLUSHES */
uint64_t num_shaders; /**< SVGA_QUERY_NUM_SHADERS */ uint64_t num_shaders; /**< SVGA_QUERY_NUM_SHADERS */
uint64_t num_state_objects; /**< SVGA_QUERY_NUM_STATE_OBJECTS */ uint64_t num_state_objects; /**< SVGA_QUERY_NUM_STATE_OBJECTS */
uint64_t num_surface_views; /**< SVGA_QUERY_NUM_SURFACE_VIEWS */ uint64_t num_surface_views; /**< SVGA_QUERY_NUM_SURFACE_VIEWS */

View file

@ -729,6 +729,7 @@ svga_create_query(struct pipe_context *pipe,
case SVGA_QUERY_NUM_BYTES_UPLOADED: case SVGA_QUERY_NUM_BYTES_UPLOADED:
case SVGA_QUERY_COMMAND_BUFFER_SIZE: case SVGA_QUERY_COMMAND_BUFFER_SIZE:
case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_FLUSH_TIME:
case SVGA_QUERY_SURFACE_WRITE_FLUSHES:
case SVGA_QUERY_MEMORY_USED: case SVGA_QUERY_MEMORY_USED:
case SVGA_QUERY_NUM_SHADERS: case SVGA_QUERY_NUM_SHADERS:
case SVGA_QUERY_NUM_RESOURCES: case SVGA_QUERY_NUM_RESOURCES:
@ -800,6 +801,7 @@ svga_destroy_query(struct pipe_context *pipe, struct pipe_query *q)
case SVGA_QUERY_NUM_BYTES_UPLOADED: case SVGA_QUERY_NUM_BYTES_UPLOADED:
case SVGA_QUERY_COMMAND_BUFFER_SIZE: case SVGA_QUERY_COMMAND_BUFFER_SIZE:
case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_FLUSH_TIME:
case SVGA_QUERY_SURFACE_WRITE_FLUSHES:
case SVGA_QUERY_MEMORY_USED: case SVGA_QUERY_MEMORY_USED:
case SVGA_QUERY_NUM_SHADERS: case SVGA_QUERY_NUM_SHADERS:
case SVGA_QUERY_NUM_RESOURCES: case SVGA_QUERY_NUM_RESOURCES:
@ -894,6 +896,9 @@ svga_begin_query(struct pipe_context *pipe, struct pipe_query *q)
case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_FLUSH_TIME:
sq->begin_count = svga->hud.flush_time; sq->begin_count = svga->hud.flush_time;
break; break;
case SVGA_QUERY_SURFACE_WRITE_FLUSHES:
sq->begin_count = svga->hud.surface_write_flushes;
break;
case SVGA_QUERY_MEMORY_USED: case SVGA_QUERY_MEMORY_USED:
case SVGA_QUERY_NUM_SHADERS: case SVGA_QUERY_NUM_SHADERS:
case SVGA_QUERY_NUM_RESOURCES: case SVGA_QUERY_NUM_RESOURCES:
@ -994,6 +999,9 @@ svga_end_query(struct pipe_context *pipe, struct pipe_query *q)
case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_FLUSH_TIME:
sq->end_count = svga->hud.flush_time; sq->end_count = svga->hud.flush_time;
break; break;
case SVGA_QUERY_SURFACE_WRITE_FLUSHES:
sq->end_count = svga->hud.surface_write_flushes;
break;
case SVGA_QUERY_MEMORY_USED: case SVGA_QUERY_MEMORY_USED:
case SVGA_QUERY_NUM_SHADERS: case SVGA_QUERY_NUM_SHADERS:
case SVGA_QUERY_NUM_RESOURCES: case SVGA_QUERY_NUM_RESOURCES:
@ -1094,6 +1102,7 @@ svga_get_query_result(struct pipe_context *pipe,
case SVGA_QUERY_NUM_BYTES_UPLOADED: case SVGA_QUERY_NUM_BYTES_UPLOADED:
case SVGA_QUERY_COMMAND_BUFFER_SIZE: case SVGA_QUERY_COMMAND_BUFFER_SIZE:
case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_FLUSH_TIME:
case SVGA_QUERY_SURFACE_WRITE_FLUSHES:
vresult->u64 = sq->end_count - sq->begin_count; vresult->u64 = sq->end_count - sq->begin_count;
break; break;
/* These are running total counters */ /* These are running total counters */

View file

@ -463,11 +463,13 @@ svga_texture_transfer_map(struct pipe_context *pipe,
assert(transfer->usage & PIPE_TRANSFER_WRITE); assert(transfer->usage & PIPE_TRANSFER_WRITE);
if ((transfer->usage & PIPE_TRANSFER_UNSYNCHRONIZED) == 0) { if ((transfer->usage & PIPE_TRANSFER_UNSYNCHRONIZED) == 0) {
svga_surfaces_flush(svga); svga_surfaces_flush(svga);
if (!sws->surface_is_flushed(sws, surf)) if (!sws->surface_is_flushed(sws, surf)) {
svga->hud.surface_write_flushes++;
svga_context_flush(svga, NULL); svga_context_flush(svga, NULL);
} }
} }
} }
}
st->use_direct_map = use_direct_map; st->use_direct_map = use_direct_map;

View file

@ -831,6 +831,8 @@ svga_get_driver_query_info(struct pipe_screen *screen,
PIPE_DRIVER_QUERY_TYPE_BYTES), PIPE_DRIVER_QUERY_TYPE_BYTES),
QUERY("flush-time", SVGA_QUERY_FLUSH_TIME, QUERY("flush-time", SVGA_QUERY_FLUSH_TIME,
PIPE_DRIVER_QUERY_TYPE_MICROSECONDS), PIPE_DRIVER_QUERY_TYPE_MICROSECONDS),
QUERY("surface-write-flushes", SVGA_QUERY_SURFACE_WRITE_FLUSHES,
PIPE_DRIVER_QUERY_TYPE_UINT64),
/* running total counters */ /* running total counters */
QUERY("memory-used", SVGA_QUERY_MEMORY_USED, QUERY("memory-used", SVGA_QUERY_MEMORY_USED,