mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
ef622ebe18
commit
1b7e506a11
|
@ -252,7 +252,8 @@ type
|
|||
|
||||
PTSharpResource4=^TTSharpResource4;
|
||||
TTSharpResource4=bitpacked record
|
||||
base:bit38;
|
||||
base:bit32;
|
||||
unused:bit6;
|
||||
mtype_L2:bit2;
|
||||
min_lod:bit12; //fixed point 4.8 minimum LOD (0.0..15.0)
|
||||
dfmt:bit6; //texture data format; num components, num bits
|
||||
|
@ -930,7 +931,7 @@ end;
|
|||
procedure print_tsharp4(PT:PTSharpResource4);
|
||||
begin
|
||||
if (PT=nil) then Exit;
|
||||
Writeln('base=',HexStr(PT^.base shl 8,10));
|
||||
Writeln('base=',HexStr(QWORD(PT^.base) shl 8,10));
|
||||
Writeln('min_lod=',_get_lod_str(PT^.min_lod));
|
||||
|
||||
Writeln('dfmt=',_get_tex_dfmt_str(PT^.dfmt));
|
||||
|
|
|
@ -38,7 +38,8 @@ type
|
|||
procedure emit_V2_F32(OpId:DWORD);
|
||||
procedure emit_V2_REV_F32(OpId:DWORD);
|
||||
procedure emit_V_CVT_PKRTZ_F16_F32;
|
||||
procedure emit_V_MMX_F32(OpId:DWORD);
|
||||
procedure emit_V_MMX(OpId:DWORD;rtype:TsrDataType);
|
||||
procedure emit_V_MMX3(OpId:DWORD;rtype:TsrDataType);
|
||||
procedure emit_V_SH_NRM(OpId:DWORD;rtype:TsrDataType);
|
||||
procedure emit_V_SH_REV(OpId:DWORD;rtype:TsrDataType);
|
||||
procedure emit_V_MUL_LO(rtype:TsrDataType);
|
||||
|
@ -60,8 +61,6 @@ type
|
|||
procedure emit_V_MAD_U32_U24;
|
||||
procedure emit_V_MAD_U64_U32;
|
||||
procedure emit_V_SAD_U32;
|
||||
procedure emit_V_MAX3_F32;
|
||||
procedure emit_V_MIN3_F32;
|
||||
procedure emit_V_MED3_F32;
|
||||
procedure emit_V_MED3_I32;
|
||||
procedure emit_V_MED3_U32;
|
||||
|
@ -329,7 +328,7 @@ begin
|
|||
OpConvFloatToHalf2(dst,src[0],src[1]);
|
||||
end;
|
||||
|
||||
procedure TEmit_VOP3.emit_V_MMX_F32(OpId:DWORD);
|
||||
procedure TEmit_VOP3.emit_V_MMX(OpId:DWORD;rtype:TsrDataType);
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
src:array[0..1] of TsrRegNode;
|
||||
|
@ -339,15 +338,53 @@ begin
|
|||
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
||||
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
||||
|
||||
emit_src_abs_bit(@src,2);
|
||||
emit_src_neg_bit(@src,2);
|
||||
if rtype.isFloat then
|
||||
begin
|
||||
emit_src_abs_bit(@src,2);
|
||||
emit_src_neg_bit(@src,2);
|
||||
end;
|
||||
|
||||
OpGlsl2(OpId,dtFloat32,dst,src[0],src[1]);
|
||||
OpGlsl2(OpId,rtype,dst,src[0],src[1]);
|
||||
|
||||
emit_dst_omod_f(dst);
|
||||
emit_dst_clamp_f(dst);
|
||||
if rtype.isFloat then
|
||||
begin
|
||||
emit_dst_omod_f(dst);
|
||||
emit_dst_clamp_f(dst);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TEmit_VOP3.emit_V_MMX3(OpId:DWORD;rtype:TsrDataType);
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
src:array[0..2] of TsrRegNode;
|
||||
mid:TsrRegNode;
|
||||
begin
|
||||
dst:=get_vdst8(FSPI.VOP3a.VDST);
|
||||
|
||||
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
||||
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
||||
src[2]:=fetch_ssrc9(FSPI.VOP3a.SRC2,dtFloat32);
|
||||
|
||||
if rtype.isFloat then
|
||||
begin
|
||||
emit_src_abs_bit(@src,3);
|
||||
emit_src_neg_bit(@src,3);
|
||||
end;
|
||||
|
||||
OpGlsl2(OpId,rtype,dst,src[0],src[1]);
|
||||
|
||||
mid:=MakeRead(dst,rtype);
|
||||
|
||||
OpGlsl2(OpId,rtype,dst,mid,src[2]);
|
||||
|
||||
if rtype.isFloat then
|
||||
begin
|
||||
emit_dst_omod_f(dst);
|
||||
emit_dst_clamp_f(dst);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TEmit_VOP3.emit_V_SH_NRM(OpId:DWORD;rtype:TsrDataType);
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
|
@ -864,46 +901,6 @@ begin
|
|||
OpIAdd(dst,rdif,rvac);
|
||||
end;
|
||||
|
||||
procedure TEmit_VOP3.emit_V_MAX3_F32;
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
src:array[0..2] of TsrRegNode;
|
||||
begin
|
||||
dst:=get_vdst8(FSPI.VOP3a.VDST);
|
||||
|
||||
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
||||
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
||||
src[2]:=fetch_ssrc9(FSPI.VOP3a.SRC2,dtFloat32);
|
||||
|
||||
emit_src_abs_bit(@src,3);
|
||||
emit_src_neg_bit(@src,3);
|
||||
|
||||
OpGlsl2(GlslOp.FMax,dtFloat32,dst,OpFMaxTo(src[0],src[1]),src[2]);
|
||||
|
||||
emit_dst_omod_f(dst);
|
||||
emit_dst_clamp_f(dst);
|
||||
end;
|
||||
|
||||
procedure TEmit_VOP3.emit_V_MIN3_F32;
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
src:array[0..2] of TsrRegNode;
|
||||
begin
|
||||
dst:=get_vdst8(FSPI.VOP3a.VDST);
|
||||
|
||||
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
||||
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
||||
src[2]:=fetch_ssrc9(FSPI.VOP3a.SRC2,dtFloat32);
|
||||
|
||||
emit_src_abs_bit(@src,3);
|
||||
emit_src_neg_bit(@src,3);
|
||||
|
||||
OpGlsl2(GlslOp.FMin,dtFloat32,dst,OpFMinTo(src[0],src[1]),src[2]);
|
||||
|
||||
emit_dst_omod_f(dst);
|
||||
emit_dst_clamp_f(dst);
|
||||
end;
|
||||
|
||||
procedure TEmit_VOP3.emit_V_MED3_F32;
|
||||
Var
|
||||
dst:PsrRegSlot;
|
||||
|
@ -1417,11 +1414,17 @@ begin
|
|||
|
||||
256+V_CVT_PKRTZ_F16_F32: emit_V_CVT_PKRTZ_F16_F32;
|
||||
|
||||
256+V_MIN_LEGACY_F32:emit_V_MMX_F32(GlslOp.NMin);
|
||||
256+V_MAX_LEGACY_F32:emit_V_MMX_F32(GlslOp.NMax);
|
||||
256+V_MIN_LEGACY_F32:emit_V_MMX(GlslOp.NMin,dtFloat32);
|
||||
256+V_MAX_LEGACY_F32:emit_V_MMX(GlslOp.NMax,dtFloat32);
|
||||
|
||||
256+V_MIN_F32:emit_V_MMX_F32(GlslOp.FMin);
|
||||
256+V_MAX_F32:emit_V_MMX_F32(GlslOp.FMax);
|
||||
256+V_MIN_F32:emit_V_MMX(GlslOp.FMin,dtFloat32);
|
||||
256+V_MAX_F32:emit_V_MMX(GlslOp.FMax,dtFloat32);
|
||||
|
||||
256+V_MIN_I32:emit_V_MMX(GlslOp.SMin,dtInt32);
|
||||
256+V_MAX_I32:emit_V_MMX(GlslOp.SMax,dtInt32);
|
||||
|
||||
256+V_MIN_U32:emit_V_MMX(GlslOp.UMin,dtUint32);
|
||||
256+V_MAX_U32:emit_V_MMX(GlslOp.UMax,dtUint32);
|
||||
|
||||
256+V_MUL_LEGACY_F32: emit_V_MUL_LEGACY_F32;
|
||||
|
||||
|
@ -1459,8 +1462,16 @@ begin
|
|||
V_MAD_U64_U32: emit_V_MAD_U64_U32;
|
||||
|
||||
V_SAD_U32 : emit_V_SAD_U32;
|
||||
V_MAX3_F32: emit_V_MAX3_F32;
|
||||
V_MIN3_F32: emit_V_MIN3_F32;
|
||||
|
||||
V_MIN3_F32: emit_V_MMX3(GlslOp.FMin,dtFloat32);
|
||||
V_MAX3_F32: emit_V_MMX3(GlslOp.FMax,dtFloat32);
|
||||
|
||||
V_MIN3_I32: emit_V_MMX3(GlslOp.SMin,dtInt32);
|
||||
V_MAX3_I32: emit_V_MMX3(GlslOp.SMax,dtInt32);
|
||||
|
||||
V_MIN3_U32: emit_V_MMX3(GlslOp.UMin,dtUint32);
|
||||
V_MAX3_U32: emit_V_MMX3(GlslOp.UMax,dtUint32);
|
||||
|
||||
V_MED3_F32: emit_V_MED3_F32;
|
||||
V_MED3_I32: emit_V_MED3_I32;
|
||||
V_MED3_U32: emit_V_MED3_U32;
|
||||
|
|
|
@ -506,7 +506,7 @@ begin
|
|||
rtFunPtr2:Result:=pData;
|
||||
rtVSharp4:Result:={%H-}Pointer(PVSharpResource4(pData)^.base);
|
||||
rtTSharp4,
|
||||
rtTSharp8:Result:={%H-}Pointer(PTSharpResource4(pData)^.base shl 8);
|
||||
rtTSharp8:Result:={%H-}Pointer(QWORD(PTSharpResource4(pData)^.base) shl 8);
|
||||
rtImmData:Result:=TsrDataImm(pData).key.pData;
|
||||
else;
|
||||
end;
|
||||
|
|
|
@ -2266,7 +2266,7 @@ begin
|
|||
Result:=Default(TvImageKey);
|
||||
if (PT=nil) then Exit;
|
||||
|
||||
Result.Addr:=Pointer(PT^.base shl 8);
|
||||
Result.Addr:=Pointer(QWORD(PT^.base) shl 8);
|
||||
Result.cformat:=_get_tsharp4_cformat(PT,hint);
|
||||
|
||||
if (Result.cformat=VK_FORMAT_UNDEFINED) then
|
||||
|
|
|
@ -1021,7 +1021,7 @@ begin
|
|||
Case FPushConst.addr[0].rtype of
|
||||
vtVSharp4:Result:=Pointer(PVSharpResource4(Result)^.base);
|
||||
vtTSharp4,
|
||||
vtTSharp8:Result:=Pointer(PTSharpResource4(Result)^.base shl 8);
|
||||
vtTSharp8:Result:=Pointer(QWORD(PTSharpResource4(Result)^.base) shl 8);
|
||||
else;
|
||||
end;
|
||||
|
||||
|
@ -1232,7 +1232,7 @@ begin
|
|||
|
||||
if (i<>0) then
|
||||
begin
|
||||
pData:=Pointer(PTSharpResource4(pDmem)^.base shl 8);
|
||||
pData:=Pointer(QWORD(PTSharpResource4(pDmem)^.base) shl 8);
|
||||
|
||||
pDmem:=nil;
|
||||
if not get_dmem_ptr(pData,@pDmem,nil) then
|
||||
|
|
Loading…
Reference in New Issue