From: Tomasz Lis <tomasz....@intel.com> The patch marks __DRI_ATTRIB_FLOAT_MODE as deprecated and introduces nrw flags to __DRI_ATTRIB_RENDER_TYPE which are to define float modes. Both signed float (fbconfig_float) and unsigned (packed_float) is introduced as a flag. The old attribute should be set for both float modes.
Signed-off-by: Tomasz Lis <tomasz....@intel.com> --- include/GL/internal/dri_interface.h | 2 ++ src/egl/drivers/dri2/egl_dri2.c | 22 +++++++++++++--------- src/glx/dri_common.c | 16 +++++++++++----- src/mesa/drivers/dri/common/utils.c | 6 ------ 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 568581d..667b1ed 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -552,6 +552,8 @@ struct __DRIuseInvalidateExtensionRec { #define __DRI_ATTRIB_RGBA_BIT 0x01 #define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02 #define __DRI_ATTRIB_LUMINANCE_BIT 0x04 +#define __DRI_ATTRIB_FLOAT_BIT 0x08 +#define __DRI_ATTRIB_UNSIGNED_FLOAT_BIT 0x10 /* __DRI_ATTRIB_CONFIG_CAVEAT */ #define __DRI_ATTRIB_SLOW_BIT 0x01 diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 1f13d79..156a728 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -75,7 +75,7 @@ EGLint dri2_to_egl_attribute_map[] = { 0, /* __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE */ 0, /* __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE */ 0, /* __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE */ - 0, /* __DRI_ATTRIB_FLOAT_MODE */ + 0, /* __DRI_ATTRIB_FLOAT_MODE (deprecated) */ 0, /* __DRI_ATTRIB_RED_MASK */ 0, /* __DRI_ATTRIB_GREEN_MASK */ 0, /* __DRI_ATTRIB_BLUE_MASK */ @@ -136,14 +136,18 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, while (dri2_dpy->core->indexConfigAttrib(dri_config, i++, &attrib, &value)) { switch (attrib) { case __DRI_ATTRIB_RENDER_TYPE: - if (value & __DRI_ATTRIB_RGBA_BIT) - value = EGL_RGB_BUFFER; - else if (value & __DRI_ATTRIB_LUMINANCE_BIT) - value = EGL_LUMINANCE_BUFFER; - else - /* not valid */; - _eglSetConfigKey(&base, EGL_COLOR_BUFFER_TYPE, value); - break; + if (value & __DRI_ATTRIB_RGBA_BIT) + value = EGL_RGB_BUFFER; + else if (value & __DRI_ATTRIB_LUMINANCE_BIT) + value = EGL_LUMINANCE_BUFFER; + else if (value & __DRI_ATTRIB_FLOAT_BIT) + return NULL; // Don't allow float configs for EGL + else if (value & __DRI_ATTRIB_UNSIGNED_FLOAT_BIT) + return NULL; // Don't allow float configs for EGL + else + /* not valid */; + _eglSetConfigKey(&base, EGL_COLOR_BUFFER_TYPE, value); + break; case __DRI_ATTRIB_CONFIG_CAVEAT: if (value & __DRI_ATTRIB_NON_CONFORMANT_CONFIG) diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index 7ab303e..872f5c3 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -281,14 +281,20 @@ driConfigEqual(const __DRIcoreExtension *core, while (core->indexConfigAttrib(driConfig, i++, &attrib, &value)) { switch (attrib) { case __DRI_ATTRIB_RENDER_TYPE: - glxValue = 0; + glxValue = 0; if (value & __DRI_ATTRIB_RGBA_BIT) { - glxValue |= GLX_RGBA_BIT; + glxValue |= GLX_RGBA_BIT; + } + if (value & __DRI_ATTRIB_COLOR_INDEX_BIT) { + glxValue |= GLX_COLOR_INDEX_BIT; + } + if (value & __DRI_ATTRIB_FLOAT_BIT) { + glxValue |= GLX_RGBA_FLOAT_BIT_ARB; } - else if (value & __DRI_ATTRIB_COLOR_INDEX_BIT) { - glxValue |= GLX_COLOR_INDEX_BIT; + if (value & __DRI_ATTRIB_UNSIGNED_FLOAT_BIT) { + glxValue |= GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT; } - if (glxValue != config->renderType) + if ((glxValue & config->renderType) == 0) return GL_FALSE; break; diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 062712b..64b9399 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -365,7 +365,6 @@ static const struct { unsigned int attrib, offset; } attribMap[] = { __ATTRIB(__DRI_ATTRIB_TRANSPARENT_GREEN_VALUE, transparentGreen), __ATTRIB(__DRI_ATTRIB_TRANSPARENT_BLUE_VALUE, transparentBlue), __ATTRIB(__DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE, transparentAlpha), - __ATTRIB(__DRI_ATTRIB_FLOAT_MODE, floatMode), __ATTRIB(__DRI_ATTRIB_RED_MASK, redMask), __ATTRIB(__DRI_ATTRIB_GREEN_MASK, greenMask), __ATTRIB(__DRI_ATTRIB_BLUE_MASK, blueMask), @@ -419,11 +418,6 @@ driGetConfigAttribIndex(const __DRIconfig *config, /* XXX no return value??? */ break; - case __DRI_ATTRIB_FLOAT_MODE: - /* this field is not int-sized */ - *value = config->modes.floatMode; - break; - default: /* any other int-sized field */ *value = *(unsigned int *) -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev