Skip to content

Commit 26b091e

Browse files
DynamicBuffer: ensure that the page size is 64Kb - aligned
1 parent 953c6a4 commit 26b091e

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

Graphics/GraphicsTools/src/DynamicBuffer.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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{AlignUp(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,16 @@ void DynamicBuffer::CreateSparseBuffer(IRenderDevice* pDevice)
9393
return;
9494
}
9595

96-
const auto& SparseResources = pDevice->GetAdapterInfo().SparseResources;
97-
const auto SparseMemBlockSize = SparseResources.StandardBlockSize;
96+
const SparseResourceProperties& SparseResources = pDevice->GetAdapterInfo().SparseResources;
97+
const Uint32 SparseMemBlockSize = SparseResources.StandardBlockSize;
9898

9999
m_MemoryPageSize = std::max(AlignUpNonPw2(m_MemoryPageSize, SparseMemBlockSize), SparseMemBlockSize);
100100

101101
{
102-
auto Desc = m_Desc;
102+
BufferDesc Desc = m_Desc;
103103

104-
Desc.Size = AlignUpNonPw2(m_VirtualSize, m_MemoryPageSize);
105-
auto MaxSize = AlignDownNonPw2(SparseResources.ResourceSpaceSize, m_MemoryPageSize);
104+
Desc.Size = AlignUpNonPw2(m_VirtualSize, m_MemoryPageSize);
105+
Uint64 MaxSize = AlignDownNonPw2(SparseResources.ResourceSpaceSize, m_MemoryPageSize);
106106
if (m_Desc.BindFlags & (BIND_SHADER_RESOURCE | BIND_UNORDERED_ACCESS))
107107
{
108108
VERIFY_EXPR(m_Desc.ElementByteStride != 0);
@@ -163,8 +163,8 @@ void DynamicBuffer::InitBuffer(IRenderDevice* pDevice)
163163
// NB: m_Desc.Usage may be changed by CreateSparseBuffer()
164164
if (m_Desc.Usage == USAGE_DEFAULT && m_PendingSize > 0)
165165
{
166-
auto Desc = m_Desc;
167-
Desc.Size = m_PendingSize;
166+
BufferDesc Desc = m_Desc;
167+
Desc.Size = m_PendingSize;
168168
pDevice->CreateBuffer(Desc, nullptr, &m_pBuffer);
169169
if (m_Desc.Size == 0)
170170
{
@@ -190,12 +190,12 @@ void DynamicBuffer::ResizeSparseBuffer(IDeviceContext* pContext)
190190
SparseBufferMemoryBindInfo BufferBindInfo;
191191
BufferBindInfo.pBuffer = m_pBuffer;
192192

193-
auto StartOffset = m_Desc.Size;
194-
auto EndOffset = m_PendingSize;
193+
Uint64 StartOffset = m_Desc.Size;
194+
Uint64 EndOffset = m_PendingSize;
195195
if (StartOffset > EndOffset)
196196
std::swap(StartOffset, EndOffset);
197197
VERIFY_EXPR((EndOffset - StartOffset) % m_MemoryPageSize == 0);
198-
const auto NumPages = StaticCast<Uint32>((EndOffset - StartOffset) / m_MemoryPageSize);
198+
const Uint32 NumPages = StaticCast<Uint32>((EndOffset - StartOffset) / m_MemoryPageSize);
199199

200200
std::vector<SparseBufferMemoryBindRange> Ranges;
201201
Ranges.reserve(NumPages);
@@ -254,7 +254,7 @@ void DynamicBuffer::ResizeDefaultBuffer(IDeviceContext* pContext)
254254
return;
255255

256256
VERIFY_EXPR(m_pBuffer);
257-
auto CopySize = std::min(m_pBuffer->GetDesc().Size, m_pStaleBuffer->GetDesc().Size);
257+
Uint64 CopySize = std::min(m_pBuffer->GetDesc().Size, m_pStaleBuffer->GetDesc().Size);
258258
pContext->CopyBuffer(m_pStaleBuffer, 0, RESOURCE_STATE_TRANSITION_MODE_TRANSITION,
259259
m_pBuffer, 0, CopySize, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
260260
m_pStaleBuffer.Release();

0 commit comments

Comments
 (0)