Added initial iteration of shaderc
This commit is contained in:
parent
b9e0b5e988
commit
c1b53cda9d
7 changed files with 123 additions and 1 deletions
2
.ccls
2
.ccls
|
|
@ -17,6 +17,8 @@
|
|||
-I./python/pybind11/include/
|
||||
-I./external/Vulkan-Headers/include/
|
||||
-I./external/googletest/googletest/include/
|
||||
-I./external/shaderc/libshaderc/include/
|
||||
-I./external/shaderc/libshaderc_util/include/
|
||||
-I./external/spdlog/include/
|
||||
-I./src/include/
|
||||
-I./single_include/
|
||||
|
|
|
|||
4
.gitmodules
vendored
4
.gitmodules
vendored
|
|
@ -14,3 +14,7 @@
|
|||
path = python/pybind11
|
||||
url = https://github.com/pybind/pybind11
|
||||
branch = v2.6.1
|
||||
[submodule "external/shaderc"]
|
||||
path = external/shaderc
|
||||
url = https://github.com/google/shaderc
|
||||
branch = v2020.4
|
||||
|
|
|
|||
7
Makefile
7
Makefile
|
|
@ -70,6 +70,7 @@ mk_cmake:
|
|||
-DKOMPUTE_OPT_ENABLE_SPDLOG=1 \
|
||||
-DSPDLOG_INSTALL=1 \
|
||||
-DKOMPUTE_OPT_CODE_COVERAGE=1 \
|
||||
-DSHADERC_SKIP_TESTS=1 \
|
||||
-G "Unix Makefiles"
|
||||
|
||||
mk_build_all:
|
||||
|
|
@ -88,7 +89,7 @@ mk_run_docs: mk_build_docs
|
|||
(cd build/docs/sphinx && python2.7 -m SimpleHTTPServer)
|
||||
|
||||
mk_run_tests: mk_build_tests
|
||||
./build/test/test_kompute $(FILTER_TESTS)
|
||||
./build/test/test_kompute --gtest_filter=$(FILTER_TESTS)
|
||||
|
||||
mk_build_swiftshader_library:
|
||||
git clone https://github.com/google/swiftshader || echo "Assuming already cloned"
|
||||
|
|
@ -99,6 +100,9 @@ mk_build_swiftshader_library:
|
|||
mk_run_tests_cpu: export VK_ICD_FILENAMES=$(PWD)/swiftshader/build/vk_swiftshader_icd.json
|
||||
mk_run_tests_cpu: mk_build_swiftshader_library mk_build_tests mk_run_tests_cpu_only
|
||||
|
||||
mk_run_tests_only:
|
||||
./build/test/test_kompute --gtest_filter="-TestAsyncOperations.*"
|
||||
|
||||
mk_run_tests_cpu_only:
|
||||
./build/test/test_kompute --gtest_filter="TestLogisticRegressionAlgorithm.*"
|
||||
./build/test/test_kompute --gtest_filter="TestManager.*"
|
||||
|
|
@ -133,6 +137,7 @@ vs_cmake:
|
|||
-DKOMPUTE_OPT_BUILD_SINGLE_HEADER=1 \
|
||||
-DKOMPUTE_OPT_ENABLE_SPDLOG=1 \
|
||||
-DSPDLOG_INSTALL=1 \
|
||||
-DSHADERC_SKIP_TESTS=1 \
|
||||
-G "Visual Studio 16 2019"
|
||||
|
||||
vs_build_all:
|
||||
|
|
|
|||
1
external/shaderc
vendored
Submodule
1
external/shaderc
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 0dbd899941a43ffd55df527d65128b3b66e75c9c
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
|
||||
#####################################################
|
||||
#################### GETEST #######################
|
||||
#####################################################
|
||||
enable_testing()
|
||||
if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/external/googletest EXCLUDE_FROM_ALL
|
||||
|
|
@ -35,6 +38,35 @@ target_link_libraries(test_kompute PRIVATE kompute)
|
|||
|
||||
add_test(NAME test_kompute COMMAND test_kompute)
|
||||
|
||||
#####################################################
|
||||
#################### PYSHADERC #######################
|
||||
#####################################################
|
||||
|
||||
if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/external/shaderc EXCLUDE_FROM_ALL
|
||||
${CMAKE_CURRENT_BINARY_DIR}/kompute_shaderc)
|
||||
|
||||
target_include_directories(
|
||||
test_kompute PRIVATE
|
||||
${shaderc_SOURCE_DIR}/include)
|
||||
|
||||
target_link_libraries(test_kompute PRIVATE
|
||||
shaderc_combined)
|
||||
else()
|
||||
find_library(SHADERC_LIB shaderc_combined)
|
||||
|
||||
find_path(SHADERC_INCLUDE_DIRS shaderc)
|
||||
|
||||
target_include_directories(
|
||||
test_kompute PRIVATE
|
||||
${SHADERC_INCLUDE_DIRS}/include)
|
||||
|
||||
MESSAGE(STATUS "INclude dirs:" ${SHADERC_INCLUDE_DIRS})
|
||||
|
||||
target_link_libraries(test_kompute PRIVATE
|
||||
shaderc_combined)
|
||||
endif()
|
||||
|
||||
#####################################################
|
||||
#################### CODECOV #######################
|
||||
#####################################################
|
||||
|
|
|
|||
51
test/TestSpecializationConstant.cpp
Normal file
51
test/TestSpecializationConstant.cpp
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "kompute/Kompute.hpp"
|
||||
|
||||
|
||||
TEST(TestSpecializationConstants, TestTwoConstants)
|
||||
{
|
||||
std::shared_ptr<kp::Tensor> tensorA{ new kp::Tensor({ 0, 0, 0 }) };
|
||||
std::shared_ptr<kp::Tensor> tensorB{ new kp::Tensor({ 0, 0, 0 }) };
|
||||
|
||||
std::string shader(R"(
|
||||
#version 450
|
||||
layout (constant_id = 0) const float cOne = 1;
|
||||
layout (constant_id = 1) const float cTwo = 1;
|
||||
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;
|
||||
pa[index] = cOne;
|
||||
pb[index] = cTwo;
|
||||
})");
|
||||
|
||||
{
|
||||
std::shared_ptr<kp::Sequence> sq = nullptr;
|
||||
|
||||
{
|
||||
kp::Manager mgr;
|
||||
|
||||
mgr.rebuild({ tensorA, tensorB });
|
||||
|
||||
sq = mgr.sequence();
|
||||
|
||||
auto spec = kp::Constants({5.0, 0.3});
|
||||
|
||||
sq->begin();
|
||||
sq->record<kp::OpAlgoBase>(
|
||||
{ tensorA, tensorB },
|
||||
std::vector<char>(shader.begin(), shader.end()),
|
||||
kp::Workgroup(), spec);
|
||||
sq->end();
|
||||
|
||||
sq->eval();
|
||||
|
||||
mgr.evalOpDefault<kp::OpTensorSyncLocal>({ tensorA, tensorB });
|
||||
}
|
||||
}
|
||||
EXPECT_EQ(tensorA->data(), std::vector<float>({ 5, 5, 5 }));
|
||||
EXPECT_EQ(tensorB->data(), std::vector<float>({ 0.3, 0.3, 0.3 }));
|
||||
}
|
||||
27
test/TestUtils.cpp
Normal file
27
test/TestUtils.cpp
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#include <shaderc/shaderc.hpp>
|
||||
|
||||
static std::vector<uint32_t> spirv_from_string(const std::string& source,
|
||||
shaderc_optimization_level optimization = shaderc_optimization_level_size,
|
||||
std::vector<std::pair<std::string,std::string>> definitions = {}) {
|
||||
shaderc::Compiler compiler;
|
||||
shaderc::CompileOptions options;
|
||||
|
||||
for (const std::pair<std::string,std::string>& def : definitions) {
|
||||
options.AddMacroDefinition(def.first, def.second);
|
||||
}
|
||||
if (optimization) options.SetOptimizationLevel(optimization);
|
||||
|
||||
std::string errorTag = "kompute";
|
||||
shaderc::SpvCompilationResult module =
|
||||
compiler.CompileGlslToSpv(source, shaderc_glsl_default_compute_shader, errorTag.c_str(), options);
|
||||
|
||||
if (module.GetCompilationStatus() != shaderc_compilation_status_success) {
|
||||
throw std::runtime_error("Shader string invalid: " + module.GetErrorMessage());
|
||||
}
|
||||
|
||||
return {module.cbegin(), module.cend()};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue