glx: Handle float config types in glxConvertConfigs
Replaces old use of floatMode attribute with new, extended range of values in __DRI_ATTRIB_RENDER_TYPE. Also adds new conditions, where the float modes support requires it. Enables support for not only float configs, but packed float configs as well. v2 (idr): Whitespace and formatting fixes. Refactor render type vs. pbuffer checking to a separate function that includes a quote from the spec. Re-write commit message. Fix compiler warnings: glxdricommon.c: In function 'glxConvertConfigs': glxdricommon.c:212:35: warning: pointer targets in passing argument 3 of 'core->getConfigAttrib' differ in signedness [-Wpointer-sign] glxdricommon.c:212:35: note: expected 'unsigned int *' but argument is of type 'int *' glxdricommon.c:230:35: warning: pointer targets in passing argument 3 of 'core->getConfigAttrib' differ in signedness [-Wpointer-sign] glxdricommon.c:230:35: note: expected 'unsigned int *' but argument is of type 'int *' Signed-off-by: Daniel Czarnowski <daniel.czarnowski@intel.com> Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
4e5eb15b4c
commit
ccc8bb1153
|
@ -809,7 +809,7 @@ LIBAPPLEWM="applewm >= 1.4"
|
||||||
LIBDMX="dmx >= 1.0.99.1"
|
LIBDMX="dmx >= 1.0.99.1"
|
||||||
LIBDRI="dri >= 7.8.0"
|
LIBDRI="dri >= 7.8.0"
|
||||||
LIBDRM="libdrm >= 2.3.0"
|
LIBDRM="libdrm >= 2.3.0"
|
||||||
LIBGL="gl >= 7.1.0"
|
LIBGL="gl >= 9.2.0"
|
||||||
LIBXEXT="xext >= 1.0.99.4"
|
LIBXEXT="xext >= 1.0.99.4"
|
||||||
LIBXFONT="xfont >= 1.4.2"
|
LIBXFONT="xfont >= 1.4.2"
|
||||||
LIBXI="xi >= 1.2.99.1"
|
LIBXI="xi >= 1.2.99.1"
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <GL/internal/dri_interface.h>
|
#include <GL/internal/dri_interface.h>
|
||||||
#include <os.h>
|
#include <os.h>
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxext.h"
|
||||||
#include "glxcontext.h"
|
#include "glxcontext.h"
|
||||||
#include "glxscreens.h"
|
#include "glxscreens.h"
|
||||||
#include "glxdricommon.h"
|
#include "glxdricommon.h"
|
||||||
|
@ -127,6 +128,7 @@ createModeFromConfig(const __DRIcoreExtension * core,
|
||||||
unsigned int visualType, unsigned int drawableType)
|
unsigned int visualType, unsigned int drawableType)
|
||||||
{
|
{
|
||||||
__GLXDRIconfig *config;
|
__GLXDRIconfig *config;
|
||||||
|
GLint renderType = 0;
|
||||||
unsigned int attrib, value;
|
unsigned int attrib, value;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -138,11 +140,14 @@ createModeFromConfig(const __DRIcoreExtension * core,
|
||||||
while (core->indexConfigAttrib(driConfig, i++, &attrib, &value)) {
|
while (core->indexConfigAttrib(driConfig, i++, &attrib, &value)) {
|
||||||
switch (attrib) {
|
switch (attrib) {
|
||||||
case __DRI_ATTRIB_RENDER_TYPE:
|
case __DRI_ATTRIB_RENDER_TYPE:
|
||||||
config->config.renderType = 0;
|
|
||||||
if (value & __DRI_ATTRIB_RGBA_BIT)
|
if (value & __DRI_ATTRIB_RGBA_BIT)
|
||||||
config->config.renderType |= GLX_RGBA_BIT;
|
renderType |= GLX_RGBA_BIT;
|
||||||
if (value & __DRI_ATTRIB_COLOR_INDEX_BIT)
|
if (value & __DRI_ATTRIB_COLOR_INDEX_BIT)
|
||||||
config->config.renderType |= GLX_COLOR_INDEX_BIT;
|
renderType |= GLX_COLOR_INDEX_BIT;
|
||||||
|
if (value & __DRI_ATTRIB_FLOAT_BIT)
|
||||||
|
renderType |= GLX_RGBA_FLOAT_BIT_ARB;
|
||||||
|
if (value & __DRI_ATTRIB_UNSIGNED_FLOAT_BIT)
|
||||||
|
renderType |= GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT;
|
||||||
break;
|
break;
|
||||||
case __DRI_ATTRIB_CONFIG_CAVEAT:
|
case __DRI_ATTRIB_CONFIG_CAVEAT:
|
||||||
if (value & __DRI_ATTRIB_NON_CONFORMANT_CONFIG)
|
if (value & __DRI_ATTRIB_NON_CONFORMANT_CONFIG)
|
||||||
|
@ -171,11 +176,26 @@ createModeFromConfig(const __DRIcoreExtension * core,
|
||||||
config->config.next = NULL;
|
config->config.next = NULL;
|
||||||
config->config.xRenderable = GL_TRUE;
|
config->config.xRenderable = GL_TRUE;
|
||||||
config->config.visualType = visualType;
|
config->config.visualType = visualType;
|
||||||
|
config->config.renderType = renderType;
|
||||||
config->config.drawableType = drawableType;
|
config->config.drawableType = drawableType;
|
||||||
|
|
||||||
return &config->config;
|
return &config->config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
render_type_is_pbuffer_only(unsigned renderType)
|
||||||
|
{
|
||||||
|
/* The GL_ARB_color_buffer_float spec says:
|
||||||
|
*
|
||||||
|
* "Note that floating point rendering is only supported for
|
||||||
|
* GLXPbuffer drawables. The GLX_DRAWABLE_TYPE attribute of the
|
||||||
|
* GLXFBConfig must have the GLX_PBUFFER_BIT bit set and the
|
||||||
|
* GLX_RENDER_TYPE attribute must have the GLX_RGBA_FLOAT_BIT set."
|
||||||
|
*/
|
||||||
|
return !!(renderType & (__DRI_ATTRIB_UNSIGNED_FLOAT_BIT
|
||||||
|
| __DRI_ATTRIB_FLOAT_BIT));
|
||||||
|
}
|
||||||
|
|
||||||
__GLXconfig *
|
__GLXconfig *
|
||||||
glxConvertConfigs(const __DRIcoreExtension * core,
|
glxConvertConfigs(const __DRIcoreExtension * core,
|
||||||
const __DRIconfig ** configs, unsigned int drawableType)
|
const __DRIconfig ** configs, unsigned int drawableType)
|
||||||
|
@ -187,6 +207,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
|
||||||
head.next = NULL;
|
head.next = NULL;
|
||||||
|
|
||||||
for (i = 0; configs[i]; i++) {
|
for (i = 0; configs[i]; i++) {
|
||||||
|
unsigned renderType = 0;
|
||||||
|
if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE,
|
||||||
|
&renderType)) {
|
||||||
|
if (render_type_is_pbuffer_only(renderType) &&
|
||||||
|
!(drawableType & GLX_PBUFFER_BIT))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Add all the others */
|
||||||
tail->next = createModeFromConfig(core,
|
tail->next = createModeFromConfig(core,
|
||||||
configs[i], GLX_TRUE_COLOR,
|
configs[i], GLX_TRUE_COLOR,
|
||||||
drawableType);
|
drawableType);
|
||||||
|
@ -197,6 +225,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; configs[i]; i++) {
|
for (i = 0; configs[i]; i++) {
|
||||||
|
int renderType = 0;
|
||||||
|
if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE,
|
||||||
|
&renderType)) {
|
||||||
|
if (render_type_is_pbuffer_only(renderType) &&
|
||||||
|
!(drawableType & GLX_PBUFFER_BIT))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Add all the others */
|
||||||
tail->next = createModeFromConfig(core,
|
tail->next = createModeFromConfig(core,
|
||||||
configs[i], GLX_DIRECT_COLOR,
|
configs[i], GLX_DIRECT_COLOR,
|
||||||
drawableType);
|
drawableType);
|
||||||
|
|
|
@ -386,7 +386,9 @@ fbConfigsDump(unsigned int n, __GLXconfig * c)
|
||||||
c->accumAlphaBits, c->sampleBuffers, c->samples,
|
c->accumAlphaBits, c->sampleBuffers, c->samples,
|
||||||
(c->drawableType & GLX_WINDOW_BIT) ? "y" : ".",
|
(c->drawableType & GLX_WINDOW_BIT) ? "y" : ".",
|
||||||
(c->drawableType & GLX_PIXMAP_BIT) ? "y" : ".",
|
(c->drawableType & GLX_PIXMAP_BIT) ? "y" : ".",
|
||||||
(c->drawableType & GLX_PBUFFER_BIT) ? "y" : ".", ".",
|
(c->drawableType & GLX_PBUFFER_BIT) ? "y" : ".",
|
||||||
|
(c->renderType & (GLX_RGBA_FLOAT_BIT_ARB |
|
||||||
|
GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT)) ? "y" : ".",
|
||||||
(c->transparentPixel != GLX_NONE_EXT) ? "y" : ".",
|
(c->transparentPixel != GLX_NONE_EXT) ? "y" : ".",
|
||||||
c->visualSelectGroup,
|
c->visualSelectGroup,
|
||||||
(c->visualRating == GLX_SLOW_VISUAL_EXT) ? "*" : " ");
|
(c->visualRating == GLX_SLOW_VISUAL_EXT) ? "*" : " ");
|
||||||
|
|
Loading…
Reference in New Issue