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;

   case __DRI2_RENDERER_HAS_TEXTURE_3D:
      value[0] =
         screen->base.screen->get_param(screen->base.screen,
                                        PIPE_CAP_MAX_TEXTURE_3D_LEVELS) != 0;
      return 0;

   case __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB:
      value[0] =
         screen->base.screen->is_format_supported(screen->base.screen,
                                                  PIPE_FORMAT_B8G8R8A8_SRGB,
                                                  PIPE_TEXTURE_2D, 0, 0,
                                                  PIPE_BIND_RENDER_TARGET);
      return 0;
   case __DRI2_RENDERER_HAS_CONTEXT_PRIORITY:
      value[0] =
         screen->base.screen->get_param(screen->base.screen,
                                        PIPE_CAP_CONTEXT_PRIORITY_MASK);
      if (!value[0])
         return -1;
      return 0;
   default:
      return driQueryRendererIntegerCommon(_screen, param, value);
   }
}
static int
i915_query_renderer_integer(__DRIscreen *psp, int param, unsigned int *value)
{
   const struct intel_screen *const intelScreen =
      (struct intel_screen *) psp->driverPrivate;

   switch (param) {
   case __DRI2_RENDERER_VENDOR_ID:
      value[0] = 0x8086;
      return 0;
   case __DRI2_RENDERER_DEVICE_ID:
      value[0] = intelScreen->deviceID;
      return 0;
   case __DRI2_RENDERER_ACCELERATED:
      value[0] = 1;
      return 0;
   case __DRI2_RENDERER_VIDEO_MEMORY: {
      /* Once a batch uses more than 75% of the maximum mappable size, we
       * assume that there's some fragmentation, and we start doing extra
       * flushing, etc.  That's the big cliff apps will care about.
       */
      size_t aper_size;
      size_t mappable_size;

      drm_intel_get_aperture_sizes(psp->fd, &mappable_size, &aper_size);

      const unsigned gpu_mappable_megabytes =
         (aper_size / (1024 * 1024)) * 3 / 4;

      const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
      const long system_page_size = sysconf(_SC_PAGE_SIZE);

      if (system_memory_pages <= 0 || system_page_size <= 0)
         return -1;

      const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
         * (uint64_t) system_page_size;

      const unsigned system_memory_megabytes =
         (unsigned) (system_memory_bytes / 1024);

      value[0] = MIN2(system_memory_megabytes, gpu_mappable_megabytes);
      return 0;
   }
   case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:
      value[0] = 1;
      return 0;
   case __DRI2_RENDERER_PREFERRED_PROFILE:
      value[0] = (1U << __DRI_API_OPENGL);
      return 0;
   default:
      return driQueryRendererIntegerCommon(psp, param, value);
   }

   return -1;
}
Beispiel #3
0
static int
swrast_query_renderer_integer(__DRIscreen *psp, int param,
			       unsigned int *value)
{
   switch (param) {
   case __DRI2_RENDERER_VENDOR_ID:
   case __DRI2_RENDERER_DEVICE_ID:
      /* Return 0xffffffff for both vendor and device id */
      value[0] = 0xffffffff;
      return 0;
   case __DRI2_RENDERER_ACCELERATED:
      value[0] = 0;
      return 0;
   case __DRI2_RENDERER_VIDEO_MEMORY: {
      /* This should probably share code with os_get_total_physical_memory()
       * from src/gallium/auxiliary/os/os_misc.c
       */
#if defined(CTL_HW) && defined(HW_MEMSIZE)
        int mib[2] = { CTL_HW, HW_MEMSIZE };
        unsigned long system_memory_bytes;
        size_t len = sizeof(system_memory_bytes);
        if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
            return -1;
#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE)
      /* XXX: Do we want to return the full amount of system memory ? */
      const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
      const long system_page_size = sysconf(_SC_PAGE_SIZE);

      if (system_memory_pages <= 0 || system_page_size <= 0)
         return -1;

      const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
         * (uint64_t) system_page_size;
#else
#error "Unsupported platform"
#endif

      const unsigned system_memory_megabytes =
         (unsigned) (system_memory_bytes / (1024 * 1024));

      value[0] = system_memory_megabytes;
      return 0;
   }
   case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:
      /**
       * XXX: Perhaps we should return 1 ?
       * See issue #7 from the spec, currently UNRESOLVED.
       */
      value[0] = 0;
      return 0;
   default:
      return driQueryRendererIntegerCommon(psp, param, value);
   }
}
Beispiel #4
0
static int
swrast_query_renderer_integer(__DRIscreen *psp, int param,
			       unsigned int *value)
{
   switch (param) {
   case __DRI2_RENDERER_VENDOR_ID:
   case __DRI2_RENDERER_DEVICE_ID:
      /* Return 0xffffffff for both vendor and device id */
      value[0] = 0xffffffff;
      return 0;
   case __DRI2_RENDERER_ACCELERATED:
      value[0] = 0;
      return 0;
   case __DRI2_RENDERER_VIDEO_MEMORY: {
      /* XXX: Do we want to return the full amount of system memory ? */
      const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
      const long system_page_size = sysconf(_SC_PAGE_SIZE);

      if (system_memory_pages <= 0 || system_page_size <= 0)
         return -1;

      const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
         * (uint64_t) system_page_size;

      const unsigned system_memory_megabytes =
         (unsigned) (system_memory_bytes / (1024 * 1024));

      value[0] = system_memory_megabytes;
      return 0;
   }
   case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:
      /**
       * XXX: Perhaps we should return 1 ?
       * See issue #7 from the spec, currently UNRESOLVED.
       */
      value[0] = 0;
      return 0;
   default:
      return driQueryRendererIntegerCommon(psp, param, value);
   }
}