summaryrefslogtreecommitdiffstats
path: root/Graphics
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-11-30 16:57:13 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-11-30 16:57:13 +0000
commitef396c82756864a0834a391e28a822b20cc7b019 (patch)
tree9b64d68f653c489a947c6060717a638cc7e1d8c8 /Graphics
parentVulkan backend: fixed 32-bit build (diff)
downloadDiligentCore-ef396c82756864a0834a391e28a822b20cc7b019.tar.gz
DiligentCore-ef396c82756864a0834a391e28a822b20cc7b019.zip
Fixed some 32-bit compilation warnings
Diffstat (limited to 'Graphics')
-rw-r--r--Graphics/GraphicsEngineD3D12/include/BufferD3D12Impl.h4
-rw-r--r--Graphics/GraphicsEngineD3D12/include/DeviceContextD3D12Impl.h4
-rw-r--r--Graphics/GraphicsEngineD3D12/interface/BufferD3D12.h2
-rw-r--r--Graphics/GraphicsEngineD3D12/src/BufferD3D12Impl.cpp2
-rw-r--r--Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp38
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUploadHeap.h22
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanMemoryManager.h2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUploadHeap.cpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanMemoryManager.cpp15
9 files changed, 52 insertions, 39 deletions
diff --git a/Graphics/GraphicsEngineD3D12/include/BufferD3D12Impl.h b/Graphics/GraphicsEngineD3D12/include/BufferD3D12Impl.h
index c98d341d..71403f99 100644
--- a/Graphics/GraphicsEngineD3D12/include/BufferD3D12Impl.h
+++ b/Graphics/GraphicsEngineD3D12/include/BufferD3D12Impl.h
@@ -66,13 +66,13 @@ public:
#endif
/// Implementation of IBufferD3D12::GetD3D12Buffer().
- virtual ID3D12Resource* GetD3D12Buffer(size_t& DataStartByteOffset, IDeviceContext* pContext) override final;
+ virtual ID3D12Resource* GetD3D12Buffer(Uint64& DataStartByteOffset, IDeviceContext* pContext) override final;
/// Implementation of IBuffer::GetNativeHandle().
virtual void* GetNativeHandle() override final
{
VERIFY(GetD3D12Resource() != nullptr, "The buffer is dynamic and has no pointer to D3D12 resource");
- size_t DataStartByteOffset = 0;
+ Uint64 DataStartByteOffset = 0;
auto* pd3d12Buffer = GetD3D12Buffer(DataStartByteOffset, 0);
VERIFY(DataStartByteOffset == 0, "0 offset expected");
return pd3d12Buffer;
diff --git a/Graphics/GraphicsEngineD3D12/include/DeviceContextD3D12Impl.h b/Graphics/GraphicsEngineD3D12/include/DeviceContextD3D12Impl.h
index 00a7e5b4..b1e272ab 100644
--- a/Graphics/GraphicsEngineD3D12/include/DeviceContextD3D12Impl.h
+++ b/Graphics/GraphicsEngineD3D12/include/DeviceContextD3D12Impl.h
@@ -305,7 +305,7 @@ private:
IBuffer* pAttribsBuffer,
RESOURCE_STATE_TRANSITION_MODE BufferStateTransitionMode,
ID3D12Resource*& pd3d12ArgsBuff,
- size_t& BuffDataStartByteOffset);
+ Uint64& BuffDataStartByteOffset);
struct TextureUploadSpace
{
@@ -337,7 +337,7 @@ private:
CComPtr<ID3D12Resource> CommittedD3D12IndexBuffer;
VALUE_TYPE CommittedIBFormat = VT_UNDEFINED;
- Uint32 CommittedD3D12IndexDataStartOffset = 0;
+ Uint64 CommittedD3D12IndexDataStartOffset = 0;
// Indicates if currently committed D3D12 vertex buffers are up to date
bool bCommittedD3D12VBsUpToDate = false;
diff --git a/Graphics/GraphicsEngineD3D12/interface/BufferD3D12.h b/Graphics/GraphicsEngineD3D12/interface/BufferD3D12.h
index 24517c6e..05882eae 100644
--- a/Graphics/GraphicsEngineD3D12/interface/BufferD3D12.h
+++ b/Graphics/GraphicsEngineD3D12/interface/BufferD3D12.h
@@ -50,7 +50,7 @@ public:
/// is required for dynamic buffers, which are
/// suballocated in a dynamic upload heap
/// \param [in] pContext - Device context within which address of the buffer is requested.
- virtual ID3D12Resource* GetD3D12Buffer(size_t& DataStartByteOffset, IDeviceContext* pContext) = 0;
+ virtual ID3D12Resource* GetD3D12Buffer(Uint64& DataStartByteOffset, IDeviceContext* pContext) = 0;
/// Sets the buffer usage state
diff --git a/Graphics/GraphicsEngineD3D12/src/BufferD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/BufferD3D12Impl.cpp
index 1aadc071..dc854489 100644
--- a/Graphics/GraphicsEngineD3D12/src/BufferD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/BufferD3D12Impl.cpp
@@ -371,7 +371,7 @@ void BufferD3D12Impl::CreateCBV(D3D12_CPU_DESCRIPTOR_HANDLE CBVDescriptor)
pDeviceD3D12->CreateConstantBufferView(&D3D12_CBVDesc, CBVDescriptor);
}
-ID3D12Resource* BufferD3D12Impl::GetD3D12Buffer(size_t& DataStartByteOffset, IDeviceContext* pContext)
+ID3D12Resource* BufferD3D12Impl::GetD3D12Buffer(Uint64& DataStartByteOffset, IDeviceContext* pContext)
{
auto* pd3d12Resource = GetD3D12Resource();
if (pd3d12Resource != nullptr)
diff --git a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp
index cef3b54c..d616e636 100644
--- a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp
@@ -317,7 +317,7 @@ void DeviceContextD3D12Impl::CommitD3D12IndexBuffer(GraphicsContext& GraphCtx, V
m_pIndexBuffer->DvpVerifyDynamicAllocation(this);
#endif
- size_t BuffDataStartByteOffset;
+ Uint64 BuffDataStartByteOffset;
auto* pd3d12Buff = m_pIndexBuffer->GetD3D12Buffer(BuffDataStartByteOffset, this);
// clang-format off
@@ -329,7 +329,7 @@ void DeviceContextD3D12Impl::CommitD3D12IndexBuffer(GraphicsContext& GraphCtx, V
{
m_State.CommittedD3D12IndexBuffer = pd3d12Buff;
m_State.CommittedIBFormat = IndexType;
- m_State.CommittedD3D12IndexDataStartOffset = m_IndexDataStartOffset + static_cast<Uint32>(BuffDataStartByteOffset);
+ m_State.CommittedD3D12IndexDataStartOffset = m_IndexDataStartOffset + BuffDataStartByteOffset;
GraphCtx.SetIndexBuffer(IBView);
}
@@ -487,7 +487,7 @@ void DeviceContextD3D12Impl::PrepareDrawIndirectBuffer(GraphicsContext&
IBuffer* pAttribsBuffer,
RESOURCE_STATE_TRANSITION_MODE BufferStateTransitionMode,
ID3D12Resource*& pd3d12ArgsBuff,
- size_t& BuffDataStartByteOffset)
+ Uint64& BuffDataStartByteOffset)
{
DEV_CHECK_ERR(pAttribsBuffer != nullptr, "Indirect draw attribs buffer must not be null");
@@ -513,7 +513,7 @@ void DeviceContextD3D12Impl::DrawIndirect(const DrawIndirectAttribs& Attribs, IB
PrepareForDraw(GraphCtx, Attribs.Flags);
ID3D12Resource* pd3d12ArgsBuff;
- size_t BuffDataStartByteOffset;
+ Uint64 BuffDataStartByteOffset;
PrepareDrawIndirectBuffer(GraphCtx, pAttribsBuffer, Attribs.IndirectAttribsBufferStateTransitionMode, pd3d12ArgsBuff, BuffDataStartByteOffset);
GraphCtx.ExecuteIndirect(m_pDrawIndirectSignature, pd3d12ArgsBuff, Attribs.IndirectDrawArgsOffset + BuffDataStartByteOffset);
@@ -529,7 +529,7 @@ void DeviceContextD3D12Impl::DrawIndexedIndirect(const DrawIndexedIndirectAttrib
PrepareForIndexedDraw(GraphCtx, Attribs.Flags, Attribs.IndexType);
ID3D12Resource* pd3d12ArgsBuff;
- size_t BuffDataStartByteOffset;
+ Uint64 BuffDataStartByteOffset;
PrepareDrawIndirectBuffer(GraphCtx, pAttribsBuffer, Attribs.IndirectAttribsBufferStateTransitionMode, pd3d12ArgsBuff, BuffDataStartByteOffset);
GraphCtx.ExecuteIndirect(m_pDrawIndexedIndirectSignature, pd3d12ArgsBuff, Attribs.IndirectDrawArgsOffset + BuffDataStartByteOffset);
@@ -595,7 +595,7 @@ void DeviceContextD3D12Impl::DispatchComputeIndirect(const DispatchComputeIndire
TransitionOrVerifyBufferState(ComputeCtx, *pBufferD3D12, Attribs.IndirectAttribsBufferStateTransitionMode,
RESOURCE_STATE_INDIRECT_ARGUMENT, "Indirect dispatch (DeviceContextD3D12Impl::DispatchComputeIndirect)");
- size_t BuffDataStartByteOffset;
+ Uint64 BuffDataStartByteOffset;
ID3D12Resource* pd3d12ArgsBuff = pBufferD3D12->GetD3D12Buffer(BuffDataStartByteOffset, this);
ComputeCtx.ExecuteIndirect(m_pDispatchIndirectSignature, pd3d12ArgsBuff, Attribs.DispatchArgsByteOffset + BuffDataStartByteOffset);
++m_State.NumCommands;
@@ -1016,7 +1016,7 @@ void DeviceContextD3D12Impl::UpdateBufferRegion(BufferD3D12Impl* p
auto& CmdCtx = GetCmdContext();
VERIFY_EXPR(static_cast<size_t>(NumBytes) == NumBytes);
TransitionOrVerifyBufferState(CmdCtx, *pBuffD3D12, StateTransitionMode, RESOURCE_STATE_COPY_DEST, "Updating buffer (DeviceContextD3D12Impl::UpdateBufferRegion)");
- size_t DstBuffDataStartByteOffset;
+ Uint64 DstBuffDataStartByteOffset;
auto* pd3d12Buff = pBuffD3D12->GetD3D12Buffer(DstBuffDataStartByteOffset, this);
VERIFY(DstBuffDataStartByteOffset == 0, "Dst buffer must not be suballocated");
CmdCtx.FlushResourceBarriers();
@@ -1061,11 +1061,11 @@ void DeviceContextD3D12Impl::CopyBuffer(IBuffer* pSrcBuffe
TransitionOrVerifyBufferState(CmdCtx, *pSrcBuffD3D12, SrcBufferTransitionMode, RESOURCE_STATE_COPY_SOURCE, "Using resource as copy source (DeviceContextD3D12Impl::CopyBuffer)");
TransitionOrVerifyBufferState(CmdCtx, *pDstBuffD3D12, DstBufferTransitionMode, RESOURCE_STATE_COPY_DEST, "Using resource as copy destination (DeviceContextD3D12Impl::CopyBuffer)");
- size_t DstDataStartByteOffset;
+ Uint64 DstDataStartByteOffset;
auto* pd3d12DstBuff = pDstBuffD3D12->GetD3D12Buffer(DstDataStartByteOffset, this);
VERIFY(DstDataStartByteOffset == 0, "Dst buffer must not be suballocated");
- size_t SrcDataStartByteOffset;
+ Uint64 SrcDataStartByteOffset;
auto* pd3d12SrcBuff = pSrcBuffD3D12->GetD3D12Buffer(SrcDataStartByteOffset, this);
CmdCtx.FlushResourceBarriers();
CmdCtx.GetCommandList()->CopyBufferRegion(pd3d12DstBuff, DstOffset + DstDataStartByteOffset, pd3d12SrcBuff, SrcOffset + SrcDataStartByteOffset, Size);
@@ -1222,10 +1222,11 @@ void DeviceContextD3D12Impl::CopyTexture(const CopyTextureAttribs& CopyAttribs)
{
TDeviceContextBase::CopyTexture(CopyAttribs);
- auto* pSrcTexD3D12 = ValidatedCast<TextureD3D12Impl>(CopyAttribs.pSrcTexture);
- auto* pDstTexD3D12 = ValidatedCast<TextureD3D12Impl>(CopyAttribs.pDstTexture);
- const auto& SrcTexDesc = pSrcTexD3D12->GetDesc();
- const auto& DstTexDesc = pDstTexD3D12->GetDesc();
+ auto* pSrcTexD3D12 = ValidatedCast<TextureD3D12Impl>(CopyAttribs.pSrcTexture);
+ auto* pDstTexD3D12 = ValidatedCast<TextureD3D12Impl>(CopyAttribs.pDstTexture);
+
+ const auto& SrcTexDesc = pSrcTexD3D12->GetDesc();
+ const auto& DstTexDesc = pDstTexD3D12->GetDesc();
D3D12_BOX D3D12SrcBox, *pD3D12SrcBox = nullptr;
if (const auto* pSrcBox = CopyAttribs.pSrcBox)
@@ -1415,7 +1416,7 @@ void DeviceContextD3D12Impl::CopyTextureRegion(IBuffer* pS
#endif
}
GetCmdContext().FlushResourceBarriers();
- size_t DataStartByteOffset = 0;
+ Uint64 DataStartByteOffset = 0;
auto* pd3d12Buffer = pBufferD3D12->GetD3D12Buffer(DataStartByteOffset, this);
CopyTextureRegion(pd3d12Buffer, static_cast<Uint32>(DataStartByteOffset) + SrcOffset, SrcStride, SrcDepthStride,
pBufferD3D12->GetDesc().uiSizeInBytes, TextureD3D12, DstSubResIndex, DstBox, TextureTransitionMode);
@@ -1426,10 +1427,11 @@ DeviceContextD3D12Impl::TextureUploadSpace DeviceContextD3D12Impl::AllocateTextu
{
TextureUploadSpace UploadSpace;
VERIFY_EXPR(Region.MaxX > Region.MinX && Region.MaxY > Region.MinY && Region.MaxZ > Region.MinZ);
- auto UpdateRegionWidth = Region.MaxX - Region.MinX;
- auto UpdateRegionHeight = Region.MaxY - Region.MinY;
- auto UpdateRegionDepth = Region.MaxZ - Region.MinZ;
- const auto& FmtAttribs = GetTextureFormatAttribs(TexFmt);
+ auto UpdateRegionWidth = Region.MaxX - Region.MinX;
+ auto UpdateRegionHeight = Region.MaxY - Region.MinY;
+ auto UpdateRegionDepth = Region.MaxZ - Region.MinZ;
+
+ const auto& FmtAttribs = GetTextureFormatAttribs(TexFmt);
if (FmtAttribs.ComponentType == COMPONENT_TYPE_COMPRESSED)
{
// Box must be aligned by the calling function
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUploadHeap.h b/Graphics/GraphicsEngineVulkan/include/VulkanUploadHeap.h
index f544dd1f..dce3a711 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUploadHeap.h
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUploadHeap.h
@@ -96,7 +96,7 @@ public:
~VulkanUploadHeap();
- VulkanUploadAllocation Allocate(size_t SizeInBytes, size_t Alignment);
+ VulkanUploadAllocation Allocate(VkDeviceSize SizeInBytes, VkDeviceSize Alignment);
// Releases all allocated pages that are later returned to the global memory manager by the release queues.
// As global memory manager is hosted by the render device, the upload heap can be destroyed before the
@@ -134,12 +134,12 @@ private:
struct CurrPageInfo
{
- VkBuffer vkBuffer = VK_NULL_HANDLE;
- Uint8* CurrCPUAddress = nullptr;
- size_t CurrOffset = 0;
- size_t AvailableSize = 0;
+ VkBuffer vkBuffer = VK_NULL_HANDLE;
+ Uint8* CurrCPUAddress = nullptr;
+ VkDeviceSize CurrOffset = 0;
+ VkDeviceSize AvailableSize = 0;
- void Reset(UploadPageInfo& NewPage, size_t PageSize)
+ void Reset(UploadPageInfo& NewPage, VkDeviceSize PageSize)
{
vkBuffer = NewPage.Buffer;
CurrCPUAddress = NewPage.CPUAddress;
@@ -147,7 +147,7 @@ private:
AvailableSize = PageSize;
}
- void Advance(size_t SizeInBytes)
+ void Advance(VkDeviceSize SizeInBytes)
{
CurrCPUAddress += SizeInBytes;
CurrOffset += SizeInBytes;
@@ -155,10 +155,10 @@ private:
}
} m_CurrPage;
- size_t m_CurrFrameSize = 0;
- size_t m_PeakFrameSize = 0;
- size_t m_CurrAllocatedSize = 0;
- size_t m_PeakAllocatedSize = 0;
+ VkDeviceSize m_CurrFrameSize = 0;
+ VkDeviceSize m_PeakFrameSize = 0;
+ VkDeviceSize m_CurrAllocatedSize = 0;
+ VkDeviceSize m_PeakAllocatedSize = 0;
UploadPageInfo CreateNewPage(VkDeviceSize SizeInBytes) const;
};
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanMemoryManager.h b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanMemoryManager.h
index b736c5ad..f1aaf139 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanMemoryManager.h
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanMemoryManager.h
@@ -124,6 +124,8 @@ public:
void* GetCPUMemory() const { return m_CPUMemory; }
private:
+ using AllocationsMgrOffsetType = Diligent::VariableSizeAllocationsManager::OffsetType;
+
friend struct VulkanMemoryAllocation;
// Memory is reclaimed immediately. The application is responsible to ensure it is not in use by the GPU
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUploadHeap.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUploadHeap.cpp
index 0316ec05..c693905d 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUploadHeap.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUploadHeap.cpp
@@ -86,7 +86,7 @@ VulkanUploadHeap::UploadPageInfo VulkanUploadHeap::CreateNewPage(VkDeviceSize Si
return UploadPageInfo{std::move(MemAllocation), std::move(NewBuffer), CPUAddress};
}
-VulkanUploadAllocation VulkanUploadHeap::Allocate(size_t SizeInBytes, size_t Alignment)
+VulkanUploadAllocation VulkanUploadHeap::Allocate(VkDeviceSize SizeInBytes, VkDeviceSize Alignment)
{
VERIFY(IsPowerOfTwo(Alignment), "Alignment (", Alignment, ") must be power of two");
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanMemoryManager.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanMemoryManager.cpp
index cc36ed99..94e8e10c 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanMemoryManager.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanMemoryManager.cpp
@@ -42,9 +42,13 @@ VulkanMemoryPage::VulkanMemoryPage(VulkanMemoryManager& ParentMemoryMgr,
bool IsHostVisible) noexcept :
// clang-format off
m_ParentMemoryMgr{ParentMemoryMgr},
- m_AllocationMgr {PageSize, ParentMemoryMgr.m_Allocator}
+ m_AllocationMgr {static_cast<AllocationsMgrOffsetType>(PageSize), ParentMemoryMgr.m_Allocator}
// clang-format on
{
+ VERIFY(PageSize <= std::numeric_limits<AllocationsMgrOffsetType>::max(),
+ "PageSize (", PageSize, ") exceeds maximum allowed value ",
+ std::numeric_limits<AllocationsMgrOffsetType>::max());
+
VkMemoryAllocateInfo MemAlloc = {};
MemAlloc.pNext = nullptr;
@@ -81,7 +85,10 @@ VulkanMemoryPage::~VulkanMemoryPage()
VulkanMemoryAllocation VulkanMemoryPage::Allocate(VkDeviceSize size, VkDeviceSize alignment)
{
std::lock_guard<std::mutex> Lock{m_Mutex};
- auto Allocation = m_AllocationMgr.Allocate(size, alignment);
+ VERIFY(size <= std::numeric_limits<AllocationsMgrOffsetType>::max(),
+ "Allocation size (", size, ") exceeds maximum allowed value ",
+ std::numeric_limits<AllocationsMgrOffsetType>::max());
+ auto Allocation = m_AllocationMgr.Allocate(static_cast<AllocationsMgrOffsetType>(size), static_cast<AllocationsMgrOffsetType>(alignment));
if (Allocation.IsValid())
{
// Offset may not necessarily be aligned, but the allocation is guaranteed to be large enough
@@ -99,7 +106,9 @@ void VulkanMemoryPage::Free(VulkanMemoryAllocation&& Allocation)
{
m_ParentMemoryMgr.OnFreeAllocation(Allocation.Size, m_CPUMemory != nullptr);
std::lock_guard<std::mutex> Lock{m_Mutex};
- m_AllocationMgr.Free(Allocation.UnalignedOffset, Allocation.Size);
+ VERIFY_EXPR(Allocation.UnalignedOffset <= std::numeric_limits<AllocationsMgrOffsetType>::max());
+ VERIFY_EXPR(Allocation.Size <= std::numeric_limits<AllocationsMgrOffsetType>::max());
+ m_AllocationMgr.Free(static_cast<AllocationsMgrOffsetType>(Allocation.UnalignedOffset), static_cast<AllocationsMgrOffsetType>(Allocation.Size));
Allocation = VulkanMemoryAllocation{};
}