From 04db6b0ccd81d988cfe3a1d09e4eb00eeea77273 Mon Sep 17 00:00:00 2001 From: quou Date: Sat, 22 Feb 2025 17:01:35 +1100 Subject: basic shadows --- video.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'video.cpp') diff --git a/video.cpp b/video.cpp index 7fe26b1..fa98813 100644 --- a/video.cpp +++ b/video.cpp @@ -2346,6 +2346,22 @@ void Context::transition(Texture_Id id, Resource_State state) { b.dstAccessMask = 0; src_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dst_stage = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; + } else if ( + src_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL && + dst_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL + ) { + b.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + b.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + src_stage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; + dst_stage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + } else if ( + src_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL && + dst_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL + ) { + b.srcAccessMask = VK_ACCESS_SHADER_READ_BIT; + b.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + src_stage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + dst_stage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; } else if ( src_layout == VK_IMAGE_LAYOUT_UNDEFINED && dst_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR @@ -2386,7 +2402,11 @@ void Context::transition(Texture_Id id, Resource_State state) { dst_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; } else { print_err("Bad resource transition.\n"); - pbreak(389); + assert(0); + b.srcAccessMask = VK_ACCESS_SHADER_READ_BIT; + b.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + src_stage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + dst_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; } vkCmdPipelineBarrier( ctx->cb, @@ -4071,6 +4091,10 @@ void Sampler_Vk::init(Device_Vk* dev, const Sampler_State& s) { si.borderColor = VK_BORDER_COLOR_FLOAT_CUSTOM_EXT; si.maxLod = VK_LOD_CLAMP_NONE; si.pNext = &bi; + if ((int)s.compare) { + si.compareEnable = VK_TRUE; + si.compareOp = Pipeline_Vk::get_compare_op(s.compare); + } bi.sType = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT; bi.customBorderColor = col; bi.format = VK_FORMAT_R32G32B32A32_SFLOAT; -- cgit v1.2.3-54-g00ecf