[Mesa-dev] [PATCH 08/18] i965: Wire up initial support for DRI_RENDERER_QUERY extension
Ian Romanick
idr at freedesktop.org
Sat Oct 12 00:10:15 CEST 2013
From: Ian Romanick <ian.d.romanick at intel.com>
Signed-off-by: Ian Romanick <ian.d.romanick at 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
More information about the mesa-dev
mailing list