CamilleLaVey 4 days ago
parent
commit
0dee4b7711
  1. 13
      src/video_core/renderer_vulkan/vk_buffer_cache.cpp

13
src/video_core/renderer_vulkan/vk_buffer_cache.cpp

@ -492,17 +492,18 @@ void BufferCacheRuntime::UnifiedMemoryHostBarrier() {
} }
void BufferCacheRuntime::UnifiedMemoryShaderWriteBarrier() { void BufferCacheRuntime::UnifiedMemoryShaderWriteBarrier() {
const bool has_transform_feedback = device.IsExtTransformFeedbackSupported();
VkAccessFlags src_access = VK_ACCESS_SHADER_WRITE_BIT;
VkPipelineStageFlags src_stages = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE;
if (device.IsExtTransformFeedbackSupported()) {
src_access |= VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT;
src_stages |= VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT;
}
const VkMemoryBarrier write_barrier{ const VkMemoryBarrier write_barrier{
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
.pNext = nullptr, .pNext = nullptr,
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT |
(has_transform_feedback ? VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT : 0),
.srcAccessMask = src_access,
.dstAccessMask = VK_ACCESS_HOST_READ_BIT, .dstAccessMask = VK_ACCESS_HOST_READ_BIT,
}; };
const VkPipelineStageFlags src_stages =
vk::PIPELINE_STAGE_GRAPHICS_COMPUTE |
(has_transform_feedback ? VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT : 0);
scheduler.RequestOutsideRenderPassOperationContext(); scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([write_barrier, src_stages](vk::CommandBuffer cmdbuf) { scheduler.Record([write_barrier, src_stages](vk::CommandBuffer cmdbuf) {
cmdbuf.PipelineBarrier(src_stages, VK_PIPELINE_STAGE_HOST_BIT, 0, write_barrier); cmdbuf.PipelineBarrier(src_stages, VK_PIPELINE_STAGE_HOST_BIT, 0, write_barrier);

Loading…
Cancel
Save