FPPS4/spirv/srDecorate.pas

108 lines
2.2 KiB
Plaintext
Raw Normal View History

2022-05-31 07:17:14 +00:00
unit srDecorate;
{$mode ObjFPC}{$H+}
interface
uses
spirv,
2022-09-05 13:30:24 +00:00
srNode,
2022-05-31 07:17:14 +00:00
srOp;
type
2022-09-05 13:30:24 +00:00
PsrHeaderList=^TsrHeaderList;
TsrHeaderList=object(TsrOpBlockCustom)
FGLSL_std_450:PSpirvOp;
function emit_glsl_ext:PSpirvOp;
end;
2022-05-31 07:17:14 +00:00
PsrDecorateList=^TsrDecorateList;
2022-09-05 13:30:24 +00:00
TsrDecorateList=object(TsrOpBlockCustom)
procedure OpDecorate(Data:PsrNode;dec_id,param:DWORD);
procedure OpMemberDecorate(Data:PsrNode;index,offset:DWORD);
2022-05-31 07:17:14 +00:00
end;
PsrDebugInfoList=^TsrDebugInfoList;
2022-09-05 13:30:24 +00:00
TsrDebugInfoList=object(TsrOpBlockCustom)
procedure OpSourceExtension(const n:RawByteString);
procedure OpName(Data:PsrNode;const n:RawByteString);
function OpString(const n:RawByteString):PsrNode;
2022-05-31 07:17:14 +00:00
end;
implementation
2022-09-05 13:30:24 +00:00
function TsrHeaderList.emit_glsl_ext:PSpirvOp;
begin
if (FGLSL_std_450=nil) then
begin
FGLSL_std_450:=AddSpirvOp(Op.OpExtInstImport);
FGLSL_std_450^.pDst:=Emit.NewRefNode;
FGLSL_std_450^.AddString('GLSL.std.450');
end;
Result:=FGLSL_std_450;
end;
procedure TsrDecorateList.OpDecorate(Data:PsrNode;dec_id,param:DWORD);
2022-05-31 07:17:14 +00:00
var
node:PSpirvOp;
begin
node:=AddSpirvOp(Op.OpDecorate);
2022-09-05 13:30:24 +00:00
node^.AddParam(Data);
2022-05-31 07:17:14 +00:00
node^.AddLiteral(dec_id,Decoration.GetStr(dec_id));
Case dec_id of
Decoration.BuiltIn:
node^.AddLiteral(param,BuiltIn.GetStr(param));
Decoration.ArrayStride,
Decoration.MatrixStride,
Decoration.Location,
Decoration.Index,
Decoration.Binding,
Decoration.DescriptorSet:
node^.AddLiteral(param);
else;
end;
end;
2022-09-05 13:30:24 +00:00
procedure TsrDecorateList.OpMemberDecorate(Data:PsrNode;index,offset:DWORD);
2022-05-31 07:17:14 +00:00
var
node:PSpirvOp;
begin
node:=AddSpirvOp(Op.OpMemberDecorate);
2022-09-05 13:30:24 +00:00
node^.AddParam(Data);
2022-05-31 07:17:14 +00:00
node^.AddLiteral(index);
node^.AddLiteral(Decoration.Offset,Decoration.GetStr(Decoration.Offset));
node^.AddLiteral(offset);
end;
2022-09-05 13:30:24 +00:00
procedure TsrDebugInfoList.OpSourceExtension(const n:RawByteString);
2022-05-31 07:17:14 +00:00
var
node:PSpirvOp;
begin
node:=AddSpirvOp(Op.OpSourceExtension);
node^.AddString(n);
end;
2022-09-05 13:30:24 +00:00
procedure TsrDebugInfoList.OpName(Data:PsrNode;const n:RawByteString);
2022-05-31 07:17:14 +00:00
var
node:PSpirvOp;
begin
node:=AddSpirvOp(Op.OpName);
2022-09-05 13:30:24 +00:00
node^.AddParam(Data);
node^.AddString(n);
end;
function TsrDebugInfoList.OpString(const n:RawByteString):PsrNode;
var
node:PSpirvOp;
begin
node:=AddSpirvOp(Op.OpString);
node^.pDst:=Emit.NewRefNode;
2022-05-31 07:17:14 +00:00
node^.AddString(n);
2022-09-05 13:30:24 +00:00
Result:=node^.pDst;
2022-05-31 07:17:14 +00:00
end;
end.