Path: blob/21.2-virgl/src/gallium/frontends/dri/dri_query_renderer.c
4565 views
#include "dri_query_renderer.h"12#include "util/u_inlines.h"3#include "frontend/drm_driver.h"45#include "utils.h"6#include "dri_screen.h"7#include "dri_query_renderer.h"8#include "pipe-loader/pipe_loader.h"910static int11dri2_query_renderer_integer(__DRIscreen *_screen, int param,12unsigned int *value)13{14struct dri_screen *screen = dri_screen(_screen);1516switch (param) {17case __DRI2_RENDERER_VENDOR_ID:18value[0] =19(unsigned int)screen->base.screen->get_param(screen->base.screen,20PIPE_CAP_VENDOR_ID);21return 0;22case __DRI2_RENDERER_DEVICE_ID:23value[0] =24(unsigned int)screen->base.screen->get_param(screen->base.screen,25PIPE_CAP_DEVICE_ID);26return 0;27case __DRI2_RENDERER_ACCELERATED:28value[0] =29(unsigned int)screen->base.screen->get_param(screen->base.screen,30PIPE_CAP_ACCELERATED);31return 0;3233case __DRI2_RENDERER_VIDEO_MEMORY: {34int ov = driQueryOptioni(&screen->dev->option_cache, "override_vram_size");35value[0] =36(unsigned int)screen->base.screen->get_param(screen->base.screen,37PIPE_CAP_VIDEO_MEMORY);38if (ov >= 0)39value[0] = MIN2(ov, value[0]);40return 0;41}4243case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:44value[0] =45(unsigned int)screen->base.screen->get_param(screen->base.screen,46PIPE_CAP_UMA);47return 0;4849case __DRI2_RENDERER_HAS_TEXTURE_3D:50value[0] =51screen->base.screen->get_param(screen->base.screen,52PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0;53return 0;5455case __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB:56value[0] =57screen->base.screen->is_format_supported(screen->base.screen,58PIPE_FORMAT_B8G8R8A8_SRGB,59PIPE_TEXTURE_2D, 0, 0,60PIPE_BIND_RENDER_TARGET);61return 0;62case __DRI2_RENDERER_HAS_CONTEXT_PRIORITY:63value[0] =64screen->base.screen->get_param(screen->base.screen,65PIPE_CAP_CONTEXT_PRIORITY_MASK);66if (!value[0])67return -1;68return 0;69case __DRI2_RENDERER_HAS_PROTECTED_CONTENT:70value[0] =71screen->base.screen->get_param(screen->base.screen,72PIPE_CAP_DEVICE_PROTECTED_CONTENT);73if (!value[0])74return -1;75return 0;76default:77return driQueryRendererIntegerCommon(_screen, param, value);78}79}8081static int82dri2_query_renderer_string(__DRIscreen *_screen, int param,83const char **value)84{85struct dri_screen *screen = dri_screen(_screen);8687switch (param) {88case __DRI2_RENDERER_VENDOR_ID:89value[0] = screen->base.screen->get_vendor(screen->base.screen);90return 0;91case __DRI2_RENDERER_DEVICE_ID:92value[0] = screen->base.screen->get_name(screen->base.screen);93return 0;94default:95return -1;96}97}9899const __DRI2rendererQueryExtension dri2RendererQueryExtension = {100.base = { __DRI2_RENDERER_QUERY, 1 },101102.queryInteger = dri2_query_renderer_integer,103.queryString = dri2_query_renderer_string104};105106107