diff --git a/res/shaders/raytracing/Callable.slang b/res/shaders/raytracing/Callable.slang index 2420f86..c494d31 100644 --- a/res/shaders/raytracing/Callable.slang +++ b/res/shaders/raytracing/Callable.slang @@ -24,5 +24,5 @@ void callable(inout CallablePayload payload) // gamma correction result = result / (result + float3(1.0)); result = pow(result, float3(1.0/2.2)); - payload.color = float3(0, 0, 1); + payload.color = result; } \ No newline at end of file diff --git a/res/shaders/raytracing/ClosestHit.slang b/res/shaders/raytracing/ClosestHit.slang index 4ae6b8b..25606c5 100644 --- a/res/shaders/raytracing/ClosestHit.slang +++ b/res/shaders/raytracing/ClosestHit.slang @@ -37,7 +37,7 @@ void closestHit(inout RayPayload hitValue, in BuiltInTriangleIntersectionAttribu CallablePayload callable; callable.params = params; - CallShader(0, callable); + CallShader(InstanceID(), callable); - hitValue.color = float3(0, 1, 1) + callable.color; + hitValue.color = float3(1, 0, 0); } \ No newline at end of file diff --git a/src/Engine/Graphics/RenderPass/RayTracingPass.cpp b/src/Engine/Graphics/RenderPass/RayTracingPass.cpp index 64f2e59..788a8c9 100644 --- a/src/Engine/Graphics/RenderPass/RayTracingPass.cpp +++ b/src/Engine/Graphics/RenderPass/RayTracingPass.cpp @@ -111,6 +111,8 @@ void RayTracingPass::render() { StaticMeshVertexData::getInstance()->getVertexDataSet(), Material::getDescriptorSet(), scene->getLightEnvironment()->getDescriptorSet(), desc}); command->traceRays(texture->getWidth(), texture->getHeight(), 1); + texture->pipelineBarrier(Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, + Gfx::SE_ACCESS_TRANSFER_READ_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT); Array commands; commands.add(std::move(command)); graphics->executeCommands(std::move(commands)); diff --git a/src/Engine/Graphics/Vulkan/Enums.h b/src/Engine/Graphics/Vulkan/Enums.h index 9f82595..0a627c3 100644 --- a/src/Engine/Graphics/Vulkan/Enums.h +++ b/src/Engine/Graphics/Vulkan/Enums.h @@ -13,6 +13,7 @@ std::this_thread::sleep_for(std::chrono::seconds(3)); \ } \ std::cout << "Fatal : VkResult is " << res << " in " << __FILE__ << " at line " << __LINE__ << std::endl; \ + std::cin.get(); \ abort(); \ } \ } diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index 4b4d2b1..8fbebf4 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -866,9 +866,7 @@ void Graphics::createDevice(GraphicsInitializer initializer) { .ppEnabledExtensionNames = initializer.deviceExtensions.data(), .pEnabledFeatures = nullptr, }; - VK_CHECK(vkCreateDevice(physicalDevice, &deviceInfo, nullptr, &handle)); - // std::cout << "Vulkan handle: " << handle << std::endl; graphicsQueue = 0; computeQueue = 0; transferQueue = 0; diff --git a/src/Engine/Graphics/Vulkan/PipelineCache.cpp b/src/Engine/Graphics/Vulkan/PipelineCache.cpp index dff9eca..b728bcb 100644 --- a/src/Engine/Graphics/Vulkan/PipelineCache.cpp +++ b/src/Engine/Graphics/Vulkan/PipelineCache.cpp @@ -596,7 +596,7 @@ PRayTracingPipeline PipelineCache::createPipeline(Gfx::RayTracingPipelineCreateI VK_CHECK(vkCreateRayTracingPipelinesKHR(graphics->getDevice(), VK_NULL_HANDLE, cache, 1, &pipelineInfo, nullptr, &pipelineHandle)); const uint32_t handleSize = graphics->getRayTracingProperties().shaderGroupHandleSize; - const uint32_t handleAlignment = graphics->getRayTracingProperties().shaderGroupHandleAlignment; + const uint32_t handleAlignment = graphics->getRayTracingProperties().shaderGroupBaseAlignment; const uint32_t handleSizeAligned = align(handleSize, handleAlignment); const uint32_t groupCount = static_cast(shaderGroups.size()); const uint32_t sbtSize = handleSizeAligned * groupCount; diff --git a/src/Engine/Graphics/Vulkan/RayTracing.cpp b/src/Engine/Graphics/Vulkan/RayTracing.cpp index e9c863d..a301a3a 100644 --- a/src/Engine/Graphics/Vulkan/RayTracing.cpp +++ b/src/Engine/Graphics/Vulkan/RayTracing.cpp @@ -53,7 +53,7 @@ TopLevelAS::TopLevelAS(PGraphics graphics, const Gfx::TopLevelASCreateInfo& crea createInfo.instances[i].transformMatrix[2][2], createInfo.instances[i].transformMatrix[3][2], }, - .instanceCustomIndex = 0, + .instanceCustomIndex = i, .mask = 0xff, .instanceShaderBindingTableRecordOffset = 0, .flags = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, diff --git a/src/Engine/Graphics/slang-compile.cpp b/src/Engine/Graphics/slang-compile.cpp index 7198bd5..5212802 100644 --- a/src/Engine/Graphics/slang-compile.cpp +++ b/src/Engine/Graphics/slang-compile.cpp @@ -48,7 +48,7 @@ void Seele::beginCompilation(const ShaderCompilationInfo& info, SlangCompileTarg option[3].value.intValue0 = SLANG_DEBUG_INFO_FORMAT_PDB; option[4].name = slang::CompilerOptionName::DumpIntermediates; option[4].value.kind = slang::CompilerOptionValueKind::Int; - option[4].value.intValue0 = 1; + option[4].value.intValue0 = 0; sessionDesc.compilerOptionEntries = option.data(); sessionDesc.compilerOptionEntryCount = option.size();