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"Header path provided. Converting bin files to hpp.")
|
||||||
logger.debug(f"Output header path: {shader_path}")
|
logger.debug(f"Output header path: {shader_path}")
|
||||||
for file in spirv_files:
|
for file in spirv_files:
|
||||||
logger.debug(f"Converting to hpp: {file}")
|
|
||||||
header_data = str(sh.xxd("-i", file))
|
header_data = str(sh.xxd("-i", file))
|
||||||
file_name = file.split("/")[-1]
|
file_name = file.split("/")[-1]
|
||||||
header_file = file_name.replace(".comp.spv", ".hpp")
|
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:
|
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 kp {\n")
|
||||||
fstream.write("namespace shader_data {\n")
|
fstream.write("namespace shader_data {\n")
|
||||||
fstream.write(header_data)
|
fstream.write(header_data)
|
||||||
|
|
|
||||||
|
|
@ -30,14 +30,14 @@ Algorithm::~Algorithm()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Algorithm::init(std::string shaderFilePath,
|
Algorithm::init(const std::vector<char>& shaderFileData,
|
||||||
std::vector<std::shared_ptr<Tensor>> tensorParams)
|
std::vector<std::shared_ptr<Tensor>> tensorParams)
|
||||||
{
|
{
|
||||||
SPDLOG_DEBUG("Kompute Algorithm init started");
|
SPDLOG_DEBUG("Kompute Algorithm init started");
|
||||||
|
|
||||||
// TODO: Move to util function
|
// TODO: Move to util function
|
||||||
this->createParameters(tensorParams);
|
this->createParameters(tensorParams);
|
||||||
this->createShaderModule(shaderFilePath);
|
this->createShaderModule(shaderFileData);
|
||||||
this->createPipeline();
|
this->createPipeline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,22 +103,6 @@ Algorithm::createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams)
|
||||||
this->mDevice->allocateDescriptorSets(&descriptorSetAllocateInfo,
|
this->mDevice->allocateDescriptorSets(&descriptorSetAllocateInfo,
|
||||||
this->mDescriptorSet.get());
|
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
|
// TODO: Explore design exposing the destination array element
|
||||||
for (size_t i = 0; i < tensorParams.size(); i++) {
|
for (size_t i = 0; i < tensorParams.size(); i++) {
|
||||||
std::vector<vk::WriteDescriptorSet> computeWriteDescriptorSets;
|
std::vector<vk::WriteDescriptorSet> computeWriteDescriptorSets;
|
||||||
|
|
@ -146,24 +130,15 @@ Algorithm::createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Algorithm::createShaderModule(std::string shaderFilePath)
|
Algorithm::createShaderModule(const std::vector<char>& shaderFileData)
|
||||||
{
|
{
|
||||||
SPDLOG_DEBUG("Kompute Algorithm createShaderModule started");
|
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::ShaderModuleCreateInfo shaderModuleInfo(
|
||||||
vk::ShaderModuleCreateFlags(), shaderFileSize, (uint32_t*)shaderFileData);
|
vk::ShaderModuleCreateFlags(), shaderFileData.size(), (uint32_t*)shaderFileData.data());
|
||||||
|
|
||||||
SPDLOG_DEBUG("Kompute Algorithm Creating shader module. ShaderFileSize: {}",
|
SPDLOG_DEBUG("Kompute Algorithm Creating shader module. ShaderFileSize: {}",
|
||||||
shaderFileSize);
|
shaderFileData.size());
|
||||||
this->mFreeShaderModule = true;
|
this->mFreeShaderModule = true;
|
||||||
this->mShaderModule = std::make_shared<vk::ShaderModule>();
|
this->mShaderModule = std::make_shared<vk::ShaderModule>();
|
||||||
this->mDevice->createShaderModule(
|
this->mDevice->createShaderModule(
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class Algorithm
|
||||||
|
|
||||||
// TODO: Add specialisation data
|
// TODO: Add specialisation data
|
||||||
// TODO: Explore other ways of passing shader (ie raw bytes)
|
// 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);
|
std::vector<std::shared_ptr<Tensor>> tensorParams);
|
||||||
|
|
||||||
~Algorithm();
|
~Algorithm();
|
||||||
|
|
@ -55,7 +55,7 @@ class Algorithm
|
||||||
bool mFreePipeline = false;
|
bool mFreePipeline = false;
|
||||||
|
|
||||||
// Create util functions
|
// Create util functions
|
||||||
void createShaderModule(std::string shaderFilePath);
|
void createShaderModule(const std::vector<char>& shaderFileData);
|
||||||
void createPipeline();
|
void createPipeline();
|
||||||
// Parameters
|
// Parameters
|
||||||
void createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams);
|
void createParameters(std::vector<std::shared_ptr<Tensor>>& tensorParams);
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
#include <thread>
|
|
||||||
|
|
||||||
#include "Tensor.hpp"
|
#include "Tensor.hpp"
|
||||||
|
|
||||||
|
#include "shaders/opmult.hpp"
|
||||||
|
|
||||||
// Only defining hpp file for syntax validation in editors
|
// Only defining hpp file for syntax validation in editors
|
||||||
#ifndef OPMULT_H
|
#ifndef OPMULT_H
|
||||||
#include "OpMult.hpp"
|
#include "OpMult.hpp"
|
||||||
|
|
@ -99,8 +98,10 @@ OpMult<tX, tY, tZ>::init(std::vector<std::shared_ptr<Tensor>> tensors)
|
||||||
this->mDevice,
|
this->mDevice,
|
||||||
this->mCommandBuffer);
|
this->mCommandBuffer);
|
||||||
|
|
||||||
// TODO: Make this path configurable
|
std::vector<char> shaderFileData(
|
||||||
this->mAlgorithm->init("shaders/glsl/opmult.comp.spv", tensors);
|
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>
|
template<uint32_t tX, uint32_t tY, uint32_t tZ>
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@
|
||||||
#include "Algorithm.hpp"
|
#include "Algorithm.hpp"
|
||||||
#include "Tensor.hpp"
|
#include "Tensor.hpp"
|
||||||
|
|
||||||
|
#include "shaders/opmult.hpp"
|
||||||
|
|
||||||
#include "OpBase.hpp"
|
#include "OpBase.hpp"
|
||||||
|
|
||||||
namespace kp {
|
namespace kp {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
namespace kp {
|
namespace kp {
|
||||||
namespace shader_data {
|
namespace shader_data {
|
||||||
unsigned char shaders_glsl_computeheadless_comp_spv[] = {
|
unsigned char shaders_glsl_computeheadless_comp_spv[] = {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
namespace kp {
|
namespace kp {
|
||||||
namespace shader_data {
|
namespace shader_data {
|
||||||
unsigned char shaders_glsl_machinelearning_comp_spv[] = {
|
unsigned char shaders_glsl_machinelearning_comp_spv[] = {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
namespace kp {
|
namespace kp {
|
||||||
namespace shader_data {
|
namespace shader_data {
|
||||||
unsigned char shaders_glsl_opmult_comp_spv[] = {
|
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