diff options
author | Marek Olšák <[email protected]> | 2013-03-21 19:32:24 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-03-26 01:28:19 +0100 |
commit | 8ddcd715b7e6ca3d10ddd57ea504e55ca8c8cbd7 (patch) | |
tree | a2c4646c8bca3a2394bebe44d638ebae567207e9 /src/gallium | |
parent | 9cec5edea7ab45630186dff053fc66c0e96653a1 (diff) |
gallium: add interface for driver queries like performance counters, etc.
The pipe query interface is reused. The list of available queries can be
obtained using pipe_screen::get_driver_query_info.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/auxiliary/util/u_inlines.h | 2 | ||||
-rw-r--r-- | src/gallium/include/pipe/p_defines.h | 12 | ||||
-rw-r--r-- | src/gallium/include/pipe/p_screen.h | 11 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h index ba745ebb5fb..719ba25ba60 100644 --- a/src/gallium/auxiliary/util/u_inlines.h +++ b/src/gallium/auxiliary/util/u_inlines.h @@ -517,7 +517,7 @@ util_query_clear_result(union pipe_query_result *result, unsigned type) memset(&result->pipeline_statistics, 0, sizeof(result->pipeline_statistics)); break; default: - assert(0); + memset(result, 0, sizeof(*result)); } } diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index f59e78a1a9e..51694ea312a 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -397,6 +397,10 @@ enum pipe_flush_flags { #define PIPE_QUERY_PIPELINE_STATISTICS 10 #define PIPE_QUERY_TYPES 11 +/* start of driver queries, + * see pipe_screen::get_driver_query_info */ +#define PIPE_QUERY_DRIVER_SPECIFIC 256 + /** * Conditional rendering modes @@ -649,6 +653,14 @@ union pipe_color_union unsigned int ui[4]; }; +struct pipe_driver_query_info +{ + const char *name; + unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */ + uint64_t max_value; /* max value that can be returned */ + boolean uses_byte_units; /* whether the result is in bytes */ +}; + #ifdef __cplusplus } #endif diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h index 754cfd7c2e6..c487e8ec8a4 100644 --- a/src/gallium/include/pipe/p_screen.h +++ b/src/gallium/include/pipe/p_screen.h @@ -206,6 +206,17 @@ struct pipe_screen { struct pipe_fence_handle *fence, uint64_t timeout ); + /** + * Returns a driver-specific query. + * + * If \p info is NULL, the number of available queries is returned. + * Otherwise, the driver query at the specified \p index is returned + * in \p info. The function returns non-zero on success. + */ + int (*get_driver_query_info)(struct pipe_screen *screen, + unsigned index, + struct pipe_driver_query_info *info); + }; |