From c13a6afa30d671421addc7abe0d86f036988e9ef Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Mon, 24 Feb 2025 01:27:28 +0300 Subject: [PATCH] I broke it --- chip/pm4_me.pas | 27 +++++++++++++++++++++++++++ sys/jit/kern_jit_ctx.pas | 11 +++++++++-- vulkan/vDependence.pas | 1 + vulkan/vHostBufferManager.pas | 14 +++++++------- vulkan/vImageManager.pas | 10 +++++----- vulkan/vImageTiling.pas | 11 +++++++---- vulkan/vMemory.pas | 2 +- 7 files changed, 57 insertions(+), 19 deletions(-) diff --git a/chip/pm4_me.pas b/chip/pm4_me.pas index c1b99f4f..37dac3f8 100644 --- a/chip/pm4_me.pas +++ b/chip/pm4_me.pas @@ -968,6 +968,11 @@ begin ri:=TvImage2(resource_instance^.resource^.rimage); + if (ri<>nil) then + begin + ctx.Cmd.RefTo(ri); + end; + if (ri<>nil) then if (ri.is_invalid) then begin @@ -1031,6 +1036,11 @@ begin buf:=TvHostBuffer(resource_instance^.resource^.rimage); + if (buf<>nil) then + begin + ctx.Cmd.RefTo(buf); + end; + if (buf<>nil) then if (buf.is_invalid) then begin @@ -1662,6 +1672,11 @@ begin ri:=TvImage2(color_instance[i]^.resource^.rimage); + if (ri<>nil) then + begin + ctx.Cmd.RefTo(ri); + end; + if (ri<>nil) then if (ri.is_invalid) then begin @@ -1726,6 +1741,11 @@ begin rd:=TvCustomImage2(d_instance^.resource^.rimage); end; + if (rd<>nil) then + begin + ctx.Cmd.RefTo(rd); + end; + if (rd<>nil) then if (rd.is_invalid) then begin @@ -1738,6 +1758,11 @@ begin rs:=TvCustomImage2(s_instance^.resource^.rimage); end; + if (rs<>nil) then + begin + ctx.Cmd.RefTo(rs); + end; + if (rs<>nil) then if (rs.is_invalid) then begin @@ -2360,6 +2385,8 @@ begin ctx.Cmd.DispatchDirect(node^.DIM_X,node^.DIM_Y,node^.DIM_Z); ///////// + + pm4_Writeback_After(ctx); end; function mul_div_u64(m,d,v:QWORD):QWORD; sysv_abi_default; assembler; nostackframe; diff --git a/sys/jit/kern_jit_ctx.pas b/sys/jit/kern_jit_ctx.pas index 36eea9d4..17cda88b 100644 --- a/sys/jit/kern_jit_ctx.pas +++ b/sys/jit/kern_jit_ctx.pas @@ -328,6 +328,7 @@ uses vm_pmap_prot, machdep, kern_thr, + md_systm, systm, kern_jit_asm; @@ -4178,8 +4179,11 @@ end; // function get_instruction_info(addr:Pointer):t_instruction_info; +type + t_data_16=array[0..15] of Byte; var ptr:Pointer; + data:t_data_16; dis:TX86Disassembler; din:TInstruction; @@ -4189,7 +4193,10 @@ begin dis:=Default(TX86Disassembler); din:=Default(TInstruction); - ptr:=addr; + data:=Default(t_data_16); + md_copyout(@data,addr,16,nil); + + ptr:=@data; dis.Disassemble(dm64,ptr,din); @@ -4230,7 +4237,7 @@ begin end; end; - print_disassemble(addr,Result.code_size); + print_disassemble(@data,Result.code_size); Assert(false,'get_instruction_info'); end; diff --git a/vulkan/vDependence.pas b/vulkan/vDependence.pas index 866bcaab..f4e9312c 100644 --- a/vulkan/vDependence.pas +++ b/vulkan/vDependence.pas @@ -128,6 +128,7 @@ end; function TvRefsObject.Hold(Sender:TObject):Boolean; begin + Result:=True; if System.InterlockedIncrement(FHold)=1 then begin Result:=Acquire(Sender); diff --git a/vulkan/vHostBufferManager.pas b/vulkan/vHostBufferManager.pas index 7ecde3a4..cdd91e19 100644 --- a/vulkan/vHostBufferManager.pas +++ b/vulkan/vHostBufferManager.pas @@ -109,7 +109,7 @@ begin begin buf:=It.Item^.FBuffer; - if buf.Acquire(nil) then + if buf.Hold(nil) then begin if ((buf.FAddr+buf.FSize)>=__end) then @@ -117,7 +117,7 @@ begin Exit(buf); end else begin - buf.Release(nil); + buf.Drop(nil); //The search key matches but the size does not. goto _delete; end; @@ -146,7 +146,7 @@ begin begin buf:=It.Item^.FBuffer; - if buf.Acquire(nil) then + if buf.Hold(nil) then begin if (buf.FAddr<=Addr) and @@ -155,7 +155,7 @@ begin Exit(buf); end; - buf.Release(nil); + buf.Drop(nil); end else begin goto _delete; @@ -275,7 +275,7 @@ begin goto _repeat; end; - key.FBuffer.Acquire(nil); //analog ref in [_FindHostBuffer] + key.FBuffer.Hold(nil); //analog ref in [_FindHostBuffer] // FHostBufferSet.Unlock_wr; @@ -291,8 +291,8 @@ begin if (Result<>nil) then begin - Result.Release(nil); //release [_FindHostBuffer] - mem.Release; //release [FetchHostMap] + Result.Drop(nil); //release [_FindHostBuffer] + mem.Release; //release [FetchHostMap] end; end; diff --git a/vulkan/vImageManager.pas b/vulkan/vImageManager.pas index 5db68a99..b484ba30 100644 --- a/vulkan/vImageManager.pas +++ b/vulkan/vImageManager.pas @@ -152,7 +152,7 @@ type end; function FetchImage(cmd:TvCustomCmdBuffer;const F:TvImageKey;usage:s_image_usage):TvImage2; -function FindImage(cmd:TvCustomCmdBuffer;Addr:Pointer;cformat:TVkFormat):TvImage2; +function FindImage (cmd:TvCustomCmdBuffer;Addr:Pointer;cformat:TVkFormat):TvImage2; Function get_image_size(const key:TvImageKey):Ptruint; external name 'tiling_get_image_size'; @@ -1139,7 +1139,7 @@ begin if (t<>nil) then begin - if t.Acquire(nil) then //result ref + if t.Hold(nil) then //result ref begin t.FUsage:=t.FUsage+usage; end else @@ -1190,7 +1190,7 @@ begin if (t<>nil) then begin - t.Acquire(nil); //result ref + t.Hold(nil); //result ref end; mem.Release; //release [FetchMemory] @@ -1225,7 +1225,7 @@ function FetchImage(cmd:TvCustomCmdBuffer;const F:TvImageKey;usage:s_image_usage begin FImage2Set.Lock_wr; - Result:=_FetchImage(F,usage); // <- Acquire(nil)/FetchMemory + Result:=_FetchImage(F,usage); // <- Hold(nil)/FetchMemory //add dep cmd.RefTo(Result); @@ -1234,7 +1234,7 @@ begin if (Result<>nil) then begin - Result.Release(nil); //release [Acquire(nil)] + Result.Drop(nil); //release [Drop(nil)] end; end; diff --git a/vulkan/vImageTiling.pas b/vulkan/vImageTiling.pas index bfb0fb5d..ea058ec7 100644 --- a/vulkan/vImageTiling.pas +++ b/vulkan/vImageTiling.pas @@ -214,8 +214,7 @@ type Function TvTempBuffer.ReleaseTmp(Sender:TObject):Boolean; register; begin //force free - Free; - Result:=True; + Result:=Drop(nil); end; procedure load_clear(cmd:TvCustomCmdBuffer;image:TvCustomImage2); @@ -331,6 +330,7 @@ var a,d,b:Ptruint; begin + buf.Hold(nil); cmd.AddDependence(@buf.ReleaseTmp); m_bytePerElement:=getFormatSize(image.key.cformat); @@ -672,7 +672,7 @@ begin vkUnmapMemory(Device.FHandle,FBind.FMemory.FHandle); - image.Release(Self); + image.Drop(Self); Result:=inherited; end; @@ -693,7 +693,7 @@ begin buf.image:=image; buf.m_full_linear_size:=m_full_linear_size; - image.Acquire(buf); + image.Hold(buf); vmem:=MemManager.FetchMemory(buf.GetRequirements,V_PROP_HOST_VISIBLE or V_PROP_DEVICE_LOCAL); @@ -992,6 +992,9 @@ begin set_tiling_cbs(kTileModeThin_2dThin ,0,@Load_Linear,@Writeback_Linear,@GetLinearAlignSize); //@load_clear; set_tiling_cbs(kTileModeThin_2dThin ,1,@Load_Linear,@Writeback_Linear,@GetLinearAlignSize); //@load_clear; + set_tiling_cbs(kTileModeThick_1dThick ,0,@Load_Linear,@Writeback_Linear,@GetLinearAlignSize); //@load_clear; + set_tiling_cbs(kTileModeThick_1dThick ,1,@Load_Linear,@Writeback_Linear,@GetLinearAlignSize); //@load_clear; + // set_tiling_cbs(kTileModeDepth_1dThin ,0,@load_1dThin,@write_1dThin,@Get1dThinSize); set_tiling_cbs(kTileModeDepth_1dThin ,1,@load_1dThin,@write_1dThin,@Get1dThinSize); diff --git a/vulkan/vMemory.pas b/vulkan/vMemory.pas index 98642767..c4fbfed3 100644 --- a/vulkan/vMemory.pas +++ b/vulkan/vMemory.pas @@ -1011,7 +1011,7 @@ begin Exit; end; - Result:=F.Hold(nil); + Result:=F.Drop(nil); Guard.Free; end;