mirror of https://github.com/red-prig/fpPS4.git
Float -> UNORM
This commit is contained in:
parent
981d350b76
commit
18e08ac658
|
@ -127,6 +127,7 @@ type
|
||||||
function OpFMulToS(src0:PsrRegNode;src1:Single;ppLine:PPspirvOp=nil):PsrRegNode;
|
function OpFMulToS(src0:PsrRegNode;src1:Single;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
//
|
//
|
||||||
function OpUToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
function OpUToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
|
function OpFToU(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
function OpSToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
function OpSToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
function OpUToU(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
function OpUToU(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
function OpSToS(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
function OpSToS(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
|
@ -1210,6 +1211,14 @@ begin
|
||||||
_Op1(_get_line(ppLine),Op.OpConvertUToF,Result,src);
|
_Op1(_get_line(ppLine),Op.OpConvertUToF,Result,src);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TEmitOp.OpFToU(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
|
begin
|
||||||
|
if (src=nil) then Exit(src);
|
||||||
|
|
||||||
|
Result:=NewReg(rtype);
|
||||||
|
_Op1(_get_line(ppLine),Op.OpConvertFToU,Result,src);
|
||||||
|
end;
|
||||||
|
|
||||||
function TEmitOp.OpSToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
function TEmitOp.OpSToF(src:PsrRegNode;rtype:TsrDataType;ppLine:PPspirvOp=nil):PsrRegNode;
|
||||||
begin
|
begin
|
||||||
if (src=nil) then Exit(src);
|
if (src=nil) then Exit(src);
|
||||||
|
|
|
@ -104,15 +104,46 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if (lc.elem_resl<>lc.elem_orig) then
|
||||||
|
begin
|
||||||
|
case lc.elem_resl of
|
||||||
|
dtFloat32: //isScalar
|
||||||
|
begin
|
||||||
|
|
||||||
|
Case lc.info.NFMT of
|
||||||
|
BUF_NUM_FORMAT_UNORM:
|
||||||
|
begin
|
||||||
|
For i:=0 to lc.elem_count-1 do
|
||||||
|
begin
|
||||||
|
lc.elm[i]:=OpFMulToS(lc.elm[i],255);
|
||||||
|
lc.elm[i]:=OpFToU(lc.elm[i],lc.elem_orig);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
Assert(false,'TODO CONVERT');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
dtUint32,
|
||||||
|
dtInt32 : //isInt
|
||||||
|
begin
|
||||||
|
Assert(false,'TODO CONVERT');
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
Assert(False);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
Case lc.elem_count of
|
Case lc.elem_count of
|
||||||
1:rsl:=lc.elm[0];
|
1:rsl:=lc.elm[0];
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
rsl:=OpMakeVec(line,lc.elem_resl.AsVector(lc.elem_count),@lc.elm);
|
rsl:=OpMakeVec(line,lc.elem_orig.AsVector(lc.elem_count),@lc.elm);
|
||||||
|
//rsl:=OpMakeVec(line,lc.elem_resl.AsVector(lc.elem_count),@lc.elm);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Assert(lc.elem_resl=lc.elem_orig,'TODO CONVERT');
|
//Assert(lc.elem_resl=lc.elem_orig,'TODO CONVERT');
|
||||||
|
|
||||||
csize:=Min(lc.info.GetElemSize*lc.elem_count,lc.info.GetSizeFormat);
|
csize:=Min(lc.info.GetElemSize*lc.elem_count,lc.info.GetSizeFormat);
|
||||||
orig:=lc.v.data[0];
|
orig:=lc.v.data[0];
|
||||||
|
|
Loading…
Reference in New Issue