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