Buffer update fixes for metal

main
moudgils 5 years ago
parent 6fdbce01eb
commit e72cae47b4

@ -85,16 +85,34 @@ namespace AZ
uint64_t AsyncUploadQueue::QueueUpload(const RHI::BufferStreamRequest& uploadRequest)
{
uint64_t queueValue = m_uploadFence.Increment();
const MemoryView& memoryView = static_cast<Buffer&>(*uploadRequest.m_buffer).GetMemoryView();
RHI::Ptr<Memory> buffer = memoryView.GetMemory();
Buffer& destBuffer = static_cast<Buffer&>(*uploadRequest.m_buffer);
const MemoryView& destMemoryView = destBuffer.GetMemoryView();
MTLStorageMode mtlStorageMode = destBuffer.GetMemoryView().GetStorageMode();
RHI::BufferPool& bufferPool = static_cast<RHI::BufferPool&>(*destBuffer.GetPool());
/*
if(mtlStorageMode == MTLStorageModeShared || mtlStorageMode == GetCPUGPUMemoryMode())
{
RHI::BufferMapRequest mapRequest;
mapRequest.m_buffer = uploadRequest.m_buffer;
mapRequest.m_byteCount = uploadRequest.m_byteCount;
mapRequest.m_byteOffset = uploadRequest.m_byteOffset;
RHI::BufferMapResponse mapResponse;
bufferPool.MapBuffer(mapRequest, mapResponse);
::memcpy(mapResponse.m_data, uploadRequest.m_sourceData, uploadRequest.m_byteCount);
bufferPool.UnmapBuffer(*uploadRequest.m_buffer);
if (uploadRequest.m_fenceToSignal)
{
uploadRequest.m_fenceToSignal->SignalOnCpu();
}
return m_uploadFence.GetPendingValue();
}
*/
Fence* fenceToSignal = nullptr;
uint64_t fenceToSignalValue = 0;
size_t byteCount = uploadRequest.m_byteCount;
size_t byteOffset = memoryView.GetOffset() + uploadRequest.m_byteOffset;
size_t byteOffset = destMemoryView.GetOffset() + uploadRequest.m_byteOffset;
uint64_t queueValue = m_uploadFence.Increment();
const uint8_t* sourceData = reinterpret_cast<const uint8_t*>(uploadRequest.m_sourceData);
if (uploadRequest.m_fenceToSignal)
@ -125,11 +143,11 @@ namespace AZ
}
id<MTLBlitCommandEncoder> blitEncoder = [framePacket->m_mtlCommandBuffer blitCommandEncoder];
[blitEncoder copyFromBuffer:framePacket->m_stagingResource
sourceOffset:0
toBuffer:buffer->GetGpuAddress<id<MTLBuffer>>()
destinationOffset:byteOffset + pendingByteOffset
size:bytesToCopy];
[blitEncoder copyFromBuffer: framePacket->m_stagingResource
sourceOffset: 0
toBuffer: destMemoryView.GetGpuAddress<id<MTLBuffer>>()
destinationOffset: byteOffset + pendingByteOffset
size: bytesToCopy];
[blitEncoder endEncoding];
blitEncoder = nil;

@ -40,7 +40,7 @@ namespace AZ
buffer->m_pendingResolves++;
uploadRequest.m_attachmentBuffer = buffer;
uploadRequest.m_byteOffset = request.m_byteOffset;
uploadRequest.m_byteOffset = request.m_byteOffset;;//buffer->GetMemoryView().GetOffset() + request.m_byteOffset;
uploadRequest.m_stagingBuffer = stagingBuffer;
uploadRequest.m_byteSize = request.m_byteCount;
@ -64,9 +64,12 @@ namespace AZ
AZ_Assert(stagingBuffer, "Staging Buffer is null.");
AZ_Assert(destBuffer, "Attachment Buffer is null.");
//Inform the GPU that the CPU has modified the staging buffer.
//Platform::SynchronizeBufferOnCPU(stagingBuffer->GetMemoryView().GetGpuAddress<id<MTLBuffer>>(), stagingBuffer->GetMemoryView().GetOffset(), stagingBuffer->GetMemoryView().GetSize());
RHI::CopyBufferDescriptor copyDescriptor;
copyDescriptor.m_sourceBuffer = stagingBuffer;
copyDescriptor.m_sourceOffset = 0;
copyDescriptor.m_sourceOffset = 0;//stagingBuffer->GetMemoryView().GetOffset();
copyDescriptor.m_destinationBuffer = destBuffer;
copyDescriptor.m_destinationOffset = static_cast<uint32_t>(packet.m_byteOffset);
copyDescriptor.m_size = static_cast<uint32_t>(packet.m_byteSize);

@ -44,7 +44,7 @@ namespace AZ
if (memoryView.IsValid())
{
heapMemoryUsage.m_residentInBytes += m_descriptor.m_pageSizeInBytes;
memoryView.SetName("BufferPage");
//memoryView.SetName(AZStd::string::format("BufferPage_%s", AZ::Uuid::CreateRandom().ToString<AZStd::string>().c_str()));
}
else
{

Loading…
Cancel
Save