mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2025-02-18 17:09:17 +00:00
dri: Add KHR_no_error DRI extension
This basic extension allows usage of the __DRI_CTX_FLAG_NO_ERROR flag. This includes support code for classic Mesa drivers to switch on the no-error mode if the flag is set. v2: Move to common DRI code. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
cfbf60b0c2
commit
7299e82fa4
@ -1049,6 +1049,12 @@ struct __DRIdri2LoaderExtensionRec {
|
||||
*/
|
||||
#define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004
|
||||
|
||||
/**
|
||||
* \requires __DRI2_NO_ERROR.
|
||||
*
|
||||
*/
|
||||
#define __DRI_CTX_FLAG_NO_ERROR 0x00000008
|
||||
|
||||
/**
|
||||
* \name Context reset strategies.
|
||||
*/
|
||||
@ -1611,6 +1617,19 @@ struct __DRIrobustnessExtensionRec {
|
||||
__DRIextension base;
|
||||
};
|
||||
|
||||
/**
|
||||
* No-error context driver extension.
|
||||
*
|
||||
* Existence of this extension means the driver can accept the
|
||||
* __DRI_CTX_FLAG_NO_ERROR flag.
|
||||
*/
|
||||
#define __DRI2_NO_ERROR "DRI_NoError"
|
||||
#define __DRI2_NO_ERROR_VERSION 1
|
||||
|
||||
typedef struct __DRInoErrorExtensionRec {
|
||||
__DRIextension base;
|
||||
} __DRInoErrorExtension;
|
||||
|
||||
/**
|
||||
* DRI config options extension.
|
||||
*
|
||||
|
@ -1995,6 +1995,7 @@ static const __DRIextension *dri_screen_extensions[] = {
|
||||
&dri2ThrottleExtension.base,
|
||||
&dri2FenceExtension.base,
|
||||
&dri2InteropExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -2008,6 +2009,7 @@ static const __DRIextension *dri_robust_screen_extensions[] = {
|
||||
&dri2FenceExtension.base,
|
||||
&dri2InteropExtension.base,
|
||||
&dri2Robustness.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -57,7 +57,8 @@ dri_create_context(gl_api api, const struct gl_config * visual,
|
||||
struct st_context_attribs attribs;
|
||||
enum st_context_error ctx_err = 0;
|
||||
unsigned allowed_flags = __DRI_CTX_FLAG_DEBUG |
|
||||
__DRI_CTX_FLAG_FORWARD_COMPATIBLE;
|
||||
__DRI_CTX_FLAG_FORWARD_COMPATIBLE |
|
||||
__DRI_CTX_FLAG_NO_ERROR;
|
||||
const __DRIbackgroundCallableExtension *backgroundCallable =
|
||||
screen->sPriv->dri2.backgroundCallable;
|
||||
|
||||
|
@ -371,6 +371,7 @@ static const __DRIextension *drisw_screen_extensions[] = {
|
||||
&dri2RendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2FenceExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -403,7 +403,8 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
|
||||
if (mesa_api != API_OPENGL_COMPAT
|
||||
&& mesa_api != API_OPENGL_CORE
|
||||
&& (flags & ~(__DRI_CTX_FLAG_DEBUG |
|
||||
__DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS))) {
|
||||
__DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS |
|
||||
__DRI_CTX_FLAG_NO_ERROR))) {
|
||||
*error = __DRI_CTX_ERROR_BAD_FLAG;
|
||||
return NULL;
|
||||
}
|
||||
@ -425,7 +426,8 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
|
||||
|
||||
const uint32_t allowed_flags = (__DRI_CTX_FLAG_DEBUG
|
||||
| __DRI_CTX_FLAG_FORWARD_COMPATIBLE
|
||||
| __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS);
|
||||
| __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS
|
||||
| __DRI_CTX_FLAG_NO_ERROR);
|
||||
if (flags & ~allowed_flags) {
|
||||
*error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
|
||||
return NULL;
|
||||
@ -467,6 +469,8 @@ driContextSetFlags(struct gl_context *ctx, uint32_t flags)
|
||||
_mesa_set_debug_state_int(ctx, GL_DEBUG_OUTPUT, GL_TRUE);
|
||||
ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
|
||||
}
|
||||
if ((flags & __DRI_CTX_FLAG_NO_ERROR) != 0)
|
||||
ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR;
|
||||
}
|
||||
|
||||
static __DRIcontext *
|
||||
@ -935,3 +939,7 @@ const __DRIcopySubBufferExtension driCopySubBufferExtension = {
|
||||
|
||||
.copySubBuffer = driCopySubBuffer,
|
||||
};
|
||||
|
||||
const __DRInoErrorExtension dri2NoErrorExtension = {
|
||||
.base = { __DRI2_NO_ERROR, 1 },
|
||||
};
|
||||
|
@ -293,4 +293,6 @@ driContextSetFlags(struct gl_context *ctx, uint32_t flags);
|
||||
|
||||
extern const __DRIimageDriverExtension driImageDriverExtension;
|
||||
|
||||
extern const __DRInoErrorExtension dri2NoErrorExtension;
|
||||
|
||||
#endif /* _DRI_UTIL_H_ */
|
||||
|
@ -802,6 +802,7 @@ static const __DRIextension *intelScreenExtensions[] = {
|
||||
&intelImageExtension.base,
|
||||
&intelRendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -1274,6 +1274,7 @@ static const __DRIextension *screenExtensions[] = {
|
||||
&intelImageExtension.base,
|
||||
&intelRendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -1285,6 +1286,7 @@ static const __DRIextension *intelRobustScreenExtensions[] = {
|
||||
&intelRendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2Robustness.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -324,6 +324,7 @@ static const __DRIextension *nouveau_screen_extensions[] = {
|
||||
&nouveau_texbuffer_extension.base,
|
||||
&nouveau_renderer_query_extension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -544,6 +544,7 @@ static const __DRIextension *radeon_screen_extensions[] = {
|
||||
&radeonFlushExtension.base,
|
||||
&radeonImageExtension.base,
|
||||
&radeonRendererQueryExtension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -208,6 +208,7 @@ static const __DRI2rendererQueryExtension swrast_query_renderer_extension = {
|
||||
static const __DRIextension *dri_screen_extensions[] = {
|
||||
&swrastTexBufferExtension.base,
|
||||
&swrast_query_renderer_extension.base,
|
||||
&dri2NoErrorExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user