15fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "dri_query_renderer.h" 25fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 35fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "util/u_inlines.h" 45fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "state_tracker/drm_driver.h" 55fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 65fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "utils.h" 75fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "dri_screen.h" 85fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov#include "dri_query_renderer.h" 95fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 105fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikovstatic int 115fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikovdri2_query_renderer_integer(__DRIscreen *_screen, int param, 125fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov unsigned int *value) 135fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov{ 145fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov struct dri_screen *screen = dri_screen(_screen); 155fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 165fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov switch (param) { 175fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_VENDOR_ID: 185fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = 195fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov (unsigned int)screen->base.screen->get_param(screen->base.screen, 205fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov PIPE_CAP_VENDOR_ID); 215fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 225fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_DEVICE_ID: 235fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = 245fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov (unsigned int)screen->base.screen->get_param(screen->base.screen, 255fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov PIPE_CAP_DEVICE_ID); 265fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 275fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_ACCELERATED: 285fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = 295fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov (unsigned int)screen->base.screen->get_param(screen->base.screen, 305fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov PIPE_CAP_ACCELERATED); 315fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 325fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 335fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_VIDEO_MEMORY: 345fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = 355fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov (unsigned int)screen->base.screen->get_param(screen->base.screen, 365fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov PIPE_CAP_VIDEO_MEMORY); 375fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 385fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 395fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE: 405fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = 415fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov (unsigned int)screen->base.screen->get_param(screen->base.screen, 425fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov PIPE_CAP_UMA); 435fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 445fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 451828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch case __DRI2_RENDERER_HAS_TEXTURE_3D: 461828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch value[0] = 471828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch screen->base.screen->get_param(screen->base.screen, 481828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0; 491828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch return 0; 501828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch 511828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch case __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB: 521828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch value[0] = 531828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch screen->base.screen->is_format_supported(screen->base.screen, 541828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch PIPE_FORMAT_B8G8R8A8_SRGB, 551828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch PIPE_TEXTURE_2D, 0, 561828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch PIPE_BIND_RENDER_TARGET); 571828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch return 0; 581828357629721e53a305a29047c0eb18be10915bAnatoli Antonovitch 595fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov default: 605fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return driQueryRendererIntegerCommon(_screen, param, value); 615fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov } 625fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov} 635fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 645fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikovstatic int 655fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikovdri2_query_renderer_string(__DRIscreen *_screen, int param, 665fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov const char **value) 675fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov{ 685fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov struct dri_screen *screen = dri_screen(_screen); 695fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 705fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov switch (param) { 715fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_VENDOR_ID: 725fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = screen->base.screen->get_vendor(screen->base.screen); 735fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 745fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov case __DRI2_RENDERER_DEVICE_ID: 755fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov value[0] = screen->base.screen->get_name(screen->base.screen); 765fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return 0; 775fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov default: 785fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov return -1; 795fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov } 805fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov} 815fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 825fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikovconst __DRI2rendererQueryExtension dri2RendererQueryExtension = { 835fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov .base = { __DRI2_RENDERER_QUERY, 1 }, 845fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov 855fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov .queryInteger = dri2_query_renderer_integer, 865fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov .queryString = dri2_query_renderer_string 875fe400d82a60eafefda4aedf36aaeac7975e3ae7Emil Velikov}; 88