summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2013-03-21 19:32:24 +0100
committerMarek Olšák <[email protected]>2013-03-26 01:28:19 +0100
commit8ddcd715b7e6ca3d10ddd57ea504e55ca8c8cbd7 (patch)
treea2c4646c8bca3a2394bebe44d638ebae567207e9 /src
parent9cec5edea7ab45630186dff053fc66c0e96653a1 (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')
-rw-r--r--src/gallium/auxiliary/util/u_inlines.h2
-rw-r--r--src/gallium/include/pipe/p_defines.h12
-rw-r--r--src/gallium/include/pipe/p_screen.h11
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);
+
};