fix green colors on NVIDIA 30XX

This commit is contained in:
Pavel 2022-06-02 14:39:14 +03:00
parent aa0d0347b0
commit a505a89666
4 changed files with 42 additions and 5 deletions

View File

@ -86,6 +86,7 @@ type
FPrintAsm:Boolean;
FUseVertexInput:Boolean;
FUseTexelBuffer:Boolean;
FUseOutput16:Boolean;
function Alloc(Size:ptruint):Pointer;

View File

@ -6,6 +6,7 @@ interface
uses
sysutils,
spirv,
ps4_pssl,
srNodes,
srLabel,
@ -34,6 +35,7 @@ Var
dout:PsrVariable;
dst:PsrRegNode;
src:array[0..3] of PsrRegNode;
rsl:array[0..3] of PsrRegNode;
rtype:TsrDataType;
f,i,p:Byte;
@ -150,10 +152,36 @@ begin
Assert(false);
end;
dst:=emit_OpMakeVec(line,dtVec4h,4,@src);
dst^.mark_read;
if FUseOutput16 then
begin
dst:=emit_OpMakeVec(line,dtVec4h,4,@src);
dst^.mark_read;
dout:=FetchOutput(TpsslExportType(FSPI.EXP.TGT),dtVec4h); //output in FSPI.EXP.TGT
rtype:=dtVec4h;
end else
begin
rsl[0]:=NewReg(dtFloat32);
rsl[1]:=NewReg(dtFloat32);
rsl[2]:=NewReg(dtFloat32);
rsl[3]:=NewReg(dtFloat32);
_emit_Op1(line,Op.OpFConvert,rsl[0],src[0]);
_emit_Op1(line,Op.OpFConvert,rsl[1],src[1]);
_emit_Op1(line,Op.OpFConvert,rsl[2],src[2]);
_emit_Op1(line,Op.OpFConvert,rsl[3],src[3]);
rsl[0]^.mark_read;
rsl[1]^.mark_read;
rsl[2]^.mark_read;
rsl[3]^.mark_read;
dst:=emit_OpMakeVec(line,dtVec4f,4,@rsl);
dst^.mark_read;
rtype:=dtVec4f;
end;
dout:=FetchOutput(TpsslExportType(FSPI.EXP.TGT),rtype); //output in FSPI.EXP.TGT
emit_OpStore(line,dout,dst);
end;

View File

@ -25,6 +25,7 @@ var
FPrintSpv:Boolean;
FUseVertexInput:Boolean;
FUseTexelBuffer:Boolean;
FUseOutput16:Boolean;
BufferCfg:TsrBufferCfg;
end;
@ -446,6 +447,7 @@ begin
SprvEmit.FPrintAsm :=cfg.FPrintAsm;
SprvEmit.FUseVertexInput:=cfg.FUseVertexInput;
SprvEmit.FUseTexelBuffer:=cfg.FUseTexelBuffer;
SprvEmit.FUseOutput16 :=cfg.FUseOutput16;
SprvEmit.FBuffers.cfg:=cfg.BufferCfg;
@ -500,11 +502,16 @@ begin
'-i':cfg.FPrintInfo:=True;
'-a':cfg.FPrintAsm:=True;
'-p':cfg.FPrintSpv:=True;
'-eva':cfg.FUseVertexInput:=True;
'-dva':cfg.FUseVertexInput:=False;
'-etb':cfg.FUseTexelBuffer:=True;
'-dtb':cfg.FUseTexelBuffer:=False;
'-eoh':cfg.FUseOutput16:=True;
'-doh':cfg.FUseOutput16:=False;
'-b':n:=0;
'-mubo':n:=1;//maxUniformBufferRange
@ -593,7 +600,7 @@ begin
//load_dump('shader_dump\simplet-simple-fs_debug\simplet-simple-fs_debug_ps_F327ABD1.dump');
//load_dump('shader_dump\simplet-single-triangle_debug\simplet-single-triangle_debug_vs_78EF9008.dump');
//load_dump('shader_dump\simplet-single-triangle_debug\simplet-single-triangle_debug_ps_FBCA196D.dump');
load_dump('shader_dump\simplet-single-triangle_debug\simplet-single-triangle_debug_ps_FBCA196D.dump');
//load_dump('shader_dump\basic_quad_debug\basic_quad_debug_ps_C342C7CD.dump');
//load_dump('shader_dump\basic_quad_debug\basic_quad_debug_vs_D216FEB8.dump');
@ -613,7 +620,7 @@ begin
//load_dump('shader_dump\SonicMania\SonicMania_ps_B4281DBF.dump');
load_dump('shader_dump\SonicMania\SonicMania_ps_11DF2A32.dump');
//load_dump('shader_dump\SonicMania\SonicMania_ps_11DF2A32.dump');
//load_dump('shader_dump\SonicMania\SonicMania_ps_3CC22A00.dump'); //cfg
end;

View File

@ -162,6 +162,7 @@ begin
SprvEmit.FPrintAsm :=False;
SprvEmit.FUseVertexInput:=True;
SprvEmit.FUseTexelBuffer:=False;
SprvEmit.FUseOutput16 :=storageInputOutput16;
SprvEmit.FBuffers.cfg.maxUniformBufferRange :=0; // $FFFF
SprvEmit.FBuffers.cfg.PushConstantsOffset :=0; // 0