Skip to content
Snippets Groups Projects
Commit 3c77a6b5 authored by Mark Oliver Mints's avatar Mark Oliver Mints
Browse files

[#65][Update] Extend first_triangle by a Compute Pipeline

parent 6a93f420
No related branches found
No related tags found
1 merge request!58Resolve "Compute Pipeline"
Pipeline #25513 passed
File added
#version 440
layout(local_size_x_id = 0, local_size_y_id = 1) in; // workgroup size defined with specialization constants. On cpp side there is associated SpecializationInfo entry in PipelineShaderStageCreateInfo
layout(push_constant) uniform Parameters { // specify push constants. on cpp side its layout is fixed at PipelineLayout, and values are provided via vk::CommandBuffer::pushConstants()
uint Width;
uint Height;
float a;
} params;
layout(std430, binding = 0) buffer lay0 { float arr_y[]; };
layout(std430, binding = 1) buffer lay1 { float arr_x[]; };
void main(){
// drop threads outside the buffer dimensions.
if(params.Width <= gl_GlobalInvocationID.x || params.Height <= gl_GlobalInvocationID.y){
return;
}
const uint id = params.Width*gl_GlobalInvocationID.y + gl_GlobalInvocationID.x; // current offset
arr_y[id] += params.a*arr_x[id]; // saxpy
}
\ No newline at end of file
...@@ -92,6 +92,7 @@ int main(int argc, const char** argv) { ...@@ -92,6 +92,7 @@ int main(int argc, const char** argv) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
// Graphics Pipeline
vkcv::ShaderProgram triangleShaderProgram{}; vkcv::ShaderProgram triangleShaderProgram{};
triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv")); triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv")); triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv"));
...@@ -115,6 +116,12 @@ int main(int argc, const char** argv) { ...@@ -115,6 +116,12 @@ int main(int argc, const char** argv) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
// Compute Pipeline
vkcv::ShaderProgram computeShaderProgram{};
computeShaderProgram.addShader(vkcv::ShaderStage::COMPUTE, std::filesystem::path("shaders/comp.spv"));
vkcv::PipelineHandle computePipeline = core.createComputePipeline(computeShaderProgram);
/* /*
* BufferHandle triangleVertices = core.createBuffer(vertices); * BufferHandle triangleVertices = core.createBuffer(vertices);
* BufferHandle triangleIndices = core.createBuffer(indices); * BufferHandle triangleIndices = core.createBuffer(indices);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment