From 3c77a6b5ba1a3a2ce482cf7a838247818c12d6bc Mon Sep 17 00:00:00 2001 From: Mark Oliver Mints <mmints@uni-koblenz.de> Date: Wed, 9 Jun 2021 11:54:10 +0200 Subject: [PATCH] [#65][Update] Extend first_triangle by a Compute Pipeline --- projects/first_triangle/shaders/comp.spv | Bin 0 -> 2004 bytes projects/first_triangle/shaders/shader.comp | 21 ++++++++++++++++++++ projects/first_triangle/src/main.cpp | 7 +++++++ 3 files changed, 28 insertions(+) create mode 100644 projects/first_triangle/shaders/comp.spv create mode 100644 projects/first_triangle/shaders/shader.comp diff --git a/projects/first_triangle/shaders/comp.spv b/projects/first_triangle/shaders/comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..622ced351097932ea7f7eb1451e9433bc017812d GIT binary patch literal 2004 zcmZ9M+fNfw5XO&`B8uGP<_#>M0Yy={i6RIJE;UUs@xjMtZ8xyVQb<{eylJBUi_bp! zj~OqCiQjK~CfW2P!_0i=n>lmYQs|gI@7y_e(e=95u5|`ohY;s_Tvw)p%G=8PNm`#@ zT7C$l&lNHvoPKeN(w&mSFm7-$BpDD6HYkB-Qc!G%{2u~3^=eS5277x!Wv5y@KCYgm zXGv5|;zm@h$IYmg#-|ay?i?>})RGVNJfSE?{{5mVx}Z1Sgw60UN~7k9%c=z9yo>AU zfi#taQQK}5?;oUKof$@rp@iH$(#Pado}y}@zx|{dBuDSVq}(_?s)cEM)F^Lf{DPa6 zj_a-11=&e>md%a#@Ht_#Sv`|3Y931&(&Del7XJ|te0&c4kJ9khGekAZv!15gFnR)G zF2<uLux?49Jj8+pV$l<Q-tayJbV)4U>b7@?2P=3!JxobB<inrLyq5n|c0Ql=mCpxe z`RFm951)MWMgG9sQklQ&eY-Eqr=P2mA$3Wglgdth>|y<-o)P8J55ScqoKZ2DPf0T2 z=gU3P!ue`lHaq6Grg(hb!YAJ)>5_z6=Dgo4n^ThCCk>aJWAgcpU{f3Sm!*jXCqF*> zv3zicB^>x8(%gaDd+agKzv+GWGoA~7T(7cgdYh2VPVwO_N;4}k>cD5OVD`?6_u)U5 zO<&|9FFUuq>=qy1Gih>wkr$u+f^q-c+r%!&r_Mk^Kj!axe^FaxPGt!kaC%+Q?#RdY z%VD;^h48<MH)o`0CFI@`%1-(v?2%oq`*#OC4u?69O4tSSH_n*Hzl*~+bwxrP_&4PN z<2wZZrAn?#bN=cM{F(%e`mn8@aoP5pw6`XNfm=N#+0;YN#+j5|l2|=cvWWx#qc`j= z^iNHI`lcn+$9&*Z2esao=1?n~TM{s8#r~(QV1rrRcVxHE@vbm%t9wp%d)@bhfqzjI z?B%|MIB<)bm)$=92g1NV`8fXB5(~be9@sOO&1YFQ7&-Z7S0&WTw+yFS`iTVGVm4&A zV!E>Lb2GbZeJk8q+?H(azA86)UP#CVzNJa?ZNHT8JK{T|7K`1M&E01oyCWNn92WaZ Oc0QK=z~HirRmp!!>V9DW literal 0 HcmV?d00001 diff --git a/projects/first_triangle/shaders/shader.comp b/projects/first_triangle/shaders/shader.comp new file mode 100644 index 00000000..c63870da --- /dev/null +++ b/projects/first_triangle/shaders/shader.comp @@ -0,0 +1,21 @@ +#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 diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index 2ede653f..648118a6 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -92,6 +92,7 @@ int main(int argc, const char** argv) { return EXIT_FAILURE; } + // Graphics Pipeline vkcv::ShaderProgram triangleShaderProgram{}; triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv")); triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv")); @@ -115,6 +116,12 @@ int main(int argc, const char** argv) { 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 triangleIndices = core.createBuffer(indices); -- GitLab