#include "catch2/catch.hpp" #include "kompute/Kompute.hpp" #include TEST_CASE("op_custom_simple_raw_shader") { kp::Manager mgr; std::shared_ptr tensorA{ new kp::Tensor({ 3, 4, 5 })}; std::shared_ptr tensorB{ new kp::Tensor({ 0, 0, 0 })}; mgr.evalOpDefault({ tensorA, tensorB }); std::string shader( "#version 450\n" "layout (local_size_x = 1) in;\n" "layout(set = 0, binding = 0) buffer a { uint pa[]; };\n" "layout(set = 0, binding = 1) buffer b { uint pb[]; };\n" "void main() {\n" " uint index = gl_GlobalInvocationID.x;\n" " pb[index] = pa[index];\n" " pa[index] = index;\n" "}\n" ); mgr.evalOpDefault>( { tensorA, tensorB }, true, // Whether to copy output from device std::vector(shader.begin(), shader.end())); REQUIRE(tensorA->data() == std::vector{0, 1, 2}); REQUIRE(tensorB->data() == std::vector{3, 4, 5}); }