diff --git a/vulkan/vCmdBuffer.pas b/vulkan/vCmdBuffer.pas index dc71908a..836907c1 100644 --- a/vulkan/vCmdBuffer.pas +++ b/vulkan/vCmdBuffer.pas @@ -715,9 +715,19 @@ begin srcb:=FetchHostBuffer(Self,src,byteCount,ord(VK_BUFFER_USAGE_TRANSFER_SRC_BIT)); Assert(srcb<>nil); + if (srcb.Foffset+byteCount>srcb.FSize) then + begin + Assert(False,'FetchHostBuffer:Insufficient buffer size!'); + end; + dstb:=FetchHostBuffer(Self,dst,byteCount,ord(VK_BUFFER_USAGE_TRANSFER_DST_BIT)); Assert(dstb<>nil); + if (dstb.Foffset+byteCount>dstb.FSize) then + begin + Assert(False,'FetchHostBuffer:Insufficient buffer size!'); + end; + Inc(cmd_count); vkBufferMemoryBarrier(cmdbuf, diff --git a/vulkan/vHostBufferManager.pas b/vulkan/vHostBufferManager.pas index ee93cea8..cb480450 100644 --- a/vulkan/vHostBufferManager.pas +++ b/vulkan/vHostBufferManager.pas @@ -102,14 +102,12 @@ end; function _fix_buf_size(sparce:Boolean;var Addr:Pointer;var Size:TVkDeviceSize;usage:TVkFlags):TVkDeviceSize; var mr:TVkMemoryRequirements; - pAlign:Pointer; begin mr:=GetRequirements(sparce,Size,usage,@buf_ext); - pAlign:=AlignDw(Addr,mr.alignment); - Result:=(Addr-pAlign); + Result:=(ptruint(Addr) mod mr.alignment); - Addr:=pAlign; + Addr:=Pointer(ptruint(Addr)-Result); Size:=Size+Result; end; @@ -234,11 +232,11 @@ begin FHostBufferSet.Lock_wr; - t:=_Find(Addr); + t:=_Find(Addr); //find by key if (t<>nil) then begin - if (t.FSizeusage) then begin usage:=usage or t.FUsage; @@ -268,7 +266,7 @@ begin Assert(false,'_is_sparce'); end; - t.FAddr:=addr; + t.FAddr:=addr; //save key FHostBufferSet.Insert(@t.FAddr); t.Acquire(nil);