Module: Mesa Branch: master Commit: 2437ebd7059062d59d2d9b8c6c91977432a5aafa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2437ebd7059062d59d2d9b8c6c91977432a5aafa
Author: Thomas Hellstrom <[email protected]> Date: Wed Aug 9 11:25:10 2017 +0200 dri: Introduce SWAP_METHOD tokens We shouldn't be using GLX tokens in the dri subsystem, so define dri SWAP_METHOD tokens and translate when necessary. Unfortunately the X server uses the dri swap method value untranslated as the GLX fbconfig swapMethod, so we can't enumerate these tokens arbitrarily, but rather need to make them have the same values as the corresponding GLX tokens. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Michel Dänzer <[email protected]> --- include/GL/internal/dri_interface.h | 12 ++++++++++++ src/gallium/state_trackers/dri/dri_screen.c | 3 ++- src/glx/dri_common.c | 13 +++++++++++++ src/mesa/drivers/dri/common/utils.c | 4 ++-- src/mesa/drivers/dri/i915/intel_screen.c | 2 +- src/mesa/drivers/dri/i965/intel_screen.c | 2 +- src/mesa/drivers/dri/nouveau/nouveau_screen.c | 2 +- src/mesa/drivers/dri/radeon/radeon_screen.c | 6 ++---- src/mesa/drivers/dri/swrast/swrast.c | 2 +- 9 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 5e8fce79f9..2cbd738439 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -724,6 +724,18 @@ struct __DRIuseInvalidateExtensionRec { #define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02 #define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04 +/* __DRI_ATTRIB_SWAP_METHOD */ +/* Note that with the exception of __DRI_ATTRIB_SWAP_NONE, we need to define + * the same tokens as GLX. This is because old and current X servers will + * transmit the driconf value grabbed from the AIGLX driver untranslated as + * the GLX fbconfig value. __DRI_ATTRIB_SWAP_NONE is only used by dri drivers + * to signal to the dri core that the driconfig is single-buffer. + */ +#define __DRI_ATTRIB_SWAP_NONE 0x0000 +#define __DRI_ATTRIB_SWAP_EXCHANGE 0x8061 +#define __DRI_ATTRIB_SWAP_COPY 0x8062 +#define __DRI_ATTRIB_SWAP_UNDEFINED 0x8063 + /** * This extension defines the core DRI functionality. * diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 406e97dc24..1d9f441223 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -156,7 +156,8 @@ dri_fill_in_modes(struct dri_screen *screen) boolean mixed_color_depth; static const GLenum back_buffer_modes[] = { - GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML + __DRI_ATTRIB_SWAP_NONE, __DRI_ATTRIB_SWAP_UNDEFINED, + __DRI_ATTRIB_SWAP_COPY }; if (driQueryOptionb(&screen->dev->option_cache, "always_have_depth_buffer")) { diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index 0f8f7134b4..e2bbd48d3a 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -317,6 +317,19 @@ driConfigEqual(const __DRIcoreExtension *core, return GL_FALSE; break; + case __DRI_ATTRIB_SWAP_METHOD: + if (value == __DRI_ATTRIB_SWAP_EXCHANGE) + glxValue = GLX_SWAP_EXCHANGE_OML; + else if (value == __DRI_ATTRIB_SWAP_COPY) + glxValue = GLX_SWAP_COPY_OML; + else + glxValue = GLX_SWAP_UNDEFINED_OML; + + if (!scalarEqual(config, attrib, glxValue)) + return GL_FALSE; + + break; + default: if (!scalarEqual(config, attrib, value)) return GL_FALSE; diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 7ae4cb8cd2..e944754a42 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -284,9 +284,9 @@ driCreateConfigs(mesa_format format, modes->transparentIndex = GLX_DONT_CARE; modes->rgbMode = GL_TRUE; - if ( db_modes[i] == GLX_NONE ) { + if (db_modes[i] == __DRI_ATTRIB_SWAP_NONE) { modes->doubleBufferMode = GL_FALSE; - modes->swapMethod = GLX_SWAP_UNDEFINED_OML; + modes->swapMethod = __DRI_ATTRIB_SWAP_UNDEFINED; } else { modes->doubleBufferMode = GL_TRUE; diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c index 367a7347fb..6e32ac22cb 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -1060,7 +1060,7 @@ intel_screen_make_configs(__DRIscreen *dri_screen) /* GLX_SWAP_COPY_OML is not supported due to page flipping. */ static const GLenum back_buffer_modes[] = { - GLX_SWAP_UNDEFINED_OML, GLX_NONE, + __DRI_ATTRIB_SWAP_UNDEFINED, __DRI_ATTRIB_SWAP_NONE }; static const uint8_t singlesample_samples[1] = {0}; diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index ec07cf0acc..452f0d186c 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -1774,7 +1774,7 @@ intel_screen_make_configs(__DRIscreen *dri_screen) /* GLX_SWAP_COPY_OML is not supported due to page flipping. */ static const GLenum back_buffer_modes[] = { - GLX_SWAP_UNDEFINED_OML, GLX_NONE, + __DRI_ATTRIB_SWAP_UNDEFINED, __DRI_ATTRIB_SWAP_NONE }; static const uint8_t singlesample_samples[1] = {0}; diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c index 65caec27eb..95b3469daa 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c @@ -65,7 +65,7 @@ nouveau_get_configs(uint32_t chipset) }; const GLenum back_buffer_modes[] = { - GLX_NONE, GLX_SWAP_UNDEFINED_OML + __DRI_ATTRIB_SWAP_NONE, __DRI_ATTRIB_SWAP_UNDEFINED }; for (i = 0; i < ARRAY_SIZE(formats); i++) { diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index a2061e51be..750a654922 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -770,11 +770,9 @@ __DRIconfig **radeonInitScreen2(__DRIscreen *psp) MESA_FORMAT_B8G8R8X8_UNORM, MESA_FORMAT_B8G8R8A8_UNORM }; - /* GLX_SWAP_COPY_OML is only supported because the Intel driver doesn't - * support pageflipping at all. - */ + static const GLenum back_buffer_modes[] = { - GLX_NONE, GLX_SWAP_UNDEFINED_OML, /*, GLX_SWAP_COPY_OML*/ + __DRI_ATTRIB_SWAP_NONE, __DRI_ATTRIB_SWAP_UNDEFINED }; uint8_t depth_bits[4], stencil_bits[4], msaa_samples_array[1]; int color; diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c index 7de90d31f1..45d8279d36 100644 --- a/src/mesa/drivers/dri/swrast/swrast.c +++ b/src/mesa/drivers/dri/swrast/swrast.c @@ -227,7 +227,7 @@ swrastFillInModes(__DRIscreen *psp, * support pageflipping at all. */ static const GLenum back_buffer_modes[] = { - GLX_NONE, GLX_SWAP_UNDEFINED_OML + __DRI_ATTRIB_SWAP_NONE, __DRI_ATTRIB_SWAP_UNDEFINED }; uint8_t depth_bits_array[4]; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
