[Mesa-dev] [PATCH 11/25] dri/swrast: add GLX_MESA_query_renderer support
Emil Velikov
emil.l.velikov at gmail.com
Fri Feb 21 19:04:01 PST 2014
Cc: Brian Paul <brianp at vmware.com>
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
src/mesa/drivers/dri/swrast/swrast.c | 82 +++++++++++++++++++++++++++++++++++-
1 file changed, 80 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 071192c..8830ce4 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -61,6 +61,9 @@
const __DRIextension **__driDriverGetExtensions_swrast(void);
+const char const *swrast_vendor_string = "Mesa Project";
+const char const *swrast_renderer_string = "Software Rasterizer";
+
/**
* Screen and config-related functions
*/
@@ -115,8 +118,82 @@ static const __DRItexBufferExtension swrastTexBufferExtension = {
swrastSetTexBuffer2,
};
+
+static int
+swrast_query_renderer_integer(__DRIscreen *psp, int param,
+ unsigned int *value)
+{
+ switch (param) {
+ case __DRI2_RENDERER_VENDOR_ID:
+ value[0] = 0xFFFFFFFF;
+ return 0;
+ case __DRI2_RENDERER_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 fo 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;
+ 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_string(__DRIscreen *psp, int param, const char **value)
+{
+ switch (param) {
+ case __DRI2_RENDERER_VENDOR_ID:
+ value[0] = swrast_vendor_string;
+ return 0;
+ case __DRI2_RENDERER_DEVICE_ID:
+ value[0] = swrast_renderer_string;
+ return 0;
+ default:
+ break;
+ }
+
+ return -1;
+}
+
+static const __DRI2rendererQueryExtension swrast_query_renderer_extension = {
+ .base = { __DRI2_RENDERER_QUERY, 1 },
+
+ .queryInteger = swrast_query_renderer_integer,
+ .queryString = swrast_query_renderer_string
+};
+
static const __DRIextension *dri_screen_extensions[] = {
&swrastTexBufferExtension.base,
+ &swrast_query_renderer_extension.base,
NULL
};
@@ -199,6 +276,7 @@ dri_init_screen(__DRIscreen * psp)
TRACE;
+ psp->max_gl_core_version = 0;
psp->max_gl_compat_version = 21;
psp->max_gl_es1_version = 11;
psp->max_gl_es2_version = 20;
@@ -597,9 +675,9 @@ get_string(struct gl_context *ctx, GLenum pname)
(void) ctx;
switch (pname) {
case GL_VENDOR:
- return (const GLubyte *) "Mesa Project";
+ return (const GLubyte *) swrast_vendor_string;
case GL_RENDERER:
- return (const GLubyte *) "Software Rasterizer";
+ return (const GLubyte *) swrast_renderer_string;
default:
return NULL;
}
--
1.9.0
More information about the mesa-dev
mailing list