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; }
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); } }
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); } }