Fix buffer align

This commit is contained in:
red-prig 2023-01-03 19:54:53 +03:00
parent 2bf7df0116
commit 07d736c7bc
2 changed files with 15 additions and 7 deletions

View File

@ -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,

View File

@ -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.FSize<Size) or
if (t.FSize<(t.Foffset+Size)) or
((t.FUsage and usage)<>usage) 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);