ac/radeonsi: add ac_compute_surface to automatically switch gfx6 vs. gfx9

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2017-05-10 20:40:14 +02:00
parent 8aabed64c3
commit 00f466bad9
3 changed files with 24 additions and 20 deletions

View file

@ -362,10 +362,10 @@ static unsigned cik_get_macro_tile_index(struct radeon_surf *surf)
* The following fields of \p surf must be initialized by the caller: * The following fields of \p surf must be initialized by the caller:
* blk_w, blk_h, bpe, flags. * blk_w, blk_h, bpe, flags.
*/ */
int gfx6_compute_surface(ADDR_HANDLE addrlib, static int gfx6_compute_surface(ADDR_HANDLE addrlib,
const struct ac_surf_config *config, const struct ac_surf_config *config,
enum radeon_surf_mode mode, enum radeon_surf_mode mode,
struct radeon_surf *surf) struct radeon_surf *surf)
{ {
unsigned level; unsigned level;
bool compressed; bool compressed;
@ -847,10 +847,10 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib,
return 0; return 0;
} }
int gfx9_compute_surface(ADDR_HANDLE addrlib, static int gfx9_compute_surface(ADDR_HANDLE addrlib,
const struct ac_surf_config *config, const struct ac_surf_config *config,
enum radeon_surf_mode mode, enum radeon_surf_mode mode,
struct radeon_surf *surf) struct radeon_surf *surf)
{ {
bool compressed; bool compressed;
ADDR2_COMPUTE_SURFACE_INFO_INPUT AddrSurfInfoIn = {0}; ADDR2_COMPUTE_SURFACE_INFO_INPUT AddrSurfInfoIn = {0};
@ -1010,3 +1010,14 @@ int gfx9_compute_surface(ADDR_HANDLE addrlib,
return 0; return 0;
} }
int ac_compute_surface(ADDR_HANDLE addrlib,
const struct ac_surf_config *config,
enum radeon_surf_mode mode,
struct radeon_surf *surf)
{
if (config->chip_class >= GFX9)
return gfx9_compute_surface(addrlib, config, mode, surf);
else
return gfx6_compute_surface(addrlib, config, mode, surf);
}

View file

@ -204,13 +204,9 @@ struct ac_surf_config {
ADDR_HANDLE amdgpu_addr_create(enum radeon_family family, ADDR_HANDLE amdgpu_addr_create(enum radeon_family family,
const struct amdgpu_gpu_info *info); const struct amdgpu_gpu_info *info);
int gfx6_compute_surface(ADDR_HANDLE addrlib, int ac_compute_surface(ADDR_HANDLE addrlib,
const struct ac_surf_config *config, const struct ac_surf_config * config,
enum radeon_surf_mode mode, enum radeon_surf_mode mode,
struct radeon_surf *surf); struct radeon_surf *surf);
int gfx9_compute_surface(ADDR_HANDLE addrlib,
const struct ac_surf_config *config,
enum radeon_surf_mode mode,
struct radeon_surf *surf);
#endif /* AC_SURFACE_H */ #endif /* AC_SURFACE_H */

View file

@ -113,10 +113,7 @@ static int amdgpu_surface_init(struct radeon_winsys *rws,
config.pipe_interleave_bytes = ws->info.pipe_interleave_bytes; config.pipe_interleave_bytes = ws->info.pipe_interleave_bytes;
config.amdinfo = &ws->amdinfo; config.amdinfo = &ws->amdinfo;
if (ws->info.chip_class >= GFX9) return ac_compute_surface(ws->addrlib, &config, mode, surf);
return gfx9_compute_surface(ws->addrlib, &config, mode, surf);
else
return gfx6_compute_surface(ws->addrlib, &config, mode, surf);
} }
void amdgpu_surface_init_functions(struct amdgpu_winsys *ws) void amdgpu_surface_init_functions(struct amdgpu_winsys *ws)