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,
{
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;
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)
{
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;