1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00

[dxvk] Add function to insert framebuffer read-back barriers

Required for some D3D9 content.
This commit is contained in:
Philip Rebohle 2019-10-13 02:00:10 +02:00
parent 41cb5ab5f7
commit 0a5b427ded
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 31 additions and 0 deletions

View File

@ -1586,6 +1586,17 @@ namespace dxvk {
}
void DxvkContext::emitRenderTargetReadbackBarrier() {
if (m_flags.test(DxvkContextFlag::GpRenderPassBound)) {
emitMemoryBarrier(VK_DEPENDENCY_BY_REGION_BIT,
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_SHADER_READ_BIT);
}
}
void DxvkContext::initImage(
const Rc<DxvkImage>& image,
const VkImageSubresourceRange& subresources,

View File

@ -608,6 +608,14 @@ namespace dxvk {
uint32_t counterDivisor,
uint32_t counterBias);
/**
* \brief Emits barrier for render target readback
*
* Use between draw calls if the fragment shader
* reads one of the currently bound render targets.
*/
void emitRenderTargetReadbackBarrier();
/**
* \brief Generates mip maps
*

View File

@ -151,6 +151,18 @@ namespace dxvk {
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, 0 };
}
if (ops.barrier.srcStages & (
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)) {
subpassDeps[subpassDepCount++] = { 0, 0,
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_ACCESS_SHADER_READ_BIT,
VK_DEPENDENCY_BY_REGION_BIT };
}
if (ops.barrier.srcStages && ops.barrier.dstStages) {
subpassDeps[subpassDepCount++] = {
0, VK_SUBPASS_EXTERNAL,