diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 982e169f365..20e9a8c6494 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -2518,6 +2518,12 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ break; } + /* VCN only supports 256B_D. */ + if (surf->flags & RADEON_SURF_VIDEO_REFERENCE) { + AddrSurfInfoIn.swizzleMode = ADDR_SW_256B_D; + break; + } + r = gfx9_get_preferred_swizzle_mode(addrlib->handle, info, surf, &AddrSurfInfoIn, false, &AddrSurfInfoIn.swizzleMode); if (r) @@ -3247,6 +3253,8 @@ static bool gfx12_compute_surface(struct ac_addrlib *addrlib, const struct radeo AddrSurfInfoIn.swizzleMode = ADDR3_LINEAR; } else if (config->is_1d && !(surf->flags & RADEON_SURF_Z_OR_SBUFFER)) { AddrSurfInfoIn.swizzleMode = ADDR3_LINEAR; + } else if (surf->flags & RADEON_SURF_VIDEO_REFERENCE) { + AddrSurfInfoIn.swizzleMode = ADDR3_256B_2D; } else { AddrSurfInfoIn.swizzleMode = gfx12_select_swizzle_mode(addrlib, info, surf, &AddrSurfInfoIn); } diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h index 11e8bb4c599..3637e20e1cf 100644 --- a/src/amd/common/ac_surface.h +++ b/src/amd/common/ac_surface.h @@ -78,6 +78,7 @@ enum radeon_micro_mode #define RADEON_SURF_NO_STENCIL_ADJUST (1ull << 35) #define RADEON_SURF_PREFER_4K_ALIGNMENT (1ull << 36) #define RADEON_SURF_PREFER_64K_ALIGNMENT (1ull << 37) +#define RADEON_SURF_VIDEO_REFERENCE (1ull << 38) enum radeon_enc_hevc_surface_alignment {