From 3845f5159ac1ccdd740a72ab3947db051586af4e Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Sat, 30 Dec 2023 08:35:05 +0100 Subject: [PATCH] dx12: root signature validation at pso creation --- WickedEngine/wiGraphicsDevice_DX12.cpp | 30 ++++++++++++++++---------- WickedEngine/wiVersion.cpp | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index c79c5028c..5a3a24efe 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -1454,6 +1454,7 @@ namespace dx12_internal CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS Formats; CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE ROOTSIG; } stream1 = {}; struct PSO_STREAM2 @@ -3875,9 +3876,11 @@ using namespace dx12_internal; struct PSO_STREAM { CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE ROOTSIG; } stream; stream.CS = { internal_state->shadercode.data(), internal_state->shadercode.size() }; + stream.ROOTSIG = internal_state->rootSignature.Get(); D3D12_PIPELINE_STATE_STREAM_DESC streamDesc = {}; streamDesc.pPipelineStateSubobjectStream = &stream; @@ -3994,6 +3997,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } if (pso->desc.hs != nullptr) @@ -4004,6 +4008,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } if (pso->desc.ds != nullptr) @@ -4014,6 +4019,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } if (pso->desc.gs != nullptr) @@ -4024,6 +4030,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } if (pso->desc.ps != nullptr) @@ -4034,6 +4041,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } @@ -4045,6 +4053,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } if (pso->desc.as != nullptr) @@ -4055,6 +4064,7 @@ using namespace dx12_internal; { internal_state->rootSignature = shader_internal->rootSignature; internal_state->rootsig_desc = shader_internal->rootsig_desc; + stream.stream1.ROOTSIG = internal_state->rootSignature.Get(); } } @@ -4478,9 +4488,7 @@ using namespace dx12_internal; switch (desc->profile) { case VideoProfile::H264: -#ifndef PLATFORM_XBOX - decoder_desc.Configuration.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_H264; // TODO -#endif // PLATFORM_XBOX + decoder_desc.Configuration.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_H264; decoder_desc.Configuration.InterlaceType = D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE; break; //case VideoProfile::H265: @@ -7649,13 +7657,13 @@ using namespace dx12_internal; HRESULT hr = device->CreateFence(0, D3D12_FENCE_FLAG_NONE, PPV_ARGS(fence)); assert(SUCCEEDED(hr)); - //D3D12_RESOURCE_BARRIER bar = {}; - //bar.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - //bar.Transition.pResource = dpb_internal->resource.Get(); - //bar.Transition.StateBefore = D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE; - //bar.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON; - //bar.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - //commandlist.GetVideoDecodeCommandList()->ResourceBarrier(1, &bar); + D3D12_RESOURCE_BARRIER bar = {}; + bar.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + bar.Transition.pResource = dpb_internal->resource.Get(); + bar.Transition.StateBefore = D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE; + bar.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON; + bar.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + commandlist.GetVideoDecodeCommandList()->ResourceBarrier(1, &bar); hr = commandlist.GetVideoDecodeCommandList()->Close(); assert(SUCCEEDED(hr)); @@ -7679,7 +7687,7 @@ using namespace dx12_internal; hr = commandlist.GetCommandAllocator()->Reset(); assert(SUCCEEDED(hr)); - hr = commandlist.GetGraphicsCommandList()->Reset(commandlist.GetCommandAllocator(), nullptr); + hr = commandlist.GetVideoDecodeCommandList()->Reset(commandlist.GetCommandAllocator()); assert(SUCCEEDED(hr)); #endif } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index cd6c5a077..25c4f2d52 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 356; + const int revision = 357; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);