From 660513fd5fd486cd074bf5428179832a1bdb383a Mon Sep 17 00:00:00 2001 From: Ivan Avdeev Date: Wed, 1 May 2024 17:21:40 -0400 Subject: [PATCH] vk: make validation not complain about first 2 RT frames Not sure what's happening with the rest, but first couple works. --- ref/vk/ray_resources.c | 13 +++++++++---- ref/vk/vk_render.c | 6 +++++- ref/vk/vk_rtx.c | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ref/vk/ray_resources.c b/ref/vk/ray_resources.c index 4bd15b70..04204aa9 100644 --- a/ref/vk/ray_resources.c +++ b/ref/vk/ray_resources.c @@ -1,8 +1,7 @@ #include "ray_resources.h" #include "vk_core.h" #include "vk_image.h" - -#include "shaders/ray_interop.h" // FIXME temp for type validation +#include "vk_common.h" #include @@ -23,9 +22,13 @@ void R_VkResourcesPrepareDescriptorsValues(VkCommandBuffer cmdbuf, vk_resources_ const qboolean write = i >= args.write_begin; if (res->type == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) { + ASSERT(image_barriers_count < COUNTOF(image_barriers)); + if (write) { // No reads are happening - ASSERT(res->read.pipelines == 0); + //ASSERT(res->read.pipelines == 0); + + src_stage_mask |= res->read.pipelines; res->write = (ray_resource_state_t) { .access_mask = VK_ACCESS_SHADER_WRITE_BIT, @@ -36,7 +39,7 @@ void R_VkResourcesPrepareDescriptorsValues(VkCommandBuffer cmdbuf, vk_resources_ image_barriers[image_barriers_count++] = (VkImageMemoryBarrier) { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, .image = src_value->image_object->image, - .srcAccessMask = 0, + .srcAccessMask = res->read.access_mask, .dstAccessMask = res->write.access_mask, .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, .newLayout = res->write.image_layout, @@ -49,6 +52,8 @@ void R_VkResourcesPrepareDescriptorsValues(VkCommandBuffer cmdbuf, vk_resources_ }, }; + // Mark that read would need a transition + res->read = (ray_resource_state_t){0}; } else { // Write happened ASSERT(res->write.pipelines != 0); diff --git a/ref/vk/vk_render.c b/ref/vk/vk_render.c index dc2552fe..5ad72af9 100644 --- a/ref/vk/vk_render.c +++ b/ref/vk/vk_render.c @@ -676,7 +676,11 @@ void VK_Render_FIXME_Barrier( VkCommandBuffer cmdbuf ) { } }; vkCmdPipelineBarrier(cmdbuf, VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | (vk_core.rtx ? VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR : 0), + VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | (vk_core.rtx + ? VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR + | VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR + | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT + : 0), 0, 0, NULL, ARRAYSIZE(bmb), bmb, 0, NULL); } } diff --git a/ref/vk/vk_rtx.c b/ref/vk/vk_rtx.c index 9f1420fd..96a47d37 100644 --- a/ref/vk/vk_rtx.c +++ b/ref/vk/vk_rtx.c @@ -378,7 +378,8 @@ static void performTracing( vk_combuf_t *combuf, const perform_tracing_args_t* a if (!res->name[0] || !res->image.image || res->source_index_plus_1 > 0) continue; - res->resource.read = res->resource.write = (ray_resource_state_t){0}; + //res->resource.read = res->resource.write = (ray_resource_state_t){0}; + res->resource.write = (ray_resource_state_t){0}; } DEBUG_BEGIN(cmdbuf, "yay tracing");