From cbd0b5f50698e9ae4ace90e4f0edc60611a4c45d Mon Sep 17 00:00:00 2001 From: Simon Eves Date: Thu, 31 Mar 2022 16:31:48 -0700 Subject: [PATCH] WIP --- .gitignore | 2 ++ .../simpleVulkanMMAP/MonteCarloPi.cu | 4 ++-- .../simpleVulkanMMAP/VulkanBaseApp.cpp | 15 ++++++++++++--- .../5_Domain_Specific/simpleVulkanMMAP/main.cpp | 13 +++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..41536690 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +bin/ diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu b/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu index 7e176229..0ed5f25a 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/MonteCarloPi.cu @@ -168,8 +168,8 @@ void MonteCarloPiSimulation::computePiCallback(void *args) { cbData->m_totalPointsSimulated += cbData->m_numPoints; double piValue = 4.0 * ((double)cbData->m_totalPointsInsideCircle / (double)cbData->m_totalPointsSimulated); - printf("Approximate Pi value for %zd data points: %lf \n", - cbData->m_totalPointsSimulated, piValue); + //printf("Approximate Pi value for %zd data points: %lf \n", + // cbData->m_totalPointsSimulated, piValue); } void MonteCarloPiSimulation::getIdealExecutionConfiguration() { diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp b/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp index cfb5c190..cfe58aad 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/VulkanBaseApp.cpp @@ -622,8 +622,15 @@ void VulkanBaseApp::createDevice() { queueCreateInfos.push_back(queueCreateInfo); } - VkPhysicalDeviceFeatures deviceFeatures = {}; - deviceFeatures.fillModeNonSolid = true; + // (SE) change to VkPhysicalDeviceFeatures2 to allow chaining + VkPhysicalDeviceFeatures2 deviceFeatures2 = {}; + deviceFeatures2.features.fillModeNonSolid = true; + + // (SE) add enable for BDA + VkPhysicalDeviceBufferAddressFeaturesEXT buffer_device_address_features{}; + buffer_device_address_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT; + buffer_device_address_features.bufferDeviceAddress = VK_TRUE; + deviceFeatures2.pNext = &buffer_device_address_features; VkDeviceCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; @@ -632,7 +639,9 @@ void VulkanBaseApp::createDevice() { createInfo.queueCreateInfoCount = static_cast(queueCreateInfos.size()); - createInfo.pEnabledFeatures = &deviceFeatures; + // (SE) now chained + // createInfo.pEnabledFeatures = &deviceFeatures; + createInfo.pNext = &deviceFeatures2; std::vector deviceExtensions = getRequiredDeviceExtensions(); deviceExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp b/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp index dd8b5c02..8ea186fb 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/main.cpp @@ -226,6 +226,17 @@ class VulkanCudaPi : public VulkanBaseApp { VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, m_inCircleBuffer, m_inCircleMemory); + // (SE) get function ptr + auto* vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)vkGetDeviceProcAddr(m_device, "vkGetBufferDeviceAddressKHR"); + std::cout << "DEBUG: vkGetBufferDeviceAddressKHR = " << (void*)vkGetBufferDeviceAddressKHR << std::endl; + + // get BDA for the circle buffer + VkBufferDeviceAddressInfoKHR bda_info{VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR, + nullptr, + m_inCircleBuffer}; + auto bda = vkGetBufferDeviceAddressKHR(m_device, &bda_info); + std::cout << "DEBUG: BDA = " << (void*)bda << std::endl; + // Create the semaphore vulkan will signal when it's done with the vertex // buffer createExternalSemaphore(m_vkSignalSemaphore, @@ -306,6 +317,8 @@ class VulkanCudaPi : public VulkanBaseApp { extensions.push_back(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME); extensions.push_back(VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME); #endif /* _WIN64 */ + // (SE) add BDA as required device extension + extensions.push_back(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME); return extensions; }