From fc27e4d98daaf3a728c152cb3e164f38164a0d9f Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Fri, 4 Aug 2023 19:49:42 +0200 Subject: [PATCH] Fixed buffer sizes and recompiled shaders Validation is clean now Fixes #1017 --- .../raytracingsbtdata/raytracingsbtdata.cpp | 15 ++++++++------- .../raytracingsbtdata/closesthit.rchit.spv | Bin 824 -> 824 bytes shaders/glsl/raytracingsbtdata/miss.rmiss.spv | Bin 724 -> 724 bytes .../glsl/raytracingsbtdata/raygen.rgen.spv | Bin 4080 -> 4080 bytes 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/raytracingsbtdata/raytracingsbtdata.cpp b/examples/raytracingsbtdata/raytracingsbtdata.cpp index 46e4f43a..729f6696 100644 --- a/examples/raytracingsbtdata/raytracingsbtdata.cpp +++ b/examples/raytracingsbtdata/raytracingsbtdata.cpp @@ -5,7 +5,7 @@ * * Example by Nate Morrical (https://github.com/natevm) * -* Copyright (C) 2019-2020 by Sascha Willems - www.saschawillems.de +* Copyright (C) 2019-2023 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */ @@ -538,9 +538,10 @@ public: // We allocate space for the handle (which is like lambda function pointers to call in the ray tracing pipeline) // as well as the data to pass to those functions (which act as the variables being "captured" by those lambda functions) - VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &raygenShaderBindingTable, handleSize + sizeof(float) * 3)); - VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &missShaderBindingTable, handleSize + sizeof(float) * 3)); - VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &hitShaderBindingTable, handleSize + sizeof(float) * 3)); + uint32_t bufferSize = vks::tools::alignedSize(handleSize + 3 * sizeof(float), rayTracingPipelineProperties.shaderGroupBaseAlignment); + VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &raygenShaderBindingTable, bufferSize)); + VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &missShaderBindingTable, bufferSize)); + VK_CHECK_RESULT(vulkanDevice->createBuffer(bufferUsageFlags, memoryUsageFlags, &hitShaderBindingTable, bufferSize)); // Copy handles raygenShaderBindingTable.map(); @@ -768,18 +769,18 @@ public: // that we use to store our color data VkStridedDeviceAddressRegionKHR raygenShaderSbtEntry{}; raygenShaderSbtEntry.deviceAddress = getBufferDeviceAddress(raygenShaderBindingTable.buffer); - raygenShaderSbtEntry.stride = handleSizeAligned; raygenShaderSbtEntry.size = vks::tools::alignedSize(handleSizeAligned + 3 * sizeof(float), rayTracingPipelineProperties.shaderGroupBaseAlignment); + raygenShaderSbtEntry.stride = raygenShaderSbtEntry.size; VkStridedDeviceAddressRegionKHR missShaderSbtEntry{}; missShaderSbtEntry.deviceAddress = getBufferDeviceAddress(missShaderBindingTable.buffer); - missShaderSbtEntry.stride = handleSizeAligned; missShaderSbtEntry.size = vks::tools::alignedSize(handleSizeAligned + 3 * sizeof(float), rayTracingPipelineProperties.shaderGroupBaseAlignment); + missShaderSbtEntry.stride = missShaderSbtEntry.size; VkStridedDeviceAddressRegionKHR hitShaderSbtEntry{}; hitShaderSbtEntry.deviceAddress = getBufferDeviceAddress(hitShaderBindingTable.buffer); - hitShaderSbtEntry.stride = handleSizeAligned; hitShaderSbtEntry.size = vks::tools::alignedSize(handleSizeAligned + 3 * sizeof(float), rayTracingPipelineProperties.shaderGroupBaseAlignment); + hitShaderSbtEntry.stride = hitShaderSbtEntry.size; VkStridedDeviceAddressRegionKHR callableShaderSbtEntry{}; diff --git a/shaders/glsl/raytracingsbtdata/closesthit.rchit.spv b/shaders/glsl/raytracingsbtdata/closesthit.rchit.spv index 031bef114c0f527580c6996fa3ee38ccbe1c339e..5f0cbc7b2b4340f3b198b7b1b0a0f49b33fa425d 100644 GIT binary patch delta 18 ZcmdnNwu6n6nMs+QfrXKQdn2blGXNiC0