From 47de764ba989ae7d894e3d8cd452df020e544135 Mon Sep 17 00:00:00 2001 From: Simon Eves Date: Thu, 31 Mar 2022 17:39:39 -0700 Subject: [PATCH] Capture base address Set in Push Constant Use in Shader --- .../simpleVulkanMMAP/MonteCarloPi.cu | 2 +- .../simpleVulkanMMAP/VulkanBaseApp.cpp | 10 ++++++++-- .../simpleVulkanMMAP/main.cpp | 16 ++++++++++++---- .../simpleVulkanMMAP/montecarlo.vert | 10 ---------- .../simpleVulkanMMAP/vert.spv | Bin 2396 -> 2728 bytes 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu b/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu index 9084d20d..7462b66f 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu @@ -290,7 +290,7 @@ void MonteCarloPiSimulation::setupSimulationAllocations() { cuMemSetAccess(d_ptr, m_totalAllocationSize, &accessDescriptor, 1)); // fill the BDA buffer with something - const float bdaValues[2] = { 42.0f, 17.0f }; + const float bdaValues[2] = { 0.2f, 0.2f }; cuMemcpyHtoD(va_BDA, &bdaValues[0], sizeof(float) * 2); } diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp b/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp index cfe58aad..c4c16e8c 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp @@ -1083,8 +1083,14 @@ void VulkanBaseApp::createGraphicsPipeline() { pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; pipelineLayoutInfo.setLayoutCount = 1; // Optional pipelineLayoutInfo.pSetLayouts = &m_descriptorSetLayout; // Optional - pipelineLayoutInfo.pushConstantRangeCount = 0; // Optional - pipelineLayoutInfo.pPushConstantRanges = nullptr; // Optional + + VkPushConstantRange pcr{}; + pcr.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + pcr.offset = 0; + pcr.size = sizeof(uint64_t); + + pipelineLayoutInfo.pushConstantRangeCount = 1; + pipelineLayoutInfo.pPushConstantRanges = &pcr; if (vkCreatePipelineLayout(m_device, &pipelineLayoutInfo, nullptr, &m_pipelineLayout) != VK_SUCCESS) { diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp b/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp index 5753bcbb..ddebcb2c 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp @@ -71,6 +71,7 @@ class VulkanCudaPi : public VulkanBaseApp { using chrono_tp = std::chrono::time_point; chrono_tp m_lastTime; size_t m_lastFrame; + uint64_t m_bdaBufferBaseAddress; public: VulkanCudaPi(size_t num_points) @@ -88,7 +89,8 @@ class VulkanCudaPi : public VulkanBaseApp { m_vkSignalSemaphore(VK_NULL_HANDLE), m_cudaWaitSemaphore(), m_cudaSignalSemaphore(), - m_lastFrame(0) { + m_lastFrame(0), + m_bdaBufferBaseAddress(0) { // Add our compiled vulkan shader files char* vertex_shader_path = sdkFindFilePath("vert.spv", execution_path.c_str()); @@ -141,6 +143,12 @@ class VulkanCudaPi : public VulkanBaseApp { vkCmdBindVertexBuffers(commandBuffer, 0, sizeof(vertexBuffers) / sizeof(vertexBuffers[0]), vertexBuffers, offsets); + vkCmdPushConstants(commandBuffer, + m_pipelineLayout, + VK_SHADER_STAGE_VERTEX_BIT, + 0, + sizeof(uint64_t), + &m_bdaBufferBaseAddress); vkCmdDraw(commandBuffer, (uint32_t)(m_sim.getNumPoints()), 1, 0, 0); } @@ -252,9 +260,9 @@ class VulkanCudaPi : public VulkanBaseApp { VkBufferDeviceAddressInfoKHR bda_info{VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR, nullptr, m_bdaBuffer}; - auto bda = vkGetBufferDeviceAddressKHR(m_device, &bda_info); - assert(bda); - std::cout << "DEBUG: BDA = " << (void*)bda << std::endl; + m_bdaBufferBaseAddress = vkGetBufferDeviceAddressKHR(m_device, &bda_info); + assert(m_bdaBufferBaseAddress); + std::cout << "DEBUG: BDA = " << (void*)m_bdaBufferBaseAddress << std::endl; // Create the semaphore vulkan will signal when it's done with the vertex // buffer diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/montecarlo.vert b/Samples/5_Domain_Specific/simpleVulkanMMAP/montecarlo.vert index c3a8350f..2c6ec9cb 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/montecarlo.vert +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/montecarlo.vert @@ -56,22 +56,12 @@ layout(push_constant, std430) uniform Registers uint64_t base_address; } registers; -layout(std430, binding = 0) buffer CUDA_SSBO { - float coords[2]; -} cuda_ssbo; - void main() { gl_PointSize = 1.0; gl_Position = vec4(xyPos.xy, 0.0f, 1.0f); -#if 0 - gl_Position.x += cuda_ssbo.coords[0]; - gl_Position.y += cuda_ssbo.coords[1]; -#endif -#if 0 gl_Position.x += BufferFloat(registers.base_address).f[0]; gl_Position.y += BufferFloat(registers.base_address).f[1]; -#endif float color_r = 1.0f + 0.5f * sin(ubo.frame / 100.0f); float color_g = 1.0f + 0.5f * sin((ubo.frame / 100.0f) + (2.0f*PI/3.0f)); diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/vert.spv b/Samples/5_Domain_Specific/simpleVulkanMMAP/vert.spv index 19e2b240eb14a52a2ce4ae5ece919265d8bf3538..ef4297c99e19a846bfee64d79e1e7a7709533093 100644 GIT binary patch literal 2728 zcmZQ(Qf6mhU}WH8;AMzsfB-=TCI&_Z1_lt#4W%E8Ffed2a54l3gvEP%1jQF*R2F9@ zC+5T#m*f{Erl-aym8PYo7BO%$uz~fu`vm*w6_=#wnV1@YOyy%>W_Th3vWbC#pMeu3 z#K6M9z>u4mnFr!+x6{i*?7A2OX!W85uWu+#U6vOqqMub3J8DEr|mRgjW zmz>JL!oUI2k4?@9uC3ACOuUmReMjS^=_;4Jr;|gXHpyGfOh_ z^BC9|*um;S@d6gl%qt1btV#u`V`X4w0EHif%>oX`ipqfeVg?2VRt8oE83qQ1pw#rt z;*!)NkQm4;kQhjPQetsxd}2yUQED+r3anm^fq|h2Nj=C66$SV)pFt9PO zFo48BW~71bVPUXhU|>kj&&e-}FJfS2U}vxa#bsV*T7FS3M5{kIMi|%_Siy2&y+w(+ zAWwk&V8_6~P@0s_017L2xLN67egK@G1a>1Roum~draOb|1KZCIPB#VlnRz9idBvG2 zsm_^2$vGgiJs4QQVF$7gl%7E}ObisBATbc_&cF;-2TFJD43KaHg#}0sq#hP#${+(6 z7#Kk6L1HlVAaOPZP+DMM0I7$C4@exO1*9G%22u}_2Zawv99bSD29gKa4+;+@kOHt> zEDRvNA`%}I1|au=gh1*+`3A-pW?%y6A4PCZVgR$n7?>GA?o(i3U=RoADh4ngln>>= zIe~$JodF`I0M1#Ue8>O}6Kg0Rl+KtL7#KtuSQtRz1~Lm2KH5+|4+A8RgZLo3ctMV1 zXs`#F#|O^W5c5IuApHVhd5C)ip>~7(4^l4#H47vTvLD0;l@T!eK<0}=^@G$)Ld^&H z0pvbu1_lNPsJt8lGdLfB#6W6g85qE&5GejYW`p>kumhD$AbEMHJV?Dd12Y3C9-fLY zFvv16Gl1d?WH-o6P<(>;AU!ZOATbbMje&syqz9xHLKZvgd;xI5U z!1yLmKZEpJG9cmuBo8vj8lv7FWH%_SfW$y*Z5beO3=#wR2gC=Z7g$)@L*+s0VP-jj z%{t)(<9jnOFihfNa{#4{KxkZm;u>Ur5HxH-;vn-ud{Fv>$%jDQ4Kg1j58{K;BXV5D zF)%RP;`ekgV_*fRM^L&0IRRwG4+bU%Rt5$JkY13#L1hUj9$|b?d4S9Zl?NccBLgb~ zC|&V0fa)g(22lF5V_;?g@j+?NmVt!O{p?4Fo47y8Q2&==|!D^fdM22(gVV_44@i;fkA_TfdM23ice6ufz*Tit&QXc zP+9`n1BwG3aGGLZXoUJ#mw|x+BnC1ErdJP5FUSudF_2oAAM_a*7|{Iys?b5=Fh3YF zFff3`K<0w{0IE1aVj%Z};sfRfV+IBWkQ}-nOp)9HO8+oFm@zOgfaG9)FlS(30EvOj z0oeuezXh6JkRL!|AhjSrfYLpv3;^W?kb7WeJ3`Bb4rur|GcYiK#6Wq12O8!s&@>H- zbC7&1RIMvGoiZ?hna8Yn4V|`1_qECkT^_F3nmniT`C_WUydhWB>paN9{fU literal 2396 zcmZQ(Qf6mhU}WH8;AQY;fB-=TCI&_Z1_lt#4W%E8Ffed2a54l3gvEP%1jQF*R2F9@ zC+5T#m*f{Erl-aym8PYo7BO%!aKqK0O2Jho=Oh*vgKXkvU<2FZ?i1{zS6q^!XJTpq z66a%JW_Th3auovuKLaO7h=GNHfgv|BGY`b!VqjnpW?*12Wnf@1XJBApW?*JuVqjo6 z#K^$F!obep?i24A|0|)Z~)PvQ&^AU~{1AGV_viN>h*(urjcq_?MM|je&!KfgwF7J|MLyEVZa4 zwE|=x8&n*`2Fc|YXO?8<=P|G`u!Gfu;t(vJnO72=S(OS>$I8IW017_{n*|(>6_o+` zpa=okE5pFRker{BUld=&z{S;P^``N=$bK*~h>Dwht7a1^JnIC7yZ3 znJKBxnMKJt5VKhsoER7wf>P5ni%U|AK<)+k6C?(5LsDXKYJ6f!N>M5#ZGp^pVPIe= zLQ)SB^I%|La1M2Gj1LZW@@HTG`vW8fG9x)ZzbK^`sviTq}nECEtKZDXB#7{84BdZ6A!PJAo z0ogquKFmGB3{2pBrwGo03}Chx12Y2~0|VII;^5o}3S)?Ua^M`qz`zc5g9125g7Pl| zILxe}d{FviW?*0tWnf_dg)1lwK;fqiu}|E)XB&H<(*M;R<4d)WghD0h@Kg3C7oDU|^WU#pVF= zi!szMps)g&Zvu52NE~E7h!09HFnKemUqR-BVAxI2l zHYm-3#6V_yGB7ZJ;us_bG8@DPr8|(A83QXgoq_5Dkl7%={a|2XU}a!n0I3DV2dE4K z#Se@RDuPkb00jC>?MLJau-M*rr!|iE|46^U7+{_iGkRlxC6Nv7A6+ZHUNxo$-uw>@(0X( zD+UGzkQ$IUOpP^~9vcP*29O;vJ+|Pq#J~U&hv~6nU|;~*9l*fG0LowX3=9k)vq5S> Uav-;X@)}6|F9Rck1p^}k0I?zE-T(jq