From: Neil Roberts <n...@linux.intel.com> Adds a DRI extension which advertises that the driver can accept a new __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR attribute in the createContextAttribs function. If the attribute is specified then it will be passed down to the CreateContext function in the release_behavior member of __DriverContextConfig. The attribute is needed to implement the GLX_ARB_context_flush_control extension. --- include/GL/internal/dri_interface.h | 25 +++++++++++++++++++++++++ src/mesa/drivers/dri/common/dri_util.c | 14 ++++++++++++++ src/mesa/drivers/dri/common/dri_util.h | 5 +++++ 3 files changed, 44 insertions(+)
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index c827bb6..cc0e00b 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -970,6 +970,8 @@ struct __DRIdri2LoaderExtensionRec { */ #define __DRI_CTX_ATTRIB_RESET_STRATEGY 3 +#define __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR 4 + #define __DRI_CTX_FLAG_DEBUG 0x00000001 #define __DRI_CTX_FLAG_FORWARD_COMPATIBLE 0x00000002 @@ -987,6 +989,14 @@ struct __DRIdri2LoaderExtensionRec { /*@}*/ /** + * \name Context release behaviors. + */ +/*@{*/ +#define __DRI_CTX_RELEASE_BEHAVIOR_NONE 0 +#define __DRI_CTX_RELEASE_BEHAVIOR_FLUSH 1 +/*@}*/ + +/** * \name Reasons that __DRIdri2Extension::createContextAttribs might fail */ /*@{*/ @@ -1394,6 +1404,21 @@ struct __DRIrobustnessExtensionRec { }; /** + * Flush control driver extension. + * + * Existence of this extension means the driver can accept the + * \c __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR attribute in + * \c __DRIdri2ExtensionRec::createContextAttribs. + */ +#define __DRI2_FLUSH_CONTROL "DRI_FlushControl" +#define __DRI2_FLUSH_CONTROL_VERSION 1 + +typedef struct __DRI2flushControlExtensionRec __DRI2flushControlExtension; +struct __DRI2flushControlExtensionRec { + __DRIextension base; +}; + +/** * DRI config options extension. * * This extension provides the XML string containing driver options for use by diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index 921910f..76545d6 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -360,6 +360,16 @@ driCreateContextAttribs(__DRIscreen *screen, int api, ~__DRIVER_CONTEXT_ATTRIB_RESET_STRATEGY; } break; + case __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR: + if (attribs[i * 2 + 1] != __DRI_CTX_RELEASE_BEHAVIOR_FLUSH) { + ctx_config.attribute_mask |= + __DRIVER_CONTEXT_ATTRIB_RELEASE_BEHAVIOR; + ctx_config.release_behavior = attribs[i * 2 + 1]; + } else { + ctx_config.attribute_mask &= + ~__DRIVER_CONTEXT_ATTRIB_RELEASE_BEHAVIOR; + } + break; default: /* We can't create a context that satisfies the requirements of an * attribute that we don't understand. Return failure. @@ -795,6 +805,10 @@ const __DRI2configQueryExtension dri2ConfigQueryExtension = { .configQueryf = dri2ConfigQueryf, }; +const __DRI2flushControlExtension dri2FlushControlExtension = { + .base = { __DRI2_FLUSH_CONTROL, 1 } +}; + void dri2InvalidateDrawable(__DRIdrawable *drawable) { diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h index 0369987..c2970eb 100644 --- a/src/mesa/drivers/dri/common/dri_util.h +++ b/src/mesa/drivers/dri/common/dri_util.h @@ -67,6 +67,7 @@ extern const __DRIswrastExtension driSWRastExtension; extern const __DRIdri2Extension driDRI2Extension; extern const __DRI2configQueryExtension dri2ConfigQueryExtension; extern const __DRIcopySubBufferExtension driCopySubBufferExtension; +extern const __DRI2flushControlExtension dri2FlushControlExtension; /** * Description of the attributes used to create a config. @@ -90,9 +91,13 @@ struct __DriverContextConfig { /* Only valid if __DRIVER_CONTEXT_ATTRIB_RESET_STRATEGY is set */ int reset_strategy; + + /* Only valid if __DRIVER_CONTEXT_ATTRIB_RELEASE_BEHAVIOR is set */ + int release_behavior; }; #define __DRIVER_CONTEXT_ATTRIB_RESET_STRATEGY (1 << 0) +#define __DRIVER_CONTEXT_ATTRIB_RELEASE_BEHAVIOR (1 << 1) /** * Driver callback functions. -- 2.4.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev