diff --git a/test/TestOpShadersFromStringAndFile.cpp b/test/TestOpShadersFromStringAndFile.cpp index 60cb8af24..1a1c5c599 100644 --- a/test/TestOpShadersFromStringAndFile.cpp +++ b/test/TestOpShadersFromStringAndFile.cpp @@ -5,60 +5,69 @@ #include "kompute_test/shaders/shadertest_op_custom_shader.hpp" -//TEST(TestOpAlgoCreate, ShaderRawDataFromConstructor) -//{ -// kp::Manager mgr; -// -// std::shared_ptr tensorA{ new kp::Tensor({ 3, 4, 5 }) }; -// std::shared_ptr tensorB{ new kp::Tensor({ 0, 0, 0 }) }; -// mgr.rebuild({ tensorA, tensorB }); -// -// std::string shader(R"( -// #version 450 -// -// layout (local_size_x = 1) in; -// -// layout(set = 0, binding = 0) buffer a { float pa[]; }; -// layout(set = 0, binding = 1) buffer b { float pb[]; }; -// -// void main() { -// uint index = gl_GlobalInvocationID.x; -// pb[index] = pa[index]; -// pa[index] = index; -// } -// )"); -// -// mgr.evalOpDefault( -// { tensorA, tensorB }, kp::Shader::compile_source(shader)); -// -// mgr.evalOpDefault({ tensorA, tensorB }); -// -// EXPECT_EQ(tensorA->data(), std::vector({ 0, 1, 2 })); -// EXPECT_EQ(tensorB->data(), std::vector({ 3, 4, 5 })); -//} -// -//TEST(TestOpAlgoCreate, ShaderCompiledDataFromConstructor) -//{ -// kp::Manager mgr; -// -// std::shared_ptr tensorA{ new kp::Tensor({ 3, 4, 5 }) }; -// std::shared_ptr tensorB{ new kp::Tensor({ 0, 0, 0 }) }; -// mgr.rebuild({ tensorA, tensorB }); -// -// mgr.evalOpDefault( -// { tensorA, tensorB }, -// std::vector( -// (uint32_t*)kp::shader_data::test_shaders_glsl_test_op_custom_shader_comp_spv, -// (uint32_t*)(kp::shader_data::test_shaders_glsl_test_op_custom_shader_comp_spv + -// kp::shader_data:: -// test_shaders_glsl_test_op_custom_shader_comp_spv_len))); -// -// mgr.evalOpDefault({ tensorA, tensorB }); -// -// EXPECT_EQ(tensorA->data(), std::vector({ 0, 1, 2 })); -// EXPECT_EQ(tensorB->data(), std::vector({ 3, 4, 5 })); -//} -// +TEST(TestOpAlgoCreate, ShaderRawDataFromConstructor) +{ + kp::Manager mgr; + + std::shared_ptr tensorA = mgr.tensor({ 3, 4, 5 }); + std::shared_ptr tensorB = mgr.tensor({ 0, 0, 0 }); + + std::string shader(R"( + #version 450 + + layout (local_size_x = 1) in; + + layout(set = 0, binding = 0) buffer a { float pa[]; }; + layout(set = 0, binding = 1) buffer b { float pb[]; }; + + void main() { + uint index = gl_GlobalInvocationID.x; + pb[index] = pa[index]; + pa[index] = index; + } + )"); + + std::vector spirv = kp::Shader::compile_source(shader); + + std::vector> params = { tensorA, tensorB }; + + mgr.sequence() + ->eval(params) + ->eval(mgr.algorithm(params, spirv)) + ->eval(params); + + + EXPECT_EQ(tensorA->data(), std::vector({ 0, 1, 2 })); + EXPECT_EQ(tensorB->data(), std::vector({ 3, 4, 5 })); +} + +TEST(TestOpAlgoCreate, ShaderCompiledDataFromConstructor) +{ + kp::Manager mgr; + + std::shared_ptr tensorA = mgr.tensor({ 3, 4, 5 }); + std::shared_ptr tensorB = mgr.tensor({ 0, 0, 0 }); + + std::vector spirv = + std::vector( + (uint32_t*)kp::shader_data::test_shaders_glsl_test_op_custom_shader_comp_spv, + (uint32_t*)(kp::shader_data::test_shaders_glsl_test_op_custom_shader_comp_spv + + kp::shader_data:: + test_shaders_glsl_test_op_custom_shader_comp_spv_len)); + + std::vector> params = { tensorA, tensorB }; + + mgr.sequence() + ->eval(params) + ->eval(mgr.algorithm(params, spirv)) + ->eval(params); + + + EXPECT_EQ(tensorA->data(), std::vector({ 0, 1, 2 })); + EXPECT_EQ(tensorB->data(), std::vector({ 3, 4, 5 })); +} + +// TODO: Add support to read from file for shader //TEST(TestOpAlgoCreate, ShaderCompiledDataFromFile) //{ // kp::Manager mgr;