diff options
author | quou <quou@disroot.org> | 2025-02-22 17:01:35 +1100 |
---|---|---|
committer | quou <quou@disroot.org> | 2025-02-22 17:01:53 +1100 |
commit | 04db6b0ccd81d988cfe3a1d09e4eb00eeea77273 (patch) | |
tree | 5163857dca5070ecea802452c1e4e22806e4fbab /video.cpp | |
parent | 944ca7aede48f358329cc9e6cdac479648f30c17 (diff) |
basic shadows
Diffstat (limited to 'video.cpp')
-rw-r--r-- | video.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -2347,6 +2347,22 @@ void Context::transition(Texture_Id id, Resource_State state) { 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; |