mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-15 16:18:39 +00:00
[vulkan] XFB memory barrier added
This commit is contained in:
@@ -922,19 +922,31 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
has_flushed_end_pending = false;
|
has_flushed_end_pending = false;
|
||||||
|
|
||||||
// Refresh buffer state before ending transform feedback to ensure counters_count is up-to-date.
|
// Refresh buffer state before ending transform feedback to ensure counters_count is up-to-date.
|
||||||
UpdateBuffers();
|
UpdateBuffers();
|
||||||
|
static constexpr VkMemoryBarrier XFB_OUTPUT_BARRIER{
|
||||||
|
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
|
||||||
|
.pNext = nullptr,
|
||||||
|
.srcAccessMask = VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
|
||||||
|
.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT,
|
||||||
|
};
|
||||||
if (buffers_count == 0) {
|
if (buffers_count == 0) {
|
||||||
LOG_DEBUG(Render_Vulkan, "EndTransformFeedbackEXT called with no counters (buffers_count=0)");
|
LOG_DEBUG(Render_Vulkan, "EndTransformFeedbackEXT called with no counters (buffers_count=0)");
|
||||||
scheduler.Record([](vk::CommandBuffer cmdbuf) {
|
scheduler.Record([](vk::CommandBuffer cmdbuf) {
|
||||||
cmdbuf.EndTransformFeedbackEXT(0, 0, nullptr, nullptr);
|
cmdbuf.EndTransformFeedbackEXT(0, 0, nullptr, nullptr);
|
||||||
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,
|
||||||
|
vk::PIPELINE_STAGE_GRAPHICS_COMPUTE_TRANSFER, 0,
|
||||||
|
XFB_OUTPUT_BARRIER);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG(Render_Vulkan, "EndTransformFeedbackEXT called with counters (buffers_count={})", buffers_count);
|
LOG_DEBUG(Render_Vulkan, "EndTransformFeedbackEXT called with counters (buffers_count={})", buffers_count);
|
||||||
scheduler.Record([this,
|
scheduler.Record([this,
|
||||||
total = static_cast<u32>(buffers_count)](vk::CommandBuffer cmdbuf) {
|
total = static_cast<u32>(buffers_count)](vk::CommandBuffer cmdbuf) {
|
||||||
cmdbuf.EndTransformFeedbackEXT(0, total, counter_buffers.data(), offsets.data());
|
cmdbuf.EndTransformFeedbackEXT(0, total, counter_buffers.data(), offsets.data());
|
||||||
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,
|
||||||
|
vk::PIPELINE_STAGE_GRAPHICS_COMPUTE_TRANSFER, 0,
|
||||||
|
XFB_OUTPUT_BARRIER);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user