mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
vk: Fix custom event signals
This commit is contained in:
parent
7de0ff337b
commit
f7fdfe52bc
5 changed files with 14 additions and 8 deletions
|
@ -138,7 +138,7 @@ namespace vk
|
|||
|
||||
// Create event object for this transfer and queue signal op
|
||||
dma_fence = std::make_unique<vk::event>(*m_device);
|
||||
dma_fence->signal(cmd, VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
dma_fence->signal(cmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||
|
||||
// Set cb flag for queued dma operations
|
||||
cmd.set_flag(vk::command_buffer::cb_has_dma_transfer);
|
||||
|
|
|
@ -53,14 +53,18 @@ namespace vk
|
|||
vkCmdPipelineBarrier(cmd, src_stage, dst_stage, 0, 0, nullptr, 1, &barrier, 0, nullptr);
|
||||
}
|
||||
|
||||
void insert_execution_barrier(VkCommandBuffer cmd, VkPipelineStageFlags src_stage, VkPipelineStageFlags dst_stage)
|
||||
void insert_global_memory_barrier(VkCommandBuffer cmd, VkPipelineStageFlags src_stage, VkPipelineStageFlags dst_stage, VkAccessFlags src_access, VkAccessFlags dst_access)
|
||||
{
|
||||
if (vk::is_renderpass_open(cmd))
|
||||
{
|
||||
vk::end_renderpass(cmd);
|
||||
}
|
||||
|
||||
vkCmdPipelineBarrier(cmd, src_stage, dst_stage, 0, 0, nullptr, 0, nullptr, 0, nullptr);
|
||||
VkMemoryBarrier barrier = {};
|
||||
barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
barrier.srcAccessMask = src_access;
|
||||
barrier.dstAccessMask = dst_access;
|
||||
vkCmdPipelineBarrier(cmd, src_stage, dst_stage, 0, 1, &barrier, 0, nullptr, 0, nullptr);
|
||||
}
|
||||
|
||||
void insert_texture_barrier(VkCommandBuffer cmd, VkImage image, VkImageLayout current_layout, VkImageLayout new_layout, VkImageSubresourceRange range)
|
||||
|
|
|
@ -17,7 +17,9 @@ namespace vk
|
|||
VkPipelineStageFlags src_stage, VkPipelineStageFlags dst_stage, VkAccessFlags src_mask, VkAccessFlags dst_mask,
|
||||
const VkImageSubresourceRange& range);
|
||||
|
||||
void insert_execution_barrier(VkCommandBuffer cmd,
|
||||
void insert_global_memory_barrier(VkCommandBuffer cmd,
|
||||
VkPipelineStageFlags src_stage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VkPipelineStageFlags dst_stage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
|
||||
VkPipelineStageFlags dst_stage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VkAccessFlags src_access = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT,
|
||||
VkAccessFlags dst_access = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT);
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace vk
|
|||
}
|
||||
}
|
||||
|
||||
void event::signal(const command_buffer& cmd, VkPipelineStageFlags stages)
|
||||
void event::signal(const command_buffer& cmd, VkPipelineStageFlags stages, VkAccessFlags access)
|
||||
{
|
||||
if (m_vk_event) [[likely]]
|
||||
{
|
||||
|
@ -111,7 +111,7 @@ namespace vk
|
|||
}
|
||||
else
|
||||
{
|
||||
insert_execution_barrier(cmd, stages, VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
insert_global_memory_barrier(cmd, stages, VK_PIPELINE_STAGE_TRANSFER_BIT, access, VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||
vkCmdFillBuffer(cmd, m_buffer->value, 0, 4, 0xDEADBEEF);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace vk
|
|||
public:
|
||||
event(const render_device& dev);
|
||||
~event();
|
||||
void signal(const command_buffer& cmd, VkPipelineStageFlags stages);
|
||||
void signal(const command_buffer& cmd, VkPipelineStageFlags stages, VkAccessFlags access);
|
||||
VkResult status() const;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue