diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-11-30 16:57:13 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-11-30 16:57:13 +0000 |
| commit | ef396c82756864a0834a391e28a822b20cc7b019 (patch) | |
| tree | 9b64d68f653c489a947c6060717a638cc7e1d8c8 /Graphics | |
| parent | Vulkan backend: fixed 32-bit build (diff) | |
| download | DiligentCore-ef396c82756864a0834a391e28a822b20cc7b019.tar.gz DiligentCore-ef396c82756864a0834a391e28a822b20cc7b019.zip | |
Fixed some 32-bit compilation warnings
Diffstat (limited to 'Graphics')
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{}; } |
