diff --git a/renderdoc/driver/d3d12/d3d12_command_list.h b/renderdoc/driver/d3d12/d3d12_command_list.h index 21a9a42ab..9605e6259 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list.h +++ b/renderdoc/driver/d3d12/d3d12_command_list.h @@ -111,7 +111,7 @@ struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID } }; -class WrappedID3D12GraphicsCommandList : public ID3D12GraphicsCommandList4 +class WrappedID3D12GraphicsCommandList : public ID3D12GraphicsCommandListX { private: ID3D12GraphicsCommandList *m_pList = NULL; @@ -119,6 +119,7 @@ private: ID3D12GraphicsCommandList2 *m_pList2 = NULL; ID3D12GraphicsCommandList3 *m_pList3 = NULL; ID3D12GraphicsCommandList4 *m_pList4 = NULL; + ID3D12GraphicsCommandList5 *m_pList5 = NULL; RefCounter12 m_RefCounter; @@ -165,6 +166,7 @@ public: ID3D12GraphicsCommandList2 *GetReal2() { return m_pList2; } ID3D12GraphicsCommandList3 *GetReal3() { return m_pList3; } ID3D12GraphicsCommandList4 *GetReal4() { return m_pList4; } + ID3D12GraphicsCommandList5 *GetReal5() { return m_pList5; } WrappedID3D12Device *GetWrappedDevice() { return m_pDevice; } D3D12ResourceRecord *GetResourceRecord() { return m_ListRecord; } D3D12ResourceRecord *GetCreationRecord() { return m_CreationRecord; } @@ -173,7 +175,8 @@ public: ID3D12GraphicsCommandList2 *GetCrackedList2(); ID3D12GraphicsCommandList3 *GetCrackedList3(); ID3D12GraphicsCommandList4 *GetCrackedList4(); - ID3D12GraphicsCommandList4 *GetWrappedCrackedList(); + ID3D12GraphicsCommandList5 *GetCrackedList5(); + ID3D12GraphicsCommandListX *GetWrappedCrackedList(); void SetAMDMarkerInterface(IAmdExtD3DCommandListMarker *marker) { m_AMDMarkers = marker; } void SetCommandData(D3D12CommandData *cmd) { m_Cmd = cmd; } @@ -526,6 +529,15 @@ public: IMPLEMENT_FUNCTION_SERIALISED(virtual void STDMETHODCALLTYPE, DispatchRays, _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); + + ////////////////////////////// + // implement ID3D12GraphicsCommandList5 + IMPLEMENT_FUNCTION_SERIALISED(virtual void STDMETHODCALLTYPE, RSSetShadingRate, + D3D12_SHADING_RATE baseShadingRate, + const D3D12_SHADING_RATE_COMBINER *combiners); + + IMPLEMENT_FUNCTION_SERIALISED(virtual void STDMETHODCALLTYPE, RSSetShadingRateImage, + ID3D12Resource *shadingRateImage); }; template <> @@ -551,18 +563,23 @@ template <> ResourceId GetResID(ID3D12GraphicsCommandList3 *obj); template <> ResourceId GetResID(ID3D12GraphicsCommandList4 *obj); +template <> +ResourceId GetResID(ID3D12GraphicsCommandList5 *obj); ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList1 *obj); ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList2 *obj); ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList3 *obj); ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList4 *obj); +ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList5 *obj); ID3D12GraphicsCommandList1 *Unwrap1(ID3D12GraphicsCommandList1 *obj); ID3D12GraphicsCommandList2 *Unwrap2(ID3D12GraphicsCommandList2 *obj); ID3D12GraphicsCommandList3 *Unwrap3(ID3D12GraphicsCommandList3 *obj); ID3D12GraphicsCommandList4 *Unwrap4(ID3D12GraphicsCommandList4 *obj); +ID3D12GraphicsCommandList5 *Unwrap5(ID3D12GraphicsCommandList5 *obj); WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList1 *obj); WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList2 *obj); WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList3 *obj); -WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList4 *obj); \ No newline at end of file +WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList4 *obj); +WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList5 *obj); \ No newline at end of file diff --git a/renderdoc/driver/d3d12/d3d12_command_list5_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list5_wrap.cpp new file mode 100644 index 000000000..fb3fbf98b --- /dev/null +++ b/renderdoc/driver/d3d12/d3d12_command_list5_wrap.cpp @@ -0,0 +1,168 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2019 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +#include "d3d12_command_list.h" + +template +bool WrappedID3D12GraphicsCommandList::Serialise_RSSetShadingRate( + SerialiserType &ser, D3D12_SHADING_RATE baseShadingRate, + const D3D12_SHADING_RATE_COMBINER *combiners) +{ + ID3D12GraphicsCommandList5 *pCommandList = this; + SERIALISE_ELEMENT(pCommandList); + SERIALISE_ELEMENT(baseShadingRate); + SERIALISE_ELEMENT_ARRAY(combiners, 2); + + SERIALISE_CHECK_READ_ERRORS(); + + if(IsReplayingAndReading()) + { + if(GetWrapped(pCommandList)->GetReal5() == NULL) + { + RDCERR("Can't replay ID3D12GraphicsCommandList5 command"); + return false; + } + + m_Cmd->m_LastCmdListID = GetResourceManager()->GetOriginalID(GetResID(pCommandList)); + + if(IsActiveReplaying(m_State)) + { + if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) + { + Unwrap5(m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID)) + ->RSSetShadingRate(baseShadingRate, combiners); + + if(m_Cmd->IsPartialCmdList(m_Cmd->m_LastCmdListID)) + { + m_Cmd->m_RenderState.shadingRate = baseShadingRate; + if(combiners) + { + m_Cmd->m_RenderState.shadingRateCombiners[0] = combiners[0]; + m_Cmd->m_RenderState.shadingRateCombiners[1] = combiners[1]; + } + } + } + } + else + { + Unwrap5(pCommandList)->RSSetShadingRate(baseShadingRate, combiners); + GetCrackedList5()->RSSetShadingRate(baseShadingRate, combiners); + + D3D12RenderState &state = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].state; + + state.shadingRate = baseShadingRate; + if(combiners) + { + state.shadingRateCombiners[0] = combiners[0]; + state.shadingRateCombiners[1] = combiners[1]; + } + } + } + + return true; +} + +void STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::RSSetShadingRate( + D3D12_SHADING_RATE baseShadingRate, const D3D12_SHADING_RATE_COMBINER *combiners) +{ + SERIALISE_TIME_CALL(m_pList5->RSSetShadingRate(baseShadingRate, combiners)); + + if(IsCaptureMode(m_State)) + { + CACHE_THREAD_SERIALISER(); + SCOPED_SERIALISE_CHUNK(D3D12Chunk::List_RSSetShadingRate); + Serialise_RSSetShadingRate(ser, baseShadingRate, combiners); + + m_ListRecord->AddChunk(scope.Get()); + } +} + +template +bool WrappedID3D12GraphicsCommandList::Serialise_RSSetShadingRateImage(SerialiserType &ser, + ID3D12Resource *shadingRateImage) +{ + ID3D12GraphicsCommandList5 *pCommandList = this; + SERIALISE_ELEMENT(pCommandList); + SERIALISE_ELEMENT(shadingRateImage); + + SERIALISE_CHECK_READ_ERRORS(); + + if(IsReplayingAndReading()) + { + if(GetWrapped(pCommandList)->GetReal5() == NULL) + { + RDCERR("Can't replay ID3D12GraphicsCommandList5 command"); + return false; + } + + m_Cmd->m_LastCmdListID = GetResourceManager()->GetOriginalID(GetResID(pCommandList)); + + if(IsActiveReplaying(m_State)) + { + if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) + { + Unwrap5(m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID)) + ->RSSetShadingRateImage(Unwrap(shadingRateImage)); + + if(m_Cmd->IsPartialCmdList(m_Cmd->m_LastCmdListID)) + { + m_Cmd->m_RenderState.shadingRateImage = GetResID(shadingRateImage); + } + } + } + else + { + Unwrap5(pCommandList)->RSSetShadingRateImage(Unwrap(shadingRateImage)); + GetCrackedList5()->RSSetShadingRateImage(Unwrap(shadingRateImage)); + + D3D12RenderState &state = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].state; + + state.shadingRateImage = GetResID(shadingRateImage); + } + } + + return true; +} + +void STDMETHODCALLTYPE +WrappedID3D12GraphicsCommandList::RSSetShadingRateImage(ID3D12Resource *shadingRateImage) +{ + SERIALISE_TIME_CALL(m_pList5->RSSetShadingRateImage(shadingRateImage)); + + if(IsCaptureMode(m_State)) + { + CACHE_THREAD_SERIALISER(); + SCOPED_SERIALISE_CHUNK(D3D12Chunk::List_RSSetShadingRateImage); + Serialise_RSSetShadingRateImage(ser, shadingRateImage); + + m_ListRecord->AddChunk(scope.Get()); + m_ListRecord->MarkResourceFrameReferenced(GetResID(shadingRateImage), eFrameRef_Read); + } +} + +INSTANTIATE_FUNCTION_SERIALISED(void, WrappedID3D12GraphicsCommandList, RSSetShadingRate, + D3D12_SHADING_RATE baseShadingRate, + const D3D12_SHADING_RATE_COMBINER *combiners); +INSTANTIATE_FUNCTION_SERIALISED(void, WrappedID3D12GraphicsCommandList, RSSetShadingRateImage, + ID3D12Resource *shadingRateImage); diff --git a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp index 8e1ef2593..c61e5cca8 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp @@ -53,7 +53,12 @@ ID3D12GraphicsCommandList4 *WrappedID3D12GraphicsCommandList::GetCrackedList4() return Unwrap4(m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back()); } -ID3D12GraphicsCommandList4 *WrappedID3D12GraphicsCommandList::GetWrappedCrackedList() +ID3D12GraphicsCommandList5 *WrappedID3D12GraphicsCommandList::GetCrackedList5() +{ + return Unwrap5(m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back()); +} + +ID3D12GraphicsCommandListX *WrappedID3D12GraphicsCommandList::GetWrappedCrackedList() { return m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.back(); } @@ -84,7 +89,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Close(SerialiserType &ser) { if(m_Cmd->HasRerecordCmdList(BakedCommandList)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(BakedCommandList); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(BakedCommandList); #if ENABLED(VERBOSE_PARTIAL_REPLAY) RDCDEBUG("Ending re-recorded command list for %llu baked to %llu", CommandList, BakedCommandList); @@ -261,7 +266,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Reset(SerialiserType &ser, } // this is a safe upcast because it's a wrapped object - ID3D12GraphicsCommandList4 *list = (ID3D12GraphicsCommandList4 *)listptr; + ID3D12GraphicsCommandListX *list = (ID3D12GraphicsCommandListX *)listptr; // we store under both baked and non baked ID. // The baked ID is the 'real' entry, the non baked is simply so it @@ -347,7 +352,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Reset(SerialiserType &ser, __uuidof(ID3D12GraphicsCommandList), (void **)&listptr); // this is a safe upcast because it's a wrapped object - ID3D12GraphicsCommandList4 *list = (ID3D12GraphicsCommandList4 *)listptr; + ID3D12GraphicsCommandListX *list = (ID3D12GraphicsCommandListX *)listptr; RDCASSERT(m_Cmd->m_BakedCmdListInfo[BakedCommandList].crackedLists.empty()); m_Cmd->m_BakedCmdListInfo[BakedCommandList].crackedLists.push_back(list); @@ -972,7 +977,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_IASetIndexBuffer(SerialiserType { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); Unwrap(list)->IASetIndexBuffer(pView); @@ -2806,7 +2811,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_SetMarker(SerialiserType &ser, { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); D3D12MarkerRegion::Set(list, MarkerText); } @@ -2869,7 +2874,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_BeginEvent(SerialiserType &ser, { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].markerCount++; @@ -2927,7 +2932,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_EndEvent(SerialiserType &ser) { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); int &markerCount = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].markerCount; markerCount = RDCMAX(0, markerCount - 1); @@ -3009,7 +3014,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_DrawInstanced(SerialiserType &s { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); uint32_t eventId = m_Cmd->HandlePreCallback(list); @@ -3093,7 +3098,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_DrawIndexedInstanced( { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); uint32_t eventId = m_Cmd->HandlePreCallback(list); @@ -3179,7 +3184,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Dispatch(SerialiserType &ser, U { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); uint32_t eventId = m_Cmd->HandlePreCallback(list, true); @@ -3251,7 +3256,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteBundle(SerialiserType &s { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); uint32_t eventId = m_Cmd->HandlePreCallback(list, true); @@ -4163,7 +4168,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect( { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); ReplayExecuteIndirect(Unwrap(list)); } @@ -4237,7 +4242,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect( __uuidof(ID3D12GraphicsCommandList), (void **)&listptr); // this is a safe upcast because it's a wrapped object - ID3D12GraphicsCommandList4 *list = (ID3D12GraphicsCommandList4 *)listptr; + ID3D12GraphicsCommandListX *list = (ID3D12GraphicsCommandListX *)listptr; m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].crackedLists.push_back(list); @@ -4774,7 +4779,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_CopyBufferRegion(SerialiserType { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); Unwrap(list)->CopyBufferRegion(Unwrap(pDstBuffer), DstOffset, Unwrap(pSrcBuffer), SrcOffset, NumBytes); } @@ -4869,7 +4874,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_CopyTextureRegion( { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); Unwrap(list)->CopyTextureRegion(&unwrappedDst, DstX, DstY, DstZ, &unwrappedSrc, pSrcBox); } } @@ -4964,7 +4969,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_CopyResource(SerialiserType &se { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); Unwrap(list)->CopyResource(Unwrap(pDstResource), Unwrap(pSrcResource)); } } @@ -5048,7 +5053,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ResolveSubresource( { if(m_Cmd->InRerecordRange(m_Cmd->m_LastCmdListID)) { - ID3D12GraphicsCommandList4 *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); + ID3D12GraphicsCommandListX *list = m_Cmd->RerecordCmdList(m_Cmd->m_LastCmdListID); Unwrap(list)->ResolveSubresource(Unwrap(pDstResource), DstSubresource, Unwrap(pSrcResource), SrcSubresource, Format); } diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index 3a9d99c73..1d3f96d48 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -72,6 +72,14 @@ ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList4 *obj) return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal(); } +ID3D12GraphicsCommandList *Unwrap(ID3D12GraphicsCommandList5 *obj) +{ + if(obj == NULL) + return NULL; + + return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal(); +} + ID3D12GraphicsCommandList1 *Unwrap1(ID3D12GraphicsCommandList1 *obj) { if(obj == NULL) @@ -104,6 +112,14 @@ ID3D12GraphicsCommandList4 *Unwrap4(ID3D12GraphicsCommandList4 *obj) return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal4(); } +ID3D12GraphicsCommandList5 *Unwrap5(ID3D12GraphicsCommandList5 *obj) +{ + if(obj == NULL) + return NULL; + + return ((WrappedID3D12GraphicsCommandList *)obj)->GetReal5(); +} + template <> ID3D12CommandList *Unwrap(ID3D12CommandList *obj) { @@ -158,6 +174,15 @@ ResourceId GetResID(ID3D12GraphicsCommandList4 *obj) return ((WrappedID3D12GraphicsCommandList *)obj)->GetResourceID(); } +template <> +ResourceId GetResID(ID3D12GraphicsCommandList5 *obj) +{ + if(obj == NULL) + return ResourceId(); + + return ((WrappedID3D12GraphicsCommandList *)obj)->GetResourceID(); +} + template <> ResourceId GetResID(ID3D12CommandList *obj) { @@ -232,6 +257,11 @@ WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList4 *obj) return ((WrappedID3D12GraphicsCommandList *)obj); } +WrappedID3D12GraphicsCommandList *GetWrapped(ID3D12GraphicsCommandList5 *obj) +{ + return ((WrappedID3D12GraphicsCommandList *)obj); +} + ULONG STDMETHODCALLTYPE WrappedID3D12DebugCommandQueue::AddRef() { m_pQueue->AddRef(); @@ -654,6 +684,12 @@ bool WrappedID3D12CommandQueue::ProcessChunk(ReadSerialiser &ser, D3D12Chunk chu ret = m_ReplayList->Serialise_BeginRenderPass(ser, 0, NULL, NULL, D3D12_RENDER_PASS_FLAG_NONE); break; case D3D12Chunk::List_EndRenderPass: ret = m_ReplayList->Serialise_EndRenderPass(ser); break; + case D3D12Chunk::List_RSSetShadingRate: + ret = m_ReplayList->Serialise_RSSetShadingRate(ser, D3D12_SHADING_RATE_1X1, NULL); + break; + case D3D12Chunk::List_RSSetShadingRateImage: + ret = m_ReplayList->Serialise_RSSetShadingRateImage(ser, NULL); + break; case D3D12Chunk::PushMarker: ret = m_ReplayList->Serialise_BeginEvent(ser, 0, NULL, 0); break; case D3D12Chunk::PopMarker: ret = m_ReplayList->Serialise_EndEvent(ser); break; @@ -905,6 +941,7 @@ WrappedID3D12GraphicsCommandList::WrappedID3D12GraphicsCommandList(ID3D12Graphic m_pList2 = NULL; m_pList3 = NULL; m_pList4 = NULL; + m_pList5 = NULL; m_WrappedDebug.m_pReal = NULL; m_WrappedDebug.m_pReal1 = NULL; @@ -920,6 +957,7 @@ WrappedID3D12GraphicsCommandList::WrappedID3D12GraphicsCommandList(ID3D12Graphic m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList2), (void **)&m_pList2); m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList3), (void **)&m_pList3); m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList4), (void **)&m_pList4); + m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList5), (void **)&m_pList5); } // create a temporary and grab its resource ID @@ -996,6 +1034,7 @@ WrappedID3D12GraphicsCommandList::~WrappedID3D12GraphicsCommandList() SAFE_RELEASE(m_WrappedDebug.m_pReal); SAFE_RELEASE(m_WrappedDebug.m_pReal1); SAFE_RELEASE(m_WrappedDebug.m_pReal2); + SAFE_RELEASE(m_pList5); SAFE_RELEASE(m_pList4); SAFE_RELEASE(m_pList3); SAFE_RELEASE(m_pList2); @@ -1141,6 +1180,19 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::QueryInterface(REFII return E_NOINTERFACE; } } + else if(riid == __uuidof(ID3D12GraphicsCommandList5)) + { + if(m_pList5) + { + *ppvObject = (ID3D12GraphicsCommandList5 *)this; + AddRef(); + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == __uuidof(ID3D12CommandList)) { *ppvObject = (ID3D12CommandList *)this; @@ -1288,7 +1340,7 @@ void D3D12CommandData::GetIndirectBuffer(size_t size, ID3D12Resource **buf, uint m_IndirectOffset = AlignUp16(m_IndirectOffset + size); } -uint32_t D3D12CommandData::HandlePreCallback(ID3D12GraphicsCommandList4 *list, bool dispatch, +uint32_t D3D12CommandData::HandlePreCallback(ID3D12GraphicsCommandListX *list, bool dispatch, uint32_t multiDrawOffset) { if(!m_DrawcallCallback) @@ -1374,7 +1426,7 @@ bool D3D12CommandData::IsPartialCmdList(ResourceId cmdid) return false; } -ID3D12GraphicsCommandList4 *D3D12CommandData::RerecordCmdList(ResourceId cmdid, +ID3D12GraphicsCommandListX *D3D12CommandData::RerecordCmdList(ResourceId cmdid, PartialReplayIndex partialType) { if(m_OutsideCmdList != NULL) diff --git a/renderdoc/driver/d3d12/d3d12_commands.h b/renderdoc/driver/d3d12/d3d12_commands.h index 8f95d69fb..1bc65982c 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.h +++ b/renderdoc/driver/d3d12/d3d12_commands.h @@ -120,17 +120,17 @@ struct D3D12DrawcallCallback // and do the real draw by returning true. OR they can do nothing in PreDraw, // do the real draw, then in PostDraw return true to apply the modifications // which are then undone in PostRedraw. - virtual void PreDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; - virtual bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; - virtual void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; + virtual void PreDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; + virtual bool PostDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; + virtual void PostRedraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; // same principle as above, but for dispatch calls - virtual void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; - virtual bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; - virtual void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) = 0; + virtual void PreDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; + virtual bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; + virtual void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) = 0; // called immediately before a command list is closed - virtual void PreCloseCommandList(ID3D12GraphicsCommandList4 *cmd) = 0; + virtual void PreCloseCommandList(ID3D12GraphicsCommandListX *cmd) = 0; // if a command list is recorded once and submitted N > 1 times, then the same // drawcall will have several EIDs that refer to it. We'll only do the full // callbacks above for the first EID, then call this function for the others @@ -140,31 +140,31 @@ struct D3D12DrawcallCallback // helper functions to downcast command list because we know it's wrapped void PreDraw(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PreDraw(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PreDraw(eid, (ID3D12GraphicsCommandListX *)cmd); } bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PostDraw(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PostDraw(eid, (ID3D12GraphicsCommandListX *)cmd); } void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PostRedraw(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PostRedraw(eid, (ID3D12GraphicsCommandListX *)cmd); } void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PreDispatch(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PreDispatch(eid, (ID3D12GraphicsCommandListX *)cmd); } bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PostDispatch(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PostDispatch(eid, (ID3D12GraphicsCommandListX *)cmd); } void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList *cmd) { - return PostRedispatch(eid, (ID3D12GraphicsCommandList4 *)cmd); + return PostRedispatch(eid, (ID3D12GraphicsCommandListX *)cmd); } void PreCloseCommandList(ID3D12GraphicsCommandList *cmd) { - return PreCloseCommandList((ID3D12GraphicsCommandList4 *)cmd); + return PreCloseCommandList((ID3D12GraphicsCommandListX *)cmd); } }; @@ -189,7 +189,7 @@ struct BakedCmdListInfo UINT realCount = 0; }; - std::vector crackedLists; + std::vector crackedLists; std::vector executeEvents; std::vector curEvents; @@ -296,7 +296,7 @@ struct D3D12CommandData // list subsection of command events, we don't go through the // whole original command lists to set up the partial replay, // so we just set this command list - ID3D12GraphicsCommandList4 *m_OutsideCmdList = NULL; + ID3D12GraphicsCommandListX *m_OutsideCmdList = NULL; void InsertDrawsAndRefreshIDs(ResourceId cmd, std::vector &cmdBufNodes); @@ -326,8 +326,8 @@ struct D3D12CommandData std::vector m_EventMessages; - std::map m_RerecordCmds; - std::vector m_RerecordCmdList; + std::map m_RerecordCmds; + std::vector m_RerecordCmdList; bool m_AddedDrawcall; @@ -360,13 +360,13 @@ struct D3D12CommandData // util function to handle fetching the right eventId, calling any // aliases then calling PreDraw/PreDispatch. - uint32_t HandlePreCallback(ID3D12GraphicsCommandList4 *list, bool dispatch = false, + uint32_t HandlePreCallback(ID3D12GraphicsCommandListX *list, bool dispatch = false, uint32_t multiDrawOffset = 0); bool InRerecordRange(ResourceId cmdid); bool HasRerecordCmdList(ResourceId cmdid); bool IsPartialCmdList(ResourceId cmdid); - ID3D12GraphicsCommandList4 *RerecordCmdList(ResourceId cmdid, + ID3D12GraphicsCommandListX *RerecordCmdList(ResourceId cmdid, PartialReplayIndex partialType = ePartialNum); void AddDrawcall(const DrawcallDescription &d, bool hasEvents, bool addUsage = true); diff --git a/renderdoc/driver/d3d12/d3d12_common.h b/renderdoc/driver/d3d12/d3d12_common.h index f1407c60a..ecc6be6d7 100644 --- a/renderdoc/driver/d3d12/d3d12_common.h +++ b/renderdoc/driver/d3d12/d3d12_common.h @@ -34,6 +34,10 @@ #include "driver/shaders/dxbc/dxbc_compile.h" #include "serialise/serialiser.h" +// we need to use the most-derived native interface all over the place. To make things easier when +// new versions come out we typedef it here when we don't need the specific interface +using ID3D12GraphicsCommandListX = ID3D12GraphicsCommandList5; + // replay only class for handling marker regions struct D3D12MarkerRegion { @@ -371,6 +375,7 @@ struct D3D12CommandSignature SERIALISE_INTERFACE(ID3D12GraphicsCommandList2); \ SERIALISE_INTERFACE(ID3D12GraphicsCommandList3); \ SERIALISE_INTERFACE(ID3D12GraphicsCommandList4); \ + SERIALISE_INTERFACE(ID3D12GraphicsCommandList5); \ SERIALISE_INTERFACE(ID3D12RootSignature); \ SERIALISE_INTERFACE(ID3D12Resource); \ SERIALISE_INTERFACE(ID3D12QueryHeap); \ @@ -609,6 +614,8 @@ DECLARE_REFLECTION_ENUM(D3D12_COMMAND_LIST_FLAGS); DECLARE_REFLECTION_ENUM(D3D12_RENDER_PASS_FLAGS); DECLARE_REFLECTION_ENUM(D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE); DECLARE_REFLECTION_ENUM(D3D12_RENDER_PASS_ENDING_ACCESS_TYPE); +DECLARE_REFLECTION_ENUM(D3D12_SHADING_RATE); +DECLARE_REFLECTION_ENUM(D3D12_SHADING_RATE_COMBINER); DECLARE_REFLECTION_STRUCT(D3D12_RESOURCE_DESC); DECLARE_REFLECTION_STRUCT(D3D12_COMMAND_QUEUE_DESC); @@ -817,5 +824,7 @@ enum class D3D12Chunk : uint32_t Device_CreateHeap1, List_BeginRenderPass, List_EndRenderPass, + List_RSSetShadingRate, + List_RSSetShadingRateImage, Max, }; diff --git a/renderdoc/driver/d3d12/d3d12_counters.cpp b/renderdoc/driver/d3d12/d3d12_counters.cpp index fd7ead99a..952bd03ff 100644 --- a/renderdoc/driver/d3d12/d3d12_counters.cpp +++ b/renderdoc/driver/d3d12/d3d12_counters.cpp @@ -202,7 +202,7 @@ struct D3D12AMDDrawCallback : public D3D12DrawcallCallback m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = NULL; } - void PreDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PreDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { m_pEventIds->push_back(eid); @@ -220,7 +220,7 @@ struct D3D12AMDDrawCallback : public D3D12DrawcallCallback ++*m_pSampleId; } - bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + bool PostDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { WrappedID3D12GraphicsCommandList *pWrappedCmdList = (WrappedID3D12GraphicsCommandList *)cmd; @@ -228,7 +228,7 @@ struct D3D12AMDDrawCallback : public D3D12DrawcallCallback return false; } - void PreCloseCommandList(ID3D12GraphicsCommandList4 *cmd) override + void PreCloseCommandList(ID3D12GraphicsCommandListX *cmd) override { WrappedID3D12GraphicsCommandList *pWrappedCmdList = (WrappedID3D12GraphicsCommandList *)cmd; @@ -241,14 +241,14 @@ struct D3D12AMDDrawCallback : public D3D12DrawcallCallback } } - void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override {} + void PostRedraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override {} // we don't need to distinguish, call the Draw functions - void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override { PreDraw(eid, cmd); } - bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PreDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { PreDraw(eid, cmd); } + bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { return PostDraw(eid, cmd); } - void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { PostRedraw(eid, cmd); } @@ -378,7 +378,7 @@ struct D3D12GPUTimerCallback : public D3D12DrawcallCallback m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = this; } ~D3D12GPUTimerCallback() { m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = NULL; } - void PreDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PreDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { if(cmd->GetType() == D3D12_COMMAND_LIST_TYPE_DIRECT) { @@ -388,7 +388,7 @@ struct D3D12GPUTimerCallback : public D3D12DrawcallCallback cmd->EndQuery(m_TimerQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, m_NumTimestampQueries * 2 + 0); } - bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + bool PostDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { cmd->EndQuery(m_TimerQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, m_NumTimestampQueries * 2 + 1); m_NumTimestampQueries++; @@ -405,18 +405,18 @@ struct D3D12GPUTimerCallback : public D3D12DrawcallCallback return false; } - void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override {} + void PostRedraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override {} // we don't need to distinguish, call the Draw functions - void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override { PreDraw(eid, cmd); } - bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PreDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { PreDraw(eid, cmd); } + bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { return PostDraw(eid, cmd); } - void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { PostRedraw(eid, cmd); } - void PreCloseCommandList(ID3D12GraphicsCommandList4 *cmd) override{}; + void PreCloseCommandList(ID3D12GraphicsCommandListX *cmd) override{}; void AliasEvent(uint32_t primary, uint32_t alias) override { m_AliasEvents.push_back(make_rdcpair(primary, alias)); diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index 4162f198a..cd363dd09 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -341,7 +341,7 @@ D3D12DebugManager::D3D12DebugManager(WrappedID3D12Device *wrapper) m_pDevice->InternalRef(); // safe to upcast - this is a wrapped object - m_DebugList = (ID3D12GraphicsCommandList4 *)list; + m_DebugList = (ID3D12GraphicsCommandListX *)list; if(FAILED(hr)) { @@ -471,7 +471,7 @@ D3D12_GPU_VIRTUAL_ADDRESS D3D12DebugManager::UploadConstants(const void *data, s return ret; } -ID3D12GraphicsCommandList4 *D3D12DebugManager::ResetDebugList() +ID3D12GraphicsCommandListX *D3D12DebugManager::ResetDebugList() { m_DebugList->Reset(m_DebugAlloc, NULL); diff --git a/renderdoc/driver/d3d12/d3d12_debug.h b/renderdoc/driver/d3d12/d3d12_debug.h index 1e6ff095a..0823d830f 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.h +++ b/renderdoc/driver/d3d12/d3d12_debug.h @@ -128,7 +128,7 @@ public: D3D12_GPU_VIRTUAL_ADDRESS UploadConstants(const void *data, size_t size); ID3D12RootSignature *GetMeshRootSig() { return m_MeshRootSig; } - ID3D12GraphicsCommandList4 *ResetDebugList(); + ID3D12GraphicsCommandListX *ResetDebugList(); void ResetDebugAlloc(); D3D12_CPU_DESCRIPTOR_HANDLE GetCPUHandle(CBVUAVSRVSlot slot); @@ -197,6 +197,6 @@ private: ID3DBlob *m_DepthArray2MS = NULL; // Debug lists - ID3D12GraphicsCommandList4 *m_DebugList = NULL; + ID3D12GraphicsCommandListX *m_DebugList = NULL; ID3D12CommandAllocator *m_DebugAlloc = NULL; }; diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 88a925b83..9b8f19bd7 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -88,7 +88,8 @@ HRESULT STDMETHODCALLTYPE DummyID3D12DebugDevice::QueryInterface(REFIID riid, vo if(riid == __uuidof(ID3D12InfoQueue) || riid == __uuidof(ID3D12DebugDevice) || riid == __uuidof(ID3D12Device) || riid == __uuidof(ID3D12Device1) || riid == __uuidof(ID3D12Device2) || riid == __uuidof(ID3D12Device3) || - riid == __uuidof(ID3D12Device4) || riid == __uuidof(ID3D12Device5)) + riid == __uuidof(ID3D12Device4) || riid == __uuidof(ID3D12Device5) || + riid == __uuidof(ID3D12Device6)) return m_pDevice->QueryInterface(riid, ppvObject); if(riid == __uuidof(IUnknown)) @@ -156,13 +157,45 @@ HRESULT STDMETHODCALLTYPE WrappedDownlevelDevice::QueryVideoMemoryInfo( return m_pDevice.QueryVideoMemoryInfo(NodeIndex, MemorySegmentGroup, pVideoMemoryInfo); } +HRESULT STDMETHODCALLTYPE WrappedDRED::QueryInterface(REFIID riid, void **ppvObject) +{ + return m_pDevice.QueryInterface(riid, ppvObject); +} + +ULONG STDMETHODCALLTYPE WrappedDRED::AddRef() +{ + return m_pDevice.AddRef(); +} + +ULONG STDMETHODCALLTYPE WrappedDRED::Release() +{ + return m_pDevice.Release(); +} + +HRESULT STDMETHODCALLTYPE WrappedDREDSettings::QueryInterface(REFIID riid, void **ppvObject) +{ + return m_pDevice.QueryInterface(riid, ppvObject); +} + +ULONG STDMETHODCALLTYPE WrappedDREDSettings::AddRef() +{ + return m_pDevice.AddRef(); +} + +ULONG STDMETHODCALLTYPE WrappedDREDSettings::Release() +{ + return m_pDevice.Release(); +} + WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitParams params, bool enabledDebugLayer) : m_RefCounter(realDevice, false), m_SoftRefCounter(NULL, false), m_pDevice(realDevice), m_debugLayerEnabled(enabledDebugLayer), - m_WrappedDownlevel(*this) + m_WrappedDownlevel(*this), + m_DRED(*this), + m_DREDSettings(*this) { if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->RegisterMemoryRegion(this, sizeof(WrappedID3D12Device)); @@ -181,6 +214,7 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara m_pDevice3 = NULL; m_pDevice4 = NULL; m_pDevice5 = NULL; + m_pDevice6 = NULL; m_pDownlevel = NULL; if(m_pDevice) { @@ -189,6 +223,10 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara m_pDevice->QueryInterface(__uuidof(ID3D12Device3), (void **)&m_pDevice3); m_pDevice->QueryInterface(__uuidof(ID3D12Device4), (void **)&m_pDevice4); m_pDevice->QueryInterface(__uuidof(ID3D12Device5), (void **)&m_pDevice5); + m_pDevice->QueryInterface(__uuidof(ID3D12Device6), (void **)&m_pDevice6); + m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedData), (void **)&m_DRED.m_pReal); + m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedDataSettings), + (void **)&m_DREDSettings.m_pReal); m_pDevice->QueryInterface(__uuidof(ID3D12DeviceDownlevel), (void **)&m_pDownlevel); for(size_t i = 0; i < ARRAY_COUNT(m_DescriptorIncrements); i++) @@ -455,7 +493,10 @@ WrappedID3D12Device::~WrappedID3D12Device() SAFE_DELETE(m_ResourceManager); + SAFE_RELEASE(m_DRED.m_pReal); + SAFE_RELEASE(m_DREDSettings.m_pReal); SAFE_RELEASE(m_pDownlevel); + SAFE_RELEASE(m_pDevice6); SAFE_RELEASE(m_pDevice5); SAFE_RELEASE(m_pDevice4); SAFE_RELEASE(m_pDevice3); @@ -641,6 +682,19 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject) return E_NOINTERFACE; } } + else if(riid == __uuidof(ID3D12Device6)) + { + if(m_pDevice6) + { + AddRef(); + *ppvObject = (ID3D12Device6 *)this; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == __uuidof(ID3D12DeviceDownlevel)) { if(m_pDownlevel) @@ -724,6 +778,32 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject) return S_OK; } } + else if(riid == __uuidof(ID3D12DeviceRemovedExtendedData)) + { + if(m_DRED.m_pReal) + { + AddRef(); + *ppvObject = (ID3D12DeviceRemovedExtendedData *)&m_DRED; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } + else if(riid == __uuidof(ID3D12DeviceRemovedExtendedDataSettings)) + { + if(m_DREDSettings.m_pReal) + { + AddRef(); + *ppvObject = (ID3D12DeviceRemovedExtendedDataSettings *)&m_DREDSettings; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == IRenderDoc_uuid) { AddRef(); @@ -2327,6 +2407,14 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12Device::QueryVideoMemoryInfo( return m_pDownlevel->QueryVideoMemoryInfo(NodeIndex, MemorySegmentGroup, pVideoMemoryInfo); } +HRESULT STDMETHODCALLTYPE WrappedID3D12Device::SetBackgroundProcessingMode( + D3D12_BACKGROUND_PROCESSING_MODE Mode, D3D12_MEASUREMENTS_ACTION MeasurementsAction, + _In_opt_ HANDLE hEventToSignalUponCompletion, _Out_opt_ BOOL *pbFurtherMeasurementsDesired) +{ + return m_pDevice6->SetBackgroundProcessingMode( + Mode, MeasurementsAction, hEventToSignalUponCompletion, pbFurtherMeasurementsDesired); +} + byte *WrappedID3D12Device::GetTempMemory(size_t s) { TempMem *mem = (TempMem *)Threading::GetTLSValue(tempMemoryTLSSlot); @@ -2561,9 +2649,9 @@ void WrappedID3D12Device::GPUSyncAllQueues() GPUSync(m_Queues[i], m_QueueFences[i]); } -ID3D12GraphicsCommandList4 *WrappedID3D12Device::GetNewList() +ID3D12GraphicsCommandListX *WrappedID3D12Device::GetNewList() { - ID3D12GraphicsCommandList4 *ret = NULL; + ID3D12GraphicsCommandListX *ret = NULL; if(!m_InternalCmds.freecmds.empty()) { @@ -2580,7 +2668,7 @@ ID3D12GraphicsCommandList4 *WrappedID3D12Device::GetNewList() InternalRef(); // safe to upcast because this is a wrapped object. - ret = (ID3D12GraphicsCommandList4 *)list; + ret = (ID3D12GraphicsCommandListX *)list; RDCASSERTEQUAL(hr, S_OK); @@ -2602,7 +2690,7 @@ ID3D12GraphicsCommandList4 *WrappedID3D12Device::GetNewList() return ret; } -ID3D12GraphicsCommandList4 *WrappedID3D12Device::GetInitialStateList() +ID3D12GraphicsCommandListX *WrappedID3D12Device::GetInitialStateList() { if(initStateCurBatch >= initialStateMaxBatch) { @@ -2631,7 +2719,7 @@ void WrappedID3D12Device::CloseInitialStateList() initStateCurBatch = 0; } -void WrappedID3D12Device::ExecuteList(ID3D12GraphicsCommandList4 *list, +void WrappedID3D12Device::ExecuteList(ID3D12GraphicsCommandListX *list, WrappedID3D12CommandQueue *queue, bool InFrameCaptureBoundary) { if(queue == NULL) @@ -2643,7 +2731,7 @@ void WrappedID3D12Device::ExecuteList(ID3D12GraphicsCommandList4 *list, MarkListExecuted(list); } -void WrappedID3D12Device::MarkListExecuted(ID3D12GraphicsCommandList4 *list) +void WrappedID3D12Device::MarkListExecuted(ID3D12GraphicsCommandListX *list) { for(auto it = m_InternalCmds.pendingcmds.begin(); it != m_InternalCmds.pendingcmds.end(); ++it) { @@ -3099,7 +3187,7 @@ void WrappedID3D12Device::ReplayLog(uint32_t startEventID, uint32_t endEventID, // has chosen a subsection that lies within a command list if(partial) { - ID3D12GraphicsCommandList4 *list = cmd.m_OutsideCmdList = GetNewList(); + ID3D12GraphicsCommandListX *list = cmd.m_OutsideCmdList = GetNewList(); cmd.m_RenderState.ApplyState(this, list); } diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index d5e5659cd..bd0b1c174 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -286,6 +286,59 @@ struct WrappedDownlevelDevice : public ID3D12DeviceDownlevel _Out_ DXGI_QUERY_VIDEO_MEMORY_INFO *pVideoMemoryInfo); }; +struct WrappedDRED : public ID3D12DeviceRemovedExtendedData +{ + WrappedID3D12Device &m_pDevice; + ID3D12DeviceRemovedExtendedData *m_pReal = NULL; + + WrappedDRED(WrappedID3D12Device &dev) : m_pDevice(dev) {} + ////////////////////////////// + // implement IUnknown + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); + ULONG STDMETHODCALLTYPE AddRef(); + ULONG STDMETHODCALLTYPE Release(); + + ////////////////////////////// + // implement ID3D12DeviceRemovedExtendedDataSettings + virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput(D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput) + { + return m_pReal->GetAutoBreadcrumbsOutput(pOutput); + } + + virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput(D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput) + { + return m_pReal->GetPageFaultAllocationOutput(pOutput); + } +}; + +struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings +{ + WrappedID3D12Device &m_pDevice; + ID3D12DeviceRemovedExtendedDataSettings *m_pReal = NULL; + + WrappedDREDSettings(WrappedID3D12Device &dev) : m_pDevice(dev) {} + ////////////////////////////// + // implement IUnknown + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); + ULONG STDMETHODCALLTYPE AddRef(); + ULONG STDMETHODCALLTYPE Release(); + + ////////////////////////////// + // implement ID3D12DeviceRemovedExtendedDataSettings + virtual void STDMETHODCALLTYPE SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT setting) + { + m_pReal->SetAutoBreadcrumbsEnablement(setting); + } + virtual void STDMETHODCALLTYPE SetPageFaultEnablement(D3D12_DRED_ENABLEMENT setting) + { + m_pReal->SetPageFaultEnablement(setting); + } + virtual void STDMETHODCALLTYPE SetWatsonDumpEnablement(D3D12_DRED_ENABLEMENT setting) + { + m_pReal->SetWatsonDumpEnablement(setting); + } +}; + class WrappedID3D12CommandQueue; #define IMPLEMENT_FUNCTION_THREAD_SERIALISED(ret, func, ...) \ @@ -293,7 +346,7 @@ class WrappedID3D12CommandQueue; template \ bool CONCAT(Serialise_, func(SerialiserType &ser, __VA_ARGS__)); -class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3D12Device5 +class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3D12Device6 { private: ID3D12Device *m_pDevice; @@ -302,6 +355,7 @@ private: ID3D12Device3 *m_pDevice3; ID3D12Device4 *m_pDevice4; ID3D12Device5 *m_pDevice5; + ID3D12Device6 *m_pDevice6; ID3D12DeviceDownlevel *m_pDownlevel; // list of all queues being captured @@ -319,6 +373,8 @@ private: UINT64 m_GPUSyncCounter; WrappedDownlevelDevice m_WrappedDownlevel; + WrappedDRED m_DRED; + WrappedDREDSettings m_DREDSettings; std::vector m_CommandAllocators; @@ -556,11 +612,11 @@ public: submittedcmds.clear(); } - std::vector freecmds; + std::vector freecmds; // -> GetNextCmd() -> - std::vector pendingcmds; + std::vector pendingcmds; // -> ExecuteLists() -> - std::vector submittedcmds; + std::vector submittedcmds; // -> FlushLists()--------back to freecmds--------^ } m_InternalCmds; @@ -568,19 +624,19 @@ public: // creating fewer temporary lists and making too bloated lists static const int initialStateMaxBatch = 100; int initStateCurBatch; - ID3D12GraphicsCommandList4 *initStateCurList; + ID3D12GraphicsCommandListX *initStateCurList; - ID3D12GraphicsCommandList4 *GetNewList(); - ID3D12GraphicsCommandList4 *GetInitialStateList(); + ID3D12GraphicsCommandListX *GetNewList(); + ID3D12GraphicsCommandListX *GetInitialStateList(); void CloseInitialStateList(); ID3D12Resource *GetUploadBuffer(uint64_t chunkOffset, uint64_t byteSize); void ApplyInitialContents(); void AddCaptureSubmission(); - void ExecuteList(ID3D12GraphicsCommandList4 *list, WrappedID3D12CommandQueue *queue = NULL, + void ExecuteList(ID3D12GraphicsCommandListX *list, WrappedID3D12CommandQueue *queue = NULL, bool InFrameCaptureBoundary = false); - void MarkListExecuted(ID3D12GraphicsCommandList4 *list); + void MarkListExecuted(ID3D12GraphicsCommandListX *list); void ExecuteLists(WrappedID3D12CommandQueue *queue = NULL, bool InFrameCaptureBoundary = false); void FlushLists(bool forceSync = false, ID3D12CommandQueue *queue = NULL); @@ -616,7 +672,8 @@ public: { if(iid == __uuidof(ID3D12Device) || iid == __uuidof(ID3D12Device1) || iid == __uuidof(ID3D12Device2) || iid == __uuidof(ID3D12Device3) || - iid == __uuidof(ID3D12Device4) || iid == __uuidof(ID3D12Device5)) + iid == __uuidof(ID3D12Device4) || iid == __uuidof(ID3D12Device5) || + iid == __uuidof(ID3D12Device5)) return true; return false; @@ -635,6 +692,8 @@ public: return (ID3D12Device4 *)this; else if(iid == __uuidof(ID3D12Device5)) return (ID3D12Device5 *)this; + else if(iid == __uuidof(ID3D12Device6)) + return (ID3D12Device6 *)this; RDCERR("Requested unknown device interface %s", ToStr(iid).c_str()); @@ -700,6 +759,12 @@ public: this->AddRef(); return S_OK; } + else if(riid == __uuidof(ID3D12Device6)) + { + *ppvDevice = (ID3D12Device6 *)this; + this->AddRef(); + return S_OK; + } return E_NOINTERFACE; } @@ -1055,4 +1120,10 @@ public: virtual HRESULT STDMETHODCALLTYPE QueryVideoMemoryInfo(UINT NodeIndex, DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup, _Out_ DXGI_QUERY_VIDEO_MEMORY_INFO *pVideoMemoryInfo); + + ////////////////////////////// + // implement ID3D12Device6 + virtual HRESULT STDMETHODCALLTYPE SetBackgroundProcessingMode( + D3D12_BACKGROUND_PROCESSING_MODE Mode, D3D12_MEASUREMENTS_ACTION MeasurementsAction, + _In_opt_ HANDLE hEventToSignalUponCompletion, _Out_opt_ BOOL *pbFurtherMeasurementsDesired); }; diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 791a797b9..8ef3132d4 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -278,7 +278,8 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST if(riid != __uuidof(ID3D12GraphicsCommandList) && riid != __uuidof(ID3D12CommandList) && riid != __uuidof(ID3D12GraphicsCommandList1) && riid != __uuidof(ID3D12GraphicsCommandList2) && - riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4)) + riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4) && + riid != __uuidof(ID3D12GraphicsCommandList5)) return E_NOINTERFACE; void *realptr = NULL; @@ -301,6 +302,8 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST real = (ID3D12GraphicsCommandList3 *)realptr; else if(riid == __uuidof(ID3D12GraphicsCommandList4)) real = (ID3D12GraphicsCommandList4 *)realptr; + else if(riid == __uuidof(ID3D12GraphicsCommandList5)) + real = (ID3D12GraphicsCommandList5 *)realptr; if(SUCCEEDED(ret)) { @@ -351,6 +354,8 @@ HRESULT WrappedID3D12Device::CreateCommandList(UINT nodeMask, D3D12_COMMAND_LIST *ppCommandList = (ID3D12GraphicsCommandList3 *)wrapped; else if(riid == __uuidof(ID3D12GraphicsCommandList4)) *ppCommandList = (ID3D12GraphicsCommandList4 *)wrapped; + else if(riid == __uuidof(ID3D12GraphicsCommandList5)) + *ppCommandList = (ID3D12GraphicsCommandList5 *)wrapped; else if(riid == __uuidof(ID3D12CommandList)) *ppCommandList = (ID3D12CommandList *)wrapped; else diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp index 492f26b38..6a8066c8a 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp @@ -84,7 +84,8 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS if(riid != __uuidof(ID3D12GraphicsCommandList) && riid != __uuidof(ID3D12CommandList) && riid != __uuidof(ID3D12GraphicsCommandList1) && riid != __uuidof(ID3D12GraphicsCommandList2) && - riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4)) + riid != __uuidof(ID3D12GraphicsCommandList3) && riid != __uuidof(ID3D12GraphicsCommandList4) && + riid != __uuidof(ID3D12GraphicsCommandList5)) return E_NOINTERFACE; void *realptr = NULL; @@ -106,6 +107,8 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS real = (ID3D12GraphicsCommandList3 *)realptr; else if(riid == __uuidof(ID3D12GraphicsCommandList4)) real = (ID3D12GraphicsCommandList4 *)realptr; + else if(riid == __uuidof(ID3D12GraphicsCommandList5)) + real = (ID3D12GraphicsCommandList5 *)realptr; if(SUCCEEDED(ret)) { @@ -152,6 +155,8 @@ HRESULT WrappedID3D12Device::CreateCommandList1(UINT nodeMask, D3D12_COMMAND_LIS *ppCommandList = (ID3D12GraphicsCommandList3 *)wrapped; else if(riid == __uuidof(ID3D12GraphicsCommandList4)) *ppCommandList = (ID3D12GraphicsCommandList4 *)wrapped; + else if(riid == __uuidof(ID3D12GraphicsCommandList5)) + *ppCommandList = (ID3D12GraphicsCommandList5 *)wrapped; else if(riid == __uuidof(ID3D12CommandList)) *ppCommandList = (ID3D12CommandList *)wrapped; else diff --git a/renderdoc/driver/d3d12/d3d12_hooks.cpp b/renderdoc/driver/d3d12/d3d12_hooks.cpp index f33eab1fb..cdbe13ffe 100644 --- a/renderdoc/driver/d3d12/d3d12_hooks.cpp +++ b/renderdoc/driver/d3d12/d3d12_hooks.cpp @@ -258,7 +258,8 @@ private: if(riid != __uuidof(ID3D12Device) && riid != __uuidof(ID3D12Device1) && riid != __uuidof(ID3D12Device2) && riid != __uuidof(ID3D12Device3) && - riid != __uuidof(ID3D12Device4) && riid != __uuidof(ID3D12Device5)) + riid != __uuidof(ID3D12Device4) && riid != __uuidof(ID3D12Device5) && + riid != __uuidof(ID3D12Device6)) { RDCERR("Unsupported UUID %s for D3D12CreateDevice", ToStr(riid).c_str()); return E_NOINTERFACE; @@ -333,6 +334,11 @@ private: ID3D12Device5 *dev5 = (ID3D12Device5 *)*ppDevice; dev = (ID3D12Device *)dev5; } + else if(riid == __uuidof(ID3D12Device6)) + { + ID3D12Device6 *dev6 = (ID3D12Device6 *)*ppDevice; + dev = (ID3D12Device *)dev6; + } WrappedID3D12Device *wrap = new WrappedID3D12Device(dev, params, EnableDebugLayer); @@ -350,6 +356,8 @@ private: *ppDevice = (ID3D12Device4 *)wrap; else if(riid == __uuidof(ID3D12Device5)) *ppDevice = (ID3D12Device5 *)wrap; + else if(riid == __uuidof(ID3D12Device6)) + *ppDevice = (ID3D12Device6 *)wrap; } } else if(SUCCEEDED(ret)) diff --git a/renderdoc/driver/d3d12/d3d12_outputwindow.cpp b/renderdoc/driver/d3d12/d3d12_outputwindow.cpp index 609ef11e4..7b01d7731 100644 --- a/renderdoc/driver/d3d12/d3d12_outputwindow.cpp +++ b/renderdoc/driver/d3d12/d3d12_outputwindow.cpp @@ -637,7 +637,7 @@ void D3D12Replay::FlipOutputWindow(uint64_t id) m_pDevice->GetQueue()->QueryInterface(__uuidof(ID3D12CommandQueueDownlevel), (void **)&downlevel); downlevel->Present(list, res, outw.wnd, D3D12_DOWNLEVEL_PRESENT_FLAG_NONE); SAFE_RELEASE(downlevel); - m_pDevice->MarkListExecuted((ID3D12GraphicsCommandList4 *)list); + m_pDevice->MarkListExecuted((ID3D12GraphicsCommandListX *)list); list = m_pDevice->GetNewList(); diff --git a/renderdoc/driver/d3d12/d3d12_overlay.cpp b/renderdoc/driver/d3d12/d3d12_overlay.cpp index 5d00ca57f..48240b36a 100644 --- a/renderdoc/driver/d3d12/d3d12_overlay.cpp +++ b/renderdoc/driver/d3d12/d3d12_overlay.cpp @@ -52,7 +52,7 @@ struct D3D12QuadOverdrawCallback : public D3D12DrawcallCallback { m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = NULL; } - void PreDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) + void PreDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) { if(std::find(m_Events.begin(), m_Events.end(), eid) == m_Events.end()) return; @@ -221,7 +221,7 @@ struct D3D12QuadOverdrawCallback : public D3D12DrawcallCallback rs.ApplyState(m_pDevice, cmd); } - bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) + bool PostDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) { if(std::find(m_Events.begin(), m_Events.end(), eid) == m_Events.end()) return false; @@ -235,16 +235,16 @@ struct D3D12QuadOverdrawCallback : public D3D12DrawcallCallback return true; } - void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) + void PostRedraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) { // nothing to do } // Dispatches don't rasterize, so do nothing - void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) {} - bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) { return false; } - void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) {} - void PreCloseCommandList(ID3D12GraphicsCommandList4 *cmd) {} + void PreDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) {} + bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) { return false; } + void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) {} + void PreCloseCommandList(ID3D12GraphicsCommandListX *cmd) {} void AliasEvent(uint32_t primary, uint32_t alias) { // don't care diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index 269acbd1d..ab0ad599f 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -352,7 +352,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) recreate = true; } - ID3D12GraphicsCommandList4 *list = NULL; + ID3D12GraphicsCommandListX *list = NULL; if(!(drawcall->flags & DrawFlags::Indexed)) { @@ -847,7 +847,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) D3D12_STREAM_OUTPUT_BUFFER_VIEW view; - ID3D12GraphicsCommandList4 *list = NULL; + ID3D12GraphicsCommandListX *list = NULL; view.BufferFilledSizeLocation = m_SOBuffer->GetGPUVirtualAddress(); view.BufferLocation = m_SOBuffer->GetGPUVirtualAddress() + 64; @@ -1341,19 +1341,19 @@ struct D3D12InitPostVSCallback : public D3D12DrawcallCallback m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = this; } ~D3D12InitPostVSCallback() { m_pDevice->GetQueue()->GetCommandData()->m_DrawcallCallback = NULL; } - void PreDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override + void PreDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { if(std::find(m_Events.begin(), m_Events.end(), eid) != m_Events.end()) m_Replay->InitPostVSBuffers(eid); } - bool PostDraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override { return false; } - void PostRedraw(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override {} + bool PostDraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { return false; } + void PostRedraw(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override {} // Dispatches don't rasterize, so do nothing - void PreDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override {} - bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override { return false; } - void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandList4 *cmd) override {} - void PreCloseCommandList(ID3D12GraphicsCommandList4 *cmd) override {} + void PreDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override {} + bool PostDispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override { return false; } + void PostRedispatch(uint32_t eid, ID3D12GraphicsCommandListX *cmd) override {} + void PreCloseCommandList(ID3D12GraphicsCommandListX *cmd) override {} void AliasEvent(uint32_t primary, uint32_t alias) override { if(std::find(m_Events.begin(), m_Events.end(), primary) != m_Events.end()) diff --git a/renderdoc/driver/d3d12/d3d12_state.cpp b/renderdoc/driver/d3d12/d3d12_state.cpp index 482ef931e..7c6f5f459 100644 --- a/renderdoc/driver/d3d12/d3d12_state.cpp +++ b/renderdoc/driver/d3d12/d3d12_state.cpp @@ -73,7 +73,7 @@ ResourceId D3D12RenderState::GetDSVID() const return dsv.GetResResourceId(); } -void D3D12RenderState::ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsCommandList4 *cmd) const +void D3D12RenderState::ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsCommandListX *cmd) const { D3D12_COMMAND_LIST_TYPE type = cmd->GetType(); @@ -183,7 +183,7 @@ void D3D12RenderState::ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsComman } } -void D3D12RenderState::ApplyComputeRootElements(ID3D12GraphicsCommandList4 *cmd) const +void D3D12RenderState::ApplyComputeRootElements(ID3D12GraphicsCommandListX *cmd) const { for(size_t i = 0; i < compute.sigelems.size(); i++) { @@ -202,7 +202,7 @@ void D3D12RenderState::ApplyComputeRootElements(ID3D12GraphicsCommandList4 *cmd) } } -void D3D12RenderState::ApplyGraphicsRootElements(ID3D12GraphicsCommandList4 *cmd) const +void D3D12RenderState::ApplyGraphicsRootElements(ID3D12GraphicsCommandListX *cmd) const { for(size_t i = 0; i < graphics.sigelems.size(); i++) { diff --git a/renderdoc/driver/d3d12/d3d12_state.h b/renderdoc/driver/d3d12/d3d12_state.h index adba4dd9c..31beedc4a 100644 --- a/renderdoc/driver/d3d12/d3d12_state.h +++ b/renderdoc/driver/d3d12/d3d12_state.h @@ -46,9 +46,9 @@ struct D3D12RenderState D3D12RenderState() = default; D3D12RenderState &operator=(const D3D12RenderState &o); - void ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsCommandList4 *list) const; - void ApplyComputeRootElements(ID3D12GraphicsCommandList4 *cmd) const; - void ApplyGraphicsRootElements(ID3D12GraphicsCommandList4 *cmd) const; + void ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsCommandListX *list) const; + void ApplyComputeRootElements(ID3D12GraphicsCommandListX *cmd) const; + void ApplyGraphicsRootElements(ID3D12GraphicsCommandListX *cmd) const; std::vector views; std::vector scissors; @@ -61,6 +61,10 @@ struct D3D12RenderState std::vector GetRTVIDs() const; ResourceId GetDSVID() const; + ResourceId shadingRateImage; + D3D12_SHADING_RATE shadingRate; + D3D12_SHADING_RATE_COMBINER shadingRateCombiners[2]; + struct SignatureElement { SignatureElement() : type(eRootUnknown), offset(0) {} diff --git a/renderdoc/driver/d3d12/d3d12_stringise.cpp b/renderdoc/driver/d3d12/d3d12_stringise.cpp index 330dab249..653a3c9aa 100644 --- a/renderdoc/driver/d3d12/d3d12_stringise.cpp +++ b/renderdoc/driver/d3d12/d3d12_stringise.cpp @@ -28,8 +28,8 @@ template <> rdcstr DoStringise(const D3D12Chunk &el) { - RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::Max == 1102, "Chunks changed without updating names"); - RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::List_EndRenderPass == 1101, + RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::Max == 1104, "Chunks changed without updating names"); + RDCCOMPILE_ASSERT((uint32_t)D3D12Chunk::List_RSSetShadingRateImage == 1103, "New chunks must be appended otherwise it breaks old captures"); BEGIN_ENUM_STRINGISE(D3D12Chunk) @@ -188,6 +188,10 @@ rdcstr DoStringise(const D3D12Chunk &el) "ID3D12GraphicsCommandList2::WriteBufferImmediate"); STRINGISE_ENUM_CLASS_NAMED(List_BeginRenderPass, "ID3D12GraphicsCommandList4::BeginRenderPass"); STRINGISE_ENUM_CLASS_NAMED(List_EndRenderPass, "ID3D12GraphicsCommandList4::EndRenderPass"); + STRINGISE_ENUM_CLASS_NAMED(List_RSSetShadingRate, + "ID3D12GraphicsCommandList5::RSSetShadingRate"); + STRINGISE_ENUM_CLASS_NAMED(List_RSSetShadingRateImage, + "ID3D12GraphicsCommandList5::RSSetShadingRateImage"); STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk"); } END_ENUM_STRINGISE() @@ -809,6 +813,36 @@ rdcstr DoStringise(const D3D12_RENDER_PASS_ENDING_ACCESS_TYPE &el) END_ENUM_STRINGISE(); } +template <> +rdcstr DoStringise(const D3D12_SHADING_RATE &el) +{ + BEGIN_ENUM_STRINGISE(D3D12_SHADING_RATE); + { + STRINGISE_ENUM(D3D12_SHADING_RATE_1X1) + STRINGISE_ENUM(D3D12_SHADING_RATE_1X2) + STRINGISE_ENUM(D3D12_SHADING_RATE_2X1) + STRINGISE_ENUM(D3D12_SHADING_RATE_2X2) + STRINGISE_ENUM(D3D12_SHADING_RATE_2X4) + STRINGISE_ENUM(D3D12_SHADING_RATE_4X2) + STRINGISE_ENUM(D3D12_SHADING_RATE_4X4) + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const D3D12_SHADING_RATE_COMBINER &el) +{ + BEGIN_ENUM_STRINGISE(D3D12_SHADING_RATE_COMBINER); + { + STRINGISE_ENUM(D3D12_SHADING_RATE_COMBINER_PASSTHROUGH) + STRINGISE_ENUM(D3D12_SHADING_RATE_COMBINER_OVERRIDE) + STRINGISE_ENUM(D3D12_SHADING_RATE_COMBINER_MIN) + STRINGISE_ENUM(D3D12_SHADING_RATE_COMBINER_MAX) + STRINGISE_ENUM(D3D12_SHADING_RATE_COMBINER_SUM) + } + END_ENUM_STRINGISE(); +} + template <> rdcstr DoStringise(const D3D12_CLEAR_FLAGS &el) { diff --git a/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj b/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj index 63f61deb3..79e5e1f86 100644 --- a/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj +++ b/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj @@ -104,6 +104,7 @@ + diff --git a/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj.filters b/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj.filters index 66ce61d42..d75bfc849 100644 --- a/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj.filters +++ b/renderdoc/driver/d3d12/renderdoc_d3d12.vcxproj.filters @@ -179,5 +179,8 @@ Wrapped + + Wrapped + \ No newline at end of file diff --git a/renderdoc/driver/dx/official/d3d11sdklayers.h b/renderdoc/driver/dx/official/d3d11sdklayers.h index b4cf36dc4..b2774e582 100644 --- a/renderdoc/driver/dx/official/d3d11sdklayers.h +++ b/renderdoc/driver/dx/official/d3d11sdklayers.h @@ -2082,7 +2082,24 @@ enum D3D11_MESSAGE_ID D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE = ( D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_SIZE + 1 ) , D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS = ( D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE + 1 ) , D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET = ( D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS + 1 ) , - D3D11_MESSAGE_ID_D3D11_5_MESSAGES_END = ( D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET + 1 ) + D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD = ( D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET + 1 ) , + D3D11_MESSAGE_ID_LIVE_TRACKEDWORKLOAD = ( D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD + 1 ) , + D3D11_MESSAGE_ID_DESTROY_TRACKEDWORKLOAD = ( D3D11_MESSAGE_ID_LIVE_TRACKEDWORKLOAD + 1 ) , + D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_NULLPARAM = ( D3D11_MESSAGE_ID_DESTROY_TRACKEDWORKLOAD + 1 ) , + D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_MAX_INSTANCES = ( D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_NULLPARAM + 1 ) , + D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_DEADLINE_TYPE = ( D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_MAX_INSTANCES + 1 ) , + D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_ENGINE_TYPE = ( D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_DEADLINE_TYPE + 1 ) , + D3D11_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOADS = ( D3D11_MESSAGE_ID_CREATE_TRACKED_WORKLOAD_INVALID_ENGINE_TYPE + 1 ) , + D3D11_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOAD_PAIRS = ( D3D11_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOADS + 1 ) , + D3D11_MESSAGE_ID_INCOMPLETE_TRACKED_WORKLOAD_PAIR = ( D3D11_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOAD_PAIRS + 1 ) , + D3D11_MESSAGE_ID_OUT_OF_ORDER_TRACKED_WORKLOAD_PAIR = ( D3D11_MESSAGE_ID_INCOMPLETE_TRACKED_WORKLOAD_PAIR + 1 ) , + D3D11_MESSAGE_ID_CANNOT_ADD_TRACKED_WORKLOAD = ( D3D11_MESSAGE_ID_OUT_OF_ORDER_TRACKED_WORKLOAD_PAIR + 1 ) , + D3D11_MESSAGE_ID_TRACKED_WORKLOAD_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CANNOT_ADD_TRACKED_WORKLOAD + 1 ) , + D3D11_MESSAGE_ID_TRACKED_WORKLOAD_ENGINE_TYPE_NOT_FOUND = ( D3D11_MESSAGE_ID_TRACKED_WORKLOAD_NOT_SUPPORTED + 1 ) , + D3D11_MESSAGE_ID_NO_TRACKED_WORKLOAD_SLOT_AVAILABLE = ( D3D11_MESSAGE_ID_TRACKED_WORKLOAD_ENGINE_TYPE_NOT_FOUND + 1 ) , + D3D11_MESSAGE_ID_END_TRACKED_WORKLOAD_INVALID_ARG = ( D3D11_MESSAGE_ID_NO_TRACKED_WORKLOAD_SLOT_AVAILABLE + 1 ) , + D3D11_MESSAGE_ID_TRACKED_WORKLOAD_DISJOINT_FAILURE = ( D3D11_MESSAGE_ID_END_TRACKED_WORKLOAD_INVALID_ARG + 1 ) , + D3D11_MESSAGE_ID_D3D11_5_MESSAGES_END = ( D3D11_MESSAGE_ID_TRACKED_WORKLOAD_DISJOINT_FAILURE + 1 ) } D3D11_MESSAGE_ID; typedef struct D3D11_MESSAGE diff --git a/renderdoc/driver/dx/official/d3d12.h b/renderdoc/driver/dx/official/d3d12.h index 2562adf44..a2cf2c4d9 100644 --- a/renderdoc/driver/dx/official/d3d12.h +++ b/renderdoc/driver/dx/official/d3d12.h @@ -288,6 +288,27 @@ typedef interface ID3D12Device5 ID3D12Device5; #endif /* __ID3D12Device5_FWD_DEFINED__ */ +#ifndef __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ +#define __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ +typedef interface ID3D12DeviceRemovedExtendedDataSettings ID3D12DeviceRemovedExtendedDataSettings; + +#endif /* __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ */ + + +#ifndef __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ +#define __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ +typedef interface ID3D12DeviceRemovedExtendedData ID3D12DeviceRemovedExtendedData; + +#endif /* __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ */ + + +#ifndef __ID3D12Device6_FWD_DEFINED__ +#define __ID3D12Device6_FWD_DEFINED__ +typedef interface ID3D12Device6 ID3D12Device6; + +#endif /* __ID3D12Device6_FWD_DEFINED__ */ + + #ifndef __ID3D12Resource1_FWD_DEFINED__ #define __ID3D12Resource1_FWD_DEFINED__ typedef interface ID3D12Resource1 ID3D12Resource1; @@ -330,6 +351,13 @@ typedef interface ID3D12Tools ID3D12Tools; #endif /* __ID3D12Tools_FWD_DEFINED__ */ +#ifndef __ID3D12GraphicsCommandList5_FWD_DEFINED__ +#define __ID3D12GraphicsCommandList5_FWD_DEFINED__ +typedef interface ID3D12GraphicsCommandList5 ID3D12GraphicsCommandList5; + +#endif /* __ID3D12GraphicsCommandList5_FWD_DEFINED__ */ + + /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" @@ -347,7 +375,7 @@ extern "C"{ #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) #ifndef _D3D12_CONSTANTS #define _D3D12_CONSTANTS #define D3D12_16BIT_INDEX_STRIP_CUT_VALUE ( 0xffff ) @@ -920,6 +948,16 @@ extern "C"{ #define D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH ( 31 ) +#define D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE ( 16777216 ) + +#define D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE ( 16777216 ) + +#define D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE ( 536870912 ) + +#define D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS ( 1073741824 ) + +#define D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE ( 4096 ) + #define D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT ( 32 ) #define D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT ( 64 ) @@ -981,6 +1019,8 @@ extern "C"{ #define D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES ( 0xffffffff ) +#define D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT ( 2 ) + #define D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES ( 32 ) #define D3D12_SHADER_MAJOR_VERSION ( 5 ) @@ -1143,7 +1183,8 @@ enum D3D12_COMMAND_LIST_TYPE D3D12_COMMAND_LIST_TYPE_COMPUTE = 2, D3D12_COMMAND_LIST_TYPE_COPY = 3, D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE = 4, - D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS = 5 + D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS = 5, + D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE = 6 } D3D12_COMMAND_LIST_TYPE; typedef @@ -1917,7 +1958,9 @@ enum D3D12_FEATURE D3D12_FEATURE_D3D12_OPTIONS4 = 23, D3D12_FEATURE_SERIALIZATION = 24, D3D12_FEATURE_CROSS_NODE = 25, - D3D12_FEATURE_D3D12_OPTIONS5 = 27 + D3D12_FEATURE_D3D12_OPTIONS5 = 27, + D3D12_FEATURE_D3D12_OPTIONS6 = 30, + D3D12_FEATURE_QUERY_META_COMMAND = 31 } D3D12_FEATURE; typedef @@ -2132,7 +2175,8 @@ enum D3D_SHADER_MODEL D3D_SHADER_MODEL_6_1 = 0x61, D3D_SHADER_MODEL_6_2 = 0x62, D3D_SHADER_MODEL_6_3 = 0x63, - D3D_SHADER_MODEL_6_4 = 0x64 + D3D_SHADER_MODEL_6_4 = 0x64, + D3D_SHADER_MODEL_6_5 = 0x65 } D3D_SHADER_MODEL; typedef struct D3D12_FEATURE_DATA_SHADER_MODEL @@ -2199,7 +2243,8 @@ enum D3D12_COMMAND_LIST_SUPPORT_FLAGS D3D12_COMMAND_LIST_SUPPORT_FLAG_COMPUTE = ( 1 << D3D12_COMMAND_LIST_TYPE_COMPUTE ) , D3D12_COMMAND_LIST_SUPPORT_FLAG_COPY = ( 1 << D3D12_COMMAND_LIST_TYPE_COPY ) , D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_DECODE = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS ) + D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS ) , + D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE ) } D3D12_COMMAND_LIST_SUPPORT_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS ); @@ -2272,6 +2317,33 @@ typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5 _Out_ D3D12_RAYTRACING_TIER RaytracingTier; } D3D12_FEATURE_DATA_D3D12_OPTIONS5; +typedef +enum D3D12_VARIABLE_SHADING_RATE_TIER + { + D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED = 0, + D3D12_VARIABLE_SHADING_RATE_TIER_1 = 1, + D3D12_VARIABLE_SHADING_RATE_TIER_2 = 2 + } D3D12_VARIABLE_SHADING_RATE_TIER; + +typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS6 + { + _Out_ BOOL AdditionalShadingRatesSupported; + _Out_ BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing; + _Out_ D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier; + _Out_ UINT ShadingRateImageTileSize; + _Out_ BOOL BackgroundProcessingSupported; + } D3D12_FEATURE_DATA_D3D12_OPTIONS6; + +typedef struct D3D12_FEATURE_DATA_QUERY_META_COMMAND + { + _In_ GUID CommandId; + _In_ UINT NodeMask; + _Field_size_bytes_full_opt_( QueryInputDataSizeInBytes ) const void *pQueryInputData; + _In_ SIZE_T QueryInputDataSizeInBytes; + _Field_size_bytes_full_( QueryOutputDataSizeInBytes ) void *pQueryOutputData; + _In_ SIZE_T QueryOutputDataSizeInBytes; + } D3D12_FEATURE_DATA_QUERY_META_COMMAND; + typedef struct D3D12_RESOURCE_ALLOCATION_INFO { UINT64 SizeInBytes; @@ -2522,6 +2594,7 @@ enum D3D12_RESOURCE_STATES D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000, D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000, D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 0x400000, + D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 0x1000000, D3D12_RESOURCE_STATE_GENERIC_READ = ( ( ( ( ( 0x1 | 0x2 ) | 0x40 ) | 0x80 ) | 0x200 ) | 0x800 ) , D3D12_RESOURCE_STATE_PRESENT = 0, D3D12_RESOURCE_STATE_PREDICATION = 0x200, @@ -13090,7 +13163,9 @@ enum D3D12_AUTO_BREADCRUMB_OP D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = 36, D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = 37, D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = 38, - D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39 + D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39, + D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND = 40, + D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND = 41 } D3D12_AUTO_BREADCRUMB_OP; typedef struct D3D12_AUTO_BREADCRUMB_NODE @@ -13102,15 +13177,16 @@ typedef struct D3D12_AUTO_BREADCRUMB_NODE ID3D12GraphicsCommandList *pCommandList; ID3D12CommandQueue *pCommandQueue; UINT32 BreadcrumbCount; - UINT32 *pLastBreadcrumbValue; - D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; - struct D3D12_AUTO_BREADCRUMB_NODE *pNext; + const UINT32 *pLastBreadcrumbValue; + const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; + const struct D3D12_AUTO_BREADCRUMB_NODE *pNext; } D3D12_AUTO_BREADCRUMB_NODE; typedef enum D3D12_DRED_VERSION { - D3D12_DRED_VERSION_1_0 = 0x1 + D3D12_DRED_VERSION_1_0 = 0x1, + D3D12_DRED_VERSION_1_1 = 0x2 } D3D12_DRED_VERSION; typedef @@ -13122,18 +13198,86 @@ enum D3D12_DRED_FLAGS } D3D12_DRED_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS ); +typedef +enum D3D12_DRED_ENABLEMENT + { + D3D12_DRED_ENABLEMENT_SYSTEM_CONTROLLED = 0, + D3D12_DRED_ENABLEMENT_FORCED_OFF = 1, + D3D12_DRED_ENABLEMENT_FORCED_ON = 2 + } D3D12_DRED_ENABLEMENT; + typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA { _In_ D3D12_DRED_FLAGS Flags; _Out_ D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; } D3D12_DEVICE_REMOVED_EXTENDED_DATA; +typedef +enum D3D12_DRED_ALLOCATION_TYPE + { + D3D12_DRED_ALLOCATION_TYPE_COMMAND_QUEUE = 19, + D3D12_DRED_ALLOCATION_TYPE_COMMAND_ALLOCATOR = 20, + D3D12_DRED_ALLOCATION_TYPE_PIPELINE_STATE = 21, + D3D12_DRED_ALLOCATION_TYPE_COMMAND_LIST = 22, + D3D12_DRED_ALLOCATION_TYPE_FENCE = 23, + D3D12_DRED_ALLOCATION_TYPE_DESCRIPTOR_HEAP = 24, + D3D12_DRED_ALLOCATION_TYPE_HEAP = 25, + D3D12_DRED_ALLOCATION_TYPE_QUERY_HEAP = 27, + D3D12_DRED_ALLOCATION_TYPE_COMMAND_SIGNATURE = 28, + D3D12_DRED_ALLOCATION_TYPE_PIPELINE_LIBRARY = 29, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER = 30, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_PROCESSOR = 32, + D3D12_DRED_ALLOCATION_TYPE_RESOURCE = 34, + D3D12_DRED_ALLOCATION_TYPE_PASS = 35, + D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSION = 36, + D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSIONPOLICY = 37, + D3D12_DRED_ALLOCATION_TYPE_PROTECTEDRESOURCESESSION = 38, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER_HEAP = 39, + D3D12_DRED_ALLOCATION_TYPE_COMMAND_POOL = 40, + D3D12_DRED_ALLOCATION_TYPE_COMMAND_RECORDER = 41, + D3D12_DRED_ALLOCATION_TYPE_STATE_OBJECT = 42, + D3D12_DRED_ALLOCATION_TYPE_METACOMMAND = 43, + D3D12_DRED_ALLOCATION_TYPE_SCHEDULINGGROUP = 44, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_ESTIMATOR = 45, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_VECTOR_HEAP = 46, + D3D12_DRED_ALLOCATION_TYPE_VIDEO_EXTENSION_COMMAND = 47, + D3D12_DRED_ALLOCATION_TYPE_INVALID = 0xffffffff + } D3D12_DRED_ALLOCATION_TYPE; + +typedef struct D3D12_DRED_ALLOCATION_NODE + { + const char *ObjectNameA; + const wchar_t *ObjectNameW; + D3D12_DRED_ALLOCATION_TYPE AllocationType; + const struct D3D12_DRED_ALLOCATION_NODE *pNext; + } D3D12_DRED_ALLOCATION_NODE; + +typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT + { + _Out_ const D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; + } D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT; + +typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT + { + D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; + _Out_ const D3D12_DRED_ALLOCATION_NODE *pHeadExistingAllocationNode; + _Out_ const D3D12_DRED_ALLOCATION_NODE *pHeadRecentFreedAllocationNode; + } D3D12_DRED_PAGE_FAULT_OUTPUT; + +typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA1 + { + HRESULT DeviceRemovedReason; + D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT AutoBreadcrumbsOutput; + D3D12_DRED_PAGE_FAULT_OUTPUT PageFaultOutput; + } D3D12_DEVICE_REMOVED_EXTENDED_DATA1; + typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA { D3D12_DRED_VERSION Version; union { D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0; + D3D12_DEVICE_REMOVED_EXTENDED_DATA1 Dred_1_1; } ; } D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA; @@ -13142,6 +13286,900 @@ typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_s_ifspec; +#ifndef __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ +#define __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceRemovedExtendedDataSettings */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63") + ID3D12DeviceRemovedExtendedDataSettings : public IUnknown + { + public: + virtual void STDMETHODCALLTYPE SetAutoBreadcrumbsEnablement( + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0000) = 0; + + virtual void STDMETHODCALLTYPE SetPageFaultEnablement( + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0001) = 0; + + virtual void STDMETHODCALLTYPE SetWatsonDumpEnablement( + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0002) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceRemovedExtendedDataSettingsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceRemovedExtendedDataSettings * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceRemovedExtendedDataSettings * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceRemovedExtendedDataSettings * This); + + void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( + ID3D12DeviceRemovedExtendedDataSettings * This, + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0000); + + void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( + ID3D12DeviceRemovedExtendedDataSettings * This, + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0001); + + void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( + ID3D12DeviceRemovedExtendedDataSettings * This, + D3D12_DRED_ENABLEMENT __MIDL__ID3D12DeviceRemovedExtendedDataSettings0002); + + END_INTERFACE + } ID3D12DeviceRemovedExtendedDataSettingsVtbl; + + interface ID3D12DeviceRemovedExtendedDataSettings + { + CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceRemovedExtendedDataSettings_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceRemovedExtendedDataSettings_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceRemovedExtendedDataSettings_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DeviceRemovedExtendedDataSettings_SetAutoBreadcrumbsEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0000) \ + ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0000) ) + +#define ID3D12DeviceRemovedExtendedDataSettings_SetPageFaultEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0001) \ + ( (This)->lpVtbl -> SetPageFaultEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0001) ) + +#define ID3D12DeviceRemovedExtendedDataSettings_SetWatsonDumpEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0002) \ + ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,__MIDL__ID3D12DeviceRemovedExtendedDataSettings0002) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ +#define __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceRemovedExtendedData */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("98931D33-5AE8-4791-AA3C-1A73A2934E71") + ID3D12DeviceRemovedExtendedData : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput( + D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput( + D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceRemovedExtendedDataVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceRemovedExtendedData * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceRemovedExtendedData * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceRemovedExtendedData * This); + + HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( + ID3D12DeviceRemovedExtendedData * This, + D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput); + + HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( + ID3D12DeviceRemovedExtendedData * This, + D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput); + + END_INTERFACE + } ID3D12DeviceRemovedExtendedDataVtbl; + + interface ID3D12DeviceRemovedExtendedData + { + CONST_VTBL struct ID3D12DeviceRemovedExtendedDataVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceRemovedExtendedData_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceRemovedExtendedData_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceRemovedExtendedData_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DeviceRemovedExtendedData_GetAutoBreadcrumbsOutput(This,pOutput) \ + ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) + +#define ID3D12DeviceRemovedExtendedData_GetPageFaultAllocationOutput(This,pOutput) \ + ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0037 */ +/* [local] */ + +typedef +enum D3D12_BACKGROUND_PROCESSING_MODE + { + D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED = 0, + D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS = ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED + 1 ) , + D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK = ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS + 1 ) , + D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_PROFILING_BY_SYSTEM = ( D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK + 1 ) + } D3D12_BACKGROUND_PROCESSING_MODE; + +typedef +enum D3D12_MEASUREMENTS_ACTION + { + D3D12_MEASUREMENTS_ACTION_KEEP_ALL = 0, + D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS = ( D3D12_MEASUREMENTS_ACTION_KEEP_ALL + 1 ) , + D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY = ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS + 1 ) , + D3D12_MEASUREMENTS_ACTION_DISCARD_PREVIOUS = ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY + 1 ) + } D3D12_MEASUREMENTS_ACTION; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0037_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0037_v0_0_s_ifspec; + +#ifndef __ID3D12Device6_INTERFACE_DEFINED__ +#define __ID3D12Device6_INTERFACE_DEFINED__ + +/* interface ID3D12Device6 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Device6; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c70b221b-40e4-4a17-89af-025a0727a6dc") + ID3D12Device6 : public ID3D12Device5 + { + public: + virtual HRESULT STDMETHODCALLTYPE SetBackgroundProcessingMode( + D3D12_BACKGROUND_PROCESSING_MODE Mode, + D3D12_MEASUREMENTS_ACTION MeasurementsAction, + _In_opt_ HANDLE hEventToSignalUponCompletion, + _Out_opt_ BOOL *pbFurtherMeasurementsDesired) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12Device6Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Device6 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Device6 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Device6 * This); + + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12Device6 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12Device6 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12Device6 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12Device6 * This, + _In_z_ LPCWSTR Name); + + UINT ( STDMETHODCALLTYPE *GetNodeCount )( + ID3D12Device6 * This); + + HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( + ID3D12Device6 * This, + _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppCommandQueue); + + HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( + ID3D12Device6 * This, + _In_ D3D12_COMMAND_LIST_TYPE type, + REFIID riid, + _COM_Outptr_ void **ppCommandAllocator); + + HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( + ID3D12Device6 * This, + _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( + ID3D12Device6 * This, + _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( + ID3D12Device6 * This, + _In_ UINT nodeMask, + _In_ D3D12_COMMAND_LIST_TYPE type, + _In_ ID3D12CommandAllocator *pCommandAllocator, + _In_opt_ ID3D12PipelineState *pInitialState, + REFIID riid, + _COM_Outptr_ void **ppCommandList); + + HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( + ID3D12Device6 * This, + D3D12_FEATURE Feature, + _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, + UINT FeatureSupportDataSize); + + HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( + ID3D12Device6 * This, + _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( + ID3D12Device6 * This, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); + + HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( + ID3D12Device6 * This, + _In_ UINT nodeMask, + _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, + _In_ SIZE_T blobLengthInBytes, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + void ( STDMETHODCALLTYPE *CreateConstantBufferView )( + ID3D12Device6 * This, + _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CreateShaderResourceView )( + ID3D12Device6 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( + ID3D12Device6 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ ID3D12Resource *pCounterResource, + _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CreateRenderTargetView )( + ID3D12Device6 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CreateDepthStencilView )( + ID3D12Device6 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CreateSampler )( + ID3D12Device6 * This, + _In_ const D3D12_SAMPLER_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + void ( STDMETHODCALLTYPE *CopyDescriptors )( + ID3D12Device6 * This, + _In_ UINT NumDestDescriptorRanges, + _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, + _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, + _In_ UINT NumSrcDescriptorRanges, + _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, + _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); + + void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( + ID3D12Device6 * This, + _In_ UINT NumDescriptors, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); + + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( + ID3D12Device6 * This, + _In_ UINT visibleMask, + _In_ UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); + + D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( + ID3D12Device6 * This, + _In_ UINT nodeMask, + D3D12_HEAP_TYPE heapType); + + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( + ID3D12Device6 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialResourceState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + HRESULT ( STDMETHODCALLTYPE *CreateHeap )( + ID3D12Device6 * This, + _In_ const D3D12_HEAP_DESC *pDesc, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( + ID3D12Device6 * This, + _In_ ID3D12Heap *pHeap, + UINT64 HeapOffset, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( + ID3D12Device6 * This, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( + ID3D12Device6 * This, + _In_ ID3D12DeviceChild *pObject, + _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, + DWORD Access, + _In_opt_ LPCWSTR Name, + _Out_ HANDLE *pHandle); + + HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( + ID3D12Device6 * This, + _In_ HANDLE NTHandle, + REFIID riid, + _COM_Outptr_opt_ void **ppvObj); + + HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( + ID3D12Device6 * This, + _In_ LPCWSTR Name, + DWORD Access, + /* [annotation][out] */ + _Out_ HANDLE *pNTHandle); + + HRESULT ( STDMETHODCALLTYPE *MakeResident )( + ID3D12Device6 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); + + HRESULT ( STDMETHODCALLTYPE *Evict )( + ID3D12Device6 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); + + HRESULT ( STDMETHODCALLTYPE *CreateFence )( + ID3D12Device6 * This, + UINT64 InitialValue, + D3D12_FENCE_FLAGS Flags, + REFIID riid, + _COM_Outptr_ void **ppFence); + + HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( + ID3D12Device6 * This); + + void ( STDMETHODCALLTYPE *GetCopyableFootprints )( + ID3D12Device6 * This, + _In_ const D3D12_RESOURCE_DESC *pResourceDesc, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 BaseOffset, + _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, + _Out_writes_opt_(NumSubresources) UINT *pNumRows, + _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, + _Out_opt_ UINT64 *pTotalBytes); + + HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( + ID3D12Device6 * This, + _In_ const D3D12_QUERY_HEAP_DESC *pDesc, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( + ID3D12Device6 * This, + BOOL Enable); + + HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( + ID3D12Device6 * This, + _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, + _In_opt_ ID3D12RootSignature *pRootSignature, + REFIID riid, + _COM_Outptr_opt_ void **ppvCommandSignature); + + void ( STDMETHODCALLTYPE *GetResourceTiling )( + ID3D12Device6 * This, + _In_ ID3D12Resource *pTiledResource, + _Out_opt_ UINT *pNumTilesForEntireResource, + _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, + _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, + _Inout_opt_ UINT *pNumSubresourceTilings, + _In_ UINT FirstSubresourceTilingToGet, + _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); + + LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( + ID3D12Device6 * This); + + HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( + ID3D12Device6 * This, + _In_reads_(BlobLength) const void *pLibraryBlob, + SIZE_T BlobLength, + REFIID riid, + _COM_Outptr_ void **ppPipelineLibrary); + + HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( + ID3D12Device6 * This, + _In_reads_(NumFences) ID3D12Fence *const *ppFences, + _In_reads_(NumFences) const UINT64 *pFenceValues, + UINT NumFences, + D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, + HANDLE hEvent); + + HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( + ID3D12Device6 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, + _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); + + HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( + ID3D12Device6 * This, + const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( + ID3D12Device6 * This, + _In_ const void *pAddress, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( + ID3D12Device6 * This, + _In_ HANDLE hFileMapping, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( + ID3D12Device6 * This, + D3D12_RESIDENCY_FLAGS Flags, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, + _In_ ID3D12Fence *pFenceToSignal, + UINT64 FenceValueToSignal); + + HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( + ID3D12Device6 * This, + _In_ UINT nodeMask, + _In_ D3D12_COMMAND_LIST_TYPE type, + _In_ D3D12_COMMAND_LIST_FLAGS flags, + REFIID riid, + _COM_Outptr_ void **ppCommandList); + + HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( + ID3D12Device6 * This, + _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppSession); + + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( + ID3D12Device6 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialResourceState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( + ID3D12Device6 * This, + _In_ const D3D12_HEAP_DESC *pDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( + ID3D12Device6 * This, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( + ID3D12Device6 * This, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + + HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( + ID3D12Device6 * This, + _In_ ID3D12LifetimeOwner *pOwner, + REFIID riid, + _COM_Outptr_ void **ppvTracker); + + void ( STDMETHODCALLTYPE *RemoveDevice )( + ID3D12Device6 * This); + + HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( + ID3D12Device6 * This, + _Inout_ UINT *pNumMetaCommands, + _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); + + HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( + ID3D12Device6 * This, + _In_ REFGUID CommandId, + _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, + _Out_opt_ UINT *pTotalStructureSizeInBytes, + _Inout_ UINT *pParameterCount, + _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); + + HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( + ID3D12Device6 * This, + _In_ REFGUID CommandId, + _In_ UINT NodeMask, + _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, + _In_ SIZE_T CreationParametersDataSizeInBytes, + REFIID riid, + _COM_Outptr_ void **ppMetaCommand); + + HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( + ID3D12Device6 * This, + const D3D12_STATE_OBJECT_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppStateObject); + + void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( + ID3D12Device6 * This, + _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, + _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); + + D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( + ID3D12Device6 * This, + _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, + _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); + + HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( + ID3D12Device6 * This, + D3D12_BACKGROUND_PROCESSING_MODE Mode, + D3D12_MEASUREMENTS_ACTION MeasurementsAction, + _In_opt_ HANDLE hEventToSignalUponCompletion, + _Out_opt_ BOOL *pbFurtherMeasurementsDesired); + + END_INTERFACE + } ID3D12Device6Vtbl; + + interface ID3D12Device6 + { + CONST_VTBL struct ID3D12Device6Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Device6_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Device6_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Device6_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Device6_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12Device6_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12Device6_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12Device6_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12Device6_GetNodeCount(This) \ + ( (This)->lpVtbl -> GetNodeCount(This) ) + +#define ID3D12Device6_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ + ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) + +#define ID3D12Device6_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ + ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) + +#define ID3D12Device6_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) + +#define ID3D12Device6_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) + +#define ID3D12Device6_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ + ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) + +#define ID3D12Device6_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ + ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) + +#define ID3D12Device6_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) + +#define ID3D12Device6_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ + ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) + +#define ID3D12Device6_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) + +#define ID3D12Device6_CreateConstantBufferView(This,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CreateSampler(This,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) + +#define ID3D12Device6_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ + ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) + +#define ID3D12Device6_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ + ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) + +#define ID3D12Device6_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) + +#define ID3D12Device6_GetCustomHeapProperties(This,nodeMask,heapType) \ + ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) + +#define ID3D12Device6_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) + +#define ID3D12Device6_CreateHeap(This,pDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) + +#define ID3D12Device6_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ + ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) + +#define ID3D12Device6_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ + ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) + +#define ID3D12Device6_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ + ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) + +#define ID3D12Device6_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ + ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) + +#define ID3D12Device6_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ + ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) + +#define ID3D12Device6_MakeResident(This,NumObjects,ppObjects) \ + ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) + +#define ID3D12Device6_Evict(This,NumObjects,ppObjects) \ + ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) + +#define ID3D12Device6_CreateFence(This,InitialValue,Flags,riid,ppFence) \ + ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) + +#define ID3D12Device6_GetDeviceRemovedReason(This) \ + ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) + +#define ID3D12Device6_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ + ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) + +#define ID3D12Device6_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) + +#define ID3D12Device6_SetStablePowerState(This,Enable) \ + ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) + +#define ID3D12Device6_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ + ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) + +#define ID3D12Device6_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ + ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) + +#define ID3D12Device6_GetAdapterLuid(This) \ + ( (This)->lpVtbl -> GetAdapterLuid(This) ) + + +#define ID3D12Device6_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ + ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) + +#define ID3D12Device6_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ + ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) + +#define ID3D12Device6_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ + ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) + + +#define ID3D12Device6_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) + + +#define ID3D12Device6_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ + ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) + +#define ID3D12Device6_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ + ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) + +#define ID3D12Device6_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ + ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) + + +#define ID3D12Device6_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ + ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) + +#define ID3D12Device6_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ + ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) + +#define ID3D12Device6_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) + +#define ID3D12Device6_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) + +#define ID3D12Device6_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ + ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) + +#define ID3D12Device6_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) + + +#define ID3D12Device6_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ + ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) + +#define ID3D12Device6_RemoveDevice(This) \ + ( (This)->lpVtbl -> RemoveDevice(This) ) + +#define ID3D12Device6_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ + ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) + +#define ID3D12Device6_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ + ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) + +#define ID3D12Device6_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ + ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) + +#define ID3D12Device6_CreateStateObject(This,pDesc,riid,ppStateObject) \ + ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) + +#define ID3D12Device6_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ + ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) + +#define ID3D12Device6_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ + ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) + + +#define ID3D12Device6_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ + ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Device6_INTERFACE_DEFINED__ */ + + #ifndef __ID3D12Resource1_INTERFACE_DEFINED__ #define __ID3D12Resource1_INTERFACE_DEFINED__ @@ -14117,7 +15155,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList3; #endif /* __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0038 */ +/* interface __MIDL_itf_d3d12_0000_0041 */ /* [local] */ typedef @@ -14209,8 +15247,8 @@ enum D3D12_RENDER_PASS_FLAGS DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS ); -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_s_ifspec; #ifndef __ID3D12MetaCommand_INTERFACE_DEFINED__ #define __ID3D12MetaCommand_INTERFACE_DEFINED__ @@ -14337,7 +15375,7 @@ EXTERN_C const IID IID_ID3D12MetaCommand; #endif /* __ID3D12MetaCommand_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0039 */ +/* interface __MIDL_itf_d3d12_0000_0042 */ /* [local] */ typedef struct D3D12_DISPATCH_RAYS_DESC @@ -14353,8 +15391,8 @@ typedef struct D3D12_DISPATCH_RAYS_DESC -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0042_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0042_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ @@ -15213,7 +16251,7 @@ EXTERN_C const IID IID_ID3D12Tools; #endif /* __ID3D12Tools_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0041 */ +/* interface __MIDL_itf_d3d12_0000_0044 */ /* [local] */ typedef struct D3D12_SUBRESOURCE_DATA @@ -15344,7 +16382,818 @@ static const UUID D3D12MetaCommand = { /* C734C97E-8077-48C8-9FDC-D9D1DD31DD77 * 0x48c8, { 0x9f, 0xdc, 0xd9, 0xd1, 0xdd, 0x31, 0xdd, 0x77 } }; -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +// -------------------------------------------------------------------------------------------------------------------------------- +// Experimental Feature: D3D12ComputeOnlyDevices +// +// Use with D3D12EnableExperimentalFeatures to enable compute only devices (D3D_FEATURE_LEVEL_1_0_CORE). +// +// Enabling D3D12ComputeOnlyDevices needs no configuration struct, pass NULL in the pConfigurationStructs array. +// +// -------------------------------------------------------------------------------------------------------------------------------- +static const UUID D3D12ComputeOnlyDevices = { /* 50f7ab08-4b6d-4e14-89a5-5d16cd272594 */ + 0x50f7ab08, + 0x4b6d, + 0x4e14, + {0x89, 0xa5, 0x5d, 0x16, 0xcd, 0x27, 0x25, 0x94} +}; +typedef +enum D3D12_AXIS_SHADING_RATE + { + D3D12_AXIS_SHADING_RATE_1X = 0, + D3D12_AXIS_SHADING_RATE_2X = 0x1, + D3D12_AXIS_SHADING_RATE_4X = 0x2 + } D3D12_AXIS_SHADING_RATE; + +#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2 +#define D3D12_SHADING_RATE_VALID_MASK 3 +#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y)) +#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) (((x) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK) +#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK) +typedef +enum D3D12_SHADING_RATE + { + D3D12_SHADING_RATE_1X1 = 0, + D3D12_SHADING_RATE_1X2 = 0x1, + D3D12_SHADING_RATE_2X1 = 0x4, + D3D12_SHADING_RATE_2X2 = 0x5, + D3D12_SHADING_RATE_2X4 = 0x6, + D3D12_SHADING_RATE_4X2 = 0x9, + D3D12_SHADING_RATE_4X4 = 0xa + } D3D12_SHADING_RATE; + +typedef +enum D3D12_SHADING_RATE_COMBINER + { + D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0, + D3D12_SHADING_RATE_COMBINER_OVERRIDE = 1, + D3D12_SHADING_RATE_COMBINER_MIN = 2, + D3D12_SHADING_RATE_COMBINER_MAX = 3, + D3D12_SHADING_RATE_COMBINER_SUM = 4 + } D3D12_SHADING_RATE_COMBINER; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0044_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0044_v0_0_s_ifspec; + +#ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ +#define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ + +/* interface ID3D12GraphicsCommandList5 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12GraphicsCommandList5; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("55050859-4024-474c-87f5-6472eaee44ea") + ID3D12GraphicsCommandList5 : public ID3D12GraphicsCommandList4 + { + public: + virtual void STDMETHODCALLTYPE RSSetShadingRate( + _In_ D3D12_SHADING_RATE baseShadingRate, + _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners) = 0; + + virtual void STDMETHODCALLTYPE RSSetShadingRateImage( + _In_opt_ ID3D12Resource *shadingRateImage) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12GraphicsCommandList5Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12GraphicsCommandList5 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12GraphicsCommandList5 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12GraphicsCommandList5 * This); + + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12GraphicsCommandList5 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12GraphicsCommandList5 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12GraphicsCommandList5 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12GraphicsCommandList5 * This, + _In_z_ LPCWSTR Name); + + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12GraphicsCommandList5 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( + ID3D12GraphicsCommandList5 * This); + + HRESULT ( STDMETHODCALLTYPE *Close )( + ID3D12GraphicsCommandList5 * This); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12CommandAllocator *pAllocator, + _In_opt_ ID3D12PipelineState *pInitialState); + + void ( STDMETHODCALLTYPE *ClearState )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12PipelineState *pPipelineState); + + void ( STDMETHODCALLTYPE *DrawInstanced )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT VertexCountPerInstance, + _In_ UINT InstanceCount, + _In_ UINT StartVertexLocation, + _In_ UINT StartInstanceLocation); + + void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT IndexCountPerInstance, + _In_ UINT InstanceCount, + _In_ UINT StartIndexLocation, + _In_ INT BaseVertexLocation, + _In_ UINT StartInstanceLocation); + + void ( STDMETHODCALLTYPE *Dispatch )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT ThreadGroupCountX, + _In_ UINT ThreadGroupCountY, + _In_ UINT ThreadGroupCountZ); + + void ( STDMETHODCALLTYPE *CopyBufferRegion )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT64 NumBytes); + + void ( STDMETHODCALLTYPE *CopyTextureRegion )( + ID3D12GraphicsCommandList5 * This, + _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, + UINT DstX, + UINT DstY, + UINT DstZ, + _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, + _In_opt_ const D3D12_BOX *pSrcBox); + + void ( STDMETHODCALLTYPE *CopyResource )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstResource, + _In_ ID3D12Resource *pSrcResource); + + void ( STDMETHODCALLTYPE *CopyTiles )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pTiledResource, + _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, + _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, + _In_ ID3D12Resource *pBuffer, + UINT64 BufferStartOffsetInBytes, + D3D12_TILE_COPY_FLAGS Flags); + + void ( STDMETHODCALLTYPE *ResolveSubresource )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstResource, + _In_ UINT DstSubresource, + _In_ ID3D12Resource *pSrcResource, + _In_ UINT SrcSubresource, + _In_ DXGI_FORMAT Format); + + void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); + + void ( STDMETHODCALLTYPE *RSSetViewports )( + ID3D12GraphicsCommandList5 * This, + _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, + _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); + + void ( STDMETHODCALLTYPE *RSSetScissorRects )( + ID3D12GraphicsCommandList5 * This, + _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, + _In_reads_( NumRects) const D3D12_RECT *pRects); + + void ( STDMETHODCALLTYPE *OMSetBlendFactor )( + ID3D12GraphicsCommandList5 * This, + _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); + + void ( STDMETHODCALLTYPE *OMSetStencilRef )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT StencilRef); + + void ( STDMETHODCALLTYPE *SetPipelineState )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12PipelineState *pPipelineState); + + void ( STDMETHODCALLTYPE *ResourceBarrier )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT NumBarriers, + _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); + + void ( STDMETHODCALLTYPE *ExecuteBundle )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12GraphicsCommandList *pCommandList); + + void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT NumDescriptorHeaps, + _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); + + void ( STDMETHODCALLTYPE *SetComputeRootSignature )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12RootSignature *pRootSignature); + + void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12RootSignature *pRootSignature); + + void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); + + void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); + + void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ UINT SrcData, + _In_ UINT DestOffsetIn32BitValues); + + void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ UINT SrcData, + _In_ UINT DestOffsetIn32BitValues); + + void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ UINT Num32BitValuesToSet, + _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, + _In_ UINT DestOffsetIn32BitValues); + + void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ UINT Num32BitValuesToSet, + _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, + _In_ UINT DestOffsetIn32BitValues); + + void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + void ( STDMETHODCALLTYPE *IASetIndexBuffer )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); + + void ( STDMETHODCALLTYPE *IASetVertexBuffers )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT StartSlot, + _In_ UINT NumViews, + _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); + + void ( STDMETHODCALLTYPE *SOSetTargets )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT StartSlot, + _In_ UINT NumViews, + _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); + + void ( STDMETHODCALLTYPE *OMSetRenderTargets )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT NumRenderTargetDescriptors, + _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, + _In_ BOOL RTsSingleHandleToDescriptorRange, + _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); + + void ( STDMETHODCALLTYPE *ClearDepthStencilView )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, + _In_ D3D12_CLEAR_FLAGS ClearFlags, + _In_ FLOAT Depth, + _In_ UINT8 Stencil, + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + void ( STDMETHODCALLTYPE *ClearRenderTargetView )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, + _In_ const FLOAT ColorRGBA[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, + _In_ ID3D12Resource *pResource, + _In_ const UINT Values[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, + _In_ ID3D12Resource *pResource, + _In_ const FLOAT Values[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + void ( STDMETHODCALLTYPE *DiscardResource )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pResource, + _In_opt_ const D3D12_DISCARD_REGION *pRegion); + + void ( STDMETHODCALLTYPE *BeginQuery )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + void ( STDMETHODCALLTYPE *EndQuery )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + void ( STDMETHODCALLTYPE *ResolveQueryData )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT StartIndex, + _In_ UINT NumQueries, + _In_ ID3D12Resource *pDestinationBuffer, + _In_ UINT64 AlignedDestinationBufferOffset); + + void ( STDMETHODCALLTYPE *SetPredication )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12Resource *pBuffer, + _In_ UINT64 AlignedBufferOffset, + _In_ D3D12_PREDICATION_OP Operation); + + void ( STDMETHODCALLTYPE *SetMarker )( + ID3D12GraphicsCommandList5 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + void ( STDMETHODCALLTYPE *BeginEvent )( + ID3D12GraphicsCommandList5 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + void ( STDMETHODCALLTYPE *EndEvent )( + ID3D12GraphicsCommandList5 * This); + + void ( STDMETHODCALLTYPE *ExecuteIndirect )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12CommandSignature *pCommandSignature, + _In_ UINT MaxCommandCount, + _In_ ID3D12Resource *pArgumentBuffer, + _In_ UINT64 ArgumentBufferOffset, + _In_opt_ ID3D12Resource *pCountBuffer, + _In_ UINT64 CountBufferOffset); + + void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT Dependencies, + _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, + _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); + + void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT Dependencies, + _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, + _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); + + void ( STDMETHODCALLTYPE *OMSetDepthBounds )( + ID3D12GraphicsCommandList5 * This, + _In_ FLOAT Min, + _In_ FLOAT Max); + + void ( STDMETHODCALLTYPE *SetSamplePositions )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT NumSamplesPerPixel, + _In_ UINT NumPixels, + _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); + + void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12Resource *pDstResource, + _In_ UINT DstSubresource, + _In_ UINT DstX, + _In_ UINT DstY, + _In_ ID3D12Resource *pSrcResource, + _In_ UINT SrcSubresource, + _In_opt_ D3D12_RECT *pSrcRect, + _In_ DXGI_FORMAT Format, + _In_ D3D12_RESOLVE_MODE ResolveMode); + + void ( STDMETHODCALLTYPE *SetViewInstanceMask )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT Mask); + + void ( STDMETHODCALLTYPE *WriteBufferImmediate )( + ID3D12GraphicsCommandList5 * This, + UINT Count, + _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, + _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); + + void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); + + void ( STDMETHODCALLTYPE *BeginRenderPass )( + ID3D12GraphicsCommandList5 * This, + _In_ UINT NumRenderTargets, + _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, + _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, + D3D12_RENDER_PASS_FLAGS Flags); + + void ( STDMETHODCALLTYPE *EndRenderPass )( + ID3D12GraphicsCommandList5 * This); + + void ( STDMETHODCALLTYPE *InitializeMetaCommand )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12MetaCommand *pMetaCommand, + _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, + _In_ SIZE_T InitializationParametersDataSizeInBytes); + + void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12MetaCommand *pMetaCommand, + _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, + _In_ SIZE_T ExecutionParametersDataSizeInBytes); + + void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( + ID3D12GraphicsCommandList5 * This, + _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, + _In_ UINT NumPostbuildInfoDescs, + _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); + + void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( + ID3D12GraphicsCommandList5 * This, + _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, + _In_ UINT NumSourceAccelerationStructures, + _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); + + void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, + _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, + _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); + + void ( STDMETHODCALLTYPE *SetPipelineState1 )( + ID3D12GraphicsCommandList5 * This, + _In_ ID3D12StateObject *pStateObject); + + void ( STDMETHODCALLTYPE *DispatchRays )( + ID3D12GraphicsCommandList5 * This, + _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); + + void ( STDMETHODCALLTYPE *RSSetShadingRate )( + ID3D12GraphicsCommandList5 * This, + _In_ D3D12_SHADING_RATE baseShadingRate, + _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); + + void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( + ID3D12GraphicsCommandList5 * This, + _In_opt_ ID3D12Resource *shadingRateImage); + + END_INTERFACE + } ID3D12GraphicsCommandList5Vtbl; + + interface ID3D12GraphicsCommandList5 + { + CONST_VTBL struct ID3D12GraphicsCommandList5Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12GraphicsCommandList5_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12GraphicsCommandList5_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12GraphicsCommandList5_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12GraphicsCommandList5_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12GraphicsCommandList5_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12GraphicsCommandList5_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12GraphicsCommandList5_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12GraphicsCommandList5_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + +#define ID3D12GraphicsCommandList5_GetType(This) \ + ( (This)->lpVtbl -> GetType(This) ) + + +#define ID3D12GraphicsCommandList5_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ID3D12GraphicsCommandList5_Reset(This,pAllocator,pInitialState) \ + ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) + +#define ID3D12GraphicsCommandList5_ClearState(This,pPipelineState) \ + ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) + +#define ID3D12GraphicsCommandList5_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ + ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) + +#define ID3D12GraphicsCommandList5_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ + ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) + +#define ID3D12GraphicsCommandList5_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ + ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) + +#define ID3D12GraphicsCommandList5_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ + ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) + +#define ID3D12GraphicsCommandList5_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ + ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) + +#define ID3D12GraphicsCommandList5_CopyResource(This,pDstResource,pSrcResource) \ + ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) + +#define ID3D12GraphicsCommandList5_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ + ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) + +#define ID3D12GraphicsCommandList5_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ + ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) + +#define ID3D12GraphicsCommandList5_IASetPrimitiveTopology(This,PrimitiveTopology) \ + ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) + +#define ID3D12GraphicsCommandList5_RSSetViewports(This,NumViewports,pViewports) \ + ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) + +#define ID3D12GraphicsCommandList5_RSSetScissorRects(This,NumRects,pRects) \ + ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList5_OMSetBlendFactor(This,BlendFactor) \ + ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) + +#define ID3D12GraphicsCommandList5_OMSetStencilRef(This,StencilRef) \ + ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) + +#define ID3D12GraphicsCommandList5_SetPipelineState(This,pPipelineState) \ + ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) + +#define ID3D12GraphicsCommandList5_ResourceBarrier(This,NumBarriers,pBarriers) \ + ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) + +#define ID3D12GraphicsCommandList5_ExecuteBundle(This,pCommandList) \ + ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) + +#define ID3D12GraphicsCommandList5_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ + ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) + +#define ID3D12GraphicsCommandList5_SetComputeRootSignature(This,pRootSignature) \ + ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRootSignature(This,pRootSignature) \ + ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) + +#define ID3D12GraphicsCommandList5_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ + ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ + ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) + +#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList5_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList5_IASetIndexBuffer(This,pView) \ + ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) + +#define ID3D12GraphicsCommandList5_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ + ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) + +#define ID3D12GraphicsCommandList5_SOSetTargets(This,StartSlot,NumViews,pViews) \ + ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) + +#define ID3D12GraphicsCommandList5_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ + ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) + +#define ID3D12GraphicsCommandList5_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList5_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList5_DiscardResource(This,pResource,pRegion) \ + ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) + +#define ID3D12GraphicsCommandList5_BeginQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12GraphicsCommandList5_EndQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12GraphicsCommandList5_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ + ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) + +#define ID3D12GraphicsCommandList5_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ + ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) + +#define ID3D12GraphicsCommandList5_SetMarker(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) + +#define ID3D12GraphicsCommandList5_BeginEvent(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) + +#define ID3D12GraphicsCommandList5_EndEvent(This) \ + ( (This)->lpVtbl -> EndEvent(This) ) + +#define ID3D12GraphicsCommandList5_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ + ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) + + +#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ + ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) + +#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ + ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) + +#define ID3D12GraphicsCommandList5_OMSetDepthBounds(This,Min,Max) \ + ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) + +#define ID3D12GraphicsCommandList5_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ + ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) + +#define ID3D12GraphicsCommandList5_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ + ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) + +#define ID3D12GraphicsCommandList5_SetViewInstanceMask(This,Mask) \ + ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) + + +#define ID3D12GraphicsCommandList5_WriteBufferImmediate(This,Count,pParams,pModes) \ + ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) + + +#define ID3D12GraphicsCommandList5_SetProtectedResourceSession(This,pProtectedResourceSession) \ + ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) + + +#define ID3D12GraphicsCommandList5_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ + ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) + +#define ID3D12GraphicsCommandList5_EndRenderPass(This) \ + ( (This)->lpVtbl -> EndRenderPass(This) ) + +#define ID3D12GraphicsCommandList5_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ + ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) + +#define ID3D12GraphicsCommandList5_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ + ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) + +#define ID3D12GraphicsCommandList5_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ + ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) + +#define ID3D12GraphicsCommandList5_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ + ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) + +#define ID3D12GraphicsCommandList5_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ + ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) + +#define ID3D12GraphicsCommandList5_SetPipelineState1(This,pStateObject) \ + ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) + +#define ID3D12GraphicsCommandList5_DispatchRays(This,pDesc) \ + ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) + + +#define ID3D12GraphicsCommandList5_RSSetShadingRate(This,baseShadingRate,combiners) \ + ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) + +#define ID3D12GraphicsCommandList5_RSSetShadingRateImage(This,shadingRateImage) \ + ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0045 */ +/* [local] */ + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8); DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57); @@ -15381,16 +17230,20 @@ DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d); DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60); DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d); +DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63); +DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData,0x98931D33,0x5AE8,0x4791,0xAA,0x3C,0x1A,0x73,0xA2,0x93,0x4E,0x71); +DEFINE_GUID(IID_ID3D12Device6,0xc70b221b,0x40e4,0x4a17,0x89,0xaf,0x02,0x5a,0x07,0x27,0xa6,0xdc); DEFINE_GUID(IID_ID3D12Resource1,0x9D5E227A,0x4430,0x4161,0x88,0xB3,0x3E,0xCA,0x6B,0xB1,0x6E,0x19); DEFINE_GUID(IID_ID3D12Heap1,0x572F7389,0x2168,0x49E3,0x96,0x93,0xD6,0xDF,0x58,0x71,0xBF,0x6D); DEFINE_GUID(IID_ID3D12GraphicsCommandList3,0x6FDA83A7,0xB84C,0x4E38,0x9A,0xC8,0xC7,0xBD,0x22,0x01,0x6B,0x3D); DEFINE_GUID(IID_ID3D12MetaCommand,0xDBB84C27,0x36CE,0x4FC9,0xB8,0x01,0xF0,0x48,0xC4,0x6A,0xC5,0x70); DEFINE_GUID(IID_ID3D12GraphicsCommandList4,0x8754318e,0xd3a9,0x4541,0x98,0xcf,0x64,0x5b,0x50,0xdc,0x48,0x74); DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5); +DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea); -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0045_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0045_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ diff --git a/renderdoc/driver/dx/official/d3d12sdklayers.h b/renderdoc/driver/dx/official/d3d12sdklayers.h index c864cfcc8..0094b86df 100644 --- a/renderdoc/driver/dx/official/d3d12sdklayers.h +++ b/renderdoc/driver/dx/official/d3d12sdklayers.h @@ -149,7 +149,7 @@ extern "C"{ #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0000_v0_0_c_ifspec; @@ -558,7 +558,7 @@ enum D3D12_DEBUG_FEATURE D3D12_DEBUG_FEATURE_ALLOW_BEHAVIOR_CHANGING_DEBUG_AIDS = 0x1, D3D12_DEBUG_FEATURE_CONSERVATIVE_RESOURCE_STATE_TRACKING = 0x2, D3D12_DEBUG_FEATURE_DISABLE_VIRTUALIZED_BUNDLES_VALIDATION = 0x4, - D3D12_DEBUG_FEATURE_VALID_MASK = ( ( D3D12_DEBUG_FEATURE_ALLOW_BEHAVIOR_CHANGING_DEBUG_AIDS | D3D12_DEBUG_FEATURE_CONSERVATIVE_RESOURCE_STATE_TRACKING ) | D3D12_DEBUG_FEATURE_DISABLE_VIRTUALIZED_BUNDLES_VALIDATION ) + D3D12_DEBUG_FEATURE_EMULATE_WINDOWS7 = 0x8 } D3D12_DEBUG_FEATURE; DEFINE_ENUM_FLAG_OPERATORS(D3D12_DEBUG_FEATURE) @@ -2724,7 +2724,36 @@ enum D3D12_MESSAGE_ID D3D12_MESSAGE_ID_TRACKED_WORKLOAD_NOT_SUPPORTED = 1212, D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_NO_ACCESS = 1213, D3D12_MESSAGE_ID_RENDER_PASS_UNSUPPORTED_RESOLVE = 1214, - D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_RENDER_PASS_UNSUPPORTED_RESOLVE + 1 ) + D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_INVALID_RESOURCE_PTR = 1215, + D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_SIGNAL = 1216, + D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_WAIT = 1217, + D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_ESTIMATOR_INVALID_ARGUMENT = 1218, + D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1219, + D3D12_MESSAGE_ID_ESTIMATE_MOTION_INVALID_ARGUMENT = 1220, + D3D12_MESSAGE_ID_RESOLVE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1221, + D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_HEAP_TYPE = 1222, + D3D12_MESSAGE_ID_SET_BACKGROUND_PROCESSING_MODE_INVALID_ARGUMENT = 1223, + D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE_FOR_FEATURE_LEVEL = 1224, + D3D12_MESSAGE_ID_CREATE_VIDEOEXTENSIONCOMMAND = 1225, + D3D12_MESSAGE_ID_LIVE_VIDEOEXTENSIONCOMMAND = 1226, + D3D12_MESSAGE_ID_DESTROY_VIDEOEXTENSIONCOMMAND = 1227, + D3D12_MESSAGE_ID_INVALID_VIDEO_EXTENSION_COMMAND_ID = 1228, + D3D12_MESSAGE_ID_VIDEO_EXTENSION_COMMAND_INVALID_ARGUMENT = 1229, + D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_UNIQUE_IN_DXIL_LIBRARY = 1230, + D3D12_MESSAGE_ID_VARIABLE_SHADING_RATE_NOT_ALLOWED_WITH_TIR = 1231, + D3D12_MESSAGE_ID_GEOMETRY_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1232, + D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_SHADING_RATE = 1233, + D3D12_MESSAGE_ID_RSSETSHADING_RATE_SHADING_RATE_NOT_PERMITTED_BY_CAP = 1234, + D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_COMBINER = 1235, + D3D12_MESSAGE_ID_RSSETSHADINGRATEIMAGE_REQUIRES_TIER_2 = 1236, + D3D12_MESSAGE_ID_RSSETSHADINGRATE_REQUIRES_TIER_1 = 1237, + D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_FORMAT = 1238, + D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_ARRAY_SIZE = 1239, + D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_MIP_LEVEL = 1240, + D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_COUNT = 1241, + D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_QUALITY = 1242, + D3D12_MESSAGE_ID_NON_RETAIL_SHADER_MODEL_WONT_VALIDATE = 1243, + D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_NON_RETAIL_SHADER_MODEL_WONT_VALIDATE + 1 ) } D3D12_MESSAGE_ID; static_assert(D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UNSUPPORTED == 1000, "Publicly released SDK D3D12_MESSAGE_ID enum values must not be changed. New enum values must be added to the end of the list."); @@ -3168,7 +3197,7 @@ EXTERN_C const IID IID_ID3D12InfoQueue; /* interface __MIDL_itf_d3d12sdklayers_0000_0013 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_ID3D12Debug,0x344488b7,0x6846,0x474b,0xb9,0x89,0xf0,0x27,0x44,0x82,0x45,0xe0); DEFINE_GUID(IID_ID3D12Debug1,0xaffaa4ca,0x63fe,0x4d8e,0xb8,0xad,0x15,0x90,0x00,0xaf,0x43,0x04); diff --git a/renderdoc/driver/dx/official/d3d9.h b/renderdoc/driver/dx/official/d3d9.h index 259000f08..6a5341eae 100644 --- a/renderdoc/driver/dx/official/d3d9.h +++ b/renderdoc/driver/dx/official/d3d9.h @@ -160,7 +160,6 @@ DEFINE_GUID(IID_IDirect3DAuthenticatedChannel9, 0xff24beee, 0xda21, 0x4beb, 0x98 // {FA0AB799-7A9C-48ca-8C5B-237E71A54434} DEFINE_GUID(IID_IDirect3DCryptoSession9, 0xfa0ab799, 0x7a9c, 0x48ca, 0x8c, 0x5b, 0x23, 0x7e, 0x71, 0xa5, 0x44, 0x34); - #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ @@ -248,6 +247,7 @@ _COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Video, __uuidof(IDirect3DDevice9Video)); _COM_SMARTPTR_TYPEDEF(IDirect3DAuthenticatedChannel9, __uuidof(IDirect3DAuthenticatedChannel9)); _COM_SMARTPTR_TYPEDEF(IDirect3DCryptoSession9, __uuidof(IDirect3DCryptoSession9)); + #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ diff --git a/renderdoc/driver/dx/official/d3d9types.h b/renderdoc/driver/dx/official/d3d9types.h index 673c564bd..39cffaed3 100644 --- a/renderdoc/driver/dx/official/d3d9types.h +++ b/renderdoc/driver/dx/official/d3d9types.h @@ -1675,6 +1675,7 @@ typedef enum _D3DRESOURCETYPE { + /* CubeMap Face identifiers */ typedef enum _D3DCUBEMAP_FACES { @@ -2436,7 +2437,6 @@ typedef struct _D3DAES_CTR_IV } D3DAES_CTR_IV; - #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ diff --git a/renderdoc/driver/dx/official/d3dcommon.h b/renderdoc/driver/dx/official/d3dcommon.h index 5d7e2ca98..2db8805d0 100644 --- a/renderdoc/driver/dx/official/d3dcommon.h +++ b/renderdoc/driver/dx/official/d3dcommon.h @@ -79,6 +79,7 @@ enum D3D_DRIVER_TYPE typedef enum D3D_FEATURE_LEVEL { + D3D_FEATURE_LEVEL_1_0_CORE = 0x1000, D3D_FEATURE_LEVEL_9_1 = 0x9100, D3D_FEATURE_LEVEL_9_2 = 0x9200, D3D_FEATURE_LEVEL_9_3 = 0x9300, @@ -823,6 +824,7 @@ enum D3D_NAME D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15, D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16, D3D_NAME_BARYCENTRICS = 23, + D3D_NAME_SHADINGRATE = 24, D3D_NAME_TARGET = 64, D3D_NAME_DEPTH = 65, D3D_NAME_COVERAGE = 66, @@ -854,7 +856,8 @@ enum D3D_NAME D3D11_NAME_DEPTH_LESS_EQUAL = D3D_NAME_DEPTH_LESS_EQUAL, D3D11_NAME_STENCIL_REF = D3D_NAME_STENCIL_REF, D3D11_NAME_INNER_COVERAGE = D3D_NAME_INNER_COVERAGE, - D3D12_NAME_BARYCENTRICS = D3D_NAME_BARYCENTRICS + D3D12_NAME_BARYCENTRICS = D3D_NAME_BARYCENTRICS, + D3D12_NAME_SHADINGRATE = D3D_NAME_SHADINGRATE } D3D_NAME; typedef diff --git a/renderdoc/driver/dx/official/d3dcompiler.h b/renderdoc/driver/dx/official/d3dcompiler.h index adaf68af0..2031c9724 100644 --- a/renderdoc/driver/dx/official/d3dcompiler.h +++ b/renderdoc/driver/dx/official/d3dcompiler.h @@ -39,7 +39,7 @@ extern "C" { #pragma region Application Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) //---------------------------------------------------------------------------- // D3DReadFileToBlob: @@ -553,7 +553,7 @@ D3DDecompressShaders(_In_reads_bytes_(SrcDataSize) LPCVOID pSrcData, _Out_writes_(uNumShaders) ID3DBlob** ppShaders, _Out_opt_ UINT* pTotalShaders); -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion diff --git a/renderdoc/driver/dx/official/dxgi1_2.h b/renderdoc/driver/dx/official/dxgi1_2.h index f7fbde480..8b264a9b0 100644 --- a/renderdoc/driver/dx/official/dxgi1_2.h +++ b/renderdoc/driver/dx/official/dxgi1_2.h @@ -509,7 +509,7 @@ EXTERN_C const IID IID_IDXGIOutputDuplication; #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #pragma endregion #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) typedef enum DXGI_ALPHA_MODE { @@ -2446,7 +2446,7 @@ EXTERN_C const IID IID_IDXGIOutput1; /* interface __MIDL_itf_dxgi1_2_0000_0009 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_IDXGIDisplayControl,0xea9dbf1a,0xc88e,0x4486,0x85,0x4a,0x98,0xaa,0x01,0x38,0xf3,0x0c); DEFINE_GUID(IID_IDXGIOutputDuplication,0x191cfac3,0xa341,0x470d,0xb2,0x6e,0xa8,0x64,0xf4,0x28,0x31,0x9c); diff --git a/renderdoc/driver/dx/official/dxgi1_3.h b/renderdoc/driver/dx/official/dxgi1_3.h index 17f983078..bf805e0cc 100644 --- a/renderdoc/driver/dx/official/dxgi1_3.h +++ b/renderdoc/driver/dx/official/dxgi1_3.h @@ -108,7 +108,7 @@ extern "C"{ #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) #define DXGI_CREATE_FACTORY_DEBUG 0x1 HRESULT WINAPI CreateDXGIFactory2(UINT Flags, REFIID riid, _COM_Outptr_ void **ppFactory); HRESULT WINAPI DXGIGetDebugInterface1(UINT Flags, REFIID riid, _COM_Outptr_ void **pDebug); @@ -1321,7 +1321,7 @@ EXTERN_C const IID IID_IDXGIFactory3; /* interface __MIDL_itf_dxgi1_3_0000_0004 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion #pragma region App Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) @@ -1798,7 +1798,7 @@ enum DXGI_OVERLAY_SUPPORT_FLAG #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #pragma endregion #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) extern RPC_IF_HANDLE __MIDL_itf_dxgi1_3_0000_0007_v0_0_c_ifspec; @@ -2093,7 +2093,7 @@ EXTERN_C const IID IID_IDXGIOutput3; /* interface __MIDL_itf_dxgi1_3_0000_0008 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_IDXGIDevice3,0x6007896c,0x3244,0x4afd,0xbf,0x18,0xa6,0xd3,0xbe,0xda,0x50,0x23); DEFINE_GUID(IID_IDXGISwapChain2,0xa8be2ac4,0x199f,0x4946,0xb3,0x31,0x79,0x59,0x9f,0xb9,0x8d,0xe7); diff --git a/renderdoc/driver/dx/official/dxgi1_4.h b/renderdoc/driver/dx/official/dxgi1_4.h index 0409795f5..4003c244d 100644 --- a/renderdoc/driver/dx/official/dxgi1_4.h +++ b/renderdoc/driver/dx/official/dxgi1_4.h @@ -80,7 +80,7 @@ extern "C"{ #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) typedef enum DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG { @@ -1470,7 +1470,7 @@ EXTERN_C const IID IID_IDXGIAdapter3; /* interface __MIDL_itf_dxgi1_4_0000_0004 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_IDXGISwapChain3,0x94d99bdb,0xf1f8,0x4ab0,0xb2,0x36,0x7d,0xa0,0x17,0x0e,0xda,0xb1); DEFINE_GUID(IID_IDXGIOutput4,0xdc7dca35,0x2196,0x414d,0x9F,0x53,0x61,0x78,0x84,0x03,0x2a,0x60); diff --git a/renderdoc/driver/dx/official/dxgi1_5.h b/renderdoc/driver/dx/official/dxgi1_5.h index cd1195c60..676e60b73 100644 --- a/renderdoc/driver/dx/official/dxgi1_5.h +++ b/renderdoc/driver/dx/official/dxgi1_5.h @@ -80,7 +80,7 @@ extern "C"{ #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) typedef enum DXGI_OUTDUPL_FLAG { @@ -1521,7 +1521,7 @@ EXTERN_C const IID IID_IDXGIFactory5; /* interface __MIDL_itf_dxgi1_5_0000_0004 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_IDXGIOutput5,0x80A07424,0xAB52,0x42EB,0x83,0x3C,0x0C,0x42,0xFD,0x28,0x2D,0x98); DEFINE_GUID(IID_IDXGISwapChain4,0x3D585D5A,0xBD4A,0x489E,0xB1,0xF4,0x3D,0xBC,0xB6,0x45,0x2F,0xFB); diff --git a/renderdoc/driver/dx/official/dxgi1_6.h b/renderdoc/driver/dx/official/dxgi1_6.h index d235ade44..8cfe27dec 100644 --- a/renderdoc/driver/dx/official/dxgi1_6.h +++ b/renderdoc/driver/dx/official/dxgi1_6.h @@ -81,7 +81,7 @@ extern "C"{ // Copyright (c) Microsoft Corporation. All Rights Reserved #include "winapifamily.h" #pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) HRESULT WINAPI DXGIDeclareAdapterRemovalSupport(); typedef enum DXGI_ADAPTER_FLAG3 @@ -1492,7 +1492,7 @@ EXTERN_C const IID IID_IDXGIFactory7; /* interface __MIDL_itf_dxgi1_6_0000_0004 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_IDXGIAdapter4,0x3c8d99d1,0x4fbf,0x4181,0xa8,0x2c,0xaf,0x66,0xbf,0x7b,0xd2,0x4e); DEFINE_GUID(IID_IDXGIOutput6,0x068346e8,0xaaec,0x4b84,0xad,0xd7,0x13,0x7f,0x51,0x3f,0x77,0xa1); diff --git a/renderdoc/driver/dx/official/dxgidebug.h b/renderdoc/driver/dx/official/dxgidebug.h index 5a777ff92..c60827aa4 100644 --- a/renderdoc/driver/dx/official/dxgidebug.h +++ b/renderdoc/driver/dx/official/dxgidebug.h @@ -74,7 +74,7 @@ extern "C"{ #include "winapifamily.h" #pragma region Application Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) #define DXGI_DEBUG_BINARY_VERSION ( 1 ) typedef @@ -968,7 +968,7 @@ EXTERN_C const IID IID_IDXGIDebug1; /* interface __MIDL_itf_dxgidebug_0000_0003 */ /* [local] */ -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion #pragma region Desktop Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) diff --git a/renderdoc/driver/dx/official/winapifamily.h b/renderdoc/driver/dx/official/winapifamily.h index 78d776551..5c90469d2 100644 --- a/renderdoc/driver/dx/official/winapifamily.h +++ b/renderdoc/driver/dx/official/winapifamily.h @@ -165,6 +165,7 @@ Abstract: * WINAPI_PARTITION_PC_APP // specific to Desktop-only store apps * WINAPI_PARTITION_PHONE_APP // specific to Phone-only store apps * WINAPI_PARTITION_SYSTEM // specific to System applications + * WINAPI_PARTITION_GAMES // specific to games and apps * The following partitions are indirect partitions and defined in * winpackagefamily.h. These partitions are related to package based @@ -183,6 +184,7 @@ Abstract: #define WINAPI_FAMILY_PHONE_APP 3 /* Windows Phone Applications */ #define WINAPI_FAMILY_SYSTEM 4 /* Windows Drivers and Tools */ #define WINAPI_FAMILY_SERVER 5 /* Windows Server Applications */ +#define WINAPI_FAMILY_GAMES 6 /* Windows Games and Applications */ #define WINAPI_FAMILY_DESKTOP_APP 100 /* Windows Desktop Applications */ /* The value of WINAPI_FAMILY_DESKTOP_APP may change in future SDKs. */ /* Additional WINAPI_FAMILY values may be defined in future SDKs. */ @@ -216,31 +218,33 @@ Abstract: * An X indicates that the given partition is active for the given * platform/family. * - * +-------------------+---+ - * | *Partition* | | - * +---+---+---+---+---+---+ - * | | | | | | | - * | | | | | | | - * | | | | P | | | - * | | | | H | | | - * | D | | | O | | | - * | E | | P | N | S | S | - * | S | | C | E | Y | E | - * | K | | _ | _ | S | R | - * | T | A | A | A | T | V | - * +-------------------------+----+ O | P | P | P | E | E | - * | *Platform/Family* \| P | P | P | P | M | R | - * +------------------------------+---+---+---+---+---+---+ - * | WINAPI_FAMILY_DESKTOP_APP | X | X | X | | | | - * +------------------------------+---+---+---+---+---+---+ - * | WINAPI_FAMILY_PC_APP | | X | X | | | | - * +------------------------------+---+---+---+---+---+---+ - * | WINAPI_FAMILY_PHONE_APP | | X | | X | | | - * +----------------------------- +---+---+---+---+---+---+ - * | WINAPI_FAMILY_SYSTEM | | | | | X | | - * +----------------------------- +---+---+---+---+---+---+ - * | WINAPI_FAMILY_SERVER | | | | | X | X | - * +------------------------------+---+---+---+---+---+---+ + * +---------------------------+ + * | *Partition* | + * +---+---+---+---+---+---+---+ + * | | | | | | | | + * | | | | | | | | + * | | | | P | | | | + * | | | | H | | | | + * | D | | | O | | | | + * | E | | P | N | S | S | | + * | S | | C | E | Y | E | G | + * | K | | _ | _ | S | R | A | + * | T | A | A | A | T | V | M | + * +-------------------------+----+ O | P | P | P | E | E | E | + * | *Platform/Family* \| P | P | P | P | M | R | S | + * +------------------------------+---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_DESKTOP_APP | X | X | X | | | | | + * +------------------------------+---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_PC_APP | | X | X | | | | | + * +------------------------------+---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_PHONE_APP | | X | | X | | | | + * +----------------------------- +---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_SYSTEM | | | | | X | | | + * +----------------------------- +---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_SERVER | | | | | X | X | | + * +------------------------------+---+---+---+---+---+---+---+ + * | WINAPI_FAMILY_GAMES | | | | | | | X | + * +------------------------------+---+---+---+---+---+---+---+ * * The table above is encoded in the following expressions, * each of which evaluates to 1 or 0. @@ -252,6 +256,7 @@ Abstract: WINAPI_FAMILY != WINAPI_FAMILY_PC_APP && \ WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP && \ WINAPI_FAMILY != WINAPI_FAMILY_SYSTEM && \ + WINAPI_FAMILY != WINAPI_FAMILY_GAMES && \ WINAPI_FAMILY != WINAPI_FAMILY_SERVER #error Unknown WINAPI_FAMILY value. Was it defined in terms of a WINAPI_PARTITION_* value? #endif @@ -277,6 +282,12 @@ Abstract: #define WINAPI_PARTITION_PHONE_APP (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) #endif +#ifndef WINAPI_PARTITION_GAMES +#define WINAPI_PARTITION_GAMES \ + (WINAPI_FAMILY == WINAPI_FAMILY_GAMES || \ + WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) +#endif + /* * SYSTEM is the only partition defined here. * All other System based editions are defined as packages @@ -286,6 +297,7 @@ Abstract: #ifndef WINAPI_PARTITION_SYSTEM #define WINAPI_PARTITION_SYSTEM \ (WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM || \ + WINAPI_FAMILY == WINAPI_FAMILY_GAMES || \ WINAPI_FAMILY == WINAPI_FAMILY_SERVER) #endif diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 30a55185e..8004673a8 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -866,7 +866,9 @@ Core - + + Common\Maths +