Mesa (main): d3d12: Hook up robustness extensions
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Apr 28 20:01:20 UTC 2022
Module: Mesa
Branch: main
Commit: 2bf00b4cff8fe072415386a06e4f0945f0163106
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2bf00b4cff8fe072415386a06e4f0945f0163106
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Fri Feb 11 08:08:09 2022 -0800
d3d12: Hook up robustness extensions
We can at least correctly return whether the context was lost, but
at this point can't correctly tear down and create a new one, nor
do we support the callback for dynamic notification.
Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15002>
---
docs/features.txt | 2 +-
docs/relnotes/new_features.txt | 1 +
src/gallium/drivers/d3d12/d3d12_context.cpp | 18 ++++++++++++++++++
src/gallium/drivers/d3d12/d3d12_screen.cpp | 2 ++
4 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/docs/features.txt b/docs/features.txt
index e0899fa1a99..77cfee15a6b 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -181,7 +181,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, llvmpipe, virgl
GL_ARB_invalidate_subdata DONE (all drivers)
GL_ARB_multi_draw_indirect DONE (freedreno, i965, softpipe, v3d, d3d12)
GL_ARB_program_interface_query DONE (all drivers)
- GL_ARB_robust_buffer_access_behavior DONE (freedreno, i965)
+ GL_ARB_robust_buffer_access_behavior DONE (freedreno, i965, d3d12)
GL_ARB_shader_image_size DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost, d3d12)
GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost, d3d12)
GL_ARB_stencil_texturing DONE (freedreno, i965/hsw+, nv50, softpipe, v3d, panfrost, d3d12)
diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt
index b8d89951bf0..c387dea1950 100644
--- a/docs/relnotes/new_features.txt
+++ b/docs/relnotes/new_features.txt
@@ -1 +1,2 @@
WGL_ARB_create_context_robustness
+d3d12 ARB_robust_buffer_access_behavior
diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp b/src/gallium/drivers/d3d12/d3d12_context.cpp
index 0e86b29c5fe..d54f8aa31d2 100644
--- a/src/gallium/drivers/d3d12/d3d12_context.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_context.cpp
@@ -2355,6 +2355,22 @@ d3d12_set_tess_state(struct pipe_context *pctx,
memcpy(ctx->default_inner_tess_factor, default_inner_level, sizeof(ctx->default_inner_tess_factor));
}
+static enum pipe_reset_status
+d3d12_get_reset_status(struct pipe_context *pctx)
+{
+ struct d3d12_screen *screen = d3d12_screen(pctx->screen);
+ HRESULT hr = screen->dev->GetDeviceRemovedReason();
+ switch (hr) {
+ case DXGI_ERROR_DEVICE_HUNG:
+ case DXGI_ERROR_INVALID_CALL:
+ return PIPE_GUILTY_CONTEXT_RESET;
+ case DXGI_ERROR_DEVICE_RESET:
+ return PIPE_INNOCENT_CONTEXT_RESET;
+ default:
+ return SUCCEEDED(hr) ? PIPE_NO_RESET : PIPE_UNKNOWN_CONTEXT_RESET;
+ }
+}
+
struct pipe_context *
d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
{
@@ -2452,6 +2468,8 @@ d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
ctx->base.get_sample_position = d3d12_get_sample_position;
+ ctx->base.get_device_reset_status = d3d12_get_reset_status;
+
ctx->gfx_pipeline_state.sample_mask = ~0;
d3d12_context_surface_init(&ctx->base);
diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp
index 53b8f6b5f1a..8b6896d7d97 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp
@@ -323,6 +323,8 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_INT64:
case PIPE_CAP_INT64_DIVMOD:
case PIPE_CAP_DOUBLES:
+ case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
+ case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
return 1;
case PIPE_CAP_MAX_VERTEX_STREAMS:
More information about the mesa-commit
mailing list