mirror of
https://git.suyu.dev/suyu/sirit.git
synced 2025-12-21 21:36:17 +01:00
Add Op* prefix to instructions that have to be emited
This commit is contained in:
parent
ba3a3a74d7
commit
a08aeec982
15 changed files with 149 additions and 144 deletions
|
|
@ -19,20 +19,20 @@ public:
|
|||
AddCapability(spv::Capability::Shader);
|
||||
SetMemoryModel(spv::AddressingModel::Logical, spv::MemoryModel::GLSL450);
|
||||
|
||||
const auto t_void = Name(TypeVoid(), "void");
|
||||
const auto t_uint = Name(TypeInt(32, false), "uint");
|
||||
const auto t_float = Name(TypeFloat(32), "float");
|
||||
const auto t_void = OpName(OpTypeVoid(), "void");
|
||||
const auto t_uint = OpName(OpTypeInt(32, false), "uint");
|
||||
const auto t_float = OpName(OpTypeFloat(32), "float");
|
||||
|
||||
const auto float4 = Name(TypeVector(t_float, 4), "float4");
|
||||
const auto in_float = Name(TypePointer(spv::StorageClass::Input, t_float), "in_float");
|
||||
const auto in_float4 = Name(TypePointer(spv::StorageClass::Input, float4), "in_float4");
|
||||
const auto out_float4 = Name(TypePointer(spv::StorageClass::Output, float4), "out_float4");
|
||||
const auto float4 = OpName(OpTypeVector(t_float, 4), "float4");
|
||||
const auto in_float = OpName(OpTypePointer(spv::StorageClass::Input, t_float), "in_float");
|
||||
const auto in_float4 = OpName(OpTypePointer(spv::StorageClass::Input, float4), "in_float4");
|
||||
const auto out_float4 = OpName(OpTypePointer(spv::StorageClass::Output, float4), "out_float4");
|
||||
|
||||
const auto gl_per_vertex = Name(TypeStruct({float4}), "gl_PerVertex");
|
||||
const auto gl_per_vertex_ptr = Name(TypePointer(spv::StorageClass::Output, gl_per_vertex), "out_gl_PerVertex");
|
||||
const auto gl_per_vertex = OpName(OpTypeStruct({float4}), "gl_PerVertex");
|
||||
const auto gl_per_vertex_ptr = OpName(OpTypePointer(spv::StorageClass::Output, gl_per_vertex), "out_gl_PerVertex");
|
||||
|
||||
const auto in_pos = Name(Variable(in_float4, spv::StorageClass::Input), "in_pos");
|
||||
const auto per_vertex = Name(Variable(gl_per_vertex_ptr, spv::StorageClass::Output), "per_vertex");
|
||||
const auto in_pos = OpName(OpVariable(in_float4, spv::StorageClass::Input), "in_pos");
|
||||
const auto per_vertex = OpName(OpVariable(gl_per_vertex_ptr, spv::StorageClass::Output), "per_vertex");
|
||||
|
||||
Decorate(in_pos, spv::Decoration::Location, {0});
|
||||
Decorate(gl_per_vertex, spv::Decoration::Block);
|
||||
|
|
@ -41,22 +41,22 @@ public:
|
|||
AddGlobalVariable(in_pos);
|
||||
AddGlobalVariable(per_vertex);
|
||||
|
||||
const auto main_func = Emit(Name(Function(t_void, spv::FunctionControlMask::MaskNone, TypeFunction(t_void)), "main"));
|
||||
const auto main_func = Emit(OpName(OpFunction(t_void, spv::FunctionControlMask::MaskNone, TypeFunction(t_void)), "main"));
|
||||
Emit(Label());
|
||||
|
||||
const auto ptr_pos_x = Emit(AccessChain(in_float, in_pos, {Constant(t_uint, 0u)}));
|
||||
const auto ptr_pos_y = Emit(AccessChain(in_float, in_pos, {Constant(t_uint, 1u)}));
|
||||
const auto ptr_pos_x = Emit(OpAccessChain(in_float, in_pos, {OpConstant(t_uint, 0u)}));
|
||||
const auto ptr_pos_y = Emit(OpAccessChain(in_float, in_pos, {OpConstant(t_uint, 1u)}));
|
||||
|
||||
const auto pos_x = Emit(Load(t_float, ptr_pos_x));
|
||||
const auto pos_y = Emit(Load(t_float, ptr_pos_y));
|
||||
|
||||
auto tmp_position = Emit(Undef(float4));
|
||||
tmp_position = Emit(CompositeInsert(float4, pos_x, tmp_position, {0}));
|
||||
tmp_position = Emit(CompositeInsert(float4, pos_y, tmp_position, {1}));
|
||||
tmp_position = Emit(CompositeInsert(float4, Constant(t_float, 0.f), tmp_position, {2}));
|
||||
tmp_position = Emit(CompositeInsert(float4, Constant(t_float, 1.f), tmp_position, {3}));
|
||||
tmp_position = Emit(OpCompositeInsert(float4, pos_x, tmp_position, {0}));
|
||||
tmp_position = Emit(OpCompositeInsert(float4, pos_y, tmp_position, {1}));
|
||||
tmp_position = Emit(OpCompositeInsert(float4, OpConstant(t_float, 0.f), tmp_position, {2}));
|
||||
tmp_position = Emit(OpCompositeInsert(float4, OpConstant(t_float, 1.f), tmp_position, {3}));
|
||||
|
||||
const auto gl_position = Emit(AccessChain(out_float4, per_vertex, {Constant(t_uint, 0u)}));
|
||||
const auto gl_position = Emit(OpAccessChain(out_float4, per_vertex, {OpConstant(t_uint, 0u)}));
|
||||
Emit(Store(gl_position, tmp_position));
|
||||
|
||||
Emit(Return());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue