#include "gtest/gtest.h" #include "kompute/Kompute.hpp" #include "fmt/ranges.h" TEST(TestPushConstants, TestTwoConstants) { { std::string shader(R"( #version 450 layout(push_constant) uniform PushConstants { float x; float y; float z; } pcs; layout (local_size_x = 1) in; layout(set = 0, binding = 0) buffer a { float pa[]; }; void main() { pa[0] += pcs.x; pa[1] += pcs.y; pa[2] += pcs.z; })"); std::vector spirv = kp::Shader::compile_source(shader); std::shared_ptr sq = nullptr; { kp::Manager mgr; std::shared_ptr tensor = mgr.tensor({ 0, 0, 0 }); std::shared_ptr algo = mgr.algorithm({ tensor }, spirv, kp::Workgroup({ 1 })); sq = mgr.sequence() ->record({ tensor }) ->record(algo, kp::Constants{ 0.1, 0.2, 0.3 }) ->record(algo, kp::Constants{ 0.3, 0.2, 0.1 }) ->record({ tensor }) ->eval(); EXPECT_EQ(tensor->data(), kp::Constants({ 0.4, 0.4, 0.4 })); } } }