This commit is contained in:
Pavel 2025-03-15 02:10:30 +03:00
parent 3c0fe1e0d1
commit bd375e6b51
6 changed files with 101 additions and 46 deletions

View File

@ -2029,6 +2029,10 @@ begin
ctx.Render.AddClearColor(ctx.rt_info^.DB_INFO.CLEAR_VALUE); 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 if limits.VK_KHR_imageless_framebuffer then
begin begin

View File

@ -7,6 +7,7 @@ interface
uses uses
Classes, Classes,
SysUtils, SysUtils,
md_systm,
kern_authinfo, kern_authinfo,
kern_proc, kern_proc,
murmurhash, murmurhash,
@ -107,13 +108,19 @@ begin
end; end;
Procedure DUMP_USER_DATA(F:THandle;base:Pointer;REG:WORD;USER_DATA:PDWORD); Procedure DUMP_USER_DATA(F:THandle;base:Pointer;REG:WORD;USER_DATA:PDWORD);
const
InputUsageSize=1024; //size is unknow
var var
i:Integer; i:Integer;
buf:Pointer; buf:Pointer;
InputUsagePtr:Pointer;
size:DWORD; size:DWORD;
USEAGE_DATA:TUSER_DATA_USEAGE; USEAGE_DATA:TUSER_DATA_USEAGE;
begin begin
USEAGE_DATA:=_calc_usage(_calc_shader_info(base),USER_DATA); USEAGE_DATA:=_calc_usage(_calc_shader_info(base),USER_DATA);
//
InputUsagePtr:=nil;
//
For i:=0 to 15 do For i:=0 to 15 do
begin begin
Case USEAGE_DATA[i] of Case USEAGE_DATA[i] of
@ -132,13 +139,23 @@ begin
buf:=getBufferAddress(USER_DATA[i],USER_DATA[i+1]); buf:=getBufferAddress(USER_DATA[i],USER_DATA[i+1]);
if (buf<>nil) then if (buf<>nil) then
begin begin
size:=256; //size is unknow if (InputUsagePtr=nil) then
DUMP_BLOCK(F,REG+i,buf,size); 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;
end; end;
end; end;
//
if (InputUsagePtr<>nil) then
begin
FreeMem(InputUsagePtr);
end;
end; end;
function Trim(const S: RawByteString): RawByteString; function Trim(const S: RawByteString): RawByteString;

View File

@ -527,7 +527,7 @@ end;
function TvImage2.FetchViewRaw(cmd:TvCustomCmdBuffer;const F:TvImageViewKey;usage:TVkFlags):TvImageView2; function TvImage2.FetchViewRaw(cmd:TvCustomCmdBuffer;const F:TvImageViewKey;usage:TVkFlags):TvImageView2;
var var
key2:TvImageViewKey; key_view:TvImageViewKey;
i:TvImageView2Set.Iterator; i:TvImageView2Set.Iterator;
t:TvImageView2; t:TvImageView2;
@ -543,18 +543,31 @@ begin
if (Self=nil) then Exit; if (Self=nil) then Exit;
if (FHandle=VK_NULL_HANDLE) then Exit; if (FHandle=VK_NULL_HANDLE) then Exit;
if (usage=0) then key_view:=F;
begin
usage:=GET_VK_IMAGE_USAGE_DEFAULT(F.cformat); 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
//downlift to image
key_view.cformat:=FFormat;
end;
else;
end; end;
key2:=F; if (usage=0) then
key2.fusage:=usage; begin
usage:=GET_VK_IMAGE_USAGE_DEFAULT(key_view.cformat);
end;
key_view.fusage:=usage;
rw_wlock(lock); rw_wlock(lock);
t:=nil; t:=nil;
i:=FViews.find(@key2); i:=FViews.find(@key_view);
if (i.Item<>nil) then if (i.Item<>nil) then
begin begin
t:=TvImageView2(ptruint(i.Item^)-ptruint(@TvImageView2(nil).key)); t:=TvImageView2(ptruint(i.Item^)-ptruint(@TvImageView2(nil).key));
@ -563,18 +576,18 @@ begin
cinfo:=Default(TVkImageViewCreateInfo); cinfo:=Default(TVkImageViewCreateInfo);
cinfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; cinfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
cinfo.image :=FHandle; cinfo.image :=FHandle;
cinfo.viewType :=TVkImageViewType(F.vtype); cinfo.viewType :=TVkImageViewType(key_view.vtype);
cinfo.format :=F.cformat; cinfo.format :=key_view.cformat;
cinfo.components.r:=TVkComponentSwizzle(F.dstSel.x); cinfo.components.r:=TVkComponentSwizzle(key_view.dstSel.x);
cinfo.components.g:=TVkComponentSwizzle(F.dstSel.y); cinfo.components.g:=TVkComponentSwizzle(key_view.dstSel.y);
cinfo.components.b:=TVkComponentSwizzle(F.dstSel.z); cinfo.components.b:=TVkComponentSwizzle(key_view.dstSel.z);
cinfo.components.a:=TVkComponentSwizzle(F.dstSel.w); cinfo.components.a:=TVkComponentSwizzle(key_view.dstSel.w);
cinfo.subresourceRange.aspectMask :=GetAspectMaskByFormat(F.cformat); cinfo.subresourceRange.aspectMask :=GetAspectMaskByFormat(key_view.cformat);
cinfo.subresourceRange.baseMipLevel :=F.base_level; cinfo.subresourceRange.baseMipLevel :=key_view.base_level;
cinfo.subresourceRange.levelCount :=F.last_level-F.base_level+1; cinfo.subresourceRange.levelCount :=key_view.last_level-key_view.base_level+1;
cinfo.subresourceRange.baseArrayLayer:=F.baseArrayLayer; cinfo.subresourceRange.baseArrayLayer:=key_view.baseArrayLayer;
cinfo.subresourceRange.layerCount :=F.layerCount; cinfo.subresourceRange.layerCount :=key_view.layerCount;
if (cinfo.subresourceRange.baseArrayLayer + if (cinfo.subresourceRange.baseArrayLayer +
cinfo.subresourceRange.layerCount) > self.key.params.layerCount cinfo.subresourceRange.layerCount) > self.key.params.layerCount
@ -629,13 +642,13 @@ begin
uinfo.usage:=usage; uinfo.usage:=usage;
if limits.VK_EXT_image_view_min_lod and if limits.VK_EXT_image_view_min_lod and
(F.minLod<>0) then (key_view.minLod<>0) then
begin begin
uinfo.pNext:=@minfo; uinfo.pNext:=@minfo;
// //
minfo:=Default(TVkImageViewMinLodCreateInfoEXT); minfo:=Default(TVkImageViewMinLodCreateInfoEXT);
minfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT; minfo.sType :=VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT;
minfo.minLod:=F.minLod; minfo.minLod:=key_view.minLod;
end; end;
Writeln('vkCreateImageView:',cinfo.format); Writeln('vkCreateImageView:',cinfo.format);
@ -652,7 +665,7 @@ begin
t:=TvImageView2.Create; t:=TvImageView2.Create;
t.FHandle:=FView; t.FHandle:=FView;
t.Parent :=Self; t.Parent :=Self;
t.key :=key2; t.key :=key_view;
t.SetObjectName('V_'+_get_dst_sel_str(t.key.dstSel)+ t.SetObjectName('V_'+_get_dst_sel_str(t.key.dstSel)+
'_L['+IntToStr(t.key.base_level)+'-'+IntToStr(t.key.last_level)+']'+ '_L['+IntToStr(t.key.base_level)+'-'+IntToStr(t.key.last_level)+']'+

View File

@ -765,7 +765,7 @@ begin
Exit(False); Exit(False);
end; end;
m_offset:=buf.FAddr-QWORD(image.key.addr); m_offset:=QWORD(image.key.addr)-buf.FAddr;
image.PushBarrier(cmd, image.PushBarrier(cmd,
ord(VK_ACCESS_TRANSFER_WRITE_BIT), ord(VK_ACCESS_TRANSFER_WRITE_BIT),
@ -893,7 +893,7 @@ begin
Exit(False); Exit(False);
end; end;
m_offset:=buf.FAddr-QWORD(image.key.addr); m_offset:=QWORD(image.key.addr)-buf.FAddr;
image.PushBarrier(cmd, image.PushBarrier(cmd,
ord(VK_ACCESS_TRANSFER_READ_BIT), ord(VK_ACCESS_TRANSFER_READ_BIT),

View File

@ -158,13 +158,13 @@ function GET_INDEX_TYPE_SIZE(INDEX_TYPE:TVkIndexType):Byte;
// //
function _get_vsharp_cformat(PV:PVSharpResource4):TVkFormat; 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_tsharp4_image_info(PT:PTSharpResource4;hint:s_image_usage):TvImageKey;
function _get_tsharp8_image_info(PT:PTSharpResource8):TvImageKey; function _get_tsharp8_image_info(PT:PTSharpResource8;hint:s_image_usage):TvImageKey;
function _get_tsharp4_image_view(PT:PTSharpResource4):TvImageViewKey; function _get_tsharp4_image_view(PT:PTSharpResource4;hint:s_image_usage):TvImageViewKey;
function _get_tsharp8_image_view(PT:PTSharpResource8):TvImageViewKey; function _get_tsharp8_image_view(PT:PTSharpResource8;hint:s_image_usage):TvImageViewKey;
function _get_ssharp_info(PS:PSSharpResource4):TVkSamplerCreateInfo; function _get_ssharp_info(PS:PSSharpResource4):TVkSamplerCreateInfo;
@ -2028,7 +2028,7 @@ begin
end; end;
end; end;
function _get_tsharp4_cformat(PT:PTSharpResource4):TVkFormat; function _get_tsharp4_cformat(PT:PTSharpResource4;hint:s_image_usage):TVkFormat;
begin begin
Result:=VK_FORMAT_UNDEFINED; Result:=VK_FORMAT_UNDEFINED;
if (PT=nil) then Exit; 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_16_16_16_16 :Result:=VK_FORMAT_R16G16B16A16_UINT;
IMG_DATA_FORMAT_32 : IMG_DATA_FORMAT_32 :
if IsTileModeDepth(PT^.tiling_idx) then if (not (iu_storage in hint)) and
IsTileModeDepth(PT^.tiling_idx) then
begin begin
Result:=VK_FORMAT_D32_SFLOAT; Result:=VK_FORMAT_D32_SFLOAT;
end else end else
@ -2192,7 +2193,8 @@ begin
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SINT; IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SINT;
IMG_DATA_FORMAT_32 : IMG_DATA_FORMAT_32 :
if IsTileModeDepth(PT^.tiling_idx) then if (not (iu_storage in hint)) and
IsTileModeDepth(PT^.tiling_idx) then
begin begin
Result:=VK_FORMAT_D32_SFLOAT; Result:=VK_FORMAT_D32_SFLOAT;
end else end else
@ -2234,7 +2236,8 @@ begin
IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SFLOAT; IMG_DATA_FORMAT_16_16_16_16:Result:=VK_FORMAT_R16G16B16A16_SFLOAT;
IMG_DATA_FORMAT_32 : IMG_DATA_FORMAT_32 :
if IsTileModeDepth(PT^.tiling_idx) then if (not (iu_storage in hint)) and
IsTileModeDepth(PT^.tiling_idx) then
begin begin
Result:=VK_FORMAT_D32_SFLOAT; Result:=VK_FORMAT_D32_SFLOAT;
end else 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)); Assert(Result<>VK_FORMAT_UNDEFINED,'[_get_tsharp4_cformat] dfmt:'+_get_tex_dfmt_str(PT^.dfmt)+' nfmt:'+_get_tex_nfmt_str(PT^.nfmt));
end; end;
function _get_tsharp4_image_info(PT:PTSharpResource4):TvImageKey; function _get_tsharp4_image_info(PT:PTSharpResource4;hint:s_image_usage):TvImageKey;
begin begin
Result:=Default(TvImageKey); Result:=Default(TvImageKey);
if (PT=nil) then Exit; if (PT=nil) then Exit;
Result.Addr:=Pointer(PT^.base shl 8); 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 if (Result.cformat=VK_FORMAT_UNDEFINED) then
begin begin
@ -2317,9 +2320,9 @@ begin
Result.params.pad_height:=Result.params.height; Result.params.pad_height:=Result.params.height;
end; end;
function _get_tsharp8_image_info(PT:PTSharpResource8):TvImageKey; function _get_tsharp8_image_info(PT:PTSharpResource8;hint:s_image_usage):TvImageKey;
begin begin
Result:=_get_tsharp4_image_info(PTSharpResource4(PT)); Result:=_get_tsharp4_image_info(PTSharpResource4(PT),hint);
// //
Result.params.pitch:=PT^.pitch+1; Result.params.pitch:=PT^.pitch+1;
// //
@ -2369,14 +2372,14 @@ end;
function _get_lod(w:Word):TVkFloat; forward; 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 var
t:Byte; t:Byte;
begin begin
Result:=Default(TvImageViewKey); Result:=Default(TvImageViewKey);
if (PT=nil) then Exit; if (PT=nil) then Exit;
Result.cformat:=_get_tsharp4_cformat(PT); Result.cformat:=_get_tsharp4_cformat(PT,hint);
Case PT^._type of Case PT^._type of
SQ_RSRC_IMG_1D :Result.vtype:=ord(VK_IMAGE_VIEW_TYPE_1D); SQ_RSRC_IMG_1D :Result.vtype:=ord(VK_IMAGE_VIEW_TYPE_1D);
@ -2423,9 +2426,9 @@ begin
//Result.last_level:=0; ///// //Result.last_level:=0; /////
end; end;
function _get_tsharp8_image_view(PT:PTSharpResource8):TvImageViewKey; function _get_tsharp8_image_view(PT:PTSharpResource8;hint:s_image_usage):TvImageViewKey;
begin begin
Result:=_get_tsharp4_image_view(PTSharpResource4(PT)); Result:=_get_tsharp4_image_view(PTSharpResource4(PT),hint);
// //
Case PT^._type of Case PT^._type of
SQ_RSRC_IMG_CUBE: SQ_RSRC_IMG_CUBE:

View File

@ -1482,6 +1482,7 @@ end;
Procedure TvUniformBuilder.AddTSharp4(PT:PTSharpResource4;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags); Procedure TvUniformBuilder.AddTSharp4(PT:PTSharpResource4;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags);
var var
b:TImageBindExt; b:TImageBindExt;
hint:s_image_usage;
begin begin
Assert(PT<>nil); Assert(PT<>nil);
if (PT=nil) then Exit; if (PT=nil) then Exit;
@ -1494,8 +1495,16 @@ begin
b.bind :=bind; b.bind :=bind;
b.memuse:=_get_buf_mem_usage(flags); b.memuse:=_get_buf_mem_usage(flags);
b.FImage:=_get_tsharp4_image_info(PT); if (btype in [vbStorage,vbMipStorage]) then
b.FView :=_get_tsharp4_image_view(PT); 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)); Insert(b,FImages,Length(FImages));
end; end;
@ -1503,6 +1512,7 @@ end;
Procedure TvUniformBuilder.AddTSharp8(PT:PTSharpResource8;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags); Procedure TvUniformBuilder.AddTSharp8(PT:PTSharpResource8;btype:TvBindImageType;fset,bind:DWord;flags:TvLayoutFlags);
var var
b:TImageBindExt; b:TImageBindExt;
hint:s_image_usage;
begin begin
Assert(PT<>nil); Assert(PT<>nil);
if (PT=nil) then Exit; if (PT=nil) then Exit;
@ -1515,8 +1525,16 @@ begin
b.bind :=bind; b.bind :=bind;
b.memuse:=_get_buf_mem_usage(flags); b.memuse:=_get_buf_mem_usage(flags);
b.FImage:=_get_tsharp8_image_info(PT); if (btype in [vbStorage,vbMipStorage]) then
b.FView :=_get_tsharp8_image_view(PT); 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)); Insert(b,FImages,Length(FImages));
end; end;