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;
|
PTSharpResource4=^TTSharpResource4;
|
||||||
TTSharpResource4=bitpacked record
|
TTSharpResource4=bitpacked record
|
||||||
base:bit38;
|
base:bit32;
|
||||||
|
unused:bit6;
|
||||||
mtype_L2:bit2;
|
mtype_L2:bit2;
|
||||||
min_lod:bit12; //fixed point 4.8 minimum LOD (0.0..15.0)
|
min_lod:bit12; //fixed point 4.8 minimum LOD (0.0..15.0)
|
||||||
dfmt:bit6; //texture data format; num components, num bits
|
dfmt:bit6; //texture data format; num components, num bits
|
||||||
|
@ -930,7 +931,7 @@ end;
|
||||||
procedure print_tsharp4(PT:PTSharpResource4);
|
procedure print_tsharp4(PT:PTSharpResource4);
|
||||||
begin
|
begin
|
||||||
if (PT=nil) then Exit;
|
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('min_lod=',_get_lod_str(PT^.min_lod));
|
||||||
|
|
||||||
Writeln('dfmt=',_get_tex_dfmt_str(PT^.dfmt));
|
Writeln('dfmt=',_get_tex_dfmt_str(PT^.dfmt));
|
||||||
|
|
|
@ -38,7 +38,8 @@ type
|
||||||
procedure emit_V2_F32(OpId:DWORD);
|
procedure emit_V2_F32(OpId:DWORD);
|
||||||
procedure emit_V2_REV_F32(OpId:DWORD);
|
procedure emit_V2_REV_F32(OpId:DWORD);
|
||||||
procedure emit_V_CVT_PKRTZ_F16_F32;
|
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_NRM(OpId:DWORD;rtype:TsrDataType);
|
||||||
procedure emit_V_SH_REV(OpId:DWORD;rtype:TsrDataType);
|
procedure emit_V_SH_REV(OpId:DWORD;rtype:TsrDataType);
|
||||||
procedure emit_V_MUL_LO(rtype:TsrDataType);
|
procedure emit_V_MUL_LO(rtype:TsrDataType);
|
||||||
|
@ -60,8 +61,6 @@ type
|
||||||
procedure emit_V_MAD_U32_U24;
|
procedure emit_V_MAD_U32_U24;
|
||||||
procedure emit_V_MAD_U64_U32;
|
procedure emit_V_MAD_U64_U32;
|
||||||
procedure emit_V_SAD_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_F32;
|
||||||
procedure emit_V_MED3_I32;
|
procedure emit_V_MED3_I32;
|
||||||
procedure emit_V_MED3_U32;
|
procedure emit_V_MED3_U32;
|
||||||
|
@ -329,7 +328,7 @@ begin
|
||||||
OpConvFloatToHalf2(dst,src[0],src[1]);
|
OpConvFloatToHalf2(dst,src[0],src[1]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TEmit_VOP3.emit_V_MMX_F32(OpId:DWORD);
|
procedure TEmit_VOP3.emit_V_MMX(OpId:DWORD;rtype:TsrDataType);
|
||||||
Var
|
Var
|
||||||
dst:PsrRegSlot;
|
dst:PsrRegSlot;
|
||||||
src:array[0..1] of TsrRegNode;
|
src:array[0..1] of TsrRegNode;
|
||||||
|
@ -339,15 +338,53 @@ begin
|
||||||
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
src[0]:=fetch_ssrc9(FSPI.VOP3a.SRC0,dtFloat32);
|
||||||
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
src[1]:=fetch_ssrc9(FSPI.VOP3a.SRC1,dtFloat32);
|
||||||
|
|
||||||
emit_src_abs_bit(@src,2);
|
if rtype.isFloat then
|
||||||
emit_src_neg_bit(@src,2);
|
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);
|
if rtype.isFloat then
|
||||||
emit_dst_clamp_f(dst);
|
begin
|
||||||
|
emit_dst_omod_f(dst);
|
||||||
|
emit_dst_clamp_f(dst);
|
||||||
|
end;
|
||||||
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);
|
procedure TEmit_VOP3.emit_V_SH_NRM(OpId:DWORD;rtype:TsrDataType);
|
||||||
Var
|
Var
|
||||||
dst:PsrRegSlot;
|
dst:PsrRegSlot;
|
||||||
|
@ -864,46 +901,6 @@ begin
|
||||||
OpIAdd(dst,rdif,rvac);
|
OpIAdd(dst,rdif,rvac);
|
||||||
end;
|
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;
|
procedure TEmit_VOP3.emit_V_MED3_F32;
|
||||||
Var
|
Var
|
||||||
dst:PsrRegSlot;
|
dst:PsrRegSlot;
|
||||||
|
@ -1417,11 +1414,17 @@ begin
|
||||||
|
|
||||||
256+V_CVT_PKRTZ_F16_F32: emit_V_CVT_PKRTZ_F16_F32;
|
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_MIN_LEGACY_F32:emit_V_MMX(GlslOp.NMin,dtFloat32);
|
||||||
256+V_MAX_LEGACY_F32:emit_V_MMX_F32(GlslOp.NMax);
|
256+V_MAX_LEGACY_F32:emit_V_MMX(GlslOp.NMax,dtFloat32);
|
||||||
|
|
||||||
256+V_MIN_F32:emit_V_MMX_F32(GlslOp.FMin);
|
256+V_MIN_F32:emit_V_MMX(GlslOp.FMin,dtFloat32);
|
||||||
256+V_MAX_F32:emit_V_MMX_F32(GlslOp.FMax);
|
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;
|
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_MAD_U64_U32: emit_V_MAD_U64_U32;
|
||||||
|
|
||||||
V_SAD_U32 : emit_V_SAD_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_F32: emit_V_MED3_F32;
|
||||||
V_MED3_I32: emit_V_MED3_I32;
|
V_MED3_I32: emit_V_MED3_I32;
|
||||||
V_MED3_U32: emit_V_MED3_U32;
|
V_MED3_U32: emit_V_MED3_U32;
|
||||||
|
|
|
@ -506,7 +506,7 @@ begin
|
||||||
rtFunPtr2:Result:=pData;
|
rtFunPtr2:Result:=pData;
|
||||||
rtVSharp4:Result:={%H-}Pointer(PVSharpResource4(pData)^.base);
|
rtVSharp4:Result:={%H-}Pointer(PVSharpResource4(pData)^.base);
|
||||||
rtTSharp4,
|
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;
|
rtImmData:Result:=TsrDataImm(pData).key.pData;
|
||||||
else;
|
else;
|
||||||
end;
|
end;
|
||||||
|
|
|
@ -2266,7 +2266,7 @@ 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(QWORD(PT^.base) shl 8);
|
||||||
Result.cformat:=_get_tsharp4_cformat(PT,hint);
|
Result.cformat:=_get_tsharp4_cformat(PT,hint);
|
||||||
|
|
||||||
if (Result.cformat=VK_FORMAT_UNDEFINED) then
|
if (Result.cformat=VK_FORMAT_UNDEFINED) then
|
||||||
|
|
|
@ -1021,7 +1021,7 @@ begin
|
||||||
Case FPushConst.addr[0].rtype of
|
Case FPushConst.addr[0].rtype of
|
||||||
vtVSharp4:Result:=Pointer(PVSharpResource4(Result)^.base);
|
vtVSharp4:Result:=Pointer(PVSharpResource4(Result)^.base);
|
||||||
vtTSharp4,
|
vtTSharp4,
|
||||||
vtTSharp8:Result:=Pointer(PTSharpResource4(Result)^.base shl 8);
|
vtTSharp8:Result:=Pointer(QWORD(PTSharpResource4(Result)^.base) shl 8);
|
||||||
else;
|
else;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1232,7 +1232,7 @@ begin
|
||||||
|
|
||||||
if (i<>0) then
|
if (i<>0) then
|
||||||
begin
|
begin
|
||||||
pData:=Pointer(PTSharpResource4(pDmem)^.base shl 8);
|
pData:=Pointer(QWORD(PTSharpResource4(pDmem)^.base) shl 8);
|
||||||
|
|
||||||
pDmem:=nil;
|
pDmem:=nil;
|
||||||
if not get_dmem_ptr(pData,@pDmem,nil) then
|
if not get_dmem_ptr(pData,@pDmem,nil) then
|
||||||
|
|
Loading…
Reference in New Issue