From de0885cdb89d77ba21dfaf369bf9aeafc8a99d7b Mon Sep 17 00:00:00 2001 From: Yogesh Mohan Marimuthu Date: Tue, 21 Feb 2023 14:57:49 +0530 Subject: [PATCH] amd/surface: add RADEON_SURF_NO_TEXTURE flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Block compressed + linear format is not supported in addrlib. But these surface can be used as transfer resource. RADEON_SURF_NO_TEXTURE flag indicates not to set flags.texture flag in gfx9_compute_surface(). This will help to fix the vkCreateImage() crash where block compressed + linear format image is requested. v2: combine RADEON_SURF_NO_TEXTURE to below line (Marek Olšák) v1: add RADEON_SURF_NO_TEXTURE flag (Marek Olšák) Reviewed-by: Marek Olšák Part-of: --- src/amd/common/ac_surface.c | 4 +++- src/amd/common/ac_surface.h | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index a918586aca8..49f27467b90 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -2201,7 +2201,9 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ AddrSurfInfoIn.flags.depth = (surf->flags & RADEON_SURF_ZBUFFER) != 0; AddrSurfInfoIn.flags.display = get_display_flag(config, surf); /* flags.texture currently refers to TC-compatible HTILE */ - AddrSurfInfoIn.flags.texture = is_color_surface || surf->flags & RADEON_SURF_TC_COMPATIBLE_HTILE; + AddrSurfInfoIn.flags.texture = !(surf->flags & RADEON_SURF_NO_TEXTURE) && + (is_color_surface || + surf->flags & RADEON_SURF_TC_COMPATIBLE_HTILE); AddrSurfInfoIn.flags.opt4space = 1; AddrSurfInfoIn.flags.prt = (surf->flags & RADEON_SURF_PRT) != 0; diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h index 35fb27fb487..c8d3da7325c 100644 --- a/src/amd/common/ac_surface.h +++ b/src/amd/common/ac_surface.h @@ -89,6 +89,10 @@ enum radeon_micro_mode #define RADEON_SURF_FORCE_MICRO_TILE_MODE (1ull << 31) #define RADEON_SURF_PRT (1ull << 32) #define RADEON_SURF_VRS_RATE (1ull << 33) +/* Block compressed + linear format is not supported in addrlib. These surface can be + * used as transfer resource. This flag indicates not to set flags.texture flag in + * gfx9_compute_surface(). */ +#define RADEON_SURF_NO_TEXTURE (1ull << 34) struct legacy_surf_level { uint32_t offset_256B; /* divided by 256, the hw can only do 40-bit addresses */