Module: Mesa Branch: main Commit: 2f1cb799688d0da6c038ecb08e744663e61735ba URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f1cb799688d0da6c038ecb08e744663e61735ba
Author: Jesse Natalie <[email protected]> Date: Mon Nov 13 09:25:49 2023 -0800 d3d12: GL4.5 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26180> --- docs/features.txt | 6 +++--- src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt | 4 ++++ src/gallium/drivers/d3d12/d3d12_context.cpp | 16 ++++++++++++++++ src/gallium/drivers/d3d12/d3d12_screen.cpp | 8 ++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 8deae04e47c..46d26feb16f 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -210,11 +210,11 @@ GL 4.4, GLSL 4.40 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, v GL_ARB_texture_stencil8 DONE (freedreno, nv50, softpipe, v3d, panfrost, asahi) GL_ARB_vertex_type_10f_11f_11f_rev DONE (freedreno, nv50, softpipe, panfrost, asahi, crocus) -GL 4.5, GLSL 4.50 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, virgl, zink, iris, crocus/gen7.5+ +GL 4.5, GLSL 4.50 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, virgl, zink, iris, crocus/gen7.5+, d3d12 GL_ARB_ES3_1_compatibility DONE (freedreno/a6xx, softpipe) - GL_ARB_clip_control DONE (freedreno, nv50, softpipe, lima, d3d12, crocus, asahi) - GL_ARB_conditional_render_inverted DONE (freedreno, nv50, softpipe, panfrost, d3d12, asahi, crocus/gen6+) + GL_ARB_clip_control DONE (freedreno, nv50, softpipe, lima, crocus, asahi) + GL_ARB_conditional_render_inverted DONE (freedreno, nv50, softpipe, panfrost, asahi, crocus/gen6+) GL_ARB_cull_distance DONE (freedreno/a6xx, nv50, softpipe, crocus/gen6+) GL_ARB_derivative_control DONE (freedreno/a3xx+, nv50, softpipe, asahi, crocus/gen7+) GL_ARB_direct_state_access DONE (all drivers) diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt index 319d2b44243..26079ba27ab 100644 --- a/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt +++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_shader.txt @@ -49,3 +49,7 @@ spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3,Crash # TODO: Need to investigate and debug spec@arb_enhanced_layouts@execution@component-layout@vs-gs-fs-double,Fail spec@arb_tessellation_shader@execution@dvec3-vs-tcs-tes,Fail + +# WARP bug: Due to SIMT, the FS loop runs 4 times, and all 4 threads end up with +# the final value from the SSBO instead of remembering their own value they computed. [email protected]@execution@ssbo-atomiccompswap-int,Fail diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp b/src/gallium/drivers/d3d12/d3d12_context.cpp index d770b258e74..97a3f14bb40 100644 --- a/src/gallium/drivers/d3d12/d3d12_context.cpp +++ b/src/gallium/drivers/d3d12/d3d12_context.cpp @@ -2377,6 +2377,21 @@ d3d12_memory_barrier(struct pipe_context *pctx, unsigned flags) } } +static void +d3d12_texture_barrier(struct pipe_context *pctx, unsigned flags) +{ + struct d3d12_context *ctx = d3d12_context(pctx); + + /* D3D doesn't really have an equivalent in the legacy barrier model. When using enhanced barriers, + * this could be a more specific global barrier. But for now, just flush the world with an aliasing barrier. */ + D3D12_RESOURCE_BARRIER aliasingBarrier; + aliasingBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + aliasingBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + aliasingBarrier.Aliasing.pResourceBefore = nullptr; + aliasingBarrier.Aliasing.pResourceAfter = nullptr; + ctx->cmdlist->ResourceBarrier(1, &aliasingBarrier); +} + static void d3d12_set_patch_vertices(struct pipe_context *pctx, uint8_t patch_vertices) { @@ -2534,6 +2549,7 @@ d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) ctx->base.fence_server_sync = d3d12_wait; ctx->base.memory_barrier = d3d12_memory_barrier; + ctx->base.texture_barrier = d3d12_texture_barrier; ctx->base.get_sample_position = u_default_get_sample_position; diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 4e9f769bcd1..1204d089970 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -193,9 +193,9 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 1; case PIPE_CAP_GLSL_FEATURE_LEVEL: - return 440; + return 450; case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: - return 440; + return 450; case PIPE_CAP_ESSL_FEATURE_LEVEL: return 310; @@ -336,6 +336,10 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_SHADER_ARRAY_COMPONENTS: case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE: case PIPE_CAP_QUERY_TIME_ELAPSED: + case PIPE_CAP_FS_FINE_DERIVATIVE: + case PIPE_CAP_CULL_DISTANCE: + case PIPE_CAP_TEXTURE_QUERY_SAMPLES: + case PIPE_CAP_TEXTURE_BARRIER: return 1; case PIPE_CAP_QUERY_BUFFER_OBJECT:
