Vulkan: Defer guest barriers, and improve image barrier timings (#7012)
* More guarantees for buffer correct placement, defer guest requested buffers * Split RP on indirect barrier rn * Better handling for feedback loops. * Qualcomm barriers suck too * Fix condition * Remove unused field * Allow render pass barriers on turnip for now
This commit is contained in:
parent
f77bebac80
commit
1a919e99b2
18 changed files with 452 additions and 156 deletions
|
@ -9,13 +9,6 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
{
|
||||
static class PipelineConverter
|
||||
{
|
||||
private const AccessFlags SubpassAccessMask =
|
||||
AccessFlags.MemoryReadBit |
|
||||
AccessFlags.MemoryWriteBit |
|
||||
AccessFlags.ShaderReadBit |
|
||||
AccessFlags.ColorAttachmentWriteBit |
|
||||
AccessFlags.DepthStencilAttachmentWriteBit;
|
||||
|
||||
public static unsafe DisposableRenderPass ToRenderPass(this ProgramPipelineState state, VulkanRenderer gd, Device device)
|
||||
{
|
||||
const int MaxAttachments = Constants.MaxRenderTargets + 1;
|
||||
|
@ -108,7 +101,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
}
|
||||
}
|
||||
|
||||
var subpassDependency = CreateSubpassDependency();
|
||||
var subpassDependency = CreateSubpassDependency(gd);
|
||||
|
||||
fixed (AttachmentDescription* pAttachmentDescs = attachmentDescs)
|
||||
{
|
||||
|
@ -129,29 +122,33 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
}
|
||||
}
|
||||
|
||||
public static SubpassDependency CreateSubpassDependency()
|
||||
public static SubpassDependency CreateSubpassDependency(VulkanRenderer gd)
|
||||
{
|
||||
var (access, stages) = BarrierBatch.GetSubpassAccessSuperset(gd);
|
||||
|
||||
return new SubpassDependency(
|
||||
0,
|
||||
0,
|
||||
PipelineStageFlags.AllGraphicsBit,
|
||||
PipelineStageFlags.AllGraphicsBit,
|
||||
SubpassAccessMask,
|
||||
SubpassAccessMask,
|
||||
stages,
|
||||
stages,
|
||||
access,
|
||||
access,
|
||||
0);
|
||||
}
|
||||
|
||||
public unsafe static SubpassDependency2 CreateSubpassDependency2()
|
||||
public unsafe static SubpassDependency2 CreateSubpassDependency2(VulkanRenderer gd)
|
||||
{
|
||||
var (access, stages) = BarrierBatch.GetSubpassAccessSuperset(gd);
|
||||
|
||||
return new SubpassDependency2(
|
||||
StructureType.SubpassDependency2,
|
||||
null,
|
||||
0,
|
||||
0,
|
||||
PipelineStageFlags.AllGraphicsBit,
|
||||
PipelineStageFlags.AllGraphicsBit,
|
||||
SubpassAccessMask,
|
||||
SubpassAccessMask,
|
||||
stages,
|
||||
stages,
|
||||
access,
|
||||
access,
|
||||
0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue