mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
3c0fe1e0d1
commit
bd375e6b51
|
@ -2029,6 +2029,10 @@ begin
|
|||
|
||||
ctx.Render.AddClearColor(ctx.rt_info^.DB_INFO.CLEAR_VALUE);
|
||||
|
||||
Writeln('BindDepth:->'#13#10,
|
||||
' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10,
|
||||
' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName);
|
||||
|
||||
//
|
||||
if limits.VK_KHR_imageless_framebuffer then
|
||||
begin
|
||||
|
|
|
@ -7,6 +7,7 @@ interface
|
|||
uses
|
||||
Classes,
|
||||
SysUtils,
|
||||
md_systm,
|
||||
kern_authinfo,
|
||||
kern_proc,
|
||||
murmurhash,
|
||||
|
@ -107,13 +108,19 @@ begin
|
|||
end;
|
||||
|
||||
Procedure DUMP_USER_DATA(F:THandle;base:Pointer;REG:WORD;USER_DATA:PDWORD);
|
||||
const
|
||||
InputUsageSize=1024; //size is unknow
|
||||
var
|
||||
i:Integer;
|
||||
buf:Pointer;
|
||||
InputUsagePtr:Pointer;
|
||||
size:DWORD;
|
||||
USEAGE_DATA:TUSER_DATA_USEAGE;
|
||||
begin
|
||||
USEAGE_DATA:=_calc_usage(_calc_shader_info(base),USER_DATA);
|
||||
//
|
||||
InputUsagePtr:=nil;
|
||||
//
|
||||
For i:=0 to 15 do
|
||||
begin
|
||||
Case USEAGE_DATA[i] of
|
||||
|
@ -132,13 +139,23 @@ begin
|
|||
buf:=getBufferAddress(USER_DATA[i],USER_DATA[i+1]);
|
||||
if (buf<>nil) then
|
||||
begin
|
||||
size:=256; //size is unknow
|
||||
DUMP_BLOCK(F,REG+i,buf,size);
|
||||
if (InputUsagePtr=nil) then
|
||||
begin
|
||||
InputUsagePtr:=GetMem(InputUsageSize);
|
||||
end;
|
||||
FillChar(InputUsagePtr^,InputUsageSize,0);
|
||||
md_copyin(buf,InputUsagePtr,InputUsageSize,nil);
|
||||
DUMP_BLOCK(F,REG+i,InputUsagePtr,InputUsageSize);
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
end;
|
||||
//
|
||||
if (InputUsagePtr<>nil) then
|
||||
begin
|
||||
FreeMem(InputUsagePtr);
|
||||
end;
|
||||
end;
|
||||
|
||||
function Trim(const S: RawByteString): RawByteString;
|
||||
|
|
|
@ -527,7 +527,7 @@ end;
|
|||
|
||||
function TvImage2.FetchViewRaw(cmd:TvCustomCmdBuffer;const F:TvImageViewKey;usage:TVkFlags):TvImageView2;
|
||||
var
|
||||
key2:TvImageViewKey;
|
||||
key_view:TvImageViewKey;
|
||||
|
||||
i:TvImageView2Set.Iterator;
|
||||
t:TvImageView2;
|
||||
|
@ -543,18 +543,31 @@ begin
|
|||
if (Self=nil) then Exit;
|
||||
if (FHandle=VK_NULL_HANDLE) then Exit;
|
||||
|
||||
if (usage=0) then
|
||||
key_view:=F;
|
||||
|
||||
case FFormat of
|
||||
VK_FORMAT_R32_UINT,
|
||||
VK_FORMAT_R32_SINT,
|
||||
VK_FORMAT_R32_SFLOAT:
|
||||
if (key_view.cformat=VK_FORMAT_D32_SFLOAT) then
|
||||
begin
|
||||
usage:=GET_VK_IMAGE_USAGE_DEFAULT(F.cformat);
|
||||
//downlift to image
|
||||
key_view.cformat:=FFormat;
|
||||
end;
|
||||
else;
|
||||
end;
|
||||
|
||||
key2:=F;
|
||||
key2.fusage:=usage;
|
||||
if (usage=0) then
|
||||
begin
|
||||
usage:=GET_VK_IMAGE_USAGE_DEFAULT(key_view.cformat);
|
||||
end;
|
||||
|
||||
key_view.fusage:=usage;
|
||||
|
||||
rw_wlock(lock);
|
||||
|
||||
t:=nil;
|
||||
i:=FViews.find(@key2);
|
||||
i:=FViews.find(@key_view);
|
||||
if (i.Item<>nil) then
|
||||
begin
|
||||
t:=TvImageView2(ptruint(i.Item^)-ptruint(@TvImageView2(nil).key));
|
||||
|
@ -563,18 +576,18 @@ begin
|
|||
cinfo:=Default(TVkImageViewCreateInfo);
|
||||
cinfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
cinfo.image :=FHandle;
|
||||
cinfo.viewType :=TVkImageViewType(F.vtype);
|
||||
cinfo.format :=F.cformat;
|
||||
cinfo.components.r:=TVkComponentSwizzle(F.dstSel.x);
|
||||
cinfo.components.g:=TVkComponentSwizzle(F.dstSel.y);
|
||||
cinfo.components.b:=TVkComponentSwizzle(F.dstSel.z);
|
||||
cinfo.components.a:=TVkComponentSwizzle(F.dstSel.w);
|
||||
cinfo.viewType :=TVkImageViewType(key_view.vtype);
|
||||
cinfo.format :=key_view.cformat;
|
||||
cinfo.components.r:=TVkComponentSwizzle(key_view.dstSel.x);
|
||||
cinfo.components.g:=TVkComponentSwizzle(key_view.dstSel.y);
|
||||
cinfo.components.b:=TVkComponentSwizzle(key_view.dstSel.z);
|
||||
cinfo.components.a:=TVkComponentSwizzle(key_view.dstSel.w);
|
||||
|
||||
cinfo.subresourceRange.aspectMask :=GetAspectMaskByFormat(F.cformat);
|
||||
cinfo.subresourceRange.baseMipLevel :=F.base_level;
|
||||
cinfo.subresourceRange.levelCount :=F.last_level-F.base_level+1;
|
||||
cinfo.subresourceRange.baseArrayLayer:=F.baseArrayLayer;
|
||||
cinfo.subresourceRange.layerCount :=F.layerCount;
|
||||
cinfo.subresourceRange.aspectMask :=GetAspectMaskByFormat(key_view.cformat);
|
||||
cinfo.subresourceRange.baseMipLevel :=key_view.base_level;
|
||||
cinfo.subresourceRange.levelCount :=key_view.last_level-key_view.base_level+1;
|
||||
cinfo.subresourceRange.baseArrayLayer:=key_view.baseArrayLayer;
|
||||
cinfo.subresourceRange.layerCount :=key_view.layerCount;
|
||||
|
||||
if (cinfo.subresourceRange.baseArrayLayer +
|
||||
cinfo.subresourceRange.layerCount) > self.key.params.layerCount
|
||||
|
@ -629,13 +642,13 @@ begin
|
|||
uinfo.usage:=usage;
|
||||
|
||||
if limits.VK_EXT_image_view_min_lod and
|
||||
(F.minLod<>0) then
|
||||
(key_view.minLod<>0) then
|
||||
begin
|
||||
uinfo.pNext:=@minfo;
|
||||
//
|
||||
minfo:=Default(TVkImageViewMinLodCreateInfoEXT);
|
||||
minfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT;
|
||||
minfo.minLod:=F.minLod;
|
||||
minfo.minLod:=key_view.minLod;
|
||||
end;
|
||||
|
||||
Writeln('vkCreateImageView:',cinfo.format);
|
||||
|
@ -652,7 +665,7 @@ begin
|
|||
t:=TvImageView2.Create;
|
||||
t.FHandle:=FView;
|
||||
t.Parent :=Self;
|
||||
t.key :=key2;
|
||||
t.key :=key_view;
|
||||
|
||||
t.SetObjectName('V_'+_get_dst_sel_str(t.key.dstSel)+
|
||||
'_L['+IntToStr(t.key.base_level)+'-'+IntToStr(t.key.last_level)+']'+
|
||||
|
|
|
@ -765,7 +765,7 @@ begin
|
|||
Exit(False);
|
||||
end;
|
||||
|
||||
m_offset:=buf.FAddr-QWORD(image.key.addr);
|
||||
m_offset:=QWORD(image.key.addr)-buf.FAddr;
|
||||
|
||||
image.PushBarrier(cmd,
|
||||
ord(VK_ACCESS_TRANSFER_WRITE_BIT),
|
||||
|
@ -893,7 +893,7 @@ begin
|
|||
Exit(False);
|
||||
end;
|
||||
|
||||
m_offset:=buf.FAddr-QWORD(image.key.addr);
|
||||
m_offset:=QWORD(image.key.addr)-buf.FAddr;
|
||||
|
||||
image.PushBarrier(cmd,
|
||||
ord(VK_ACCESS_TRANSFER_READ_BIT),
|
||||
|
|
|
@ -158,13 +158,13 @@ function GET_INDEX_TYPE_SIZE(INDEX_TYPE:TVkIndexType):Byte;
|
|||
//
|
||||
|
||||
function _get_vsharp_cformat(PV:PVSharpResource4):TVkFormat;
|
||||
function _get_tsharp4_cformat(PT:PTSharpResource4):TVkFormat;
|
||||
function _get_tsharp4_cformat(PT:PTSharpResource4;hint:s_image_usage):TVkFormat;
|
||||
|
||||
function _get_tsharp4_image_info(PT:PTSharpResource4):TvImageKey;
|
||||
function _get_tsharp8_image_info(PT:PTSharpResource8):TvImageKey;
|
||||
function _get_tsharp4_image_info(PT:PTSharpResource4;hint:s_image_usage):TvImageKey;
|
||||
function _get_tsharp8_image_info(PT:PTSharpResource8;hint:s_image_usage):TvImageKey;
|
||||
|
||||
function _get_tsharp4_image_view(PT:PTSharpResource4):TvImageViewKey;
|
||||
function _get_tsharp8_image_view(PT:PTSharpResource8):TvImageViewKey;
|
||||
function _get_tsharp4_image_view(PT:PTSharpResource4;hint:s_image_usage):TvImageViewKey;
|
||||
function _get_tsharp8_image_view(PT:PTSharpResource8;hint:s_image_usage):TvImageViewKey;
|
||||
|
||||
function _get_ssharp_info(PS:PSSharpResource4):TVkSamplerCreateInfo;
|
||||
|
||||
|
@ -2028,7 +2028,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function _get_tsharp4_cformat(PT:PTSharpResource4):TVkFormat;
|
||||
function _get_tsharp4_cformat(PT:PTSharpResource4;hint:s_image_usage):TVkFormat;
|
||||
begin
|
||||
Result:=VK_FORMAT_UNDEFINED;
|
||||
if (PT=nil) then Exit;
|
||||
|
@ -2147,7 +2147,8 @@ begin
|
|||
IMG_DATA_FORMAT_16_16_16_16 :Result:=VK_FORMAT_R16G16B16A16_UINT;
|
||||
|
||||
IMG_DATA_FORMAT_32 :
|
||||
if IsTileModeDepth(PT^.tiling_idx) then
|
||||
if (not (iu_storage in hint)) and
|
||||
IsTileModeDepth(PT^.tiling_idx) then
|
||||
begin
|
||||
Result:=VK_FORMAT_D32_SFLOAT;
|
||||
end else
|
||||
|
@ -2192,7 +2193,8 @@ begin
|
|||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SINT;
|
||||
|
||||
IMG_DATA_FORMAT_32 :
|
||||
if IsTileModeDepth(PT^.tiling_idx) then
|
||||
if (not (iu_storage in hint)) and
|
||||
IsTileModeDepth(PT^.tiling_idx) then
|
||||
begin
|
||||
Result:=VK_FORMAT_D32_SFLOAT;
|
||||
end else
|
||||
|
@ -2234,7 +2236,8 @@ begin
|
|||
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SFLOAT;
|
||||
|
||||
IMG_DATA_FORMAT_32 :
|
||||
if IsTileModeDepth(PT^.tiling_idx) then
|
||||
if (not (iu_storage in hint)) and
|
||||
IsTileModeDepth(PT^.tiling_idx) then
|
||||
begin
|
||||
Result:=VK_FORMAT_D32_SFLOAT;
|
||||
end else
|
||||
|
@ -2258,13 +2261,13 @@ begin
|
|||
Assert(Result<>VK_FORMAT_UNDEFINED,'[_get_tsharp4_cformat] dfmt:'+_get_tex_dfmt_str(PT^.dfmt)+' nfmt:'+_get_tex_nfmt_str(PT^.nfmt));
|
||||
end;
|
||||
|
||||
function _get_tsharp4_image_info(PT:PTSharpResource4):TvImageKey;
|
||||
function _get_tsharp4_image_info(PT:PTSharpResource4;hint:s_image_usage):TvImageKey;
|
||||
begin
|
||||
Result:=Default(TvImageKey);
|
||||
if (PT=nil) then Exit;
|
||||
|
||||
Result.Addr:=Pointer(PT^.base shl 8);
|
||||
Result.cformat:=_get_tsharp4_cformat(PT);
|
||||
Result.cformat:=_get_tsharp4_cformat(PT,hint);
|
||||
|
||||
if (Result.cformat=VK_FORMAT_UNDEFINED) then
|
||||
begin
|
||||
|
@ -2317,9 +2320,9 @@ begin
|
|||
Result.params.pad_height:=Result.params.height;
|
||||
end;
|
||||
|
||||
function _get_tsharp8_image_info(PT:PTSharpResource8):TvImageKey;
|
||||
function _get_tsharp8_image_info(PT:PTSharpResource8;hint:s_image_usage):TvImageKey;
|
||||
begin
|
||||
Result:=_get_tsharp4_image_info(PTSharpResource4(PT));
|
||||
Result:=_get_tsharp4_image_info(PTSharpResource4(PT),hint);
|
||||
//
|
||||
Result.params.pitch:=PT^.pitch+1;
|
||||
//
|
||||
|
@ -2369,14 +2372,14 @@ end;
|
|||
|
||||
function _get_lod(w:Word):TVkFloat; forward;
|
||||
|
||||
function _get_tsharp4_image_view(PT:PTSharpResource4):TvImageViewKey;
|
||||
function _get_tsharp4_image_view(PT:PTSharpResource4;hint:s_image_usage):TvImageViewKey;
|
||||
var
|
||||
t:Byte;
|
||||
begin
|
||||
Result:=Default(TvImageViewKey);
|
||||
if (PT=nil) then Exit;
|
||||
|
||||
Result.cformat:=_get_tsharp4_cformat(PT);
|
||||
Result.cformat:=_get_tsharp4_cformat(PT,hint);
|
||||
|
||||
Case PT^._type of
|
||||
SQ_RSRC_IMG_1D :Result.vtype:=ord(VK_IMAGE_VIEW_TYPE_1D);
|
||||
|
@ -2423,9 +2426,9 @@ begin
|
|||
//Result.last_level:=0; /////
|
||||
end;
|
||||
|
||||
function _get_tsharp8_image_view(PT:PTSharpResource8):TvImageViewKey;
|
||||
function _get_tsharp8_image_view(PT:PTSharpResource8;hint:s_image_usage):TvImageViewKey;
|
||||
begin
|
||||
Result:=_get_tsharp4_image_view(PTSharpResource4(PT));
|
||||
Result:=_get_tsharp4_image_view(PTSharpResource4(PT),hint);
|
||||
//
|
||||
Case PT^._type of
|
||||
SQ_RSRC_IMG_CUBE:
|
||||
|
|
|
@ -1482,6 +1482,7 @@ end;
|
|||
Procedure TvUniformBuilder.AddTSharp4(PT:PTSharpResource4;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags);
|
||||
var
|
||||
b:TImageBindExt;
|
||||
hint:s_image_usage;
|
||||
begin
|
||||
Assert(PT<>nil);
|
||||
if (PT=nil) then Exit;
|
||||
|
@ -1494,8 +1495,16 @@ begin
|
|||
b.bind :=bind;
|
||||
b.memuse:=_get_buf_mem_usage(flags);
|
||||
|
||||
b.FImage:=_get_tsharp4_image_info(PT);
|
||||
b.FView :=_get_tsharp4_image_view(PT);
|
||||
if (btype in [vbStorage,vbMipStorage]) then
|
||||
begin
|
||||
hint:=[iu_storage];
|
||||
end else
|
||||
begin
|
||||
hint:=[];
|
||||
end;
|
||||
|
||||
b.FImage:=_get_tsharp4_image_info(PT,hint);
|
||||
b.FView :=_get_tsharp4_image_view(PT,hint);
|
||||
|
||||
Insert(b,FImages,Length(FImages));
|
||||
end;
|
||||
|
@ -1503,6 +1512,7 @@ end;
|
|||
Procedure TvUniformBuilder.AddTSharp8(PT:PTSharpResource8;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags);
|
||||
var
|
||||
b:TImageBindExt;
|
||||
hint:s_image_usage;
|
||||
begin
|
||||
Assert(PT<>nil);
|
||||
if (PT=nil) then Exit;
|
||||
|
@ -1515,8 +1525,16 @@ begin
|
|||
b.bind :=bind;
|
||||
b.memuse:=_get_buf_mem_usage(flags);
|
||||
|
||||
b.FImage:=_get_tsharp8_image_info(PT);
|
||||
b.FView :=_get_tsharp8_image_view(PT);
|
||||
if (btype in [vbStorage,vbMipStorage]) then
|
||||
begin
|
||||
hint:=[iu_storage];
|
||||
end else
|
||||
begin
|
||||
hint:=[];
|
||||
end;
|
||||
|
||||
b.FImage:=_get_tsharp8_image_info(PT,hint);
|
||||
b.FView :=_get_tsharp8_image_view(PT,hint);
|
||||
|
||||
Insert(b,FImages,Length(FImages));
|
||||
end;
|
||||
|
|
Loading…
Reference in New Issue