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:

Reply via email to