egl: wire up EGL_EXT_surface_compression extension
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27109>
This commit is contained in:

committed by
Marge Bot

parent
f5d85365a7
commit
6f852cb6ed
@@ -246,5 +246,8 @@ EGL_FUNCTIONS = (
|
||||
_eglFunc("eglGLInteropQueryDeviceInfoMESA", "display"),
|
||||
_eglFunc("eglGLInteropExportObjectMESA", "display"),
|
||||
_eglFunc("eglGLInteropFlushObjectsMESA", "display"),
|
||||
|
||||
# EGL_EXT_surface_compression
|
||||
_eglFunc("eglQuerySupportedCompressionRatesEXT", "display"),
|
||||
)
|
||||
|
||||
|
@@ -555,6 +555,7 @@ _eglCreateExtensionsString(_EGLDisplay *disp)
|
||||
_EGL_CHECK_EXTENSION(EXT_protected_content);
|
||||
_EGL_CHECK_EXTENSION(EXT_protected_surface);
|
||||
_EGL_CHECK_EXTENSION(EXT_query_reset_notification_strategy);
|
||||
_EGL_CHECK_EXTENSION(EXT_surface_compression);
|
||||
_EGL_CHECK_EXTENSION(EXT_surface_CTA861_3_metadata);
|
||||
_EGL_CHECK_EXTENSION(EXT_surface_SMPTE2086_metadata);
|
||||
_EGL_CHECK_EXTENSION(EXT_swap_buffers_with_damage);
|
||||
@@ -2699,6 +2700,34 @@ eglQueryDmaBufModifiersEXT(EGLDisplay dpy, EGLint format, EGLint max_modifiers,
|
||||
RETURN_EGL_EVAL(disp, ret);
|
||||
}
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglQuerySupportedCompressionRatesEXT(EGLDisplay dpy, EGLConfig config,
|
||||
const EGLAttrib *attrib_list,
|
||||
EGLint *rates, EGLint rate_size,
|
||||
EGLint *num_rates)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLConfig *conf = _eglLookupConfig(config, disp);
|
||||
EGLBoolean ret = EGL_FALSE;
|
||||
|
||||
_EGL_FUNC_START(NULL, EGL_NONE, NULL);
|
||||
|
||||
_EGL_CHECK_DISPLAY(disp, EGL_FALSE);
|
||||
_EGL_CHECK_CONFIG(disp, conf, EGL_FALSE);
|
||||
|
||||
egl_relax (disp) {
|
||||
if (disp->Driver->QuerySupportedCompressionRatesEXT) {
|
||||
ret = disp->Driver->QuerySupportedCompressionRatesEXT(
|
||||
disp, conf, attrib_list, rates, rate_size, num_rates);
|
||||
} else {
|
||||
*num_rates = 0;
|
||||
ret = EGL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_EGL_EVAL(disp, ret);
|
||||
}
|
||||
|
||||
static void EGLAPIENTRY
|
||||
eglSetBlobCacheFuncsANDROID(EGLDisplay *dpy, EGLSetBlobFuncANDROID set,
|
||||
EGLGetBlobFuncANDROID get)
|
||||
|
@@ -111,6 +111,7 @@ struct _egl_extensions {
|
||||
EGLBoolean EXT_protected_content;
|
||||
EGLBoolean EXT_protected_surface;
|
||||
EGLBoolean EXT_query_reset_notification_strategy;
|
||||
EGLBoolean EXT_surface_compression;
|
||||
EGLBoolean EXT_surface_CTA861_3_metadata;
|
||||
EGLBoolean EXT_surface_SMPTE2086_metadata;
|
||||
EGLBoolean EXT_swap_buffers_with_damage;
|
||||
|
@@ -224,6 +224,14 @@ struct _egl_driver {
|
||||
void (*SetBlobCacheFuncsANDROID)(_EGLDisplay *disp,
|
||||
EGLSetBlobFuncANDROID set,
|
||||
EGLGetBlobFuncANDROID get);
|
||||
|
||||
/* for EGL_EXT_surface_compression */
|
||||
EGLBoolean (*QuerySupportedCompressionRatesEXT)(_EGLDisplay *disp,
|
||||
_EGLConfig *config,
|
||||
const EGLAttrib *attr_list,
|
||||
EGLint *rates,
|
||||
EGLint rate_size,
|
||||
EGLint *num_rates);
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -70,6 +70,7 @@ EGL_ENTRYPOINT(eglQueryDisplayAttribEXT)
|
||||
EGL_ENTRYPOINT(eglQueryDmaBufFormatsEXT)
|
||||
EGL_ENTRYPOINT(eglQueryDmaBufModifiersEXT)
|
||||
EGL_ENTRYPOINT(eglQueryString)
|
||||
EGL_ENTRYPOINT(eglQuerySupportedCompressionRatesEXT)
|
||||
EGL_ENTRYPOINT(eglQuerySurface)
|
||||
EGL_ENTRYPOINT(eglQueryWaylandBufferWL)
|
||||
EGL_ENTRYPOINT(eglReleaseTexImage)
|
||||
|
@@ -240,6 +240,18 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list)
|
||||
}
|
||||
surf->PostSubBufferSupportedNV = val;
|
||||
break;
|
||||
case EGL_SURFACE_COMPRESSION_EXT:
|
||||
if (type != EGL_WINDOW_BIT) {
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
}
|
||||
if (val < EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT ||
|
||||
val > EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT) {
|
||||
err = EGL_BAD_PARAMETER;
|
||||
break;
|
||||
}
|
||||
surf->CompressionRate = val;
|
||||
break;
|
||||
/* pbuffer surface attributes */
|
||||
case EGL_WIDTH:
|
||||
if (type != EGL_PBUFFER_BIT) {
|
||||
@@ -408,6 +420,7 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *disp, EGLint type,
|
||||
surf->GLColorspace = EGL_GL_COLORSPACE_LINEAR_KHR;
|
||||
surf->ProtectedContent = EGL_FALSE;
|
||||
surf->PresentOpaque = EGL_FALSE;
|
||||
surf->CompressionRate = EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT;
|
||||
|
||||
surf->MipmapLevel = 0;
|
||||
surf->MultisampleResolve = EGL_MULTISAMPLE_RESOLVE_DEFAULT;
|
||||
@@ -625,6 +638,9 @@ _eglQuerySurface(_EGLDisplay *disp, _EGLSurface *surface, EGLint attribute,
|
||||
return _eglError(EGL_BAD_ATTRIBUTE, "eglQuerySurface");
|
||||
*value = surface->PresentOpaque;
|
||||
break;
|
||||
case EGL_SURFACE_COMPRESSION_EXT:
|
||||
*value = surface->CompressionRate;
|
||||
break;
|
||||
default:
|
||||
return _eglError(EGL_BAD_ATTRIBUTE, "eglQuerySurface");
|
||||
}
|
||||
|
@@ -135,6 +135,11 @@ struct _egl_surface {
|
||||
EGLenum VGColorspace;
|
||||
EGLenum GLColorspace;
|
||||
|
||||
/* EGL_EXT_surface_compression
|
||||
* Value of EGL_SURFACE_COMPRESSION_EXT attribute selected at creation.
|
||||
*/
|
||||
EGLint CompressionRate;
|
||||
|
||||
/* attributes set by eglSurfaceAttrib */
|
||||
EGLint MipmapLevel;
|
||||
EGLenum MultisampleResolve;
|
||||
|
Reference in New Issue
Block a user