egl: reenable partial redraw with a warning when using gallium hud
Partial revert ofe516a0a94f
("egl: disable partial redraw when gallium hud is active"). We shouldn't change the behavior of the application when the hud is enabled, doing so could make it harder do diagnose issues. Instead, now we warn and ask the user to manually disable the extension if he considers it to be worth it. Fixes:e516a0a94f
("egl: disable partial redraw when gallium hud is active") Signed-off-by: Italo Nicola <italonicola@collabora.com> Reviewed-by: Eric Engestrom <eric@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23456>
This commit is contained in:
@@ -684,7 +684,8 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
|
|||||||
disp->Options.ForceSoftware |= disp->Options.Zink;
|
disp->Options.ForceSoftware |= disp->Options.Zink;
|
||||||
|
|
||||||
const char *gallium_hud_env = getenv("GALLIUM_HUD");
|
const char *gallium_hud_env = getenv("GALLIUM_HUD");
|
||||||
disp->Options.GalliumHud = gallium_hud_env && gallium_hud_env[0] != '\0';
|
disp->Options.GalliumHudWarn =
|
||||||
|
gallium_hud_env && gallium_hud_env[0] != '\0';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the display using the driver's function.
|
* Initialize the display using the driver's function.
|
||||||
|
@@ -194,11 +194,11 @@ struct _egl_display {
|
|||||||
|
|
||||||
/* options that affect how the driver initializes the display */
|
/* options that affect how the driver initializes the display */
|
||||||
struct {
|
struct {
|
||||||
EGLBoolean Zink; /**< Use kopper only */
|
EGLBoolean Zink; /**< Use kopper only */
|
||||||
EGLBoolean ForceSoftware; /**< Use software path only */
|
EGLBoolean ForceSoftware; /**< Use software path only */
|
||||||
EGLBoolean GalliumHud; /**< Using gallium hud, disable buffer age */
|
EGLBoolean GalliumHudWarn; /**< Using hud, warn when querying buffer age */
|
||||||
EGLAttrib *Attribs; /**< Platform-specific options */
|
EGLAttrib *Attribs; /**< Platform-specific options */
|
||||||
int fd; /**< Platform device specific, local fd */
|
int fd; /**< Platform device specific, local fd */
|
||||||
} Options;
|
} Options;
|
||||||
|
|
||||||
/* these fields are set by the driver during init */
|
/* these fields are set by the driver during init */
|
||||||
|
@@ -562,12 +562,19 @@ _eglQuerySurface(_EGLDisplay *disp, _EGLSurface *surface, EGLint attribute,
|
|||||||
ctx->DrawSurface != surface)
|
ctx->DrawSurface != surface)
|
||||||
return _eglError(EGL_BAD_SURFACE, "eglQuerySurface");
|
return _eglError(EGL_BAD_SURFACE, "eglQuerySurface");
|
||||||
|
|
||||||
EGLint result = 0;
|
EGLint result = disp->Driver->QueryBufferAge(disp, surface);
|
||||||
if (!disp->Options.GalliumHud)
|
|
||||||
result = disp->Driver->QueryBufferAge(disp, surface);
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
|
if (disp->Options.GalliumHudWarn && result > 0) {
|
||||||
|
_eglLog(_EGL_WARNING,
|
||||||
|
"GALLIUM_HUD is not accounted for when querying "
|
||||||
|
"buffer age, possibly causing artifacts, try running with "
|
||||||
|
"MESA_EXTENSION_OVERRIDE=\"-EGL_EXT_buffer_age "
|
||||||
|
"-EGL_KHR_partial_update\"");
|
||||||
|
disp->Options.GalliumHudWarn = EGL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
*value = result;
|
*value = result;
|
||||||
surface->BufferAgeRead = EGL_TRUE;
|
surface->BufferAgeRead = EGL_TRUE;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user