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 <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -95,6 +95,7 @@ struct radeon_info {
|
|||||||
uint32_t pipe_interleave_bytes;
|
uint32_t pipe_interleave_bytes;
|
||||||
uint32_t enabled_rb_mask; /* GCN harvest config */
|
uint32_t enabled_rb_mask; /* GCN harvest config */
|
||||||
|
|
||||||
|
uint64_t max_alignment; /* from addrlib */
|
||||||
/* Tile modes. */
|
/* Tile modes. */
|
||||||
uint32_t si_tile_mode_array[32];
|
uint32_t si_tile_mode_array[32];
|
||||||
uint32_t cik_macrotile_mode_array[16];
|
uint32_t cik_macrotile_mode_array[16];
|
||||||
|
@@ -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,
|
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_INPUT addrCreateInput = {0};
|
||||||
ADDR_CREATE_OUTPUT addrCreateOutput = {0};
|
ADDR_CREATE_OUTPUT addrCreateOutput = {0};
|
||||||
ADDR_REGISTER_VALUE regValue = {0};
|
ADDR_REGISTER_VALUE regValue = {0};
|
||||||
ADDR_CREATE_FLAGS createFlags = {{0}};
|
ADDR_CREATE_FLAGS createFlags = {{0}};
|
||||||
|
ADDR_GET_MAX_ALINGMENTS_OUTPUT addrGetMaxAlignmentsOutput = {0};
|
||||||
ADDR_E_RETURNCODE addrRet;
|
ADDR_E_RETURNCODE addrRet;
|
||||||
|
|
||||||
addrCreateInput.size = sizeof(ADDR_CREATE_INPUT);
|
addrCreateInput.size = sizeof(ADDR_CREATE_INPUT);
|
||||||
@@ -202,6 +204,12 @@ ADDR_HANDLE amdgpu_addr_create(const struct radeon_info *info,
|
|||||||
if (addrRet != ADDR_OK)
|
if (addrRet != ADDR_OK)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (max_alignment) {
|
||||||
|
addrRet = AddrGetMaxAlignments(addrCreateOutput.hLib, &addrGetMaxAlignmentsOutput);
|
||||||
|
if (addrRet == ADDR_OK){
|
||||||
|
*max_alignment = addrGetMaxAlignmentsOutput.baseAlign;
|
||||||
|
}
|
||||||
|
}
|
||||||
return addrCreateOutput.hLib;
|
return addrCreateOutput.hLib;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -206,7 +206,8 @@ struct ac_surf_config {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ADDR_HANDLE amdgpu_addr_create(const struct radeon_info *info,
|
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,
|
int ac_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *info,
|
||||||
const struct ac_surf_config * config,
|
const struct ac_surf_config * config,
|
||||||
|
@@ -2134,7 +2134,7 @@ VkResult radv_AllocateMemory(
|
|||||||
if (pAllocateInfo->memoryTypeIndex == RADV_MEM_TYPE_GTT_WRITE_COMBINE)
|
if (pAllocateInfo->memoryTypeIndex == RADV_MEM_TYPE_GTT_WRITE_COMBINE)
|
||||||
flags |= RADEON_FLAG_GTT_WC;
|
flags |= RADEON_FLAG_GTT_WC;
|
||||||
|
|
||||||
mem->bo = device->ws->buffer_create(device->ws, alloc_size, 65536,
|
mem->bo = device->ws->buffer_create(device->ws, alloc_size, device->physical_device->rad_info.max_alignment,
|
||||||
domain, flags);
|
domain, flags);
|
||||||
|
|
||||||
if (!mem->bo) {
|
if (!mem->bo) {
|
||||||
|
@@ -53,7 +53,7 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ws->addrlib = amdgpu_addr_create(&ws->info, &ws->amdinfo);
|
ws->addrlib = amdgpu_addr_create(&ws->info, &ws->amdinfo, &ws->info.max_alignment);
|
||||||
if (!ws->addrlib) {
|
if (!ws->addrlib) {
|
||||||
fprintf(stderr, "amdgpu: Cannot create addrlib.\n");
|
fprintf(stderr, "amdgpu: Cannot create addrlib.\n");
|
||||||
return false;
|
return false;
|
||||||
|
@@ -63,7 +63,7 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ws->addrlib = amdgpu_addr_create(&ws->info, &ws->amdinfo);
|
ws->addrlib = amdgpu_addr_create(&ws->info, &ws->amdinfo, NULL);
|
||||||
if (!ws->addrlib) {
|
if (!ws->addrlib) {
|
||||||
fprintf(stderr, "amdgpu: Cannot create addrlib.\n");
|
fprintf(stderr, "amdgpu: Cannot create addrlib.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
|
Reference in New Issue
Block a user