mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 15:40:11 +01:00
egl: Factor out dri2_add_pbuffer_configs_for_visuals {device,surfaceless}.
v2: dri2_add_configs_for_visuals -> dri2_add_pbuffer_configs_for_visuals Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3790> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3790>
This commit is contained in:
parent
d32c458de7
commit
f280c00ba6
4 changed files with 46 additions and 92 deletions
|
|
@ -85,41 +85,49 @@
|
|||
#define NUM_ATTRIBS 12
|
||||
|
||||
static const struct dri2_pbuffer_visual {
|
||||
const char *format_name;
|
||||
unsigned int dri_image_format;
|
||||
int rgba_shifts[4];
|
||||
unsigned int rgba_sizes[4];
|
||||
} dri2_pbuffer_visuals[] = {
|
||||
{
|
||||
"ABGR16F",
|
||||
__DRI_IMAGE_FORMAT_ABGR16161616F,
|
||||
{ 0, 16, 32, 48 },
|
||||
{ 16, 16, 16, 16 }
|
||||
},
|
||||
{
|
||||
"XBGR16F",
|
||||
__DRI_IMAGE_FORMAT_XBGR16161616F,
|
||||
{ 0, 16, 32, -1 },
|
||||
{ 16, 16, 16, 0 }
|
||||
},
|
||||
{
|
||||
"A2RGB10",
|
||||
__DRI_IMAGE_FORMAT_ARGB2101010,
|
||||
{ 20, 10, 0, 30 },
|
||||
{ 10, 10, 10, 2 }
|
||||
},
|
||||
{
|
||||
"X2RGB10",
|
||||
__DRI_IMAGE_FORMAT_XRGB2101010,
|
||||
{ 20, 10, 0, -1 },
|
||||
{ 10, 10, 10, 0 }
|
||||
},
|
||||
{
|
||||
"ARGB8888",
|
||||
__DRI_IMAGE_FORMAT_ARGB8888,
|
||||
{ 16, 8, 0, 24 },
|
||||
{ 8, 8, 8, 8 }
|
||||
},
|
||||
{
|
||||
"RGB888",
|
||||
__DRI_IMAGE_FORMAT_XRGB8888,
|
||||
{ 16, 8, 0, -1 },
|
||||
{ 8, 8, 8, 0 }
|
||||
},
|
||||
{
|
||||
"RGB565",
|
||||
__DRI_IMAGE_FORMAT_RGB565,
|
||||
{ 11, 5, 0, -1 },
|
||||
{ 5, 6, 5, 0 }
|
||||
|
|
@ -634,6 +642,39 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
|
|||
return conf;
|
||||
}
|
||||
|
||||
EGLBoolean
|
||||
dri2_add_pbuffer_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
unsigned int format_count[ARRAY_SIZE(dri2_pbuffer_visuals)] = { 0 };
|
||||
unsigned int config_count = 0;
|
||||
|
||||
for (unsigned i = 0; dri2_dpy->driver_configs[i] != NULL; i++) {
|
||||
for (unsigned j = 0; j < ARRAY_SIZE(dri2_pbuffer_visuals); j++) {
|
||||
struct dri2_egl_config *dri2_conf;
|
||||
|
||||
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
|
||||
config_count + 1, EGL_PBUFFER_BIT, NULL,
|
||||
dri2_pbuffer_visuals[j].rgba_shifts, dri2_pbuffer_visuals[j].rgba_sizes);
|
||||
|
||||
if (dri2_conf) {
|
||||
if (dri2_conf->base.ConfigID == config_count + 1)
|
||||
config_count++;
|
||||
format_count[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) {
|
||||
if (!format_count[i]) {
|
||||
_eglLog(_EGL_DEBUG, "No DRI config supports native format %s",
|
||||
dri2_pbuffer_visuals[i].format_name);
|
||||
}
|
||||
}
|
||||
|
||||
return (config_count != 0);
|
||||
}
|
||||
|
||||
__DRIimage *
|
||||
dri2_lookup_egl_image(__DRIscreen *screen, void *image, void *data)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -426,6 +426,9 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
|
|||
EGLint surface_type, const EGLint *attr_list,
|
||||
const int *rgba_shifts, const unsigned int *rgba_sizes);
|
||||
|
||||
EGLBoolean
|
||||
dri2_add_pbuffer_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp);
|
||||
|
||||
_EGLImage *
|
||||
dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
_EGLContext *ctx, EGLenum target,
|
||||
|
|
|
|||
|
|
@ -182,50 +182,6 @@ dri2_device_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
|||
attrib_list);
|
||||
}
|
||||
|
||||
static EGLBoolean
|
||||
device_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
static const struct {
|
||||
const char *format_name;
|
||||
int rgba_shifts[4];
|
||||
unsigned int rgba_sizes[4];
|
||||
} visuals[] = {
|
||||
{ "A2RGB10", { 20, 10, 0, 30 }, { 10, 10, 10, 2 } },
|
||||
{ "X2RGB10", { 20, 10, 0, -1 }, { 10, 10, 10, 0 } },
|
||||
{ "ARGB8888", { 16, 8, 0, 24 }, { 8, 8, 8, 8 } },
|
||||
{ "RGB888", { 16, 8, 0, -1 }, { 8, 8, 8, 0 } },
|
||||
{ "RGB565", { 11, 5, 0, -1 }, { 5, 6, 5, 0 } },
|
||||
};
|
||||
unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 };
|
||||
unsigned int config_count = 0;
|
||||
|
||||
for (unsigned i = 0; dri2_dpy->driver_configs[i] != NULL; i++) {
|
||||
for (unsigned j = 0; j < ARRAY_SIZE(visuals); j++) {
|
||||
struct dri2_egl_config *dri2_conf;
|
||||
|
||||
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
|
||||
config_count + 1, EGL_PBUFFER_BIT, NULL,
|
||||
visuals[j].rgba_shifts, visuals[j].rgba_sizes);
|
||||
|
||||
if (dri2_conf) {
|
||||
if (dri2_conf->base.ConfigID == config_count + 1)
|
||||
config_count++;
|
||||
format_count[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) {
|
||||
if (!format_count[i]) {
|
||||
_eglLog(_EGL_DEBUG, "No DRI config supports native format %s",
|
||||
visuals[i].format_name);
|
||||
}
|
||||
}
|
||||
|
||||
return (config_count != 0);
|
||||
}
|
||||
|
||||
static const struct dri2_egl_display_vtbl dri2_device_display_vtbl = {
|
||||
.create_pixmap_surface = dri2_fallback_create_pixmap_surface,
|
||||
.create_pbuffer_surface = dri2_device_create_pbuffer_surface,
|
||||
|
|
@ -395,7 +351,7 @@ dri2_initialize_device(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
|
||||
dri2_setup_screen(disp);
|
||||
|
||||
if (!device_add_configs_for_visuals(drv, disp)) {
|
||||
if (!dri2_add_pbuffer_configs_for_visuals(drv, disp)) {
|
||||
err = "DRI2: failed to add configs";
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,52 +176,6 @@ dri2_surfaceless_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
|||
attrib_list);
|
||||
}
|
||||
|
||||
static EGLBoolean
|
||||
surfaceless_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
static const struct {
|
||||
const char *format_name;
|
||||
int rgba_shifts[4];
|
||||
unsigned int rgba_sizes[4];
|
||||
} visuals[] = {
|
||||
{ "ABGR16F", { 0, 16, 32, 48 }, { 16, 16, 16, 16 } },
|
||||
{ "XBGR16F", { 0, 16, 32, -1 }, { 16, 16, 16, 0 } },
|
||||
{ "A2RGB10", { 20, 10, 0, 30 }, { 10, 10, 10, 2 } },
|
||||
{ "X2RGB10", { 20, 10, 0, -1 }, { 10, 10, 10, 0 } },
|
||||
{ "ARGB8888", { 16, 8, 0, 24 }, { 8, 8, 8, 8 } },
|
||||
{ "RGB888", { 16, 8, 0, -1 }, { 8, 8, 8, 0 } },
|
||||
{ "RGB565", { 11, 5, 0, -1 }, { 5, 6, 5, 0 } },
|
||||
};
|
||||
unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 };
|
||||
unsigned int config_count = 0;
|
||||
|
||||
for (unsigned i = 0; dri2_dpy->driver_configs[i] != NULL; i++) {
|
||||
for (unsigned j = 0; j < ARRAY_SIZE(visuals); j++) {
|
||||
struct dri2_egl_config *dri2_conf;
|
||||
|
||||
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
|
||||
config_count + 1, EGL_PBUFFER_BIT, NULL,
|
||||
visuals[j].rgba_shifts, visuals[j].rgba_sizes);
|
||||
|
||||
if (dri2_conf) {
|
||||
if (dri2_conf->base.ConfigID == config_count + 1)
|
||||
config_count++;
|
||||
format_count[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) {
|
||||
if (!format_count[i]) {
|
||||
_eglLog(_EGL_DEBUG, "No DRI config supports native format %s",
|
||||
visuals[i].format_name);
|
||||
}
|
||||
}
|
||||
|
||||
return (config_count != 0);
|
||||
}
|
||||
|
||||
static const struct dri2_egl_display_vtbl dri2_surfaceless_display_vtbl = {
|
||||
.create_pixmap_surface = dri2_fallback_create_pixmap_surface,
|
||||
.create_pbuffer_surface = dri2_surfaceless_create_pbuffer_surface,
|
||||
|
|
@ -414,7 +368,7 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
#endif
|
||||
dri2_set_WL_bind_wayland_display(drv, disp);
|
||||
|
||||
if (!surfaceless_add_configs_for_visuals(drv, disp)) {
|
||||
if (!dri2_add_pbuffer_configs_for_visuals(drv, disp)) {
|
||||
err = "DRI2: failed to add configs";
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue