gbm: Remove hardcoded color-channel data

We don't need to write out the shifts and sizes everywhere; we already
have them as part of the format description.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27709>
This commit is contained in:
Daniel Stone
2023-08-09 14:13:40 +01:00
committed by Marge Bot
parent a10f10c4ce
commit d8d153d4c2
3 changed files with 33 additions and 142 deletions
+15 -37
View File
@@ -38,6 +38,8 @@
#include "util/os_file.h"
#include "main/glconfig.h"
#include "egl_dri2.h"
#include "egldevice.h"
#include "loader.h"
@@ -97,10 +99,8 @@ dri2_drm_config_is_compatible(struct dri2_egl_display *dri2_dpy,
const __DRIconfig *config,
struct gbm_surface *surface)
{
const struct gl_config *gl_config = (struct gl_config *) config;
const struct gbm_dri_visual *visual = NULL;
int shifts[4];
unsigned int sizes[4];
bool is_float;
int i;
/* Check that the EGLConfig being used to render to the surface is
@@ -108,10 +108,6 @@ dri2_drm_config_is_compatible(struct dri2_egl_display *dri2_dpy,
* otherwise-compatible formats is relatively common, explicitly allow
* this.
*/
dri2_get_shifts_and_sizes(dri2_dpy->core, config, shifts, sizes);
dri2_get_render_type_float(dri2_dpy->core, config, &is_float);
for (i = 0; i < dri2_dpy->gbm_dri->num_visuals; i++) {
visual = &dri2_dpy->gbm_dri->visual_table[i];
if (visual->gbm_format == surface->v0.format)
@@ -121,21 +117,17 @@ dri2_drm_config_is_compatible(struct dri2_egl_display *dri2_dpy,
if (i == dri2_dpy->gbm_dri->num_visuals)
return false;
if (shifts[0] != visual->rgba_shifts.red ||
shifts[1] != visual->rgba_shifts.green ||
shifts[2] != visual->rgba_shifts.blue ||
(shifts[3] > -1 && visual->rgba_shifts.alpha > -1 &&
shifts[3] != visual->rgba_shifts.alpha) ||
sizes[0] != visual->rgba_sizes.red ||
sizes[1] != visual->rgba_sizes.green ||
sizes[2] != visual->rgba_sizes.blue ||
(sizes[3] > 0 && visual->rgba_sizes.alpha > 0 &&
sizes[3] != visual->rgba_sizes.alpha) ||
is_float != visual->is_float) {
return false;
}
return true;
const struct util_format_description *fmt_c =
util_format_description(gl_config->color_format);
const struct util_format_description *fmt_s =
util_format_description(visual->dri_image_format);
if (util_is_format_compatible(fmt_c, fmt_s) ||
util_is_format_compatible(fmt_s, fmt_c))
return true;
return false;
}
static _EGLSurface *
@@ -504,26 +496,12 @@ drm_add_configs_for_visuals(_EGLDisplay *disp)
for (unsigned i = 0; dri2_dpy->driver_configs[i]; i++) {
const __DRIconfig *config = dri2_dpy->driver_configs[i];
int shifts[4];
unsigned int sizes[4];
bool is_float;
dri2_get_shifts_and_sizes(dri2_dpy->core, config, shifts, sizes);
dri2_get_render_type_float(dri2_dpy->core, config, &is_float);
struct gl_config *gl_config = (struct gl_config *) config;
for (unsigned j = 0; j < num_visuals; j++) {
struct dri2_egl_config *dri2_conf;
if (visuals[j].rgba_shifts.red != shifts[0] ||
visuals[j].rgba_shifts.green != shifts[1] ||
visuals[j].rgba_shifts.blue != shifts[2] ||
visuals[j].rgba_shifts.alpha != shifts[3] ||
visuals[j].rgba_sizes.red != sizes[0] ||
visuals[j].rgba_sizes.green != sizes[1] ||
visuals[j].rgba_sizes.blue != sizes[2] ||
visuals[j].rgba_sizes.alpha != sizes[3] ||
visuals[j].is_float != is_float)
if (visuals[j].dri_image_format != gl_config->color_format)
continue;
const EGLint attr_list[] = {
+18 -92
View File
@@ -380,98 +380,24 @@ dri_screen_create_sw(struct gbm_dri_device *dri)
}
static const struct gbm_dri_visual gbm_dri_visuals_table[] = {
{
GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8,
{ 0, -1, -1, -1 },
{ 8, 0, 0, 0 },
},
{
GBM_FORMAT_R16, __DRI_IMAGE_FORMAT_R16,
{ 0, -1, -1, -1 },
{ 16, 0, 0, 0 },
},
{
GBM_FORMAT_GR88, __DRI_IMAGE_FORMAT_GR88,
{ 0, 8, -1, -1 },
{ 8, 8, 0, 0 },
},
{
GBM_FORMAT_GR1616, __DRI_IMAGE_FORMAT_GR1616,
{ 0, 16, -1, -1 },
{ 16, 16, 0, 0 },
},
{
GBM_FORMAT_ARGB1555, __DRI_IMAGE_FORMAT_ARGB1555,
{ 10, 5, 0, 11 },
{ 5, 5, 5, 1 },
},
{
GBM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565,
{ 11, 5, 0, -1 },
{ 5, 6, 5, 0 },
},
{
GBM_FORMAT_XRGB8888, __DRI_IMAGE_FORMAT_XRGB8888,
{ 16, 8, 0, -1 },
{ 8, 8, 8, 0 },
},
{
GBM_FORMAT_ARGB8888, __DRI_IMAGE_FORMAT_ARGB8888,
{ 16, 8, 0, 24 },
{ 8, 8, 8, 8 },
},
{
GBM_FORMAT_XBGR8888, __DRI_IMAGE_FORMAT_XBGR8888,
{ 0, 8, 16, -1 },
{ 8, 8, 8, 0 },
},
{
GBM_FORMAT_ABGR8888, __DRI_IMAGE_FORMAT_ABGR8888,
{ 0, 8, 16, 24 },
{ 8, 8, 8, 8 },
},
{
GBM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010,
{ 20, 10, 0, -1 },
{ 10, 10, 10, 0 },
},
{
GBM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010,
{ 20, 10, 0, 30 },
{ 10, 10, 10, 2 },
},
{
GBM_FORMAT_XBGR2101010, __DRI_IMAGE_FORMAT_XBGR2101010,
{ 0, 10, 20, -1 },
{ 10, 10, 10, 0 },
},
{
GBM_FORMAT_ABGR2101010, __DRI_IMAGE_FORMAT_ABGR2101010,
{ 0, 10, 20, 30 },
{ 10, 10, 10, 2 },
},
{
GBM_FORMAT_XBGR16161616, __DRI_IMAGE_FORMAT_XBGR16161616,
{ 0, 16, 32, -1 },
{ 16, 16, 16, 0 },
},
{
GBM_FORMAT_ABGR16161616, __DRI_IMAGE_FORMAT_ABGR16161616,
{ 0, 16, 32, 48 },
{ 16, 16, 16, 16 },
},
{
GBM_FORMAT_XBGR16161616F, __DRI_IMAGE_FORMAT_XBGR16161616F,
{ 0, 16, 32, -1 },
{ 16, 16, 16, 0 },
true,
},
{
GBM_FORMAT_ABGR16161616F, __DRI_IMAGE_FORMAT_ABGR16161616F,
{ 0, 16, 32, 48 },
{ 16, 16, 16, 16 },
true,
},
{ GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8 },
{ GBM_FORMAT_R16, __DRI_IMAGE_FORMAT_R16 },
{ GBM_FORMAT_GR88, __DRI_IMAGE_FORMAT_GR88 },
{ GBM_FORMAT_GR1616, __DRI_IMAGE_FORMAT_GR1616 },
{ GBM_FORMAT_ARGB1555, __DRI_IMAGE_FORMAT_ARGB1555 },
{ GBM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565 },
{ GBM_FORMAT_XRGB8888, __DRI_IMAGE_FORMAT_XRGB8888 },
{ GBM_FORMAT_ARGB8888, __DRI_IMAGE_FORMAT_ARGB8888 },
{ GBM_FORMAT_XBGR8888, __DRI_IMAGE_FORMAT_XBGR8888 },
{ GBM_FORMAT_ABGR8888, __DRI_IMAGE_FORMAT_ABGR8888 },
{ GBM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010 },
{ GBM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010 },
{ GBM_FORMAT_XBGR2101010, __DRI_IMAGE_FORMAT_XBGR2101010 },
{ GBM_FORMAT_ABGR2101010, __DRI_IMAGE_FORMAT_ABGR2101010 },
{ GBM_FORMAT_XBGR16161616, __DRI_IMAGE_FORMAT_XBGR16161616 },
{ GBM_FORMAT_ABGR16161616, __DRI_IMAGE_FORMAT_ABGR16161616 },
{ GBM_FORMAT_XBGR16161616F, __DRI_IMAGE_FORMAT_XBGR16161616F },
{ GBM_FORMAT_ABGR16161616F, __DRI_IMAGE_FORMAT_ABGR16161616F },
};
static int
-13
View File
@@ -45,19 +45,6 @@ struct gbm_dri_bo;
struct gbm_dri_visual {
uint32_t gbm_format;
int dri_image_format;
struct {
int red;
int green;
int blue;
int alpha;
} rgba_shifts;
struct {
unsigned int red;
unsigned int green;
unsigned int blue;
unsigned int alpha;
} rgba_sizes;
bool is_float;
};
struct gbm_dri_device {