Added initial implementation of shaders as hpp files
This commit is contained in:
parent
2561ace8b7
commit
f3b28e6b08
9 changed files with 30 additions and 38 deletions
|
|
@ -80,11 +80,12 @@ def run_cli(
|
|||
logger.debug(f"Header path provided. Converting bin files to hpp.")
|
||||
logger.debug(f"Output header path: {shader_path}")
|
||||
for file in spirv_files:
|
||||
logger.debug(f"Converting to hpp: {file}")
|
||||
header_data = str(sh.xxd("-i", file))
|
||||
file_name = file.split("/")[-1]
|
||||
header_file = file_name.replace(".comp.spv", ".hpp")
|
||||
logger.debug(f"Converting to hpp: {file_name}")
|
||||
with open(os.path.join(header_path, header_file), "w+") as fstream:
|
||||
fstream.write("#pragma once\n\n")
|
||||
fstream.write("namespace kp {\n")
|
||||
fstream.write("namespace shader_data {\n")
|
||||
fstream.write(header_data)
|
||||
|
|
|
|||
|
|
@ -30,14 +30,14 @@ Algorithm::~Algorithm()
|
|||
}
|
||||
|
||||
void
|
||||
Algorithm::init(std::string shaderFilePath,
|
||||
Algorithm::init(const std::vector<char>& shaderFileData,
|
||||
std::vector<std::shared_ptr<Tensor>> tensorParams)
|
||||
{
|
||||
SPDLOG_DEBUG("Kompute Algorithm init started");
|
||||
|
||||
// TODO: Move to util function
|
||||
this->createParameters(tensorParams);
|
||||
this->createShaderModule(shaderFilePath);
|
||||
this->createShaderModule(shaderFileData);
|
||||
this->createPipeline();
|
||||
}
|
||||
|
||||
|
|
@ -103,22 +103,6 @@ Algorithm::createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams)
|
|||
this->mDevice->allocateDescriptorSets(&descriptorSetAllocateInfo,
|
||||
this->mDescriptorSet.get());
|
||||
|
||||
////std::vector<vk::DescriptorBufferInfo> descriptorBufferInfos;
|
||||
////for (size_t i = 0; i < tensorParams.size(); i++) {
|
||||
//// descriptorBufferInfos.push_back(tensorParams[i]->constructDescriptorBufferInfo());
|
||||
////}
|
||||
////std::vector<vk::WriteDescriptorSet> computeWriteDescriptorSets;
|
||||
|
||||
////computeWriteDescriptorSets.push_back(
|
||||
//// vk::WriteDescriptorSet(*this->mDescriptorSet,
|
||||
//// 0, // Destination binding
|
||||
//// 0, // Destination array element
|
||||
//// 1, // Descriptor count
|
||||
//// vk::DescriptorType::eStorageBuffer,
|
||||
//// nullptr, // Descriptor image info
|
||||
//// descriptorBufferInfos.data()
|
||||
//// ));
|
||||
|
||||
// TODO: Explore design exposing the destination array element
|
||||
for (size_t i = 0; i < tensorParams.size(); i++) {
|
||||
std::vector<vk::WriteDescriptorSet> computeWriteDescriptorSets;
|
||||
|
|
@ -146,24 +130,15 @@ Algorithm::createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams)
|
|||
}
|
||||
|
||||
void
|
||||
Algorithm::createShaderModule(std::string shaderFilePath)
|
||||
Algorithm::createShaderModule(const std::vector<char>& shaderFileData)
|
||||
{
|
||||
SPDLOG_DEBUG("Kompute Algorithm createShaderModule started");
|
||||
|
||||
std::ifstream fileStream(shaderFilePath,
|
||||
std::ios::binary | std::ios::in | std::ios::ate);
|
||||
|
||||
size_t shaderFileSize = fileStream.tellg();
|
||||
fileStream.seekg(0, std::ios::beg);
|
||||
char* shaderFileData = new char[shaderFileSize];
|
||||
fileStream.read(shaderFileData, shaderFileSize);
|
||||
fileStream.close();
|
||||
|
||||
vk::ShaderModuleCreateInfo shaderModuleInfo(
|
||||
vk::ShaderModuleCreateFlags(), shaderFileSize, (uint32_t*)shaderFileData);
|
||||
vk::ShaderModuleCreateFlags(), shaderFileData.size(), (uint32_t*)shaderFileData.data());
|
||||
|
||||
SPDLOG_DEBUG("Kompute Algorithm Creating shader module. ShaderFileSize: {}",
|
||||
shaderFileSize);
|
||||
shaderFileData.size());
|
||||
this->mFreeShaderModule = true;
|
||||
this->mShaderModule = std::make_shared<vk::ShaderModule>();
|
||||
this->mDevice->createShaderModule(
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class Algorithm
|
|||
|
||||
// TODO: Add specialisation data
|
||||
// TODO: Explore other ways of passing shader (ie raw bytes)
|
||||
void init(std::string shaderFilePath,
|
||||
void init(const std::vector<char>& shaderFileData,
|
||||
std::vector<std::shared_ptr<Tensor>> tensorParams);
|
||||
|
||||
~Algorithm();
|
||||
|
|
@ -55,7 +55,7 @@ class Algorithm
|
|||
bool mFreePipeline = false;
|
||||
|
||||
// Create util functions
|
||||
void createShaderModule(std::string shaderFilePath);
|
||||
void createShaderModule(const std::vector<char>& shaderFileData);
|
||||
void createPipeline();
|
||||
// Parameters
|
||||
void createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
#include "Tensor.hpp"
|
||||
|
||||
#include "shaders/opmult.hpp"
|
||||
|
||||
// Only defining hpp file for syntax validation in editors
|
||||
#ifndef OPMULT_H
|
||||
#include "OpMult.hpp"
|
||||
|
|
@ -99,8 +98,10 @@ OpMult<tX, tY, tZ>::init(std::vector<std::shared_ptr<Tensor>> tensors)
|
|||
this->mDevice,
|
||||
this->mCommandBuffer);
|
||||
|
||||
// TODO: Make this path configurable
|
||||
this->mAlgorithm->init("shaders/glsl/opmult.comp.spv", tensors);
|
||||
std::vector<char> shaderFileData(
|
||||
kp::shader_data::shaders_glsl_opmult_comp_spv_len,
|
||||
kp::shader_data::shaders_glsl_opmult_comp_spv + kp::shader_data::shaders_glsl_opmult_comp_spv_len);
|
||||
this->mAlgorithm->init(shaderFileData, tensors);
|
||||
}
|
||||
|
||||
template<uint32_t tX, uint32_t tY, uint32_t tZ>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
#include "Algorithm.hpp"
|
||||
#include "Tensor.hpp"
|
||||
|
||||
#include "shaders/opmult.hpp"
|
||||
|
||||
#include "OpBase.hpp"
|
||||
|
||||
namespace kp {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace kp {
|
||||
namespace shader_data {
|
||||
unsigned char shaders_glsl_computeheadless_comp_spv[] = {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace kp {
|
||||
namespace shader_data {
|
||||
unsigned char shaders_glsl_machinelearning_comp_spv[] = {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace kp {
|
||||
namespace shader_data {
|
||||
unsigned char shaders_glsl_opmult_comp_spv[] = {
|
||||
|
|
|
|||
7
src/shaders/shader_util.hpp
Normal file
7
src/shaders/shader_util.hpp
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#include <string>
|
||||
|
||||
namespace kp {
|
||||
namespace shader_data {
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue