Home | History | Annotate | Download | only in dri
      1 #include "dri_query_renderer.h"
      2 
      3 #include "util/u_inlines.h"
      4 #include "state_tracker/drm_driver.h"
      5 
      6 #include "utils.h"
      7 #include "dri_screen.h"
      8 #include "dri_query_renderer.h"
      9 
     10 static int
     11 dri2_query_renderer_integer(__DRIscreen *_screen, int param,
     12                             unsigned int *value)
     13 {
     14    struct dri_screen *screen = dri_screen(_screen);
     15 
     16    switch (param) {
     17    case __DRI2_RENDERER_VENDOR_ID:
     18       value[0] =
     19          (unsigned int)screen->base.screen->get_param(screen->base.screen,
     20                                                       PIPE_CAP_VENDOR_ID);
     21       return 0;
     22    case __DRI2_RENDERER_DEVICE_ID:
     23       value[0] =
     24          (unsigned int)screen->base.screen->get_param(screen->base.screen,
     25                                                       PIPE_CAP_DEVICE_ID);
     26       return 0;
     27    case __DRI2_RENDERER_ACCELERATED:
     28       value[0] =
     29          (unsigned int)screen->base.screen->get_param(screen->base.screen,
     30                                                       PIPE_CAP_ACCELERATED);
     31       return 0;
     32 
     33    case __DRI2_RENDERER_VIDEO_MEMORY:
     34       value[0] =
     35          (unsigned int)screen->base.screen->get_param(screen->base.screen,
     36                                                       PIPE_CAP_VIDEO_MEMORY);
     37       return 0;
     38 
     39    case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:
     40       value[0] =
     41          (unsigned int)screen->base.screen->get_param(screen->base.screen,
     42                                                       PIPE_CAP_UMA);
     43       return 0;
     44 
     45    case __DRI2_RENDERER_HAS_TEXTURE_3D:
     46       value[0] =
     47          screen->base.screen->get_param(screen->base.screen,
     48                                         PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0;
     49       return 0;
     50 
     51    case __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB:
     52       value[0] =
     53          screen->base.screen->is_format_supported(screen->base.screen,
     54                                                   PIPE_FORMAT_B8G8R8A8_SRGB,
     55                                                   PIPE_TEXTURE_2D, 0,
     56                                                   PIPE_BIND_RENDER_TARGET);
     57       return 0;
     58 
     59    default:
     60       return driQueryRendererIntegerCommon(_screen, param, value);
     61    }
     62 }
     63 
     64 static int
     65 dri2_query_renderer_string(__DRIscreen *_screen, int param,
     66                            const char **value)
     67 {
     68    struct dri_screen *screen = dri_screen(_screen);
     69 
     70    switch (param) {
     71    case __DRI2_RENDERER_VENDOR_ID:
     72       value[0] = screen->base.screen->get_vendor(screen->base.screen);
     73       return 0;
     74    case __DRI2_RENDERER_DEVICE_ID:
     75       value[0] = screen->base.screen->get_name(screen->base.screen);
     76       return 0;
     77    default:
     78       return -1;
     79    }
     80 }
     81 
     82 const __DRI2rendererQueryExtension dri2RendererQueryExtension = {
     83     .base = { __DRI2_RENDERER_QUERY, 1 },
     84 
     85     .queryInteger         = dri2_query_renderer_integer,
     86     .queryString          = dri2_query_renderer_string
     87 };
     88