I broke it

This commit is contained in:
Pavel 2025-02-24 01:27:28 +03:00
parent 5b47cc263e
commit c13a6afa30
7 changed files with 57 additions and 19 deletions

View File

@ -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;

View File

@ -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;

View File

@ -128,6 +128,7 @@ end;
function TvRefsObject.Hold(Sender:TObject):Boolean;
begin
Result:=True;
if System.InterlockedIncrement(FHold)=1 then
begin
Result:=Acquire(Sender);

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -1011,7 +1011,7 @@ begin
Exit;
end;
Result:=F.Hold(nil);
Result:=F.Drop(nil);
Guard.Free;
end;