radeon_winsys: add a ctx_set_sw_reset_status callback
authorMarek Olšák <marek.olsak@amd.com>
Mon, 7 Aug 2023 02:04:06 +0000 (22:04 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 17 Aug 2023 15:34:06 +0000 (15:34 +0000)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24732>

src/gallium/include/winsys/radeon_winsys.h
src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
src/gallium/winsys/radeon/drm/radeon_drm_cs.c

index c34c022..d86491a 100644 (file)
@@ -508,6 +508,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.
     */
    enum pipe_reset_status (*ctx_query_reset_status)(struct radeon_winsys_ctx *ctx,
index 77f9ee9..c70c691 100644 (file)
@@ -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;
index d972611..a44d67d 100644 (file)
@@ -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;