This commit is contained in:
Pavel 2022-12-23 15:05:57 +03:00
parent 2be22ac817
commit dc5c0b9734
2 changed files with 32 additions and 4 deletions

View File

@ -128,6 +128,8 @@ type
function OpSToS(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
function OpFToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
//
function OpFloorTo(src:PsrRegNode;ppLine:PPspirvOp=nil):PsrRegNode;
//
procedure OpNot(dst:PsrRegSlot;src:PsrRegNode);
procedure OpLogicalNot(dst:PsrRegSlot;src:PsrRegNode);
procedure OpBitwiseOr(dst:PsrRegSlot;src0,src1:PsrRegNode);
@ -1198,6 +1200,16 @@ end;
//
function TEmitOp.OpFloorTo(src:PsrRegNode;ppLine:PPspirvOp=nil):PsrRegNode;
begin
if (src=nil) then Exit(src);
Result:=NewReg(src^.dtype);
_OpGlsl1(_get_line(ppLine),GlslOp.Floor,Result,src)
end;
//
procedure TEmitOp.OpNot(dst:PsrRegSlot;src:PsrRegNode);
begin
Op1(Op.OpNot,dtUnknow,dst,src); //post type

View File

@ -22,6 +22,7 @@ type
procedure emit_V_CVT_F32_F16;
procedure emit_V_CVT_OFF_F32_I4;
procedure emit_V_CVT_FLR_I32_F32;
procedure emit_V_CVT_RPI_I32_F32;
procedure emit_V_CVT_F32_UBYTE0;
procedure emit_V_EXT_F32(OpId:DWORD);
procedure emit_V_RSQ_CLAMP_F32;
@ -114,15 +115,27 @@ procedure TEmit_VOP1.emit_V_CVT_FLR_I32_F32; //ConvertFloatToSignedInt(floor(vsr
Var
dst:PsrRegSlot;
src:PsrRegNode;
flr:PsrRegNode;
begin
dst:=get_vdst8(FSPI.VOP1.VDST);
src:=fetch_ssrc9(FSPI.VOP1.SRC0,dtFloat32);
flr:=NewReg(dtFloat32);
_OpGlsl1(line,GlslOp.Floor,flr,src);
src:=OpFloorTo(src);
Op1(Op.OpConvertFToS,dtInt32,dst,flr);
Op1(Op.OpConvertFToS,dtInt32,dst,src);
end;
procedure TEmit_VOP1.emit_V_CVT_RPI_I32_F32; //ConvertFloatToSignedInt(floor(vsrc.f+0.5))
Var
dst:PsrRegSlot;
src:PsrRegNode;
begin
dst:=get_vdst8(FSPI.VOP1.VDST);
src:=fetch_ssrc9(FSPI.VOP1.SRC0,dtFloat32);
src:=OpFAddToS(src,0.5);
src:=OpFloorTo(src);
Op1(Op.OpConvertFToS,dtInt32,dst,src);
end;
procedure TEmit_VOP1.emit_V_CVT_F32_UBYTE0;
@ -238,8 +251,11 @@ begin
V_CVT_FLR_I32_F32: emit_V_CVT_FLR_I32_F32;
V_CVT_RPI_I32_F32: emit_V_CVT_RPI_I32_F32;
V_CVT_F32_UBYTE0: emit_V_CVT_F32_UBYTE0;
V_FRACT_F32: emit_V_EXT_F32(GlslOp.Fract);
V_TRUNC_F32: emit_V_EXT_F32(GlslOp.Trunc);
V_CEIL_F32 : emit_V_EXT_F32(GlslOp.Ceil);