mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-27 08:05:42 +00:00
Support small added features in new D3D12 headers
* Triangle fans * 16-bit types in shader declarations * Trivial/non-wrapped new interface versions * New mostly-ignorable enums: D3D12_COMMAND_LIST_TYPE_NONE, D3D12_COMPARISON_FUNC_NONE * Alpha constant blend factors * New sampler filtering with anisotropic min/mag and point mip * New ABGR4 format * MSAA UAVs * Allow SM6.7
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public:
|
||||
// The inheritance is awful for these. See WrappedID3D12DebugDevice for why there are multiple
|
||||
// parent classes
|
||||
class WrappedID3D12Debug : public RefCounter12<ID3D12Debug>,
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -1022,7 +1022,7 @@ public:
|
||||
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
if(riid == __uuidof(ID3D12Resource2))
|
||||
if(riid == __uuidof(ID3D12ManualWriteTrackingResource))
|
||||
{
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
@@ -1144,6 +1144,18 @@ void DoSerialise(SerialiserType &ser, D3D12_TEX2D_ARRAY_UAV &el)
|
||||
SERIALISE_MEMBER(PlaneSlice);
|
||||
}
|
||||
|
||||
template <class SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, D3D12_TEX2DMS_UAV &el)
|
||||
{
|
||||
}
|
||||
|
||||
template <class SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, D3D12_TEX2DMS_ARRAY_UAV &el)
|
||||
{
|
||||
SERIALISE_MEMBER(FirstArraySlice);
|
||||
SERIALISE_MEMBER(ArraySize);
|
||||
}
|
||||
|
||||
template <class SerialiserType>
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -339,6 +339,7 @@ rdcarray<CounterResult> NVD3D12Counters::FetchCounters(const rdcarray<GPUCounter
|
||||
break;
|
||||
case D3D12_COMMAND_LIST_TYPE_BUNDLE:
|
||||
case D3D12_COMMAND_LIST_TYPE_COPY:
|
||||
case D3D12_COMMAND_LIST_TYPE_NONE:
|
||||
case D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE:
|
||||
case D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS:
|
||||
case D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE:
|
||||
|
||||
@@ -222,6 +222,11 @@ enum VariableType
|
||||
VARTYPE_MIN12INT,
|
||||
VARTYPE_MIN16INT,
|
||||
VARTYPE_MIN16UINT,
|
||||
VARTYPE_INT16,
|
||||
VARTYPE_UINT16,
|
||||
VARTYPE_FLOAT16,
|
||||
VARTYPE_INT64,
|
||||
VARTYPE_UINT64,
|
||||
};
|
||||
|
||||
struct ShaderInputBind
|
||||
|
||||
@@ -358,11 +358,19 @@ CBufferVariableType DXBCContainer::ParseRDEFType(const RDEFHeader *h, const byte
|
||||
case DXBC::VARTYPE_BOOL: ret.varType = VarType::Bool; break;
|
||||
case DXBC::VARTYPE_MIN16UINT:
|
||||
case DXBC::VARTYPE_UINT: ret.varType = VarType::UInt; break;
|
||||
case DXBC::VARTYPE_INT64:
|
||||
case DXBC::VARTYPE_UINT64:
|
||||
case DXBC::VARTYPE_DOUBLE: ret.varType = VarType::Double; break;
|
||||
case DXBC::VARTYPE_FLOAT:
|
||||
case DXBC::VARTYPE_MIN8FLOAT:
|
||||
case DXBC::VARTYPE_MIN10FLOAT:
|
||||
case DXBC::VARTYPE_MIN16FLOAT:
|
||||
ret.varType = VarType::Float;
|
||||
break;
|
||||
// new types are actually 16-bit, though alignment is still the same as 32-bit
|
||||
case DXBC::VARTYPE_INT16: ret.varType = VarType::SShort; break;
|
||||
case DXBC::VARTYPE_UINT16: ret.varType = VarType::UShort; break;
|
||||
case DXBC::VARTYPE_FLOAT16: ret.varType = VarType::Half; break;
|
||||
default: ret.varType = VarType::Float; break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user