From: Ian Romanick <ian.d.roman...@intel.com> Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- src/mesa/drivers/dri/i965/intel_screen.c | 81 ++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index b6b4275..e8a0323 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -27,6 +27,7 @@ #include <errno.h> #include <time.h> +#include <sys/sysinfo.h> #include "main/glheader.h" #include "main/context.h" #include "main/framebuffer.h" @@ -835,10 +836,90 @@ static struct __DRIimageExtensionRec intelImageExtension = { .createImageFromDmaBufs = intel_create_image_from_dma_bufs }; +static int +brw_query_renderer_integer(__DRIscreen *psp, int param, 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: { + struct sysinfo info; + uint64_t system_memory_bytes; + unsigned system_memory_megabytes; + + /* 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. + * + * Can only map 2G onto the GPU through the GTT. + */ + const unsigned gpu_mappable_megabytes = 2 * 1024 * 3 / 4; + + if (sysinfo(&info) < 0) + return -1; + + system_memory_bytes = ((uint64_t) info.totalram) * info.mem_unit; + 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] = (psp->max_gl_core_version != 0) + ? (1U << __DRI_API_OPENGL_CORE) : (1U << __DRI_API_OPENGL); + return 0; + default: + return driQueryRendererIntegerCommon(psp, param, value); + } + + return -1; +} + +static int +brw_query_renderer_string(__DRIscreen *psp, int param, const char **value) +{ + const struct intel_screen *intelScreen = + (struct intel_screen *) psp->driverPrivate; + + switch (param) { + case __DRI2_RENDERER_VENDOR_ID: + value[0] = brw_vendor_string; + return 0; + case __DRI2_RENDERER_DEVICE_ID: + value[0] = brw_get_renderer_string(intelScreen->deviceID); + return 0; + default: + break; + } + + return -1; +} + +static struct __DRI2rendererQueryExtensionRec intelRendererQueryExtension = { + .base = { __DRI2_RENDERER_QUERY, 1 }, + + .queryInteger = brw_query_renderer_integer, + .queryString = brw_query_renderer_string +}; + static const __DRIextension *intelScreenExtensions[] = { &intelTexBufferExtension.base, &intelFlushExtension.base, &intelImageExtension.base, + &intelRendererQueryExtension.base, &dri2ConfigQueryExtension.base, NULL }; -- 1.8.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev