From c95a3631579d88ffde4f14a74b5386cf7da255ea Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:40:39 +0300 Subject: [PATCH] + --- spirv/emit_post_op.pas | 45 ++++++++++++++++++++++++++++++++-------- spirv/srPrivate.pas | 2 +- sys/kern/kern_budget.pas | 7 ++++--- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/spirv/emit_post_op.pas b/spirv/emit_post_op.pas index d5866ba3..cb4c0127 100644 --- a/spirv/emit_post_op.pas +++ b/spirv/emit_post_op.pas @@ -2005,18 +2005,45 @@ begin pLine:=src.pLine; vint6:=NewImm_i(dtInt32,6); - rvec[0]:=NewReg(dtInt32); - rvec[1]:=NewReg(dtInt32); - rvec[2]:=NewReg(dtInt32); - pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[0],src,NewImm_i(dtInt32, 0),vint6); - pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[1],src,NewImm_i(dtInt32, 8),vint6); - pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[2],src,NewImm_i(dtInt32,16),vint6); + Case count of + 1: + begin + rvec[0]:=NewReg(dtInt32); - src:=NewReg(dtVec3i); - pLine:=OpMakeCon(pLine,src,@rvec); + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[0],src,NewImm_i(dtInt32, 0),vint6); - dst.dtype :=dtVec3i; + src:=rvec[0]; + end; + 2: + begin + rvec[0]:=NewReg(dtInt32); + rvec[1]:=NewReg(dtInt32); + + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[0],src,NewImm_i(dtInt32, 0),vint6); + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[1],src,NewImm_i(dtInt32, 8),vint6); + + src:=NewReg(dtVec2i); + pLine:=OpMakeCon(pLine,src,@rvec); + end; + 3: + begin + rvec[0]:=NewReg(dtInt32); + rvec[1]:=NewReg(dtInt32); + rvec[2]:=NewReg(dtInt32); + + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[0],src,NewImm_i(dtInt32, 0),vint6); + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[1],src,NewImm_i(dtInt32, 8),vint6); + pLine:=_Op3(pLine,Op.OpBitFieldSExtract,rvec[2],src,NewImm_i(dtInt32,16),vint6); + + src:=NewReg(dtVec3i); + pLine:=OpMakeCon(pLine,src,@rvec); + end; + else + Assert(False); + end; + + dst.dtype :=src.dtype; dst.pWriter:=src; node.mark_not_used; diff --git a/spirv/srPrivate.pas b/spirv/srPrivate.pas index 53fd093a..8c865fa7 100644 --- a/spirv/srPrivate.pas +++ b/spirv/srPrivate.pas @@ -861,7 +861,7 @@ begin cur:=RegDownSlot(pSlot^.current); prv:=RegDownSlot(prev); - Assert(CompareReg(RegDownSlot(orig),RegDownSlot(prev))); + //Assert(CompareReg(RegDownSlot(orig),RegDownSlot(prev))); if CompareReg(cur,prv) then begin diff --git a/sys/kern/kern_budget.pas b/sys/kern/kern_budget.pas index 8d8a7ffb..707a47b0 100644 --- a/sys/kern/kern_budget.pas +++ b/sys/kern/kern_budget.pas @@ -284,9 +284,10 @@ var begin ret:=is_sce_prog_attr_20_800000(@g_appinfo); - size:=$a0000000; //2GB - - if (ret=False) then + if (ret) then + begin + size:=$a0000000; //2GB + end else begin ret:=is_sce_prog_attr_20_400000(@g_appinfo);