radeonsi: remove workarounds for radeon DRM < 2.45.0
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17411>
This commit is contained in:
parent
b2455e1ccb
commit
abd188ec1c
|
@ -888,22 +888,15 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info,
|
||||||
info->has_timeline_syncobj = has_timeline_syncobj(fd);
|
info->has_timeline_syncobj = has_timeline_syncobj(fd);
|
||||||
info->has_fence_to_handle = info->has_syncobj && info->drm_minor >= 21;
|
info->has_fence_to_handle = info->has_syncobj && info->drm_minor >= 21;
|
||||||
info->has_local_buffers = info->drm_minor >= 20;
|
info->has_local_buffers = info->drm_minor >= 20;
|
||||||
info->kernel_flushes_hdp_before_ib = true;
|
|
||||||
info->htile_cmask_support_1d_tiling = true;
|
|
||||||
info->si_TA_CS_BC_BASE_ADDR_allowed = true;
|
info->si_TA_CS_BC_BASE_ADDR_allowed = true;
|
||||||
info->has_bo_metadata = true;
|
info->has_bo_metadata = true;
|
||||||
info->has_gpu_reset_status_query = true;
|
|
||||||
info->has_eqaa_surface_allocator = info->gfx_level < GFX11;
|
info->has_eqaa_surface_allocator = info->gfx_level < GFX11;
|
||||||
info->has_format_bc1_through_bc7 = true;
|
|
||||||
info->has_indirect_compute_dispatch = true;
|
|
||||||
/* GFX6 doesn't support unaligned loads. */
|
/* GFX6 doesn't support unaligned loads. */
|
||||||
info->has_unaligned_shader_loads = info->gfx_level != GFX6;
|
info->has_unaligned_shader_loads = info->gfx_level != GFX6;
|
||||||
/* Disable sparse mappings on GFX6 due to VM faults in CP DMA. Enable them once
|
/* Disable sparse mappings on GFX6 due to VM faults in CP DMA. Enable them once
|
||||||
* these faults are mitigated in software.
|
* these faults are mitigated in software.
|
||||||
*/
|
*/
|
||||||
info->has_sparse_vm_mappings = info->gfx_level >= GFX7 && info->drm_minor >= 13;
|
info->has_sparse_vm_mappings = info->gfx_level >= GFX7 && info->drm_minor >= 13;
|
||||||
info->has_2d_tiling = true;
|
|
||||||
info->has_read_registers_query = true;
|
|
||||||
info->has_scheduled_fence_dependency = info->drm_minor >= 28;
|
info->has_scheduled_fence_dependency = info->drm_minor >= 28;
|
||||||
info->mid_command_buffer_preemption_enabled = amdinfo->ids_flags & AMDGPU_IDS_FLAGS_PREEMPTION;
|
info->mid_command_buffer_preemption_enabled = amdinfo->ids_flags & AMDGPU_IDS_FLAGS_PREEMPTION;
|
||||||
info->has_tmz_support = has_tmz_support(dev, info, amdinfo);
|
info->has_tmz_support = has_tmz_support(dev, info, amdinfo);
|
||||||
|
@ -1498,18 +1491,11 @@ void ac_print_gpu_info(struct radeon_info *info, FILE *f)
|
||||||
fprintf(f, " has_timeline_syncobj = %u\n", info->has_timeline_syncobj);
|
fprintf(f, " has_timeline_syncobj = %u\n", info->has_timeline_syncobj);
|
||||||
fprintf(f, " has_fence_to_handle = %u\n", info->has_fence_to_handle);
|
fprintf(f, " has_fence_to_handle = %u\n", info->has_fence_to_handle);
|
||||||
fprintf(f, " has_local_buffers = %u\n", info->has_local_buffers);
|
fprintf(f, " has_local_buffers = %u\n", info->has_local_buffers);
|
||||||
fprintf(f, " kernel_flushes_hdp_before_ib = %u\n", info->kernel_flushes_hdp_before_ib);
|
|
||||||
fprintf(f, " htile_cmask_support_1d_tiling = %u\n", info->htile_cmask_support_1d_tiling);
|
|
||||||
fprintf(f, " si_TA_CS_BC_BASE_ADDR_allowed = %u\n", info->si_TA_CS_BC_BASE_ADDR_allowed);
|
fprintf(f, " si_TA_CS_BC_BASE_ADDR_allowed = %u\n", info->si_TA_CS_BC_BASE_ADDR_allowed);
|
||||||
fprintf(f, " has_bo_metadata = %u\n", info->has_bo_metadata);
|
fprintf(f, " has_bo_metadata = %u\n", info->has_bo_metadata);
|
||||||
fprintf(f, " has_gpu_reset_status_query = %u\n", info->has_gpu_reset_status_query);
|
|
||||||
fprintf(f, " has_eqaa_surface_allocator = %u\n", info->has_eqaa_surface_allocator);
|
fprintf(f, " has_eqaa_surface_allocator = %u\n", info->has_eqaa_surface_allocator);
|
||||||
fprintf(f, " has_format_bc1_through_bc7 = %u\n", info->has_format_bc1_through_bc7);
|
|
||||||
fprintf(f, " has_indirect_compute_dispatch = %u\n", info->has_indirect_compute_dispatch);
|
|
||||||
fprintf(f, " has_unaligned_shader_loads = %u\n", info->has_unaligned_shader_loads);
|
fprintf(f, " has_unaligned_shader_loads = %u\n", info->has_unaligned_shader_loads);
|
||||||
fprintf(f, " has_sparse_vm_mappings = %u\n", info->has_sparse_vm_mappings);
|
fprintf(f, " has_sparse_vm_mappings = %u\n", info->has_sparse_vm_mappings);
|
||||||
fprintf(f, " has_2d_tiling = %u\n", info->has_2d_tiling);
|
|
||||||
fprintf(f, " has_read_registers_query = %u\n", info->has_read_registers_query);
|
|
||||||
fprintf(f, " has_stable_pstate = %u\n", info->has_stable_pstate);
|
fprintf(f, " has_stable_pstate = %u\n", info->has_stable_pstate);
|
||||||
fprintf(f, " has_scheduled_fence_dependency = %u\n", info->has_scheduled_fence_dependency);
|
fprintf(f, " has_scheduled_fence_dependency = %u\n", info->has_scheduled_fence_dependency);
|
||||||
fprintf(f, " mid_command_buffer_preemption_enabled = %u\n",
|
fprintf(f, " mid_command_buffer_preemption_enabled = %u\n",
|
||||||
|
|
|
@ -183,18 +183,11 @@ struct radeon_info {
|
||||||
bool has_timeline_syncobj;
|
bool has_timeline_syncobj;
|
||||||
bool has_fence_to_handle;
|
bool has_fence_to_handle;
|
||||||
bool has_local_buffers;
|
bool has_local_buffers;
|
||||||
bool kernel_flushes_hdp_before_ib;
|
|
||||||
bool htile_cmask_support_1d_tiling;
|
|
||||||
bool si_TA_CS_BC_BASE_ADDR_allowed;
|
bool si_TA_CS_BC_BASE_ADDR_allowed;
|
||||||
bool has_bo_metadata;
|
bool has_bo_metadata;
|
||||||
bool has_gpu_reset_status_query;
|
|
||||||
bool has_eqaa_surface_allocator;
|
bool has_eqaa_surface_allocator;
|
||||||
bool has_format_bc1_through_bc7;
|
|
||||||
bool has_indirect_compute_dispatch;
|
|
||||||
bool has_unaligned_shader_loads;
|
bool has_unaligned_shader_loads;
|
||||||
bool has_sparse_vm_mappings;
|
bool has_sparse_vm_mappings;
|
||||||
bool has_2d_tiling;
|
|
||||||
bool has_read_registers_query;
|
|
||||||
bool has_scheduled_fence_dependency;
|
bool has_scheduled_fence_dependency;
|
||||||
bool has_stable_pstate;
|
bool has_stable_pstate;
|
||||||
/* Whether SR-IOV is enabled or amdgpu.mcbp=1 was set on the kernel command line. */
|
/* Whether SR-IOV is enabled or amdgpu.mcbp=1 was set on the kernel command line. */
|
||||||
|
|
|
@ -67,15 +67,6 @@ void si_init_resource_fields(struct si_screen *sscreen, struct si_resource *res,
|
||||||
res->domains = RADEON_DOMAIN_GTT;
|
res->domains = RADEON_DOMAIN_GTT;
|
||||||
break;
|
break;
|
||||||
case PIPE_USAGE_DYNAMIC:
|
case PIPE_USAGE_DYNAMIC:
|
||||||
/* Older kernels didn't always flush the HDP cache before
|
|
||||||
* CS execution
|
|
||||||
*/
|
|
||||||
if (!sscreen->info.kernel_flushes_hdp_before_ib) {
|
|
||||||
res->domains = RADEON_DOMAIN_GTT;
|
|
||||||
res->flags |= RADEON_FLAG_GTT_WC;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FALLTHROUGH;
|
|
||||||
case PIPE_USAGE_DEFAULT:
|
case PIPE_USAGE_DEFAULT:
|
||||||
case PIPE_USAGE_IMMUTABLE:
|
case PIPE_USAGE_IMMUTABLE:
|
||||||
default:
|
default:
|
||||||
|
@ -98,7 +89,7 @@ void si_init_resource_fields(struct si_screen *sscreen, struct si_resource *res,
|
||||||
* radeon doesn't have good BO move throttling, so put all
|
* radeon doesn't have good BO move throttling, so put all
|
||||||
* persistent buffers into GTT to prevent VRAM CPU page faults.
|
* persistent buffers into GTT to prevent VRAM CPU page faults.
|
||||||
*/
|
*/
|
||||||
if (!sscreen->info.kernel_flushes_hdp_before_ib || !sscreen->info.is_amdgpu)
|
if (!sscreen->info.is_amdgpu)
|
||||||
res->domains = RADEON_DOMAIN_GTT;
|
res->domains = RADEON_DOMAIN_GTT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -713,10 +713,6 @@ static void si_fast_clear(struct si_context *sctx, unsigned *buffers,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sctx->gfx_level <= GFX8 && tex->surface.u.legacy.level[0].mode == RADEON_SURF_MODE_1D &&
|
|
||||||
!sctx->screen->info.htile_cmask_support_1d_tiling)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Use a slow clear for small surfaces where the cost of
|
/* Use a slow clear for small surfaces where the cost of
|
||||||
* the eliminate pass can be higher than the benefit of fast
|
* the eliminate pass can be higher than the benefit of fast
|
||||||
* clear. The closed driver does this, but the numbers may differ.
|
* clear. The closed driver does this, but the numbers may differ.
|
||||||
|
|
|
@ -302,9 +302,6 @@ static void si_dump_mmapped_reg(struct si_context *sctx, FILE *f, unsigned offse
|
||||||
|
|
||||||
static void si_dump_debug_registers(struct si_context *sctx, FILE *f)
|
static void si_dump_debug_registers(struct si_context *sctx, FILE *f)
|
||||||
{
|
{
|
||||||
if (!sctx->screen->info.has_read_registers_query)
|
|
||||||
return;
|
|
||||||
|
|
||||||
fprintf(f, "Memory-mapped registers:\n");
|
fprintf(f, "Memory-mapped registers:\n");
|
||||||
si_dump_mmapped_reg(sctx, f, R_008010_GRBM_STATUS);
|
si_dump_mmapped_reg(sctx, f, R_008010_GRBM_STATUS);
|
||||||
|
|
||||||
|
|
|
@ -166,6 +166,8 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
case PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER:
|
case PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER:
|
||||||
case PIPE_CAP_QUERY_SO_OVERFLOW:
|
case PIPE_CAP_QUERY_SO_OVERFLOW:
|
||||||
case PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS:
|
case PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS:
|
||||||
|
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||||
|
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||||
|
@ -195,15 +197,9 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||||
return !SI_BIG_ENDIAN && sscreen->info.has_userptr;
|
return !SI_BIG_ENDIAN && sscreen->info.has_userptr;
|
||||||
|
|
||||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
|
||||||
return sscreen->info.has_gpu_reset_status_query;
|
|
||||||
|
|
||||||
case PIPE_CAP_DEVICE_PROTECTED_CONTENT:
|
case PIPE_CAP_DEVICE_PROTECTED_CONTENT:
|
||||||
return sscreen->info.has_tmz_support;
|
return sscreen->info.has_tmz_support;
|
||||||
|
|
||||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
|
||||||
return sscreen->info.has_2d_tiling;
|
|
||||||
|
|
||||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||||
return SI_MAP_BUFFER_ALIGNMENT;
|
return SI_MAP_BUFFER_ALIGNMENT;
|
||||||
|
|
||||||
|
@ -221,8 +217,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
|
|
||||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||||
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
|
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
|
||||||
if (!sscreen->info.has_indirect_compute_dispatch)
|
|
||||||
return 420;
|
|
||||||
return 460;
|
return 460;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
||||||
|
@ -475,9 +469,8 @@ static int si_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_typ
|
||||||
case PIPE_SHADER_CAP_SUPPORTED_IRS:
|
case PIPE_SHADER_CAP_SUPPORTED_IRS:
|
||||||
if (shader == PIPE_SHADER_COMPUTE) {
|
if (shader == PIPE_SHADER_COMPUTE) {
|
||||||
return (1 << PIPE_SHADER_IR_NATIVE) |
|
return (1 << PIPE_SHADER_IR_NATIVE) |
|
||||||
(sscreen->info.has_indirect_compute_dispatch ?
|
(1 << PIPE_SHADER_IR_NIR) |
|
||||||
(1 << PIPE_SHADER_IR_NIR) |
|
(1 << PIPE_SHADER_IR_TGSI);
|
||||||
(1 << PIPE_SHADER_IR_TGSI) : 0);
|
|
||||||
}
|
}
|
||||||
return (1 << PIPE_SHADER_IR_TGSI) |
|
return (1 << PIPE_SHADER_IR_TGSI) |
|
||||||
(1 << PIPE_SHADER_IR_NIR);
|
(1 << PIPE_SHADER_IR_NIR);
|
||||||
|
|
|
@ -1853,12 +1853,10 @@ static unsigned si_get_num_queries(struct si_screen *sscreen)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* radeon */
|
/* radeon */
|
||||||
if (sscreen->info.has_read_registers_query) {
|
if (sscreen->info.gfx_level == GFX7)
|
||||||
if (sscreen->info.gfx_level == GFX7)
|
return ARRAY_SIZE(si_driver_query_list) - 6;
|
||||||
return ARRAY_SIZE(si_driver_query_list) - 6;
|
else
|
||||||
else
|
return ARRAY_SIZE(si_driver_query_list) - 7;
|
||||||
return ARRAY_SIZE(si_driver_query_list) - 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ARRAY_SIZE(si_driver_query_list) - 21;
|
return ARRAY_SIZE(si_driver_query_list) - 21;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1868,9 +1868,6 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen, enum pipe_for
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc->layout == UTIL_FORMAT_LAYOUT_RGTC) {
|
if (desc->layout == UTIL_FORMAT_LAYOUT_RGTC) {
|
||||||
if (!sscreen->info.has_format_bc1_through_bc7)
|
|
||||||
goto out_unknown;
|
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case PIPE_FORMAT_RGTC1_SNORM:
|
case PIPE_FORMAT_RGTC1_SNORM:
|
||||||
case PIPE_FORMAT_LATC1_SNORM:
|
case PIPE_FORMAT_LATC1_SNORM:
|
||||||
|
@ -1913,9 +1910,6 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen, enum pipe_for
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc->layout == UTIL_FORMAT_LAYOUT_BPTC) {
|
if (desc->layout == UTIL_FORMAT_LAYOUT_BPTC) {
|
||||||
if (!sscreen->info.has_format_bc1_through_bc7)
|
|
||||||
goto out_unknown;
|
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case PIPE_FORMAT_BPTC_RGBA_UNORM:
|
case PIPE_FORMAT_BPTC_RGBA_UNORM:
|
||||||
case PIPE_FORMAT_BPTC_SRGBA:
|
case PIPE_FORMAT_BPTC_SRGBA:
|
||||||
|
@ -1942,9 +1936,6 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen, enum pipe_for
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc->layout == UTIL_FORMAT_LAYOUT_S3TC) {
|
if (desc->layout == UTIL_FORMAT_LAYOUT_S3TC) {
|
||||||
if (!sscreen->info.has_format_bc1_through_bc7)
|
|
||||||
goto out_unknown;
|
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case PIPE_FORMAT_DXT1_RGB:
|
case PIPE_FORMAT_DXT1_RGB:
|
||||||
case PIPE_FORMAT_DXT1_RGBA:
|
case PIPE_FORMAT_DXT1_RGBA:
|
||||||
|
|
|
@ -293,10 +293,6 @@ static void si_compute_htile(const struct radeon_info *info,
|
||||||
surf->flags & RADEON_SURF_NO_HTILE)
|
surf->flags & RADEON_SURF_NO_HTILE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (surf->u.legacy.level[0].mode == RADEON_SURF_MODE_1D &&
|
|
||||||
!info->htile_cmask_support_1d_tiling)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Overalign HTILE on P2 configs to work around GPU hangs in
|
/* Overalign HTILE on P2 configs to work around GPU hangs in
|
||||||
* piglit/depthstencil-render-miplevels 585.
|
* piglit/depthstencil-render-miplevels 585.
|
||||||
*
|
*
|
||||||
|
|
|
@ -570,21 +570,13 @@ static bool do_winsys_init(struct radeon_drm_winsys *ws)
|
||||||
ws->accel_working2 < 3);
|
ws->accel_working2 < 3);
|
||||||
ws->info.tcc_cache_line_size = 64; /* TC L2 line size on GCN */
|
ws->info.tcc_cache_line_size = 64; /* TC L2 line size on GCN */
|
||||||
ws->info.ib_alignment = 4096;
|
ws->info.ib_alignment = 4096;
|
||||||
ws->info.kernel_flushes_hdp_before_ib = true;
|
|
||||||
/* HTILE is broken with 1D tiling on old kernels and GFX7. */
|
|
||||||
ws->info.htile_cmask_support_1d_tiling = true;
|
|
||||||
ws->info.si_TA_CS_BC_BASE_ADDR_allowed = ws->info.drm_minor >= 48;
|
ws->info.si_TA_CS_BC_BASE_ADDR_allowed = ws->info.drm_minor >= 48;
|
||||||
ws->info.has_bo_metadata = false;
|
ws->info.has_bo_metadata = false;
|
||||||
ws->info.has_gpu_reset_status_query = true;
|
|
||||||
ws->info.has_eqaa_surface_allocator = false;
|
ws->info.has_eqaa_surface_allocator = false;
|
||||||
ws->info.has_format_bc1_through_bc7 = true;
|
|
||||||
ws->info.has_indirect_compute_dispatch = true;
|
|
||||||
/* GFX6 doesn't support unaligned loads. */
|
/* GFX6 doesn't support unaligned loads. */
|
||||||
ws->info.has_unaligned_shader_loads = ws->info.gfx_level == GFX7 &&
|
ws->info.has_unaligned_shader_loads = ws->info.gfx_level == GFX7 &&
|
||||||
ws->info.drm_minor >= 50;
|
ws->info.drm_minor >= 50;
|
||||||
ws->info.has_sparse_vm_mappings = false;
|
ws->info.has_sparse_vm_mappings = false;
|
||||||
ws->info.has_2d_tiling = true;
|
|
||||||
ws->info.has_read_registers_query = true;
|
|
||||||
ws->info.max_alignment = 1024*1024;
|
ws->info.max_alignment = 1024*1024;
|
||||||
ws->info.has_graphics = true;
|
ws->info.has_graphics = true;
|
||||||
ws->info.cpdma_prefetch_writes_memory = true;
|
ws->info.cpdma_prefetch_writes_memory = true;
|
||||||
|
@ -669,9 +661,6 @@ uint32_t radeon_drm_get_gpu_reset_counter(struct radeon_drm_winsys *ws)
|
||||||
{
|
{
|
||||||
uint64_t retval = 0;
|
uint64_t retval = 0;
|
||||||
|
|
||||||
if (!ws->info.has_gpu_reset_status_query)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
radeon_get_drm_value(ws->fd, RADEON_INFO_GPU_RESET_COUNTER,
|
radeon_get_drm_value(ws->fd, RADEON_INFO_GPU_RESET_COUNTER,
|
||||||
"gpu-reset-counter", (uint32_t*)&retval);
|
"gpu-reset-counter", (uint32_t*)&retval);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Loading…
Reference in New Issue