mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-20 12:10:36 +02:00
i965: Rework the modifier info map
This commit splits the mapping in half. The modifier_infos table now only contains the modifier and the since_gen field. The tiling bits have been moved into a table in tiling_to_modifier as that's the only place it was ever used. The modifier_is_supported function now takes a devinfo and does the since_gen check. Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
f44171ef62
commit
ec4364d57e
1 changed files with 25 additions and 23 deletions
|
|
@ -296,26 +296,25 @@ static struct intel_image_format intel_image_formats[] = {
|
|||
};
|
||||
|
||||
static const struct {
|
||||
uint32_t tiling;
|
||||
uint64_t modifier;
|
||||
unsigned since_gen;
|
||||
} tiling_modifier_map[] = {
|
||||
{ .tiling = I915_TILING_NONE, .modifier = DRM_FORMAT_MOD_LINEAR,
|
||||
.since_gen = 1 },
|
||||
{ .tiling = I915_TILING_X, .modifier = I915_FORMAT_MOD_X_TILED,
|
||||
.since_gen = 1 },
|
||||
{ .tiling = I915_TILING_Y, .modifier = I915_FORMAT_MOD_Y_TILED,
|
||||
.since_gen = 6 },
|
||||
} supported_modifiers[] = {
|
||||
{ .modifier = DRM_FORMAT_MOD_LINEAR , .since_gen = 1 },
|
||||
{ .modifier = I915_FORMAT_MOD_X_TILED , .since_gen = 1 },
|
||||
{ .modifier = I915_FORMAT_MOD_Y_TILED , .since_gen = 6 },
|
||||
};
|
||||
|
||||
static bool
|
||||
modifier_is_supported(uint64_t modifier)
|
||||
modifier_is_supported(const struct gen_device_info *devinfo,
|
||||
uint64_t modifier)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tiling_modifier_map); i++) {
|
||||
if (tiling_modifier_map[i].modifier == modifier)
|
||||
return true;
|
||||
for (i = 0; i < ARRAY_SIZE(supported_modifiers); i++) {
|
||||
if (supported_modifiers[i].modifier != modifier)
|
||||
continue;
|
||||
|
||||
return supported_modifiers[i].since_gen <= devinfo->gen;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
@ -324,14 +323,15 @@ modifier_is_supported(uint64_t modifier)
|
|||
static uint64_t
|
||||
tiling_to_modifier(uint32_t tiling)
|
||||
{
|
||||
int i;
|
||||
static const uint64_t map[] = {
|
||||
[I915_TILING_NONE] = DRM_FORMAT_MOD_LINEAR,
|
||||
[I915_TILING_X] = I915_FORMAT_MOD_X_TILED,
|
||||
[I915_TILING_Y] = I915_FORMAT_MOD_Y_TILED,
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tiling_modifier_map); i++) {
|
||||
if (tiling_modifier_map[i].tiling == tiling)
|
||||
return tiling_modifier_map[i].modifier;
|
||||
}
|
||||
assert(tiling < ARRAY_SIZE(map));
|
||||
|
||||
unreachable("tiling_to_modifier received unknown tiling mode");
|
||||
return map[tiling];
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -860,8 +860,9 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen,
|
|||
if (f == NULL)
|
||||
return NULL;
|
||||
|
||||
if (modifier != DRM_FORMAT_MOD_INVALID && !modifier_is_supported(modifier))
|
||||
return NULL;
|
||||
if (modifier != DRM_FORMAT_MOD_INVALID &&
|
||||
!modifier_is_supported(&screen->devinfo, modifier))
|
||||
return NULL;
|
||||
|
||||
if (f->nplanes == 1)
|
||||
image = intel_allocate_image(screen, f->planes[0].dri_format,
|
||||
|
|
@ -1074,15 +1075,16 @@ intel_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
|
|||
if (f == NULL)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tiling_modifier_map); i++) {
|
||||
if (screen->devinfo.gen < tiling_modifier_map[i].since_gen)
|
||||
for (i = 0; i < ARRAY_SIZE(supported_modifiers); i++) {
|
||||
uint64_t modifier = supported_modifiers[i].modifier;
|
||||
if (!modifier_is_supported(&screen->devinfo, modifier))
|
||||
continue;
|
||||
|
||||
num_mods++;
|
||||
if (max == 0)
|
||||
continue;
|
||||
|
||||
modifiers[num_mods - 1] = tiling_modifier_map[i].modifier;
|
||||
modifiers[num_mods - 1] = modifier;
|
||||
if (num_mods >= max)
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue