New D3D12BufferCreator and D3D12TextureCreator state setters

Added 'D3D12BufferCreator::InitialState(D3D12_RESOURCE_STATES)' to allow
user code to avoid adding unnecessary transition barriers after resource
creation.

Added 'D3D12TextureCreator::ClearVal(const D3D12_CLEAR_VALUE &)' to avoid
a PIX performance warning/tip about clearing resources that haven't had
their clear value set on creation.
This commit is contained in:
Dan Hawson
2023-10-17 10:15:39 +01:00
committed by Baldur Karlsson
parent 845a2e5718
commit fb02202505
2 changed files with 26 additions and 9 deletions
+21 -9
View File
@@ -250,6 +250,8 @@ D3D12BufferCreator::D3D12BufferCreator(ID3D12DevicePtr dev, D3D12GraphicsTest *t
m_HeapDesc.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
m_HeapDesc.CreationNodeMask = 1;
m_HeapDesc.VisibleNodeMask = 1;
m_InitialState = D3D12_RESOURCE_STATE_COMMON;
}
D3D12BufferCreator &D3D12BufferCreator::UAV()
@@ -261,12 +263,14 @@ D3D12BufferCreator &D3D12BufferCreator::UAV()
D3D12BufferCreator &D3D12BufferCreator::Upload()
{
m_HeapDesc.Type = D3D12_HEAP_TYPE_UPLOAD;
m_InitialState = D3D12_RESOURCE_STATE_GENERIC_READ;
return *this;
}
D3D12BufferCreator &D3D12BufferCreator::Readback()
{
m_HeapDesc.Type = D3D12_HEAP_TYPE_READBACK;
m_InitialState = D3D12_RESOURCE_STATE_COPY_DEST;
return *this;
}
@@ -282,17 +286,16 @@ D3D12BufferCreator &D3D12BufferCreator::Size(UINT size)
return *this;
}
D3D12BufferCreator &D3D12BufferCreator::InitialState(D3D12_RESOURCE_STATES initialState)
{
m_InitialState = initialState;
return *this;
}
D3D12BufferCreator::operator ID3D12ResourcePtr() const
{
D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON;
if(m_HeapDesc.Type == D3D12_HEAP_TYPE_UPLOAD)
initialState = D3D12_RESOURCE_STATE_GENERIC_READ;
else if(m_HeapDesc.Type == D3D12_HEAP_TYPE_READBACK)
initialState = D3D12_RESOURCE_STATE_COPY_DEST;
ID3D12ResourcePtr buf;
CHECK_HR(m_Dev->CreateCommittedResource(&m_HeapDesc, D3D12_HEAP_FLAG_NONE, &m_BufDesc, initialState,
CHECK_HR(m_Dev->CreateCommittedResource(&m_HeapDesc, D3D12_HEAP_FLAG_NONE, &m_BufDesc, m_InitialState,
NULL, __uuidof(ID3D12Resource), (void **)&buf));
if(m_Initdata && m_Test)
@@ -329,6 +332,8 @@ D3D12TextureCreator::D3D12TextureCreator(ID3D12DevicePtr dev, DXGI_FORMAT format
m_HeapDesc.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
m_HeapDesc.CreationNodeMask = 1;
m_HeapDesc.VisibleNodeMask = 1;
m_ClearVal.Format = DXGI_FORMAT_UNKNOWN;
}
D3D12TextureCreator &D3D12TextureCreator::Mips(UINT mips)
@@ -405,11 +410,18 @@ D3D12TextureCreator &D3D12TextureCreator::InitialState(D3D12_RESOURCE_STATES sta
return *this;
}
D3D12TextureCreator &D3D12TextureCreator::ClearVal(const D3D12_CLEAR_VALUE &clearVal)
{
m_ClearVal = clearVal;
return *this;
}
D3D12TextureCreator::operator ID3D12ResourcePtr() const
{
ID3D12ResourcePtr tex;
CHECK_HR(m_Dev->CreateCommittedResource(&m_HeapDesc, m_HeapFlags, &m_TexDesc, m_InitialState,
NULL, __uuidof(ID3D12Resource), (void **)&tex));
(m_ClearVal.Format == DXGI_FORMAT_UNKNOWN) ? NULL : &m_ClearVal,
__uuidof(ID3D12Resource), (void **)&tex));
return tex;
}
+5
View File
@@ -137,6 +137,8 @@ public:
return Data(data.data()).Size(UINT(data.size() * sizeof(T)));
}
D3D12BufferCreator &InitialState(D3D12_RESOURCE_STATES initialState);
operator ID3D12ResourcePtr() const;
private:
@@ -146,6 +148,7 @@ private:
D3D12_RESOURCE_DESC m_BufDesc;
D3D12_HEAP_PROPERTIES m_HeapDesc;
const void *m_Initdata = NULL;
D3D12_RESOURCE_STATES m_InitialState;
};
class D3D12TextureCreator
@@ -169,6 +172,7 @@ public:
D3D12TextureCreator &Shared();
D3D12TextureCreator &InitialState(D3D12_RESOURCE_STATES state);
D3D12TextureCreator &ClearVal(const D3D12_CLEAR_VALUE &clearVal);
operator ID3D12ResourcePtr() const;
@@ -179,6 +183,7 @@ protected:
D3D12_RESOURCE_DESC m_TexDesc;
D3D12_HEAP_PROPERTIES m_HeapDesc;
D3D12_HEAP_FLAGS m_HeapFlags = D3D12_HEAP_FLAG_NONE;
D3D12_CLEAR_VALUE m_ClearVal;
};
class D3D12ViewCreator