mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
93c01510f9
commit
f498b0da64
|
@ -209,7 +209,7 @@ begin
|
||||||
m_padheight*
|
m_padheight*
|
||||||
m_bytePerElement;
|
m_bytePerElement;
|
||||||
|
|
||||||
m_slice:=(m_slice+255) and (not Ptruint(255));
|
//m_slice:=(m_slice+255) and (not Ptruint(255));
|
||||||
|
|
||||||
Result:=Result+m_slice;
|
Result:=Result+m_slice;
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ begin
|
||||||
m_padheight*
|
m_padheight*
|
||||||
m_bytePerElement;
|
m_bytePerElement;
|
||||||
|
|
||||||
m_slice:=(m_slice+255) and (not Ptruint(255));
|
//m_slice:=(m_slice+255) and (not Ptruint(255));
|
||||||
|
|
||||||
Result:=Result+m_slice;
|
Result:=Result+m_slice;
|
||||||
|
|
||||||
|
@ -274,6 +274,8 @@ begin
|
||||||
if (m_height=0) then m_height:=1;
|
if (m_height=0) then m_height:=1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Result:=(Result+255) and (not Ptruint(255));
|
||||||
|
|
||||||
Result:=Result*
|
Result:=Result*
|
||||||
image.key.params.depth*
|
image.key.params.depth*
|
||||||
image.key.params.arrayLayers;
|
image.key.params.arrayLayers;
|
||||||
|
@ -423,6 +425,7 @@ var
|
||||||
|
|
||||||
m_bytePerElement:Ptruint;
|
m_bytePerElement:Ptruint;
|
||||||
m_level,m_width,m_height:Ptruint;
|
m_level,m_width,m_height:Ptruint;
|
||||||
|
m_padwidth,m_padheight:Ptruint;
|
||||||
m_slice :Ptruint;
|
m_slice :Ptruint;
|
||||||
m_offset:Ptruint;
|
m_offset:Ptruint;
|
||||||
|
|
||||||
|
@ -472,8 +475,7 @@ begin
|
||||||
|
|
||||||
while (m_level>0) do
|
while (m_level>0) do
|
||||||
begin
|
begin
|
||||||
//BufferImageCopy.bufferOffset:=m_offset;
|
BufferImageCopy.bufferOffset:=m_offset;
|
||||||
BufferImageCopy.bufferOffset:=0;
|
|
||||||
|
|
||||||
BufferImageCopy.imageSubresource.mipLevel:=image.key.params.mipLevels-m_level;
|
BufferImageCopy.imageSubresource.mipLevel:=image.key.params.mipLevels-m_level;
|
||||||
|
|
||||||
|
@ -483,7 +485,17 @@ begin
|
||||||
BufferImageCopyA[b]:=BufferImageCopy;
|
BufferImageCopyA[b]:=BufferImageCopy;
|
||||||
Inc(b);
|
Inc(b);
|
||||||
|
|
||||||
m_slice:=m_width*m_height*m_bytePerElement;
|
if IsTexelFormat(image.key.cformat) then
|
||||||
|
begin
|
||||||
|
m_padwidth :=(m_width +3) shr 2;
|
||||||
|
m_padheight:=(m_height+3) shr 2;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
m_padwidth :=m_width ;
|
||||||
|
m_padheight:=m_height;
|
||||||
|
end;
|
||||||
|
|
||||||
|
m_slice:=m_padwidth*m_padheight*m_bytePerElement;
|
||||||
|
|
||||||
m_offset:=m_offset+m_slice;
|
m_offset:=m_offset+m_slice;
|
||||||
|
|
||||||
|
@ -509,6 +521,7 @@ end;
|
||||||
Procedure load_1dThin(cmd:TvCustomCmdBuffer;image:TvImage2);
|
Procedure load_1dThin(cmd:TvCustomCmdBuffer;image:TvImage2);
|
||||||
var
|
var
|
||||||
buf:TvTempBuffer;
|
buf:TvTempBuffer;
|
||||||
|
vmem:TvPointer;
|
||||||
|
|
||||||
tiler:Tiler1d;
|
tiler:Tiler1d;
|
||||||
|
|
||||||
|
@ -530,7 +543,16 @@ begin
|
||||||
//m_base:=GetMem(m_full_linear_size);
|
//m_base:=GetMem(m_full_linear_size);
|
||||||
|
|
||||||
buf:=TvTempBuffer.Create(m_full_linear_size,ord(VK_BUFFER_USAGE_TRANSFER_SRC_BIT),nil);
|
buf:=TvTempBuffer.Create(m_full_linear_size,ord(VK_BUFFER_USAGE_TRANSFER_SRC_BIT),nil);
|
||||||
buf.BindMem(MemManager.Alloc(buf.GetRequirements,ord(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)));
|
|
||||||
|
vmem:=MemManager.Alloc(buf.GetRequirements,ord(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) or
|
||||||
|
ord(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
|
||||||
|
|
||||||
|
if (vmem.FMemory=nil) then
|
||||||
|
begin
|
||||||
|
vmem:=MemManager.Alloc(buf.GetRequirements,ord(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
|
||||||
|
end;
|
||||||
|
|
||||||
|
buf.BindMem(vmem);
|
||||||
|
|
||||||
m_base:=nil;
|
m_base:=nil;
|
||||||
vkMapMemory(Device.FHandle,
|
vkMapMemory(Device.FHandle,
|
||||||
|
@ -590,7 +612,7 @@ begin
|
||||||
|
|
||||||
tiler.m_linearSizeBytes:=tiler.m_linearWidth*tiler.m_linearHeight*tiler.m_linearDepth*m_bytePerElement;
|
tiler.m_linearSizeBytes:=tiler.m_linearWidth*tiler.m_linearHeight*tiler.m_linearDepth*m_bytePerElement;
|
||||||
tiler.m_tiledSizeBytes :=tiler.m_paddedWidth*tiler.m_paddedHeight*tiler.m_paddedDepth*m_bytePerElement;
|
tiler.m_tiledSizeBytes :=tiler.m_paddedWidth*tiler.m_paddedHeight*tiler.m_paddedDepth*m_bytePerElement;
|
||||||
tiler.m_tiledSizeBytes:=(tiler.m_tiledSizeBytes+255) and (not Ptruint(255));
|
//tiler.m_tiledSizeBytes:=(tiler.m_tiledSizeBytes+255) and (not Ptruint(255));
|
||||||
|
|
||||||
tiler.m_tilesPerRow :=tiler.m_paddedWidth div kMicroTileWidth;
|
tiler.m_tilesPerRow :=tiler.m_paddedWidth div kMicroTileWidth;
|
||||||
tiler.m_tilesPerSlice :=tiler.m_tilesPerRow * (tiler.m_paddedHeight div kMicroTileHeight);
|
tiler.m_tilesPerSlice :=tiler.m_tilesPerRow * (tiler.m_paddedHeight div kMicroTileHeight);
|
||||||
|
@ -605,7 +627,10 @@ begin
|
||||||
copy_1dThin(tiler,src,dst);
|
copy_1dThin(tiler,src,dst);
|
||||||
|
|
||||||
{
|
{
|
||||||
SaveToTGA('shader_dump\texture_mip'+IntToStr(m_level)+'.tga',
|
SaveToTGA('shader_dump\texture_mip'+IntToStr(m_level)+
|
||||||
|
'_'+IntToStr(m_width)+
|
||||||
|
'x'+IntToStr(m_height)+
|
||||||
|
'.tga',
|
||||||
dst,
|
dst,
|
||||||
tiler.m_linearWidth,
|
tiler.m_linearWidth,
|
||||||
tiler.m_linearHeight,
|
tiler.m_linearHeight,
|
||||||
|
@ -640,6 +665,7 @@ var
|
||||||
|
|
||||||
m_bytePerElement:Ptruint;
|
m_bytePerElement:Ptruint;
|
||||||
m_level,m_width,m_height:Ptruint;
|
m_level,m_width,m_height:Ptruint;
|
||||||
|
m_padwidth,m_padheight:Ptruint;
|
||||||
m_slice :Ptruint;
|
m_slice :Ptruint;
|
||||||
m_offset:Ptruint;
|
m_offset:Ptruint;
|
||||||
|
|
||||||
|
@ -700,7 +726,6 @@ begin
|
||||||
while (m_level>0) do
|
while (m_level>0) do
|
||||||
begin
|
begin
|
||||||
BufferImageCopy.bufferOffset:=m_offset;
|
BufferImageCopy.bufferOffset:=m_offset;
|
||||||
//BufferImageCopy.bufferOffset:=0;
|
|
||||||
|
|
||||||
BufferImageCopy.imageSubresource.mipLevel:=image.key.params.mipLevels-m_level;
|
BufferImageCopy.imageSubresource.mipLevel:=image.key.params.mipLevels-m_level;
|
||||||
|
|
||||||
|
@ -715,9 +740,19 @@ begin
|
||||||
BufferImageCopyA[b]:=BufferImageCopy;
|
BufferImageCopyA[b]:=BufferImageCopy;
|
||||||
Inc(b);
|
Inc(b);
|
||||||
|
|
||||||
m_slice:=m_width*m_height*m_bytePerElement;
|
if IsTexelFormat(image.key.cformat) then
|
||||||
|
begin
|
||||||
|
m_padwidth :=(m_width +3) shr 2;
|
||||||
|
m_padheight:=(m_height+3) shr 2;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
m_padwidth :=m_width ;
|
||||||
|
m_padheight:=m_height;
|
||||||
|
end;
|
||||||
|
|
||||||
//m_offset:=m_offset+m_slice;
|
m_slice:=m_padwidth*m_padheight*m_bytePerElement;
|
||||||
|
|
||||||
|
m_offset:=m_offset+m_slice;
|
||||||
|
|
||||||
Dec(m_level);
|
Dec(m_level);
|
||||||
m_width :=m_width shr 1;
|
m_width :=m_width shr 1;
|
||||||
|
@ -750,7 +785,7 @@ begin
|
||||||
//if (ri.data_usage and TM_READ)<>0 then Exit;
|
//if (ri.data_usage and TM_READ)<>0 then Exit;
|
||||||
//ri.data_usage:=ri.data_usage or TM_READ;
|
//ri.data_usage:=ri.data_usage or TM_READ;
|
||||||
|
|
||||||
IMAGE_USAGE:=IMAGE_USAGE and (not TM_READ);
|
//IMAGE_USAGE:=IMAGE_USAGE and (not TM_READ);
|
||||||
|
|
||||||
a_load_from[10 ]:=@load_Linear;//@load_clear;
|
a_load_from[10 ]:=@load_Linear;//@load_clear;
|
||||||
a_load_from[10+32]:=@load_Linear;//@load_clear;
|
a_load_from[10+32]:=@load_Linear;//@load_clear;
|
||||||
|
@ -761,8 +796,16 @@ begin
|
||||||
a_load_from[0 ]:=@load_Linear;//@load_clear;
|
a_load_from[0 ]:=@load_Linear;//@load_clear;
|
||||||
a_load_from[0+32 ]:=@load_Linear;//@load_clear;
|
a_load_from[0+32 ]:=@load_Linear;//@load_clear;
|
||||||
|
|
||||||
|
//
|
||||||
|
a_load_from[ 5 ]:=@load_1dThin;
|
||||||
|
a_load_from[ 5+32]:=@load_1dThin;
|
||||||
|
|
||||||
|
a_load_from[ 9 ]:=@load_1dThin;
|
||||||
|
a_load_from[ 9+32]:=@load_1dThin;
|
||||||
|
|
||||||
a_load_from[13 ]:=@load_1dThin;
|
a_load_from[13 ]:=@load_1dThin;
|
||||||
a_load_from[13+32]:=@load_1dThin;
|
a_load_from[13+32]:=@load_1dThin;
|
||||||
|
//
|
||||||
|
|
||||||
a_load_from[8 ]:=@load_Linear;
|
a_load_from[8 ]:=@load_Linear;
|
||||||
a_load_from[8+32 ]:=@load_Linear;
|
a_load_from[8+32 ]:=@load_Linear;
|
||||||
|
@ -1344,7 +1387,7 @@ procedure pm4_EventWriteEop(node:p_pm4_node_EventWriteEop;me:p_pm4_me);
|
||||||
var
|
var
|
||||||
curr,diff:QWORD;
|
curr,diff:QWORD;
|
||||||
begin
|
begin
|
||||||
EndFrameCapture;
|
//EndFrameCapture;
|
||||||
|
|
||||||
curr:=md_rdtsc_unit;
|
curr:=md_rdtsc_unit;
|
||||||
diff:=curr-me^.rel_time;
|
diff:=curr-me^.rel_time;
|
||||||
|
@ -1380,7 +1423,7 @@ procedure pm4_SubmitFlipEop(node:p_pm4_node_SubmitFlipEop;me:p_pm4_me);
|
||||||
var
|
var
|
||||||
curr:QWORD;
|
curr:QWORD;
|
||||||
begin
|
begin
|
||||||
EndFrameCapture;
|
//EndFrameCapture;
|
||||||
|
|
||||||
if (me^.on_submit_flip_eop<>nil) then
|
if (me^.on_submit_flip_eop<>nil) then
|
||||||
begin
|
begin
|
||||||
|
@ -1505,10 +1548,15 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
me^.free_stream(stream);
|
me^.free_stream(stream);
|
||||||
|
|
||||||
|
//EndFrameCapture;
|
||||||
|
|
||||||
//
|
//
|
||||||
Continue;
|
Continue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
EndFrameCapture;
|
||||||
|
|
||||||
me^.rel_time:=0; //reset time
|
me^.rel_time:=0; //reset time
|
||||||
//
|
//
|
||||||
if (me^.on_idle<>nil) then
|
if (me^.on_idle<>nil) then
|
||||||
|
|
|
@ -2650,9 +2650,30 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function Tiler1d.getTiledElementByteOffset(var outTiledByteOffset:QWORD;x,y,z:DWORD):integer;
|
function Tiler1d.getTiledElementByteOffset(var outTiledByteOffset:QWORD;x,y,z:DWORD):integer;
|
||||||
|
var
|
||||||
|
element_index:QWORD;
|
||||||
|
slice_offset:QWORD;
|
||||||
|
tile_row_index:QWORD;
|
||||||
|
tile_column_index:QWORD;
|
||||||
|
tile_offset:QWORD;
|
||||||
|
element_offset:QWORD;
|
||||||
|
final_offset:QWORD;
|
||||||
begin
|
begin
|
||||||
Result:=getTiledElementBitOffset(outTiledByteOffset,x,y,z);
|
element_index := getElementIndex(x, y, z, m_bitsPerElement, m_microTileMode, m_arrayMode);
|
||||||
outTiledByteOffset:=outTiledByteOffset shr 3;
|
|
||||||
|
slice_offset := (z div m_tileThickness) * m_tilesPerSlice * m_tileBytes;
|
||||||
|
|
||||||
|
tile_row_index := y div kMicroTileHeight;
|
||||||
|
tile_column_index := x div kMicroTileWidth;
|
||||||
|
tile_offset := ((tile_row_index * m_tilesPerRow) + tile_column_index) * m_tileBytes;
|
||||||
|
|
||||||
|
element_offset := element_index * (m_bitsPerElement shr 3);
|
||||||
|
|
||||||
|
final_offset := (slice_offset + tile_offset) + (element_offset);
|
||||||
|
|
||||||
|
outTiledByteOffset:= final_offset;
|
||||||
|
|
||||||
|
Result:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function Tiler2d.init(var tp:TilingParameters):integer;
|
function Tiler2d.init(var tp:TilingParameters):integer;
|
||||||
|
|
|
@ -96,6 +96,8 @@ type
|
||||||
|
|
||||||
FDevBlocks:array of TvDeviceMemory;
|
FDevBlocks:array of TvDeviceMemory;
|
||||||
|
|
||||||
|
FBacked:TvDeviceMemory;
|
||||||
|
|
||||||
private
|
private
|
||||||
FFreeSet:TFreeDevNodeSet;
|
FFreeSet:TFreeDevNodeSet;
|
||||||
FAllcSet:TAllcDevNodeSet;
|
FAllcSet:TAllcDevNodeSet;
|
||||||
|
@ -592,10 +594,28 @@ var
|
||||||
i:Word;
|
i:Word;
|
||||||
begin
|
begin
|
||||||
Result:=False;
|
Result:=False;
|
||||||
|
|
||||||
|
FDeviceMemory:=nil;
|
||||||
|
|
||||||
|
if (FBacked<>nil) then
|
||||||
|
begin
|
||||||
|
if (FBacked.FSize>=Size) and
|
||||||
|
(FBacked.FMemInfo.mem_type=mtindex) then
|
||||||
|
begin
|
||||||
|
FDeviceMemory:=FBacked;
|
||||||
|
FBacked:=nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (FDeviceMemory=nil) then
|
||||||
|
begin
|
||||||
FHandle:=vkAllocMemory(Device.FHandle,Size,mtindex);
|
FHandle:=vkAllocMemory(Device.FHandle,Size,mtindex);
|
||||||
if (FHandle=VK_NULL_HANDLE) then Exit;
|
if (FHandle=VK_NULL_HANDLE) then Exit;
|
||||||
//
|
//
|
||||||
FDeviceMemory:=TvDeviceMemory.Create(FHandle,Size,mtindex,@FProperties.memoryTypes[mtindex]);
|
FDeviceMemory:=TvDeviceMemory.Create(FHandle,Size,mtindex,@FProperties.memoryTypes[mtindex]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
if Length(FDevBlocks)<>0 then
|
if Length(FDevBlocks)<>0 then
|
||||||
For i:=0 to High(FDevBlocks) do
|
For i:=0 to High(FDevBlocks) do
|
||||||
|
@ -625,8 +645,24 @@ begin
|
||||||
Result:=False;
|
Result:=False;
|
||||||
if (i>=Length(FDevBlocks)) then Exit;
|
if (i>=Length(FDevBlocks)) then Exit;
|
||||||
if (FDevBlocks[i]=nil) then Exit;
|
if (FDevBlocks[i]=nil) then Exit;
|
||||||
//
|
|
||||||
|
if (FBacked<>nil) then
|
||||||
|
begin
|
||||||
|
if (FDevBlocks[i].FSize>FBacked.FSize) then
|
||||||
|
begin
|
||||||
|
ReleaseAndNil(FBacked);
|
||||||
|
FBacked:=FDevBlocks[i];
|
||||||
|
FDevBlocks[i]:=nil;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
ReleaseAndNil(FDevBlocks[i]);
|
ReleaseAndNil(FDevBlocks[i]);
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
FBacked:=FDevBlocks[i];
|
||||||
|
FDevBlocks[i]:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
//
|
//
|
||||||
Result:=True;
|
Result:=True;
|
||||||
//shrink
|
//shrink
|
||||||
|
@ -878,6 +914,13 @@ var
|
||||||
begin
|
begin
|
||||||
Result:=0;
|
Result:=0;
|
||||||
|
|
||||||
|
if (FBacked<>nil) then
|
||||||
|
begin
|
||||||
|
Result:=Result+FBacked.FSize;
|
||||||
|
ReleaseAndNil(FBacked);
|
||||||
|
if (Result>=max) then Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
if (Length(FDevBlocks)<>0) then
|
if (Length(FDevBlocks)<>0) then
|
||||||
For i:=High(FDevBlocks) to 0 do
|
For i:=High(FDevBlocks) to 0 do
|
||||||
begin
|
begin
|
||||||
|
|
Loading…
Reference in New Issue