mirror of https://github.com/RPCS3/rpcs3.git
vk: Fix custom event signals
This commit is contained in:
parent
7de0ff337b
commit
f7fdfe52bc
|
@ -138,7 +138,7 @@ namespace vk
|
||||||
|
|
||||||
// Create event object for this transfer and queue signal op
|
// Create event object for this transfer and queue signal op
|
||||||
dma_fence = std::make_unique<vk::event>(*m_device);
|
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
|
// Set cb flag for queued dma operations
|
||||||
cmd.set_flag(vk::command_buffer::cb_has_dma_transfer);
|
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);
|
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))
|
if (vk::is_renderpass_open(cmd))
|
||||||
{
|
{
|
||||||
vk::end_renderpass(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)
|
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,
|
VkPipelineStageFlags src_stage, VkPipelineStageFlags dst_stage, VkAccessFlags src_mask, VkAccessFlags dst_mask,
|
||||||
const VkImageSubresourceRange& range);
|
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 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]]
|
if (m_vk_event) [[likely]]
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,7 @@ namespace vk
|
||||||
}
|
}
|
||||||
else
|
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);
|
vkCmdFillBuffer(cmd, m_buffer->value, 0, 4, 0xDEADBEEF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace vk
|
||||||
public:
|
public:
|
||||||
event(const render_device& dev);
|
event(const render_device& dev);
|
||||||
~event();
|
~event();
|
||||||
void signal(const command_buffer& cmd, VkPipelineStageFlags stages);
|
void signal(const command_buffer& cmd, VkPipelineStageFlags stages, VkAccessFlags access);
|
||||||
VkResult status() const;
|
VkResult status() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue