summaryrefslogtreecommitdiff
path: root/video.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'video.cpp')
-rw-r--r--video.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/video.cpp b/video.cpp
index 7fe26b1..fa98813 100644
--- a/video.cpp
+++ b/video.cpp
@@ -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;