diff options
author | Dave Airlie <[email protected]> | 2017-07-09 20:34:04 +0100 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2017-07-09 22:17:59 +0100 |
commit | edf2acbeb16112fe002d3f7208018273d413f25c (patch) | |
tree | 4e10163f3c5b54e5242851b608dff1400a3aa9e5 /src/amd/common | |
parent | f3958f1644391ed5f6d14373ac74d4978d8598b7 (diff) |
radv: add support for using addrlib max alignment.
Rather than using 64k, use what addrlib returns as the base
alignment for vulkan allocations.
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/common')
-rw-r--r-- | src/amd/common/ac_gpu_info.h | 1 | ||||
-rw-r--r-- | src/amd/common/ac_surface.c | 10 | ||||
-rw-r--r-- | src/amd/common/ac_surface.h | 3 |
3 files changed, 12 insertions, 2 deletions
diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h index 3091fed6a43..72a85062466 100644 --- a/src/amd/common/ac_gpu_info.h +++ b/src/amd/common/ac_gpu_info.h @@ -95,6 +95,7 @@ struct radeon_info { uint32_t pipe_interleave_bytes; uint32_t enabled_rb_mask; /* GCN harvest config */ + uint64_t max_alignment; /* from addrlib */ /* Tile modes. */ uint32_t si_tile_mode_array[32]; uint32_t cik_macrotile_mode_array[16]; diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 877d592ab81..a4df595653b 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -150,12 +150,14 @@ static ADDR_E_RETURNCODE ADDR_API freeSysMem(const ADDR_FREESYSMEM_INPUT * pInpu } ADDR_HANDLE amdgpu_addr_create(const struct radeon_info *info, - const struct amdgpu_gpu_info *amdinfo) + const struct amdgpu_gpu_info *amdinfo, + uint64_t *max_alignment) { ADDR_CREATE_INPUT addrCreateInput = {0}; ADDR_CREATE_OUTPUT addrCreateOutput = {0}; ADDR_REGISTER_VALUE regValue = {0}; ADDR_CREATE_FLAGS createFlags = {{0}}; + ADDR_GET_MAX_ALINGMENTS_OUTPUT addrGetMaxAlignmentsOutput = {0}; ADDR_E_RETURNCODE addrRet; addrCreateInput.size = sizeof(ADDR_CREATE_INPUT); @@ -202,6 +204,12 @@ ADDR_HANDLE amdgpu_addr_create(const struct radeon_info *info, if (addrRet != ADDR_OK) return NULL; + if (max_alignment) { + addrRet = AddrGetMaxAlignments(addrCreateOutput.hLib, &addrGetMaxAlignmentsOutput); + if (addrRet == ADDR_OK){ + *max_alignment = addrGetMaxAlignmentsOutput.baseAlign; + } + } return addrCreateOutput.hLib; } diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h index 582a67193f8..4d893ff5009 100644 --- a/src/amd/common/ac_surface.h +++ b/src/amd/common/ac_surface.h @@ -206,7 +206,8 @@ struct ac_surf_config { }; ADDR_HANDLE amdgpu_addr_create(const struct radeon_info *info, - const struct amdgpu_gpu_info *amdinfo); + const struct amdgpu_gpu_info *amdinfo, + uint64_t *max_alignment); int ac_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *info, const struct ac_surf_config * config, |