r600g,radeonsi: implement get_device_reset_status
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
a34e871449
commit
914365c0eb
|
@ -270,6 +270,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_POLYGON_OFFSET_CLAMP:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||
return rscreen->b.info.drm_major == 2 && rscreen->b.info.drm_minor >= 43;
|
||||
|
||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||
return !R600_BIG_ENDIAN && rscreen->b.info.has_userptr;
|
||||
|
||||
|
@ -332,7 +335,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||
case PIPE_CAP_VERTEXID_NOBASE:
|
||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||
return 0;
|
||||
|
||||
/* Stream output. */
|
||||
|
|
|
@ -196,6 +196,19 @@ static void r600_flush_dma_ring(void *ctx, unsigned flags,
|
|||
rctx->rings.dma.flushing = false;
|
||||
}
|
||||
|
||||
static enum pipe_reset_status r600_get_reset_status(struct pipe_context *ctx)
|
||||
{
|
||||
struct r600_common_context *rctx = (struct r600_common_context *)ctx;
|
||||
unsigned latest = rctx->ws->query_value(rctx->ws,
|
||||
RADEON_GPU_RESET_COUNTER);
|
||||
|
||||
if (rctx->gpu_reset_counter == latest)
|
||||
return PIPE_NO_RESET;
|
||||
|
||||
rctx->gpu_reset_counter = latest;
|
||||
return PIPE_UNKNOWN_CONTEXT_RESET;
|
||||
}
|
||||
|
||||
bool r600_common_context_init(struct r600_common_context *rctx,
|
||||
struct r600_common_screen *rscreen)
|
||||
{
|
||||
|
@ -222,6 +235,13 @@ bool r600_common_context_init(struct r600_common_context *rctx,
|
|||
rctx->b.memory_barrier = r600_memory_barrier;
|
||||
rctx->b.flush = r600_flush_from_st;
|
||||
|
||||
if (rscreen->info.drm_major == 2 && rscreen->info.drm_minor >= 43) {
|
||||
rctx->b.get_device_reset_status = r600_get_reset_status;
|
||||
rctx->gpu_reset_counter =
|
||||
rctx->ws->query_value(rctx->ws,
|
||||
RADEON_GPU_RESET_COUNTER);
|
||||
}
|
||||
|
||||
LIST_INITHEAD(&rctx->texture_buffers);
|
||||
|
||||
r600_init_context_texture_functions(rctx);
|
||||
|
|
|
@ -356,6 +356,7 @@ struct r600_common_context {
|
|||
enum chip_class chip_class;
|
||||
struct r600_rings rings;
|
||||
unsigned initial_gfx_cs_size;
|
||||
unsigned gpu_reset_counter;
|
||||
|
||||
struct u_upload_mgr *uploader;
|
||||
struct u_suballocator *allocator_so_filled_size;
|
||||
|
|
|
@ -169,9 +169,10 @@ enum radeon_value_id {
|
|||
RADEON_NUM_BYTES_MOVED,
|
||||
RADEON_VRAM_USAGE,
|
||||
RADEON_GTT_USAGE,
|
||||
RADEON_GPU_TEMPERATURE,
|
||||
RADEON_GPU_TEMPERATURE, /* DRM 2.42.0 */
|
||||
RADEON_CURRENT_SCLK,
|
||||
RADEON_CURRENT_MCLK
|
||||
RADEON_CURRENT_MCLK,
|
||||
RADEON_GPU_RESET_COUNTER, /* DRM 2.43.0 */
|
||||
};
|
||||
|
||||
enum radeon_bo_priority {
|
||||
|
|
|
@ -257,6 +257,9 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||
return !SI_BIG_ENDIAN && sscreen->b.info.has_userptr;
|
||||
|
||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||
return sscreen->b.info.drm_major == 2 && sscreen->b.info.drm_minor >= 43;
|
||||
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
/* 2D tiling on CIK is supported since DRM 2.35.0 */
|
||||
return sscreen->b.chip_class < CIK ||
|
||||
|
@ -293,7 +296,6 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||
case PIPE_CAP_VERTEXID_NOBASE:
|
||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||
|
|
|
@ -59,6 +59,10 @@
|
|||
|
||||
#define RADEON_INFO_VA_UNMAP_WORKING 0x25
|
||||
|
||||
#ifndef RADEON_INFO_GPU_RESET_COUNTER
|
||||
#define RADEON_INFO_GPU_RESET_COUNTER 0x26
|
||||
#endif
|
||||
|
||||
static struct util_hash_table *fd_tab = NULL;
|
||||
pipe_static_mutex(fd_tab_mutex);
|
||||
|
||||
|
@ -567,6 +571,10 @@ static uint64_t radeon_query_value(struct radeon_winsys *rws,
|
|||
radeon_get_drm_value(ws->fd, RADEON_INFO_CURRENT_GPU_MCLK,
|
||||
"current-gpu-mclk", (uint32_t*)&retval);
|
||||
return retval;
|
||||
case RADEON_GPU_RESET_COUNTER:
|
||||
radeon_get_drm_value(ws->fd, RADEON_INFO_GPU_RESET_COUNTER,
|
||||
"gpu-reset-counter", (uint32_t*)&retval);
|
||||
return retval;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue