Module: Mesa Branch: main Commit: e61287888ddfa116f8711bb758b5a3f15f4eb1cf URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e61287888ddfa116f8711bb758b5a3f15f4eb1cf
Author: Jesse Natalie <jenat...@microsoft.com> Date: Tue Nov 7 14:07:03 2023 -0800 d3d12: GL4.3 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26108> --- docs/features.txt | 22 +++++++++++----------- src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt | 1 - src/gallium/drivers/d3d12/d3d12_blit.cpp | 3 ++- src/gallium/drivers/d3d12/d3d12_bufmgr.cpp | 2 +- src/gallium/drivers/d3d12/d3d12_resource.cpp | 6 +++--- src/gallium/drivers/d3d12/d3d12_screen.cpp | 9 ++++++--- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 7242f827b68..93eb15f183d 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -166,29 +166,29 @@ GL 4.2, GLSL 4.20 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, v GL_ARB_map_buffer_alignment DONE (all drivers) -GL 4.3, GLSL 4.30 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, virgl, zink, iris, crocus/gen7.5+ +GL 4.3, GLSL 4.30 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, virgl, zink, d3d12, iris, crocus/gen7.5+ GL_ARB_arrays_of_arrays DONE (all drivers that support GLSL 1.30) GL_ARB_ES3_compatibility DONE (all drivers that support GLSL 3.30) GL_ARB_clear_buffer_object DONE (all drivers) - GL_ARB_compute_shader DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) + GL_ARB_compute_shader DONE (freedreno/a5xx+, softpipe, v3d, panfrost, crocus/gen7+, asahi) GL_ARB_copy_image DONE (freedreno/a6xx, nv50, softpipe, v3d, crocus) GL_KHR_debug DONE (all drivers) GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL) - GL_ARB_fragment_layer_viewport DONE (freedreno/a6xx, nv50, softpipe, d3d12, crocus/gen6+) - GL_ARB_framebuffer_no_attachments DONE (freedreno, softpipe, v3d, d3d12, asahi, crocus/gen7+) + GL_ARB_fragment_layer_viewport DONE (freedreno/a6xx, nv50, softpipe, crocus/gen6+) + GL_ARB_framebuffer_no_attachments DONE (freedreno, softpipe, v3d, asahi, crocus/gen7+) GL_ARB_internalformat_query2 DONE (all drivers) GL_ARB_invalidate_subdata DONE (all drivers) - GL_ARB_multi_draw_indirect DONE (freedreno, softpipe, v3d, d3d12, crocus/gen7+, asahi) + GL_ARB_multi_draw_indirect DONE (freedreno, softpipe, v3d, crocus/gen7+, asahi) GL_ARB_program_interface_query DONE (all drivers) - GL_ARB_robust_buffer_access_behavior DONE (freedreno, d3d12) - GL_ARB_shader_image_size DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) - GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) - GL_ARB_stencil_texturing DONE (freedreno, nv50, softpipe, v3d, panfrost, d3d12, asahi) - GL_ARB_texture_buffer_range DONE (freedreno, nv50, softpipe, v3d, d3d12, crocus) + GL_ARB_robust_buffer_access_behavior DONE (freedreno) + GL_ARB_shader_image_size DONE (freedreno/a5xx+, softpipe, v3d, panfrost, crocus/gen7+, asahi) + GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, softpipe, v3d, panfrost, crocus/gen7+, asahi) + GL_ARB_stencil_texturing DONE (freedreno, nv50, softpipe, v3d, panfrost, asahi) + GL_ARB_texture_buffer_range DONE (freedreno, nv50, softpipe, v3d, crocus) GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30) GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample) - GL_ARB_texture_view DONE (freedreno, nv50, softpipe, v3d, asahi, crocus/gen7+, d3d12) + GL_ARB_texture_view DONE (freedreno, nv50, softpipe, v3d, asahi, crocus/gen7+) GL_ARB_vertex_attrib_binding DONE (all drivers) diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt index 6af39436eaf..05029511140 100644 --- a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt +++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt @@ -405,7 +405,6 @@ spec@nv_copy_depth_to_color@nv_copy_depth_to_color 0 0x223344ff,Fail spec@nv_copy_depth_to_color@nv_copy_depth_to_color 0 0x76356278,Fail spec@nv_copy_depth_to_color@nv_copy_depth_to_color 1 0x223344ff,Fail spec@nv_copy_depth_to_color@nv_copy_depth_to_color 1 0x76356278,Fail -spec@nv_copy_image@nv_copy_image-formats,Crash wgl@wgl-multi-context-single-window,Fail # remove this after https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/843 diff --git a/src/gallium/drivers/d3d12/d3d12_blit.cpp b/src/gallium/drivers/d3d12/d3d12_blit.cpp index 6c0bf15709c..1c6af1e8483 100644 --- a/src/gallium/drivers/d3d12/d3d12_blit.cpp +++ b/src/gallium/drivers/d3d12/d3d12_blit.cpp @@ -485,7 +485,8 @@ create_staging_resource(struct d3d12_context *ctx, templ.nr_samples = src->base.b.nr_samples; templ.nr_storage_samples = src->base.b.nr_storage_samples; templ.usage = PIPE_USAGE_STAGING; - templ.bind = util_format_is_depth_or_stencil(templ.format) ? PIPE_BIND_DEPTH_STENCIL : PIPE_BIND_RENDER_TARGET; + templ.bind = util_format_is_depth_or_stencil(templ.format) ? PIPE_BIND_DEPTH_STENCIL : + util_format_is_compressed(templ.format) ? 0 : PIPE_BIND_RENDER_TARGET; templ.target = src->base.b.target; staging_res = ctx->base.screen->resource_create(ctx->base.screen, &templ); diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp index cf37598dad3..8f4530e79fd 100644 --- a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp +++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp @@ -100,7 +100,7 @@ d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum d3d12_r bo->residency_status = residency; bo->last_used_timestamp = 0; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; + desc.Flags &= ~D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; screen->dev->GetCopyableFootprints(&desc, 0, total_subresources, 0, nullptr, nullptr, nullptr, &bo->estimated_size); if (residency == d3d12_resident) { mtx_lock(&screen->submit_mutex); diff --git a/src/gallium/drivers/d3d12/d3d12_resource.cpp b/src/gallium/drivers/d3d12/d3d12_resource.cpp index 6b4d398aaf9..168decec6f4 100644 --- a/src/gallium/drivers/d3d12/d3d12_resource.cpp +++ b/src/gallium/drivers/d3d12/d3d12_resource.cpp @@ -417,7 +417,7 @@ convert_planar_resource(struct d3d12_resource *res) #if DEBUG struct d3d12_screen *screen = d3d12_screen(res->base.b.screen); D3D12_RESOURCE_DESC desc = GetDesc(res->bo->res); - desc.Flags = D3D12_RESOURCE_FLAG_NONE; + desc.Flags &= ~D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; D3D12_PLACED_SUBRESOURCE_FOOTPRINT placed_footprint = {}; D3D12_SUBRESOURCE_FOOTPRINT *footprint = &placed_footprint.Footprint; unsigned subresource = plane * desc.MipLevels * desc.DepthOrArraySize; @@ -598,7 +598,7 @@ d3d12_resource_from_handle(struct pipe_screen *pscreen, if (templ && handle->format != templ->format) { unsigned subresource = handle->plane * incoming_res_desc.MipLevels * incoming_res_desc.DepthOrArraySize; auto temp_desc = incoming_res_desc; - temp_desc.Flags = D3D12_RESOURCE_FLAG_NONE; + temp_desc.Flags &= ~D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; screen->dev->GetCopyableFootprints(&temp_desc, subresource, 1, 0, &placed_footprint, nullptr, nullptr, nullptr); } else { footprint->Format = incoming_res_desc.Format; @@ -1099,7 +1099,7 @@ fill_buffer_location(struct d3d12_context *ctx, D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint; uint64_t offset = 0; auto descr = GetDesc(d3d12_resource_underlying(res, &offset)); - descr.Flags = D3D12_RESOURCE_FLAG_NONE; + descr.Flags &= ~D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; struct d3d12_screen *screen = d3d12_screen(ctx->base.screen); ID3D12Device* dev = screen->dev; diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 821c16ea922..31af26c9505 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 420; + return 430; case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: - return 420; + return 430; case PIPE_CAP_ESSL_FEATURE_LEVEL: return 310; @@ -332,6 +332,7 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TIMELINE_SEMAPHORE_IMPORT: case PIPE_CAP_CLIP_HALFZ: case PIPE_CAP_VS_LAYER_VIEWPORT: + case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS: return 1; case PIPE_CAP_MAX_VERTEX_STREAMS: @@ -447,7 +448,9 @@ d3d12_get_shader_param(struct pipe_screen *pscreen, return 65536; case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: - return 13; /* 15 - 2 for lowered uniforms and state vars*/ + if (screen->opts.ResourceBindingTier < D3D12_RESOURCE_BINDING_TIER_3) + return 13; /* 15 - 2 for lowered uniforms and state vars*/ + return 15; case PIPE_SHADER_CAP_MAX_TEMPS: return INT_MAX;