radv: make sure to not submit any IBs when RADV_FORCE_FAMILY is set
To prevent GPU hangs. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3654>
This commit is contained in:
@@ -583,6 +583,8 @@ Mesa EGL supports different sets of environment variables. See the
|
|||||||
<dd>disable memory shaders cache</dd>
|
<dd>disable memory shaders cache</dd>
|
||||||
<dt><code>nongg</code></dt>
|
<dt><code>nongg</code></dt>
|
||||||
<dd>disable NGG for GFX10+</dd>
|
<dd>disable NGG for GFX10+</dd>
|
||||||
|
<dt><code>noop</code></dt>
|
||||||
|
<dd>do not submit any IBs</dd>
|
||||||
<dt><code>nooutoforder</code></dt>
|
<dt><code>nooutoforder</code></dt>
|
||||||
<dd>disable out-of-order rasterization</dd>
|
<dd>disable out-of-order rasterization</dd>
|
||||||
<dt><code>noshaderballot</code></dt>
|
<dt><code>noshaderballot</code></dt>
|
||||||
|
@@ -57,6 +57,7 @@ enum {
|
|||||||
RADV_DEBUG_ALL_ENTRYPOINTS = 0x4000000,
|
RADV_DEBUG_ALL_ENTRYPOINTS = 0x4000000,
|
||||||
RADV_DEBUG_DUMP_META_SHADERS = 0x8000000,
|
RADV_DEBUG_DUMP_META_SHADERS = 0x8000000,
|
||||||
RADV_DEBUG_NO_MEMORY_CACHE = 0x10000000,
|
RADV_DEBUG_NO_MEMORY_CACHE = 0x10000000,
|
||||||
|
RADV_DEBUG_NOOP = 0x20000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@@ -312,6 +312,8 @@ radv_handle_env_var_force_family(struct radv_physical_device *device)
|
|||||||
else
|
else
|
||||||
device->rad_info.chip_class = GFX6;
|
device->rad_info.chip_class = GFX6;
|
||||||
|
|
||||||
|
/* Don't submit any IBs. */
|
||||||
|
device->instance->debug_flags |= RADV_DEBUG_NOOP;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -560,6 +562,7 @@ static const struct debug_control radv_debug_options[] = {
|
|||||||
{"allentrypoints", RADV_DEBUG_ALL_ENTRYPOINTS},
|
{"allentrypoints", RADV_DEBUG_ALL_ENTRYPOINTS},
|
||||||
{"metashaders", RADV_DEBUG_DUMP_META_SHADERS},
|
{"metashaders", RADV_DEBUG_DUMP_META_SHADERS},
|
||||||
{"nomemorycache", RADV_DEBUG_NO_MEMORY_CACHE},
|
{"nomemorycache", RADV_DEBUG_NO_MEMORY_CACHE},
|
||||||
|
{"noop", RADV_DEBUG_NOOP},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1235,6 +1235,9 @@ static int radv_amdgpu_winsys_cs_submit(struct radeon_winsys_ctx *_ctx,
|
|||||||
struct radv_amdgpu_ctx *ctx = radv_amdgpu_ctx(_ctx);
|
struct radv_amdgpu_ctx *ctx = radv_amdgpu_ctx(_ctx);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (cs->ws->noop)
|
||||||
|
abort();
|
||||||
|
|
||||||
assert(sem_info);
|
assert(sem_info);
|
||||||
if (!cs->ws->use_ib_bos) {
|
if (!cs->ws->use_ib_bos) {
|
||||||
ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, sem_info, bo_list, cs_array,
|
ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, sem_info, bo_list, cs_array,
|
||||||
|
@@ -189,6 +189,7 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
|
|||||||
|
|
||||||
ws->use_local_bos = perftest_flags & RADV_PERFTEST_LOCAL_BOS;
|
ws->use_local_bos = perftest_flags & RADV_PERFTEST_LOCAL_BOS;
|
||||||
ws->zero_all_vram_allocs = debug_flags & RADV_DEBUG_ZERO_VRAM;
|
ws->zero_all_vram_allocs = debug_flags & RADV_DEBUG_ZERO_VRAM;
|
||||||
|
ws->noop = debug_flags & RADV_DEBUG_NOOP;
|
||||||
ws->batchchain = !(perftest_flags & RADV_PERFTEST_NO_BATCHCHAIN);
|
ws->batchchain = !(perftest_flags & RADV_PERFTEST_NO_BATCHCHAIN);
|
||||||
list_inithead(&ws->global_bo_list);
|
list_inithead(&ws->global_bo_list);
|
||||||
pthread_mutex_init(&ws->global_bo_list_lock, NULL);
|
pthread_mutex_init(&ws->global_bo_list_lock, NULL);
|
||||||
|
@@ -48,6 +48,7 @@ struct radv_amdgpu_winsys {
|
|||||||
bool use_ib_bos;
|
bool use_ib_bos;
|
||||||
bool zero_all_vram_allocs;
|
bool zero_all_vram_allocs;
|
||||||
bool use_local_bos;
|
bool use_local_bos;
|
||||||
|
bool noop;
|
||||||
unsigned num_buffers;
|
unsigned num_buffers;
|
||||||
|
|
||||||
pthread_mutex_t global_bo_list_lock;
|
pthread_mutex_t global_bo_list_lock;
|
||||||
|
Reference in New Issue
Block a user