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:
@@ -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[] = {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user