diff options
author | ReinUsesLisp <[email protected]> | 2019-03-11 04:17:29 -0300 |
---|---|---|
committer | ReinUsesLisp <[email protected]> | 2019-03-11 04:38:09 -0300 |
commit | 4b1c1d1e38f28492589bf4196843c13f6128942b (patch) | |
tree | d45bd6f2cc0844b8aa9a7cbcdee063adb15e1b19 /tests | |
parent | ee4ce61e628f3fc963a8b0e458330993a865ef7a (diff) | |
download | sirit-4b1c1d1e38f28492589bf4196843c13f6128942b.tar.gz sirit-4b1c1d1e38f28492589bf4196843c13f6128942b.zip |
Add ellipsis overloads for instructions ending in vectors
Diffstat (limited to 'tests')
-rw-r--r-- | tests/main.cpp | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/tests/main.cpp b/tests/main.cpp index afa1514..e8c164f 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -4,9 +4,9 @@ * Lesser General Public License version 3 or any later version. */ -#include <sirit/sirit.h> #include <cstdio> #include <cstdlib> +#include <sirit/sirit.h> using u32 = uint32_t; @@ -18,7 +18,7 @@ public: void Generate() { AddCapability(spv::Capability::Shader); SetMemoryModel(spv::AddressingModel::Logical, spv::MemoryModel::GLSL450); - + const auto t_void = Name(OpTypeVoid(), "void"); const auto t_uint = Name(OpTypeInt(32, false), "uint"); const auto t_float = Name(OpTypeFloat(32), "float"); @@ -26,45 +26,52 @@ public: const auto float4 = Name(OpTypeVector(t_float, 4), "float4"); const auto in_float = Name(OpTypePointer(spv::StorageClass::Input, t_float), "in_float"); const auto in_float4 = Name(OpTypePointer(spv::StorageClass::Input, float4), "in_float4"); - const auto out_float4 = Name(OpTypePointer(spv::StorageClass::Output, float4), "out_float4"); + const auto out_float4 = + Name(OpTypePointer(spv::StorageClass::Output, float4), "out_float4"); + + const auto gl_per_vertex = Name(OpTypeStruct(float4), "gl_PerVertex"); + const auto gl_per_vertex_ptr = + Name(OpTypePointer(spv::StorageClass::Output, gl_per_vertex), "out_gl_PerVertex"); - const auto gl_per_vertex = Name(OpTypeStruct({float4}), "gl_PerVertex"); - const auto gl_per_vertex_ptr = Name(OpTypePointer(spv::StorageClass::Output, gl_per_vertex), "out_gl_PerVertex"); - const auto in_pos = Name(OpVariable(in_float4, spv::StorageClass::Input), "in_pos"); - const auto per_vertex = Name(OpVariable(gl_per_vertex_ptr, spv::StorageClass::Output), "per_vertex"); + const auto per_vertex = + Name(OpVariable(gl_per_vertex_ptr, spv::StorageClass::Output), "per_vertex"); - Decorate(in_pos, spv::Decoration::Location, {0}); + Decorate(in_pos, spv::Decoration::Location, 0); Decorate(gl_per_vertex, spv::Decoration::Block); Decorate(gl_per_vertex, spv::Decoration::Block); - MemberDecorate(gl_per_vertex, 0, spv::Decoration::BuiltIn, {static_cast<u32>(spv::BuiltIn::Position)}); - + MemberDecorate(gl_per_vertex, 0, spv::Decoration::BuiltIn, + static_cast<u32>(spv::BuiltIn::Position)); + AddGlobalVariable(in_pos); AddGlobalVariable(per_vertex); - const auto main_func = Emit(Name(OpFunction(t_void, spv::FunctionControlMask::MaskNone, OpTypeFunction(t_void)), "main")); + const auto main_func = Emit( + Name(OpFunction(t_void, spv::FunctionControlMask::MaskNone, OpTypeFunction(t_void)), + "main")); Emit(OpLabel()); - const auto ptr_pos_x = Emit(OpAccessChain(in_float, in_pos, {Constant(t_uint, 0u)})); - const auto ptr_pos_y = Emit(OpAccessChain(in_float, in_pos, {Constant(t_uint, 1u)})); + const auto ptr_pos_x = Emit(OpAccessChain(in_float, in_pos, Constant(t_uint, 0u))); + const auto ptr_pos_y = Emit(OpAccessChain(in_float, in_pos, Constant(t_uint, 1u))); const auto pos_x = Emit(OpLoad(t_float, ptr_pos_x)); const auto pos_y = Emit(OpLoad(t_float, ptr_pos_y)); auto tmp_position = Emit(OpUndef(float4)); - Decorate(tmp_position, spv::Decoration::FPRoundingMode, {static_cast<u32>(spv::FPRoundingMode::RTE)}); - 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, Constant(t_float, 0.f), tmp_position, {2})); - tmp_position = Emit(OpCompositeInsert(float4, Constant(t_float, 1.f), tmp_position, {3})); - - const auto gl_position = Emit(OpAccessChain(out_float4, per_vertex, {Constant(t_uint, 0u)})); + Decorate(tmp_position, spv::Decoration::FPRoundingMode, + static_cast<u32>(spv::FPRoundingMode::RTE)); + 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, Constant(t_float, 0.f), tmp_position, 2)); + tmp_position = Emit(OpCompositeInsert(float4, Constant(t_float, 1.f), tmp_position, 3)); + + const auto gl_position = Emit(OpAccessChain(out_float4, per_vertex, Constant(t_uint, 0u))); Emit(OpStore(gl_position, tmp_position)); Emit(OpReturn()); Emit(OpFunctionEnd()); - AddEntryPoint(spv::ExecutionModel::Vertex, main_func, "main", {in_pos, per_vertex}); + AddEntryPoint(spv::ExecutionModel::Vertex, main_func, "main", in_pos, per_vertex); } }; |