From b45d537b96a5cd9c4183ada6b5f52bf88bb2f4d3 Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:38:59 +0300 Subject: [PATCH] + --- chip/pm4_me.pas | 21 +++++++++++++++++++-- vulkan/vImage.pas | 8 ++++++++ vulkan/vImageManager.pas | 18 +++++++++++++++++- vulkan/vMemory.pas | 14 ++++++++++---- 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/chip/pm4_me.pas b/chip/pm4_me.pas index b1db9364..c1b99f4f 100644 --- a/chip/pm4_me.pas +++ b/chip/pm4_me.pas @@ -1152,7 +1152,9 @@ begin begin iv:=ri.FetchView(ctx.Cmd,FView,iu_sampled); - Writeln('BindImage:','0x',HexStr(ri.FHandle,16),' 0x',HexStr(iv.FHandle,16)); + Writeln('BindImage:->'#13#10, + ' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10, + ' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName); DescriptorGroup.BindImage(fset,bind, iv.FHandle, @@ -1166,7 +1168,9 @@ begin iv:=ri.FetchView(ctx.Cmd,FView,iu_storage); - Writeln('BindStorage:','0x',HexStr(ri.FHandle,16),' 0x',HexStr(iv.FHandle,16)); + Writeln('BindStorage:->'#13#10, + ' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10, + ' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName); DescriptorGroup.BindStorage(fset,bind, iv.FHandle, @@ -1691,6 +1695,10 @@ begin ctx.Render.AddClearColor(ctx.rt_info^.RT_INFO[i].CLEAR_COLOR); + Writeln('BindFrame:->'#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 @@ -2041,6 +2049,8 @@ begin pm4_InitStream(ctx); // + //if not ctx.WaitConfirmOrSwitch then Exit; + StartFrameCapture; ctx.BeginCmdBuffer; @@ -2058,14 +2068,17 @@ begin case node^.ntype of ntDrawIndex2: begin + Writeln('DrawIndexOffset2(',node^.indexOffset,',',node^.indexCount,')'); ctx.Cmd.DrawIndexOffset2(Pointer(node^.indexBase),node^.indexOffset,node^.indexCount); end; ntDrawIndexOffset2: begin + Writeln('DrawIndexOffset2(',node^.indexOffset,',',node^.indexCount,')'); ctx.Cmd.DrawIndexOffset2(Pointer(node^.indexBase),node^.indexOffset,node^.indexCount); end; ntDrawIndexAuto: begin + Writeln('DrawIndexAuto(',node^.indexOffset,',',node^.indexCount,')'); ctx.Cmd.DrawIndexAuto(node^.indexOffset,node^.indexCount); end; ntClearDepth: @@ -2331,6 +2344,8 @@ begin pm4_InitStream(ctx); // + //if not ctx.WaitConfirmOrSwitch then Exit; + StartFrameCapture; ctx.BeginCmdBuffer; @@ -2340,6 +2355,8 @@ begin pm4_DispatchPrepare(ctx,node); + Writeln('DispatchDirect(',node^.DIM_X,',',node^.DIM_Y,',',node^.DIM_Z,')'); + ctx.Cmd.DispatchDirect(node^.DIM_X,node^.DIM_Y,node^.DIM_Z); ///////// diff --git a/vulkan/vImage.pas b/vulkan/vImage.pas index 7567fa0e..e257584e 100644 --- a/vulkan/vImage.pas +++ b/vulkan/vImage.pas @@ -59,6 +59,8 @@ type TvImageView=class(TvRefsObject) FHandle:TVkImageView; + FName :RawByteString; + procedure SetObjectName(const name:RawByteString); Destructor Destroy; override; end; @@ -1930,6 +1932,12 @@ begin dstStageMask); end; +procedure TvImageView.SetObjectName(const name:RawByteString); +begin + FName:=name; + DebugReport.SetObjectName(VK_OBJECT_TYPE_IMAGE_VIEW,FHandle,PChar(name)); +end; + Destructor TvImageView.Destroy; begin if (FHandle<>VK_NULL_HANDLE) then diff --git a/vulkan/vImageManager.pas b/vulkan/vImageManager.pas index 6a658cc7..feed6ca7 100644 --- a/vulkan/vImageManager.pas +++ b/vulkan/vImageManager.pas @@ -498,6 +498,17 @@ begin end; end; +const + DST_SEL_STR:PChar='I01RGBA'; + +function _get_dst_sel_str(dstSel:TvDstSel):RawByteString; inline; +begin + Result:=DST_SEL_STR[dstSel.x]+ + DST_SEL_STR[dstSel.y]+ + DST_SEL_STR[dstSel.z]+ + DST_SEL_STR[dstSel.w]; +end; + function TvImage2.FetchViewRaw(cmd:TvCustomCmdBuffer;const F:TvImageViewKey;usage:TVkFlags):TvImageView2; var key2:TvImageViewKey; @@ -627,6 +638,11 @@ begin t.Parent :=Self; t.key :=key2; + t.SetObjectName('V_'+_get_dst_sel_str(t.key.dstSel)+ + '_L['+IntToStr(t.key.base_level)+'-'+IntToStr(t.key.last_level)+']'+ + '_A['+IntToStr(t.key.base_array)+'-'+IntToStr(t.key.last_array)+']' + ); + t.Acquire(Self); //map ref FViews.Insert(@t.key); end; @@ -1088,7 +1104,7 @@ begin end; t.SetObjectName(Ch+'_0x'+HexStr(QWORD(t.key.Addr),10)+ - '_'+IntToStr(t.key.params.width)+'x'+IntToStr(t.key.params.height)+ + '_'+IntToStr(t.key.params.width)+'x'+IntToStr(t.key.params.height)+'x'+IntToStr(t.key.params.depth)+ '_m'+IntToStr(t.key.params.mipLevels)+ '_a'+IntToStr(t.key.params.arrayLayers)+ '_t'+IntToStr(t.key.params.tiling.idx)+'|'+IntToStr(t.key.params.tiling.alt) diff --git a/vulkan/vMemory.pas b/vulkan/vMemory.pas index 9e5db381..d1bcac7f 100644 --- a/vulkan/vMemory.pas +++ b/vulkan/vMemory.pas @@ -1509,6 +1509,12 @@ begin // if (Result.FMemory<>nil) then begin + if (Result.FMemory<>TvDeviceMemory(TAILQ_FIRST(@FDevs))) then + begin + TAILQ_REMOVE (@FDevs,Result.FMemory,@Result.FMemory.entry); + TAILQ_INSERT_HEAD(@FDevs,Result.FMemory,@Result.FMemory.entry); + end; + // Result.FMemory.Acquire(nil); //fetch ref end; // @@ -1538,7 +1544,7 @@ end; Function TvMemManager._shrink_dev_block(max:TVkDeviceSize;heap_index:Byte):TVkDeviceSize; var - node,next:TvDeviceMemory; + node,prev:TvDeviceMemory; begin Result:=0; @@ -1549,11 +1555,11 @@ begin if (Result>=max) then Exit; end; - node:=TvDeviceMemory(TAILQ_FIRST(@FDevs)); + node:=TvDeviceMemory(TAILQ_LAST(@FDevs)); while (node<>nil) do begin - next:=TvDeviceMemory(TAILQ_NEXT(node,@node.entry)); + prev:=TvDeviceMemory(TAILQ_PREV(node,@node.entry)); if (node.FMemInfo.heap_index=heap_index) then if (node.FRefs<=1) then @@ -1566,7 +1572,7 @@ begin if (Result>=max) then Break; end; - node:=next; + node:=prev; end; end;