summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2017-05-10 20:40:14 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2017-05-14 23:40:30 +0200
commit62e610c0003aec66431f1166d4cc6081c19517a8 (patch)
tree78d8e530418496f201da408dcb4f0d134b80893e
parent13b69589ef66451309e359f715bed35f9273a25f (diff)
ac/radeonsi: add ac_compute_surface to automatically switch gfx6 vs. gfx9
-rw-r--r--src/amd/common/ac_surface.c27
-rw-r--r--src/amd/common/ac_surface.h12
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_surface.c5
3 files changed, 24 insertions, 20 deletions
diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index a7516603e2..f0138b5f8b 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -358,10 +358,10 @@ static unsigned cik_get_macro_tile_index(struct radeon_surf *surf)
* The following fields of \p surf must be initialized by the caller:
* blk_w, blk_h, bpe, flags.
*/
-int gfx6_compute_surface(ADDR_HANDLE addrlib,
- const struct ac_surf_config *config,
- enum radeon_surf_mode mode,
- struct radeon_surf *surf)
+static int gfx6_compute_surface(ADDR_HANDLE addrlib,
+ const struct ac_surf_config *config,
+ enum radeon_surf_mode mode,
+ struct radeon_surf *surf)
{
unsigned level;
bool compressed;
@@ -843,10 +843,10 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib,
return 0;
}
-int gfx9_compute_surface(ADDR_HANDLE addrlib,
- const struct ac_surf_config *config,
- enum radeon_surf_mode mode,
- struct radeon_surf *surf)
+static int gfx9_compute_surface(ADDR_HANDLE addrlib,
+ const struct ac_surf_config *config,
+ enum radeon_surf_mode mode,
+ struct radeon_surf *surf)
{
bool compressed;
ADDR2_COMPUTE_SURFACE_INFO_INPUT AddrSurfInfoIn = {0};
@@ -1006,3 +1006,14 @@ int gfx9_compute_surface(ADDR_HANDLE addrlib,
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);
+}
diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h
index 9a9697b77d..73649c76a1 100644
--- a/src/amd/common/ac_surface.h
+++ b/src/amd/common/ac_surface.h
@@ -204,13 +204,9 @@ struct ac_surf_config {
ADDR_HANDLE amdgpu_addr_create(enum radeon_family family,
const struct amdgpu_gpu_info *info);
-int gfx6_compute_surface(ADDR_HANDLE addrlib,
- const struct ac_surf_config *config,
- enum radeon_surf_mode mode,
- 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);
+int ac_compute_surface(ADDR_HANDLE addrlib,
+ const struct ac_surf_config * config,
+ enum radeon_surf_mode mode,
+ struct radeon_surf *surf);
#endif /* AC_SURFACE_H */
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
index 76596e8daf..ca391e0c4e 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
@@ -113,10 +113,7 @@ static int amdgpu_surface_init(struct radeon_winsys *rws,
config.pipe_interleave_bytes = ws->info.pipe_interleave_bytes;
config.amdinfo = &ws->amdinfo;
- if (ws->info.chip_class >= GFX9)
- return gfx9_compute_surface(ws->addrlib, &config, mode, surf);
- else
- return gfx6_compute_surface(ws->addrlib, &config, mode, surf);
+ return ac_compute_surface(ws->addrlib, &config, mode, surf);
}
void amdgpu_surface_init_functions(struct amdgpu_winsys *ws)