diff --git a/renderdoc/driver/d3d11/d3d11_stringise.cpp b/renderdoc/driver/d3d11/d3d11_stringise.cpp index 074eeacf4..4643c5d2c 100644 --- a/renderdoc/driver/d3d11/d3d11_stringise.cpp +++ b/renderdoc/driver/d3d11/d3d11_stringise.cpp @@ -676,9 +676,9 @@ rdcstr DoStringise(const D3D11_MAP &el) } template <> -rdcstr DoStringise(const D3D11_PRIMITIVE_TOPOLOGY &el) +rdcstr DoStringise(const D3D_PRIMITIVE_TOPOLOGY &el) { - BEGIN_ENUM_STRINGISE(D3D11_PRIMITIVE_TOPOLOGY); + BEGIN_ENUM_STRINGISE(D3D_PRIMITIVE_TOPOLOGY); { STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_UNDEFINED); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_POINTLIST); @@ -686,6 +686,7 @@ rdcstr DoStringise(const D3D11_PRIMITIVE_TOPOLOGY &el) STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_TRIANGLEFAN); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ); STRINGISE_ENUM(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ); diff --git a/renderdoc/driver/d3d12/d3d12_command_list.h b/renderdoc/driver/d3d12/d3d12_command_list.h index f7c361093..a8ae8537b 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list.h +++ b/renderdoc/driver/d3d12/d3d12_command_list.h @@ -35,14 +35,15 @@ class WrappedID3D12GraphicsCommandList; // The inheritance is awful for these. See WrappedID3D12DebugDevice for why there are multiple // parent classes -struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID3D12DebugCommandList1 +struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList3, public ID3D12DebugCommandList1 { - WrappedID3D12GraphicsCommandList *m_pList; - ID3D12DebugCommandList *m_pReal; - ID3D12DebugCommandList1 *m_pReal1; - ID3D12DebugCommandList2 *m_pReal2; + WrappedID3D12GraphicsCommandList *m_pList = NULL; + ID3D12DebugCommandList *m_pReal = NULL; + ID3D12DebugCommandList1 *m_pReal1 = NULL; + ID3D12DebugCommandList2 *m_pReal2 = NULL; + ID3D12DebugCommandList3 *m_pReal3 = NULL; - WrappedID3D12DebugCommandList() : m_pList(NULL), m_pReal(NULL), m_pReal1(NULL), m_pReal2(NULL) {} + WrappedID3D12DebugCommandList() {} ////////////////////////////// // implement IUnknown HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) @@ -65,6 +66,12 @@ struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID AddRef(); return S_OK; } + else if(riid == __uuidof(ID3D12DebugCommandList3)) + { + *ppvObject = (ID3D12DebugCommandList3 *)this; + AddRef(); + return S_OK; + } return E_NOINTERFACE; } @@ -101,8 +108,7 @@ struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID // implement ID3D12DebugCommandList1 / ID3D12DebugCommandList2 virtual HRESULT STDMETHODCALLTYPE SetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize) + const void *pData, UINT DataSize) { if(m_pReal1) return m_pReal1->SetDebugParameter(Type, pData, DataSize); @@ -112,8 +118,7 @@ struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID } virtual HRESULT STDMETHODCALLTYPE GetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) + void *pData, UINT DataSize) { if(m_pReal1) return m_pReal1->GetDebugParameter(Type, pData, DataSize); @@ -121,6 +126,23 @@ struct WrappedID3D12DebugCommandList : public ID3D12DebugCommandList2, public ID return m_pReal2->GetDebugParameter(Type, pData, DataSize); return S_OK; } + + ////////////////////////////// + // implement ID3D12DebugCommandList3 + + virtual void STDMETHODCALLTYPE AssertResourceAccess(ID3D12Resource *pResource, UINT Subresource, + D3D12_BARRIER_ACCESS Access) + { + if(m_pReal3) + m_pReal3->AssertResourceAccess(Unwrap(pResource), Subresource, Access); + } + + virtual void STDMETHODCALLTYPE AssertTextureLayout(ID3D12Resource *pResource, UINT Subresource, + D3D12_BARRIER_LAYOUT Layout) + { + if(m_pReal3) + m_pReal3->AssertTextureLayout(Unwrap(pResource), Subresource, Layout); + } }; class WrappedID3D12GraphicsCommandList : public ID3D12GraphicsCommandListX diff --git a/renderdoc/driver/d3d12/d3d12_command_queue.h b/renderdoc/driver/d3d12/d3d12_command_queue.h index b6b78632e..8a5ce8c54 100644 --- a/renderdoc/driver/d3d12/d3d12_command_queue.h +++ b/renderdoc/driver/d3d12/d3d12_command_queue.h @@ -70,12 +70,13 @@ struct WrappedID3D12CompatibilityQueue : public ID3D12CompatibilityQueue _In_range_(0, 0) UINT Reserved); }; -struct WrappedID3D12DebugCommandQueue : public ID3D12DebugCommandQueue +struct WrappedID3D12DebugCommandQueue : public ID3D12DebugCommandQueue1 { - WrappedID3D12CommandQueue *m_pQueue; - ID3D12DebugCommandQueue *m_pReal; + WrappedID3D12CommandQueue *m_pQueue = NULL; + ID3D12DebugCommandQueue *m_pReal = NULL; + ID3D12DebugCommandQueue1 *m_pReal1 = NULL; - WrappedID3D12DebugCommandQueue() : m_pQueue(NULL), m_pReal(NULL) {} + WrappedID3D12DebugCommandQueue() {} ////////////////////////////// // implement IUnknown HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) @@ -86,6 +87,12 @@ struct WrappedID3D12DebugCommandQueue : public ID3D12DebugCommandQueue AddRef(); return S_OK; } + else if(riid == __uuidof(ID3D12DebugCommandQueue1)) + { + *ppvObject = (ID3D12DebugCommandQueue1 *)this; + AddRef(); + return S_OK; + } return E_NOINTERFACE; } @@ -103,6 +110,23 @@ struct WrappedID3D12DebugCommandQueue : public ID3D12DebugCommandQueue return m_pReal->AssertResourceState(Unwrap(pResource), Subresource, State); return TRUE; } + + ////////////////////////////// + // implement ID3D12DebugCommandQueue1 + + virtual void STDMETHODCALLTYPE AssertResourceAccess(ID3D12Resource *pResource, UINT Subresource, + D3D12_BARRIER_ACCESS Access) + { + if(m_pReal1) + m_pReal1->AssertResourceAccess(Unwrap(pResource), Subresource, Access); + } + + virtual void STDMETHODCALLTYPE AssertTextureLayout(ID3D12Resource *pResource, UINT Subresource, + D3D12_BARRIER_LAYOUT Layout) + { + if(m_pReal1) + m_pReal1->AssertTextureLayout(Unwrap(pResource), Subresource, Layout); + } }; struct WrappedDownlevelQueue : public ID3D12CommandQueueDownlevel diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index 443173f65..3be689508 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -388,6 +388,7 @@ WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real, if(m_pReal) { m_pReal->QueryInterface(__uuidof(ID3D12DebugCommandQueue), (void **)&m_WrappedDebug.m_pReal); + m_pReal->QueryInterface(__uuidof(ID3D12DebugCommandQueue1), (void **)&m_WrappedDebug.m_pReal1); m_pReal->QueryInterface(__uuidof(ID3D12CommandQueueDownlevel), (void **)&m_pDownlevel); m_pReal->QueryInterface(__uuidof(ID3D12CompatibilityQueue), (void **)&m_WrappedCompat.m_pReal); } @@ -449,6 +450,7 @@ WrappedID3D12CommandQueue::~WrappedID3D12CommandQueue() SAFE_RELEASE(m_WrappedCompat.m_pReal); SAFE_RELEASE(m_WrappedDebug.m_pReal); + SAFE_RELEASE(m_WrappedDebug.m_pReal1); SAFE_RELEASE(m_pReal); } @@ -479,6 +481,19 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12CommandQueue::QueryInterface(REFIID riid, return E_NOINTERFACE; } } + else if(riid == __uuidof(ID3D12DebugCommandQueue1)) + { + if(m_WrappedDebug.m_pReal1) + { + AddRef(); + *ppvObject = (ID3D12DebugCommandQueue1 *)&m_WrappedDebug; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == __uuidof(ID3D12CompatibilityQueue)) { if(m_WrappedCompat.m_pReal) @@ -1140,6 +1155,7 @@ WrappedID3D12GraphicsCommandList::WrappedID3D12GraphicsCommandList(ID3D12Graphic m_pList->QueryInterface(__uuidof(ID3D12DebugCommandList), (void **)&m_WrappedDebug.m_pReal); m_pList->QueryInterface(__uuidof(ID3D12DebugCommandList1), (void **)&m_WrappedDebug.m_pReal1); m_pList->QueryInterface(__uuidof(ID3D12DebugCommandList2), (void **)&m_WrappedDebug.m_pReal2); + m_pList->QueryInterface(__uuidof(ID3D12DebugCommandList3), (void **)&m_WrappedDebug.m_pReal3); m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList1), (void **)&m_pList1); m_pList->QueryInterface(__uuidof(ID3D12GraphicsCommandList2), (void **)&m_pList2); @@ -1222,6 +1238,7 @@ WrappedID3D12GraphicsCommandList::~WrappedID3D12GraphicsCommandList() SAFE_RELEASE(m_WrappedDebug.m_pReal); SAFE_RELEASE(m_WrappedDebug.m_pReal1); SAFE_RELEASE(m_WrappedDebug.m_pReal2); + SAFE_RELEASE(m_WrappedDebug.m_pReal3); SAFE_RELEASE(m_pList5); SAFE_RELEASE(m_pList4); SAFE_RELEASE(m_pList3); @@ -1311,6 +1328,19 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::QueryInterface(REFII return E_NOINTERFACE; } } + else if(riid == __uuidof(ID3D12DebugCommandList3)) + { + if(m_WrappedDebug.m_pReal3) + { + AddRef(); + *ppvObject = (ID3D12DebugCommandList3 *)&m_WrappedDebug; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == __uuidof(ID3D12GraphicsCommandList1)) { if(m_pList1) diff --git a/renderdoc/driver/d3d12/d3d12_common.cpp b/renderdoc/driver/d3d12/d3d12_common.cpp index 1adb09ecd..50869bab5 100644 --- a/renderdoc/driver/d3d12/d3d12_common.cpp +++ b/renderdoc/driver/d3d12/d3d12_common.cpp @@ -378,6 +378,8 @@ TextureType MakeTextureDim(D3D12_UAV_DIMENSION dim) case D3D12_UAV_DIMENSION_TEXTURE1DARRAY: return TextureType::Texture1DArray; case D3D12_UAV_DIMENSION_TEXTURE2D: return TextureType::Texture2D; case D3D12_UAV_DIMENSION_TEXTURE2DARRAY: return TextureType::Texture2DArray; + case D3D12_UAV_DIMENSION_TEXTURE2DMS: return TextureType::Texture2DMS; + case D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY: return TextureType::Texture2DMSArray; case D3D12_UAV_DIMENSION_TEXTURE3D: return TextureType::Texture3D; default: break; } @@ -404,6 +406,7 @@ CompareFunction MakeCompareFunc(D3D12_COMPARISON_FUNC func) { switch(func) { + case D3D12_COMPARISON_FUNC_NONE: case D3D12_COMPARISON_FUNC_NEVER: return CompareFunction::Never; case D3D12_COMPARISON_FUNC_LESS: return CompareFunction::Less; case D3D12_COMPARISON_FUNC_EQUAL: return CompareFunction::Equal; @@ -451,6 +454,10 @@ TextureFilter MakeFilter(D3D12_FILTER filter) case D3D12_FILTER_ANISOTROPIC: ret.minify = ret.magnify = ret.mip = FilterMode::Anisotropic; break; + case D3D12_FILTER_MIN_MAG_ANISOTROPIC_MIP_POINT: + ret.minify = ret.magnify = FilterMode::Anisotropic; + ret.mip = FilterMode::Point; + break; case D3D12_FILTER_MIN_MAG_MIP_POINT: ret.minify = ret.magnify = ret.mip = FilterMode::Point; break; @@ -558,6 +565,8 @@ BlendMultiplier MakeBlendMultiplier(D3D12_BLEND blend, bool alpha) case D3D12_BLEND_INV_SRC1_COLOR: return BlendMultiplier::InvSrc1Col; case D3D12_BLEND_SRC1_ALPHA: return BlendMultiplier::Src1Alpha; case D3D12_BLEND_INV_SRC1_ALPHA: return BlendMultiplier::InvSrc1Alpha; + case D3D12_BLEND_ALPHA_FACTOR: return BlendMultiplier::FactorAlpha; + case D3D12_BLEND_INV_ALPHA_FACTOR: return BlendMultiplier::InvFactorAlpha; default: break; } diff --git a/renderdoc/driver/d3d12/d3d12_common.h b/renderdoc/driver/d3d12/d3d12_common.h index 0aa8e892a..ce7656e3d 100644 --- a/renderdoc/driver/d3d12/d3d12_common.h +++ b/renderdoc/driver/d3d12/d3d12_common.h @@ -738,6 +738,8 @@ DECLARE_REFLECTION_STRUCT(D3D12_TEX1D_UAV); DECLARE_REFLECTION_STRUCT(D3D12_TEX1D_ARRAY_UAV); DECLARE_REFLECTION_STRUCT(D3D12_TEX2D_UAV); DECLARE_REFLECTION_STRUCT(D3D12_TEX2D_ARRAY_UAV); +DECLARE_REFLECTION_STRUCT(D3D12_TEX2DMS_UAV); +DECLARE_REFLECTION_STRUCT(D3D12_TEX2DMS_ARRAY_UAV); DECLARE_REFLECTION_STRUCT(D3D12_TEX3D_UAV); DECLARE_REFLECTION_STRUCT(D3D12_UNORDERED_ACCESS_VIEW_DESC); DECLARE_REFLECTION_STRUCT(D3D12_DEPTH_STENCIL_VALUE); diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index e68413109..867f52581 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -550,6 +550,8 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara (void **)&m_DREDSettings.m_pReal); m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedDataSettings1), (void **)&m_DREDSettings.m_pReal1); + m_pDevice->QueryInterface(__uuidof(ID3D12DeviceRemovedExtendedDataSettings2), + (void **)&m_DREDSettings.m_pReal2); m_pDevice->QueryInterface(__uuidof(ID3D12DeviceDownlevel), (void **)&m_pDownlevel); m_pDevice->QueryInterface(__uuidof(ID3D12CompatibilityDevice), (void **)&m_CompatDevice.m_pReal); m_pDevice->QueryInterface(__uuidof(ID3D12SharingContract), (void **)&m_SharingContract.m_pReal); @@ -834,6 +836,7 @@ WrappedID3D12Device::~WrappedID3D12Device() SAFE_RELEASE(m_DRED.m_pReal1); SAFE_RELEASE(m_DREDSettings.m_pReal); SAFE_RELEASE(m_DREDSettings.m_pReal1); + SAFE_RELEASE(m_DREDSettings.m_pReal2); SAFE_RELEASE(m_CompatDevice.m_pReal); SAFE_RELEASE(m_SharingContract.m_pReal); SAFE_RELEASE(m_pDownlevel); @@ -1246,6 +1249,19 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject) return E_NOINTERFACE; } } + else if(riid == __uuidof(ID3D12DeviceRemovedExtendedDataSettings2)) + { + if(m_DREDSettings.m_pReal2) + { + AddRef(); + *ppvObject = (ID3D12DeviceRemovedExtendedDataSettings2 *)&m_DREDSettings; + return S_OK; + } + else + { + return E_NOINTERFACE; + } + } else if(riid == IRenderDoc_uuid) { AddRef(); diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index bf21fa388..0fb2d03f3 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -360,11 +360,12 @@ struct WrappedDRED : public ID3D12DeviceRemovedExtendedData1 } }; -struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings1 +struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings2 { WrappedID3D12Device &m_pDevice; ID3D12DeviceRemovedExtendedDataSettings *m_pReal = NULL; ID3D12DeviceRemovedExtendedDataSettings1 *m_pReal1 = NULL; + ID3D12DeviceRemovedExtendedDataSettings2 *m_pReal2 = NULL; WrappedDREDSettings(WrappedID3D12Device &dev) : m_pDevice(dev) {} ////////////////////////////// @@ -392,7 +393,16 @@ struct WrappedDREDSettings : public ID3D12DeviceRemovedExtendedDataSettings1 // implement ID3D12DeviceRemovedExtendedDataSettings1 virtual void STDMETHODCALLTYPE SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT Enablement) { - m_pReal1->SetBreadcrumbContextEnablement(Enablement); + if(m_pReal1) + m_pReal1->SetBreadcrumbContextEnablement(Enablement); + } + + ////////////////////////////// + // implement ID3D12DeviceRemovedExtendedDataSettings2 + virtual void STDMETHODCALLTYPE UseMarkersOnlyAutoBreadcrumbs(BOOL MarkersOnly) + { + if(m_pReal2) + m_pReal2->UseMarkersOnlyAutoBreadcrumbs(MarkersOnly); } }; diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index cde3e82bd..186ce39c6 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -3359,10 +3359,10 @@ HRESULT WrappedID3D12Device::CheckFeatureSupport(D3D12_FEATURE Feature, void *pF return E_INVALIDARG; if(dolog) - RDCLOG("Clamping shader model from 0x%x to 6.6", model->HighestShaderModel); + RDCLOG("Clamping shader model from 0x%x to 6.7", model->HighestShaderModel); // clamp SM to what we support - model->HighestShaderModel = RDCMIN(model->HighestShaderModel, D3D_SHADER_MODEL_6_6); + model->HighestShaderModel = RDCMIN(model->HighestShaderModel, D3D_SHADER_MODEL_6_7); return S_OK; } diff --git a/renderdoc/driver/d3d12/d3d12_hooks.cpp b/renderdoc/driver/d3d12/d3d12_hooks.cpp index c1eb325b0..b816626ea 100644 --- a/renderdoc/driver/d3d12/d3d12_hooks.cpp +++ b/renderdoc/driver/d3d12/d3d12_hooks.cpp @@ -105,7 +105,7 @@ public: // The inheritance is awful for these. See WrappedID3D12DebugDevice for why there are multiple // parent classes class WrappedID3D12Debug : public RefCounter12, - public ID3D12Debug5, + public ID3D12Debug6, public ID3D12Debug1, public ID3D12Debug2 { @@ -148,6 +148,24 @@ public: AddRef(); return S_OK; } + if(riid == __uuidof(ID3D12Debug4)) + { + *ppvObject = (ID3D12Debug4 *)this; + AddRef(); + return S_OK; + } + if(riid == __uuidof(ID3D12Debug5)) + { + *ppvObject = (ID3D12Debug5 *)this; + AddRef(); + return S_OK; + } + if(riid == __uuidof(ID3D12Debug6)) + { + *ppvObject = (ID3D12Debug6 *)this; + AddRef(); + return S_OK; + } return E_NOINTERFACE; } @@ -169,6 +187,9 @@ public: ////////////////////////////// // Implement ID3D12Debug5 virtual void STDMETHODCALLTYPE SetEnableAutoName(BOOL Enable) {} + ////////////////////////////// + // Implement ID3D12Debug6 + virtual void STDMETHODCALLTYPE SetForceLegacyBarrierValidation(BOOL Enable) {} }; class D3D12Hook : LibraryHook @@ -416,26 +437,41 @@ private: static HRESULT WINAPI D3D12GetDebugInterface_hook(REFIID riid, void **ppvDebug) { - if(riid != __uuidof(ID3D12Debug)) + if(riid == __uuidof(ID3D12Debug)) { *ppvDebug = (ID3D12Debug *)(new WrappedID3D12Debug()); return S_OK; } - else if(riid != __uuidof(ID3D12Debug1)) + else if(riid == __uuidof(ID3D12Debug1)) { *ppvDebug = (ID3D12Debug1 *)(new WrappedID3D12Debug()); return S_OK; } - else if(riid != __uuidof(ID3D12Debug2)) + else if(riid == __uuidof(ID3D12Debug2)) { *ppvDebug = (ID3D12Debug2 *)(new WrappedID3D12Debug()); return S_OK; } - else if(riid != __uuidof(ID3D12Debug3)) + else if(riid == __uuidof(ID3D12Debug3)) { *ppvDebug = (ID3D12Debug3 *)(new WrappedID3D12Debug()); return S_OK; } + else if(riid == __uuidof(ID3D12Debug4)) + { + *ppvDebug = (ID3D12Debug4 *)(new WrappedID3D12Debug()); + return S_OK; + } + else if(riid == __uuidof(ID3D12Debug5)) + { + *ppvDebug = (ID3D12Debug5 *)(new WrappedID3D12Debug()); + return S_OK; + } + else if(riid == __uuidof(ID3D12Debug6)) + { + *ppvDebug = (ID3D12Debug6 *)(new WrappedID3D12Debug()); + return S_OK; + } else { IUnknown *releaseme = NULL; diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 32754cd12..95e9e1357 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -950,6 +950,14 @@ void D3D12Replay::FillResourceView(D3D12Pipe::View &view, const D3D12Descriptor view.firstSlice = uav.Texture2DArray.FirstArraySlice & 0xffff; view.firstMip = uav.Texture2DArray.MipSlice & 0xff; } + else if(uav.ViewDimension == D3D12_UAV_DIMENSION_TEXTURE2DMS) + { + } + else if(uav.ViewDimension == D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY) + { + view.numSlices = uav.Texture2DMSArray.ArraySize & 0xffff; + view.firstSlice = uav.Texture2DMSArray.FirstArraySlice & 0xffff; + } else if(uav.ViewDimension == D3D12_UAV_DIMENSION_TEXTURE3D) { view.numSlices = uav.Texture3D.WSize & 0xffff; diff --git a/renderdoc/driver/d3d12/d3d12_resources.cpp b/renderdoc/driver/d3d12/d3d12_resources.cpp index fc59c5940..ed4ca525e 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.cpp +++ b/renderdoc/driver/d3d12/d3d12_resources.cpp @@ -648,10 +648,22 @@ D3D12_UNORDERED_ACCESS_VIEW_DESC MakeUAVDesc(const D3D12_RESOURCE_DESC &desc) } else if(desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D) { - ret.ViewDimension = arrayed ? D3D12_UAV_DIMENSION_TEXTURE2DARRAY : D3D12_UAV_DIMENSION_TEXTURE2D; + if(desc.SampleDesc.Count > 1) + { + ret.ViewDimension = + arrayed ? D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY : D3D12_UAV_DIMENSION_TEXTURE2DMS; - if(arrayed) - ret.Texture2DArray.ArraySize = desc.DepthOrArraySize; + if(arrayed) + ret.Texture2DMSArray.ArraySize = desc.DepthOrArraySize; + } + else + { + ret.ViewDimension = + arrayed ? D3D12_UAV_DIMENSION_TEXTURE2DARRAY : D3D12_UAV_DIMENSION_TEXTURE2D; + + if(arrayed) + ret.Texture2DArray.ArraySize = desc.DepthOrArraySize; + } } else if(desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) { diff --git a/renderdoc/driver/d3d12/d3d12_resources.h b/renderdoc/driver/d3d12/d3d12_resources.h index b40df8689..9ff1fbf9d 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.h +++ b/renderdoc/driver/d3d12/d3d12_resources.h @@ -1022,7 +1022,7 @@ public: HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) { - if(riid == __uuidof(ID3D12Resource2)) + if(riid == __uuidof(ID3D12ManualWriteTrackingResource)) { return E_NOINTERFACE; } diff --git a/renderdoc/driver/d3d12/d3d12_serialise.cpp b/renderdoc/driver/d3d12/d3d12_serialise.cpp index 95a87f39c..66d8ba563 100644 --- a/renderdoc/driver/d3d12/d3d12_serialise.cpp +++ b/renderdoc/driver/d3d12/d3d12_serialise.cpp @@ -1144,6 +1144,18 @@ void DoSerialise(SerialiserType &ser, D3D12_TEX2D_ARRAY_UAV &el) SERIALISE_MEMBER(PlaneSlice); } +template +void DoSerialise(SerialiserType &ser, D3D12_TEX2DMS_UAV &el) +{ +} + +template +void DoSerialise(SerialiserType &ser, D3D12_TEX2DMS_ARRAY_UAV &el) +{ + SERIALISE_MEMBER(FirstArraySlice); + SERIALISE_MEMBER(ArraySize); +} + template void DoSerialise(SerialiserType &ser, D3D12_TEX3D_UAV &el) { @@ -1168,6 +1180,8 @@ void DoSerialise(SerialiserType &ser, D3D12_UNORDERED_ACCESS_VIEW_DESC &el) case D3D12_UAV_DIMENSION_TEXTURE1DARRAY: SERIALISE_MEMBER(Texture1DArray); break; case D3D12_UAV_DIMENSION_TEXTURE2D: SERIALISE_MEMBER(Texture2D); break; case D3D12_UAV_DIMENSION_TEXTURE2DARRAY: SERIALISE_MEMBER(Texture2DArray); break; + case D3D12_UAV_DIMENSION_TEXTURE2DMS: SERIALISE_MEMBER(Texture2DMS); break; + case D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY: SERIALISE_MEMBER(Texture2DMSArray); break; case D3D12_UAV_DIMENSION_TEXTURE3D: SERIALISE_MEMBER(Texture3D); break; default: RDCERR("Unrecognised RTV Dimension %d", el.ViewDimension); break; } diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index cd1a37b87..a9d420384 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -928,6 +928,28 @@ ShaderVariable D3D12DebugAPIWrapper::GetResourceInfo(DXBCBytecode::OperandType t break; } + case D3D12_UAV_DIMENSION_TEXTURE2DMS: + case D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY: + { + // note, DXBC doesn't support MSAA UAVs so this is here mostly for completeness and sanity + dim = 2; + + result.value.u32v[0] = RDCMAX(1U, (uint32_t)(resDesc.Width >> mipLevel)); + result.value.u32v[1] = RDCMAX(1U, (uint32_t)(resDesc.Height >> mipLevel)); + + if(uavDesc.ViewDimension == D3D12_UAV_DIMENSION_TEXTURE2DMS) + result.value.u32v[2] = 0; + else if(uavDesc.ViewDimension == D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY) + result.value.u32v[2] = uavDesc.Texture2DMSArray.ArraySize; + + // spec says "For UAVs (u#), the number of mip levels is always 1." + result.value.u32v[3] = 1; + + if(mipLevel >= result.value.u32v[3]) + result.value.u32v[0] = result.value.u32v[1] = result.value.u32v[2] = 0; + + break; + } case D3D12_UAV_DIMENSION_TEXTURE3D: { dim = 3; diff --git a/renderdoc/driver/d3d12/d3d12_stringise.cpp b/renderdoc/driver/d3d12/d3d12_stringise.cpp index 88d0c39c3..0daa1ad7b 100644 --- a/renderdoc/driver/d3d12/d3d12_stringise.cpp +++ b/renderdoc/driver/d3d12/d3d12_stringise.cpp @@ -261,6 +261,7 @@ rdcstr DoStringise(const D3D12_HEAP_TYPE &el) STRINGISE_ENUM(D3D12_HEAP_TYPE_UPLOAD) STRINGISE_ENUM(D3D12_HEAP_TYPE_READBACK) STRINGISE_ENUM(D3D12_HEAP_TYPE_CUSTOM) + STRINGISE_ENUM(D3D12_HEAP_TYPE_GPU_UPLOAD) } END_ENUM_STRINGISE(); } @@ -404,6 +405,8 @@ rdcstr DoStringise(const D3D12_UAV_DIMENSION &el) STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE1DARRAY) STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE2D) STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE2DARRAY) + STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE2DMS) + STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY) STRINGISE_ENUM(D3D12_UAV_DIMENSION_TEXTURE3D) } END_ENUM_STRINGISE(); @@ -438,6 +441,7 @@ rdcstr DoStringise(const D3D12_FILTER &el) STRINGISE_ENUM(D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR); STRINGISE_ENUM(D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MIN_MAG_MIP_LINEAR); + STRINGISE_ENUM(D3D12_FILTER_MIN_MAG_ANISOTROPIC_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_ANISOTROPIC); STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR); @@ -447,6 +451,7 @@ rdcstr DoStringise(const D3D12_FILTER &el) STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR); STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR); + STRINGISE_ENUM(D3D12_FILTER_COMPARISON_MIN_MAG_ANISOTROPIC_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_COMPARISON_ANISOTROPIC); STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR); @@ -456,6 +461,7 @@ rdcstr DoStringise(const D3D12_FILTER &el) STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR); STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR); + STRINGISE_ENUM(D3D12_FILTER_MINIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MINIMUM_ANISOTROPIC); STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR); @@ -465,6 +471,7 @@ rdcstr DoStringise(const D3D12_FILTER &el) STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR); STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR); + STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT); STRINGISE_ENUM(D3D12_FILTER_MAXIMUM_ANISOTROPIC); } END_ENUM_STRINGISE(); @@ -514,6 +521,8 @@ rdcstr DoStringise(const D3D12_BLEND &el) STRINGISE_ENUM(D3D12_BLEND_INV_SRC1_COLOR); STRINGISE_ENUM(D3D12_BLEND_SRC1_ALPHA); STRINGISE_ENUM(D3D12_BLEND_INV_SRC1_ALPHA); + STRINGISE_ENUM(D3D12_BLEND_ALPHA_FACTOR); + STRINGISE_ENUM(D3D12_BLEND_INV_ALPHA_FACTOR); } END_ENUM_STRINGISE(); } @@ -612,6 +621,7 @@ rdcstr DoStringise(const D3D12_COMPARISON_FUNC &el) BEGIN_ENUM_STRINGISE(D3D12_COMPARISON_FUNC); { + STRINGISE_ENUM(D3D12_COMPARISON_FUNC_NONE); STRINGISE_ENUM(D3D12_COMPARISON_FUNC_NEVER); STRINGISE_ENUM(D3D12_COMPARISON_FUNC_LESS); STRINGISE_ENUM(D3D12_COMPARISON_FUNC_EQUAL); @@ -720,6 +730,10 @@ rdcstr DoStringise(const D3D12_COMMAND_LIST_TYPE &el) STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_BUNDLE) STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_COMPUTE) STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_COPY) + STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE) + STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS) + STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE) + STRINGISE_ENUM(D3D12_COMMAND_LIST_TYPE_NONE) } END_ENUM_STRINGISE(); } @@ -976,6 +990,7 @@ rdcstr DoStringise(const D3D12_HEAP_FLAGS &el) STRINGISE_BITFIELD_BIT(D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS); STRINGISE_BITFIELD_BIT(D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT); STRINGISE_BITFIELD_BIT(D3D12_HEAP_FLAG_CREATE_NOT_ZEROED); + STRINGISE_BITFIELD_BIT(D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING); } END_BITFIELD_STRINGISE(); } @@ -1062,6 +1077,8 @@ rdcstr DoStringise(const D3D12_PIPELINE_STATE_FLAGS &el) STRINGISE_BITFIELD_VALUE(D3D12_PIPELINE_STATE_FLAG_NONE); STRINGISE_BITFIELD_BIT(D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG); + STRINGISE_BITFIELD_BIT(D3D12_PIPELINE_STATE_FLAG_DYNAMIC_DEPTH_BIAS); + STRINGISE_BITFIELD_BIT(D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT); } END_BITFIELD_STRINGISE(); } @@ -1079,6 +1096,9 @@ rdcstr DoStringise(const D3D12_RESOURCE_FLAGS &el) STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE); STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER); STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS); + STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY); + STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY); + STRINGISE_BITFIELD_BIT(D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE); } END_BITFIELD_STRINGISE(); } diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index 52f203698..515550e09 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -147,6 +147,7 @@ UINT GetByteSize(int Width, int Height, int Depth, DXGI_FORMAT Format, int mip) ret *= 1; break; case DXGI_FORMAT_B4G4R4A4_UNORM: + case DXGI_FORMAT_A4B4G4R4_UNORM: ret *= 2; // 4 channels, half a byte each break; /* @@ -1420,7 +1421,8 @@ DXGI_FORMAT GetTypelessFormat(DXGI_FORMAT f) case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: - case DXGI_FORMAT_B4G4R4A4_UNORM: return f; + case DXGI_FORMAT_B4G4R4A4_UNORM: + case DXGI_FORMAT_A4B4G4R4_UNORM: return f; case DXGI_FORMAT_UNKNOWN: return DXGI_FORMAT_UNKNOWN; @@ -1565,8 +1567,7 @@ D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo) { switch(Topo) { - case Topology::LineLoop: - case Topology::TriangleFan: RDCWARN("Unsupported primitive topology on D3D: %x", Topo); break; + case Topology::LineLoop: RDCWARN("Unsupported primitive topology on D3D: %x", Topo); break; default: case Topology::Unknown: return D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; case Topology::PointList: return D3D_PRIMITIVE_TOPOLOGY_POINTLIST; @@ -1574,6 +1575,7 @@ D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo) case Topology::LineStrip: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; case Topology::TriangleList: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; case Topology::TriangleStrip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; + case Topology::TriangleFan: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLEFAN; case Topology::LineList_Adj: return D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ; case Topology::LineStrip_Adj: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; case Topology::TriangleList_Adj: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; @@ -2050,6 +2052,7 @@ Topology MakePrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY Topo) case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP: return Topology::LineStrip; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST: return Topology::TriangleList; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: return Topology::TriangleStrip; + case D3D_PRIMITIVE_TOPOLOGY_TRIANGLEFAN: return Topology::TriangleFan; case D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ: return Topology::LineList_Adj; case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ: return Topology::LineStrip_Adj; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ: return Topology::TriangleList_Adj; @@ -2133,10 +2136,10 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) break; case ResourceFormatType::R9G9B9E5: ret = DXGI_FORMAT_R9G9B9E5_SHAREDEXP; break; case ResourceFormatType::R4G4B4A4: - // only support bgra order - if(!fmt.BGRAOrder()) - return DXGI_FORMAT_UNKNOWN; - ret = DXGI_FORMAT_B4G4R4A4_UNORM; + if(fmt.BGRAOrder()) + ret = DXGI_FORMAT_B4G4R4A4_UNORM; + else + ret = DXGI_FORMAT_A4B4G4R4_UNORM; break; case ResourceFormatType::D24S8: ret = DXGI_FORMAT_R24G8_TYPELESS; break; case ResourceFormatType::D32S8: ret = DXGI_FORMAT_R32G8X24_TYPELESS; break; @@ -2392,7 +2395,8 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt) case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: - case DXGI_FORMAT_B4G4R4A4_UNORM: ret.compCount = 4; break; + case DXGI_FORMAT_B4G4R4A4_UNORM: + case DXGI_FORMAT_A4B4G4R4_UNORM: ret.compCount = 4; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: @@ -2664,6 +2668,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt) case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_B4G4R4A4_UNORM: + case DXGI_FORMAT_A4B4G4R4_UNORM: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: @@ -2852,9 +2857,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt) break; case DXGI_FORMAT_B4G4R4A4_UNORM: - ret.type = ResourceFormatType::R4G4B4A4; - ret.SetBGRAOrder(true); - break; + case DXGI_FORMAT_A4B4G4R4_UNORM: ret.type = ResourceFormatType::R4G4B4A4; break; case DXGI_FORMAT_UNKNOWN: ret.type = ResourceFormatType::Undefined; break; @@ -2959,19 +2962,23 @@ INSTANTIATE_SERIALISE_TYPE(DXGI_ADAPTER_DESC); TEST_CASE("DXGI formats", "[format][d3d]") { // must be updated by hand - DXGI_FORMAT maxFormat = DXGI_FORMAT_V408; + DXGI_FORMAT maxFormat = DXGI_FORMAT_A4B4G4R4_UNORM; // we want to skip formats that we deliberately don't represent or handle. auto isUnsupportedFormat = [](DXGI_FORMAT f) { - // gap in DXGI_FORMAT enum + // gaps in DXGI_FORMAT enum if(f > DXGI_FORMAT_B4G4R4A4_UNORM && f < DXGI_FORMAT_P208) return true; + if(f > DXGI_FORMAT_V408 && f < DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE) + return true; return (f == DXGI_FORMAT_R1_UNORM || f == DXGI_FORMAT_R8G8_B8G8_UNORM || f == DXGI_FORMAT_G8R8_G8B8_UNORM || f == DXGI_FORMAT_B8G8R8X8_TYPELESS || f == DXGI_FORMAT_B8G8R8X8_UNORM || f == DXGI_FORMAT_B8G8R8X8_UNORM_SRGB || f == DXGI_FORMAT_NV11 || f == DXGI_FORMAT_AI44 || f == DXGI_FORMAT_IA44 || f == DXGI_FORMAT_P8 || f == DXGI_FORMAT_A8P8 || f == DXGI_FORMAT_P208 || - f == DXGI_FORMAT_V208 || f == DXGI_FORMAT_V408 || f == DXGI_FORMAT_420_OPAQUE); + f == DXGI_FORMAT_V208 || f == DXGI_FORMAT_V408 || f == DXGI_FORMAT_420_OPAQUE || + f == DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE || + f == DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE); }; SECTION("Only DXGI_FORMAT_UNKNOWN is ResourceFormatType::Undefined") diff --git a/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp b/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp index 03a7e4fd1..31358bd2b 100644 --- a/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp +++ b/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp @@ -339,6 +339,7 @@ rdcarray NVD3D12Counters::FetchCounters(const rdcarray