@@ -43,14 +43,14 @@ bool VerifySparseBufferCompatibility(IRenderDevice* pDevice)
4343{
4444 VERIFY_EXPR (pDevice != nullptr );
4545
46- const auto & DeviceInfo = pDevice->GetDeviceInfo ().Features ;
47- if (!DeviceInfo .SparseResources )
46+ const DeviceFeatures& Features = pDevice->GetDeviceInfo ().Features ;
47+ if (!Features .SparseResources )
4848 {
4949 LOG_WARNING_MESSAGE (" SparseResources device feature is not enabled." );
5050 return false ;
5151 }
5252
53- const auto & SparseRes = pDevice->GetAdapterInfo ().SparseResources ;
53+ const SparseResourceProperties & SparseRes = pDevice->GetAdapterInfo ().SparseResources ;
5454 if ((SparseRes.CapFlags & SPARSE_RESOURCE_CAP_FLAG_BUFFER) == 0 )
5555 {
5656 LOG_WARNING_MESSAGE (" This device does not support sparse buffers." );
@@ -67,7 +67,7 @@ DynamicBuffer::DynamicBuffer(IRenderDevice* pDevice,
6767 m_Name{CI.Desc .Name != nullptr ? CI.Desc .Name : " Dynamic buffer" },
6868 m_Desc{CI.Desc },
6969 m_VirtualSize{CI.Desc .Usage == USAGE_SPARSE ? CI.VirtualSize : 0 },
70- m_MemoryPageSize{CI.MemoryPageSize }
70+ m_MemoryPageSize{std::max ( CI.MemoryPageSize , 65536u ) }
7171{
7272 DEV_CHECK_ERR (CI.Desc .Usage != USAGE_SPARSE || CI.VirtualSize > 0 , " Virtual size must not be 0 for sparse buffers" );
7373
@@ -93,16 +93,13 @@ void DynamicBuffer::CreateSparseBuffer(IRenderDevice* pDevice)
9393 return ;
9494 }
9595
96- const auto & SparseResources = pDevice->GetAdapterInfo ().SparseResources ;
97- const auto SparseMemBlockSize = SparseResources.StandardBlockSize ;
98-
99- m_MemoryPageSize = std::max (AlignUpNonPw2 (m_MemoryPageSize, SparseMemBlockSize), SparseMemBlockSize);
96+ const SparseResourceProperties& SparseResources = pDevice->GetAdapterInfo ().SparseResources ;
10097
10198 {
102- auto Desc = m_Desc;
99+ BufferDesc Desc = m_Desc;
103100
104- Desc.Size = AlignUpNonPw2 (m_VirtualSize, m_MemoryPageSize);
105- auto MaxSize = AlignDownNonPw2 (SparseResources.ResourceSpaceSize , m_MemoryPageSize);
101+ Desc.Size = AlignUpNonPw2 (m_VirtualSize, m_MemoryPageSize);
102+ Uint64 MaxSize = AlignDownNonPw2 (SparseResources.ResourceSpaceSize , m_MemoryPageSize);
106103 if (m_Desc.BindFlags & (BIND_SHADER_RESOURCE | BIND_UNORDERED_ACCESS))
107104 {
108105 VERIFY_EXPR (m_Desc.ElementByteStride != 0 );
@@ -163,8 +160,8 @@ void DynamicBuffer::InitBuffer(IRenderDevice* pDevice)
163160 // NB: m_Desc.Usage may be changed by CreateSparseBuffer()
164161 if (m_Desc.Usage == USAGE_DEFAULT && m_PendingSize > 0 )
165162 {
166- auto Desc = m_Desc;
167- Desc.Size = m_PendingSize;
163+ BufferDesc Desc = m_Desc;
164+ Desc.Size = m_PendingSize;
168165 pDevice->CreateBuffer (Desc, nullptr , &m_pBuffer);
169166 if (m_Desc.Size == 0 )
170167 {
@@ -190,12 +187,12 @@ void DynamicBuffer::ResizeSparseBuffer(IDeviceContext* pContext)
190187 SparseBufferMemoryBindInfo BufferBindInfo;
191188 BufferBindInfo.pBuffer = m_pBuffer;
192189
193- auto StartOffset = m_Desc.Size ;
194- auto EndOffset = m_PendingSize;
190+ Uint64 StartOffset = m_Desc.Size ;
191+ Uint64 EndOffset = m_PendingSize;
195192 if (StartOffset > EndOffset)
196193 std::swap (StartOffset, EndOffset);
197194 VERIFY_EXPR ((EndOffset - StartOffset) % m_MemoryPageSize == 0 );
198- const auto NumPages = StaticCast<Uint32>((EndOffset - StartOffset) / m_MemoryPageSize);
195+ const Uint32 NumPages = StaticCast<Uint32>((EndOffset - StartOffset) / m_MemoryPageSize);
199196
200197 std::vector<SparseBufferMemoryBindRange> Ranges;
201198 Ranges.reserve (NumPages);
@@ -254,7 +251,7 @@ void DynamicBuffer::ResizeDefaultBuffer(IDeviceContext* pContext)
254251 return ;
255252
256253 VERIFY_EXPR (m_pBuffer);
257- auto CopySize = std::min (m_pBuffer->GetDesc ().Size , m_pStaleBuffer->GetDesc ().Size );
254+ Uint64 CopySize = std::min (m_pBuffer->GetDesc ().Size , m_pStaleBuffer->GetDesc ().Size );
258255 pContext->CopyBuffer (m_pStaleBuffer, 0 , RESOURCE_STATE_TRANSITION_MODE_TRANSITION,
259256 m_pBuffer, 0 , CopySize, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
260257 m_pStaleBuffer.Release ();
0 commit comments