etnaviv: Support PIPE_FORMAT_S8_UINT stencil format

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37014>
This commit is contained in:
Christian Gmeiner 2025-08-26 01:07:03 +02:00 committed by Marge Bot
parent fda092729d
commit 2a5d515922
3 changed files with 20 additions and 1 deletions

View file

@ -502,6 +502,15 @@ gpu_supports_vertex_format(struct etna_screen *screen, enum pipe_format format)
return true;
}
static bool
gpu_supports_depth_stencil_format(struct etna_screen *screen, enum pipe_format format)
{
if (format == PIPE_FORMAT_S8_UINT)
return VIV_FEATURE(screen, ETNA_FEATURE_S8);
return true;
}
static bool
etna_screen_is_format_supported(struct pipe_screen *pscreen,
enum pipe_format format,
@ -529,7 +538,12 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen,
}
if (usage & PIPE_BIND_DEPTH_STENCIL) {
if (translate_depth_format(format) != ETNA_NO_MATCH)
uint32_t fmt = translate_depth_format(format);
if (!gpu_supports_depth_stencil_format(screen, format))
fmt = ETNA_NO_MATCH;
if (fmt != ETNA_NO_MATCH)
allowed |= PIPE_BIND_DEPTH_STENCIL;
}

View file

@ -343,6 +343,9 @@ etna_set_framebuffer_state(struct pipe_context *pctx,
/* VIVS_PE_DEPTH_CONFIG_ONLY_DEPTH */
/* merged with depth_stencil_alpha */
if (surf->format == PIPE_FORMAT_S8_UINT)
pe_logic_op |= VIVS_PE_LOGIC_OP_UNK20(1);
for (int i = 0; i < screen->specs.pixel_pipes; i++) {
cs->PE_PIPE_DEPTH_ADDR[i].bo = res->bo;
cs->PE_PIPE_DEPTH_ADDR[i].offset = level->offset + surf->first_layer * level->layer_stride;

View file

@ -233,6 +233,8 @@ translate_depth_format(enum pipe_format fmt)
return VIVS_PE_DEPTH_CONFIG_DEPTH_FORMAT_D24S8;
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
return VIVS_PE_DEPTH_CONFIG_DEPTH_FORMAT_D24S8;
case PIPE_FORMAT_S8_UINT:
return VIVS_PE_DEPTH_CONFIG_DEPTH_FORMAT_D24S8;
default:
return ETNA_NO_MATCH;
}