egl,dri_interface: use DRI2rendererQueryExtension to enable 3D textures & sRGB
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
@@ -1437,6 +1437,11 @@ typedef struct __DRIDriverVtableExtensionRec {
|
|||||||
#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION 0x0008
|
#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION 0x0008
|
||||||
#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION 0x0009
|
#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION 0x0009
|
||||||
#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION 0x000a
|
#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION 0x000a
|
||||||
|
#define __DRI2_RENDERER_HAS_TEXTURE_3D 0x000b
|
||||||
|
/* Whether there is an sRGB format support for every supported 32-bit UNORM
|
||||||
|
* color format.
|
||||||
|
*/
|
||||||
|
#define __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB 0x000c
|
||||||
|
|
||||||
typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
|
typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
|
||||||
struct __DRI2rendererQueryExtensionRec {
|
struct __DRI2rendererQueryExtensionRec {
|
||||||
|
@@ -525,6 +525,19 @@ dri2_load_driver_swrast(_EGLDisplay *disp)
|
|||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned
|
||||||
|
dri2_renderer_query_integer(struct dri2_egl_display *dri2_dpy, int param)
|
||||||
|
{
|
||||||
|
const __DRI2rendererQueryExtension *rendererQuery = dri2_dpy->rendererQuery;
|
||||||
|
unsigned int value = 0;
|
||||||
|
|
||||||
|
if (!rendererQuery ||
|
||||||
|
rendererQuery->queryInteger(dri2_dpy->dri_screen, param, &value) == -1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dri2_setup_screen(_EGLDisplay *disp)
|
dri2_setup_screen(_EGLDisplay *disp)
|
||||||
{
|
{
|
||||||
@@ -555,6 +568,10 @@ dri2_setup_screen(_EGLDisplay *disp)
|
|||||||
disp->Extensions.KHR_surfaceless_context = EGL_TRUE;
|
disp->Extensions.KHR_surfaceless_context = EGL_TRUE;
|
||||||
disp->Extensions.MESA_configless_context = EGL_TRUE;
|
disp->Extensions.MESA_configless_context = EGL_TRUE;
|
||||||
|
|
||||||
|
if (dri2_renderer_query_integer(dri2_dpy,
|
||||||
|
__DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB))
|
||||||
|
disp->Extensions.KHR_gl_colorspace = EGL_TRUE;
|
||||||
|
|
||||||
if (dri2_dpy->dri2 && dri2_dpy->dri2->base.version >= 3) {
|
if (dri2_dpy->dri2 && dri2_dpy->dri2->base.version >= 3) {
|
||||||
disp->Extensions.KHR_create_context = EGL_TRUE;
|
disp->Extensions.KHR_create_context = EGL_TRUE;
|
||||||
|
|
||||||
@@ -592,6 +609,9 @@ dri2_setup_screen(_EGLDisplay *disp)
|
|||||||
disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
|
disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
|
||||||
disp->Extensions.KHR_gl_texture_cubemap_image = EGL_TRUE;
|
disp->Extensions.KHR_gl_texture_cubemap_image = EGL_TRUE;
|
||||||
}
|
}
|
||||||
|
if (dri2_renderer_query_integer(dri2_dpy,
|
||||||
|
__DRI2_RENDERER_HAS_TEXTURE_3D))
|
||||||
|
disp->Extensions.KHR_gl_texture_3D_image = EGL_TRUE;
|
||||||
#ifdef HAVE_LIBDRM
|
#ifdef HAVE_LIBDRM
|
||||||
if (dri2_dpy->image->base.version >= 8 &&
|
if (dri2_dpy->image->base.version >= 8 &&
|
||||||
dri2_dpy->image->createImageFromDmaBufs) {
|
dri2_dpy->image->createImageFromDmaBufs) {
|
||||||
@@ -669,6 +689,9 @@ dri2_create_screen(_EGLDisplay *disp)
|
|||||||
if (strcmp(extensions[i]->name, __DRI2_FENCE) == 0) {
|
if (strcmp(extensions[i]->name, __DRI2_FENCE) == 0) {
|
||||||
dri2_dpy->fence = (__DRI2fenceExtension *) extensions[i];
|
dri2_dpy->fence = (__DRI2fenceExtension *) extensions[i];
|
||||||
}
|
}
|
||||||
|
if (strcmp(extensions[i]->name, __DRI2_RENDERER_QUERY) == 0) {
|
||||||
|
dri2_dpy->rendererQuery = (__DRI2rendererQueryExtension *) extensions[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dri2_setup_screen(disp);
|
dri2_setup_screen(disp);
|
||||||
|
@@ -166,6 +166,7 @@ struct dri2_egl_display
|
|||||||
const __DRIrobustnessExtension *robustness;
|
const __DRIrobustnessExtension *robustness;
|
||||||
const __DRI2configQueryExtension *config;
|
const __DRI2configQueryExtension *config;
|
||||||
const __DRI2fenceExtension *fence;
|
const __DRI2fenceExtension *fence;
|
||||||
|
const __DRI2rendererQueryExtension *rendererQuery;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
int own_device;
|
int own_device;
|
||||||
|
Reference in New Issue
Block a user