[Mesa-dev] [PATCH] glx: fill out GLX_DONT_CARE values
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Sat Aug 11 16:19:04 UTC 2018
When associating a template GLX config to a DRI one (filled out by the
driver), we need to update the GLX_DONT_CARE fields (like yInverted
for example). Otherwise those fields will report GLX_DONT_CARE to the
application which is not what the driver is actually doing.
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
src/glx/dri_common.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index ab5d6c5bc03..c49c1a43c12 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -339,6 +339,39 @@ driConfigEqual(const __DRIcoreExtension *core,
return GL_TRUE;
}
+static void
+driUpdateDontCareValues(const __DRIcoreExtension *core,
+ struct glx_config *config,
+ const __DRIconfig *driConfig)
+{
+ unsigned int attrib, value;
+ int i, j;
+
+ i = 0;
+ while (core->indexConfigAttrib(driConfig, i++, &attrib, &value)) {
+ switch (attrib) {
+ case __DRI_ATTRIB_RENDER_TYPE:
+ case __DRI_ATTRIB_CONFIG_CAVEAT:
+ case __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS:
+ case __DRI_ATTRIB_SWAP_METHOD:
+ break;
+
+ default: {
+ for (j = 0; j < ARRAY_SIZE(attribMap); j++)
+ if (attribMap[j].attrib == attrib) {
+ unsigned *glxValue =
+ (unsigned int *) ((char *) config + attribMap[j].offset);
+
+ if (*glxValue == GLX_DONT_CARE)
+ *glxValue = value;
+ }
+
+ break;
+ }
+ }
+ }
+}
+
static struct glx_config *
createDriMode(const __DRIcoreExtension * core,
struct glx_config *config, const __DRIconfig **driConfigs)
@@ -360,6 +393,7 @@ createDriMode(const __DRIcoreExtension * core,
driConfig->base = *config;
driConfig->driConfig = driConfigs[i];
+ driUpdateDontCareValues(core, &driConfig->base, driConfig->driConfig);
return &driConfig->base;
}
--
2.18.0
More information about the mesa-dev
mailing list