diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2014-08-14 21:20:37 +0100 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2014-08-15 17:42:47 +0100 |
commit | 5fe400d82a60eafefda4aedf36aaeac7975e3ae7 (patch) | |
tree | ec02da251e9e85117afaeb891a8f74281fc659fa /src/gallium/state_trackers/dri/dri_query_renderer.c | |
parent | 89f80c2185de42191a1658dbdcbce9cbd9a98058 (diff) | |
download | external_mesa3d-5fe400d82a60eafefda4aedf36aaeac7975e3ae7.zip external_mesa3d-5fe400d82a60eafefda4aedf36aaeac7975e3ae7.tar.gz external_mesa3d-5fe400d82a60eafefda4aedf36aaeac7975e3ae7.tar.bz2 |
st/dri: Add __DRI2rendererQueryExtension support
The final step to get GLX_MESA_query_renderer working with gallium
drivers.
v2: Remove __DRI2_RENDERER_PREFERRED_PROFILE handling. It's already
handled in dri/common. Spotted by Marek.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/state_trackers/dri/dri_query_renderer.c')
-rw-r--r-- | src/gallium/state_trackers/dri/dri_query_renderer.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/dri/dri_query_renderer.c b/src/gallium/state_trackers/dri/dri_query_renderer.c new file mode 100644 index 0000000..4a28ac3 --- /dev/null +++ b/src/gallium/state_trackers/dri/dri_query_renderer.c @@ -0,0 +1,73 @@ +#include "dri_query_renderer.h" + +#include "util/u_inlines.h" +#include "state_tracker/drm_driver.h" + +#include "utils.h" +#include "dri_screen.h" +#include "dri_query_renderer.h" + +static int +dri2_query_renderer_integer(__DRIscreen *_screen, int param, + unsigned int *value) +{ + struct dri_screen *screen = dri_screen(_screen); + + switch (param) { + case __DRI2_RENDERER_VENDOR_ID: + value[0] = + (unsigned int)screen->base.screen->get_param(screen->base.screen, + PIPE_CAP_VENDOR_ID); + return 0; + case __DRI2_RENDERER_DEVICE_ID: + value[0] = + (unsigned int)screen->base.screen->get_param(screen->base.screen, + PIPE_CAP_DEVICE_ID); + return 0; + case __DRI2_RENDERER_ACCELERATED: + value[0] = + (unsigned int)screen->base.screen->get_param(screen->base.screen, + PIPE_CAP_ACCELERATED); + return 0; + + case __DRI2_RENDERER_VIDEO_MEMORY: + value[0] = + (unsigned int)screen->base.screen->get_param(screen->base.screen, + PIPE_CAP_VIDEO_MEMORY); + return 0; + + case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE: + value[0] = + (unsigned int)screen->base.screen->get_param(screen->base.screen, + PIPE_CAP_UMA); + return 0; + + default: + return driQueryRendererIntegerCommon(_screen, param, value); + } +} + +static int +dri2_query_renderer_string(__DRIscreen *_screen, int param, + const char **value) +{ + struct dri_screen *screen = dri_screen(_screen); + + switch (param) { + case __DRI2_RENDERER_VENDOR_ID: + value[0] = screen->base.screen->get_vendor(screen->base.screen); + return 0; + case __DRI2_RENDERER_DEVICE_ID: + value[0] = screen->base.screen->get_name(screen->base.screen); + return 0; + default: + return -1; + } +} + +const __DRI2rendererQueryExtension dri2RendererQueryExtension = { + .base = { __DRI2_RENDERER_QUERY, 1 }, + + .queryInteger = dri2_query_renderer_integer, + .queryString = dri2_query_renderer_string +}; |