From 784492a36330f29dde1d093b43ff9355d1864931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 6 Aug 2023 22:04:06 -0400 Subject: [PATCH] radeon_winsys: add a ctx_set_sw_reset_status callback Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/include/winsys/radeon_winsys.h | 7 +++++++ src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 1 + src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/gallium/include/winsys/radeon_winsys.h b/src/gallium/include/winsys/radeon_winsys.h index c34c0225df7..d86491a5d62 100644 --- a/src/gallium/include/winsys/radeon_winsys.h +++ b/src/gallium/include/winsys/radeon_winsys.h @@ -507,6 +507,13 @@ struct radeon_winsys { */ void (*ctx_destroy)(struct radeon_winsys_ctx *ctx); + /** + * Set a reset status for the context due to a software failure, such as an allocation failure + * or a skipped draw. + */ + void (*ctx_set_sw_reset_status)(struct radeon_winsys_ctx *ctx, enum pipe_reset_status status, + const char *format, ...); + /** * Query a GPU reset status. */ diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 77f9ee95600..c70c691843c 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -1969,6 +1969,7 @@ void amdgpu_cs_init_functions(struct amdgpu_screen_winsys *ws) { ws->base.ctx_create = amdgpu_ctx_create; ws->base.ctx_destroy = amdgpu_ctx_destroy; + ws->base.ctx_set_sw_reset_status = amdgpu_ctx_set_sw_reset_status; ws->base.ctx_query_reset_status = amdgpu_ctx_query_reset_status; ws->base.cs_create = amdgpu_cs_create; ws->base.cs_setup_preemption = amdgpu_cs_setup_preemption; diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c index d972611c6c5..a44d67d3db6 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c @@ -68,6 +68,18 @@ static void radeon_drm_ctx_destroy(struct radeon_winsys_ctx *ctx) FREE(ctx); } +static void +radeon_drm_ctx_set_sw_reset_status(struct radeon_winsys_ctx *rwctx, enum pipe_reset_status status, + const char *format, ...) +{ + /* TODO: we should do something better here */ + va_list args; + + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); +} + static enum pipe_reset_status radeon_drm_ctx_query_reset_status(struct radeon_winsys_ctx *rctx, bool full_reset_only, bool *needs_reset, bool *reset_completed) @@ -843,6 +855,7 @@ void radeon_drm_cs_init_functions(struct radeon_drm_winsys *ws) { ws->base.ctx_create = radeon_drm_ctx_create; ws->base.ctx_destroy = radeon_drm_ctx_destroy; + ws->base.ctx_set_sw_reset_status = radeon_drm_ctx_set_sw_reset_status; ws->base.ctx_query_reset_status = radeon_drm_ctx_query_reset_status; ws->base.cs_create = radeon_drm_cs_create; ws->base.cs_destroy = radeon_drm_cs_destroy;