d3d12: GL4.5

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26180>
This commit is contained in:
Jesse Natalie 2023-11-13 09:25:49 -08:00 committed by Marge Bot
parent 5a5178d5a4
commit 2f1cb79968
4 changed files with 29 additions and 5 deletions

View file

@ -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)

View file

@ -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.
spec@glsl-4.50@execution@ssbo-atomiccompswap-int,Fail

View file

@ -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;

View file

@ -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: