mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 10:10:09 +01:00
turnip: handle ubwc in blit_base_format
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21117>
This commit is contained in:
parent
3c4eea2aab
commit
6a76bd8d4c
1 changed files with 16 additions and 14 deletions
|
|
@ -105,8 +105,19 @@ blit_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode)
|
|||
}
|
||||
|
||||
static enum a6xx_format
|
||||
blit_base_format(enum pipe_format format)
|
||||
blit_base_format(enum pipe_format format, bool ubwc)
|
||||
{
|
||||
if (ubwc) {
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_Z24X8_UNORM:
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
/* use the ubwc-compatible FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 */
|
||||
return FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* note: tu6_format_color doesn't care about tiling for .fmt field */
|
||||
return blit_format_color(format, TILE6_LINEAR).fmt;
|
||||
}
|
||||
|
|
@ -379,17 +390,12 @@ r2d_setup_common(struct tu_cmd_buffer *cmd,
|
|||
bool ubwc,
|
||||
bool scissor)
|
||||
{
|
||||
enum a6xx_format fmt = blit_base_format(dst_format);
|
||||
enum a6xx_format fmt = blit_base_format(dst_format, ubwc);
|
||||
fixup_dst_format(src_format, &dst_format, &fmt);
|
||||
enum a6xx_2d_ifmt ifmt = format_to_ifmt(dst_format);
|
||||
|
||||
uint32_t unknown_8c01 = 0;
|
||||
|
||||
if ((dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT ||
|
||||
dst_format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) {
|
||||
fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
|
||||
}
|
||||
|
||||
/* note: the only format with partial clearing is D24S8 */
|
||||
if (dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT) {
|
||||
/* preserve stencil channel */
|
||||
|
|
@ -1218,14 +1224,9 @@ r3d_setup(struct tu_cmd_buffer *cmd,
|
|||
bool ubwc,
|
||||
VkSampleCountFlagBits samples)
|
||||
{
|
||||
enum a6xx_format fmt = blit_base_format(dst_format);
|
||||
enum a6xx_format fmt = blit_base_format(dst_format, ubwc);
|
||||
fixup_dst_format(src_format, &dst_format, &fmt);
|
||||
|
||||
if ((dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT ||
|
||||
dst_format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) {
|
||||
fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
|
||||
}
|
||||
|
||||
if (!cmd->state.pass) {
|
||||
tu_emit_cache_flush_ccu(cmd, cs, TU_CMD_CCU_SYSMEM);
|
||||
tu6_emit_window_scissor(cs, 0, 0, 0x3fff, 0x3fff);
|
||||
|
|
@ -2750,7 +2751,8 @@ clear_gmem_attachment(struct tu_cmd_buffer *cmd,
|
|||
const VkClearValue *value)
|
||||
{
|
||||
tu_cs_emit_pkt4(cs, REG_A6XX_RB_BLIT_DST_INFO, 1);
|
||||
tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(blit_base_format(format)));
|
||||
tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(
|
||||
blit_base_format(format, false)));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_BLIT_INFO(.gmem = 1, .clear_mask = clear_mask));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue