aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs')
-rw-r--r--Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs44
1 files changed, 44 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs b/Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs
new file mode 100644
index 00000000..f874a962
--- /dev/null
+++ b/Ryujinx.Graphics.Vulkan/PipelineHelperShader.cs
@@ -0,0 +1,44 @@
+using Silk.NET.Vulkan;
+using VkFormat = Silk.NET.Vulkan.Format;
+
+namespace Ryujinx.Graphics.Vulkan
+{
+ class PipelineHelperShader : PipelineBase
+ {
+ public PipelineHelperShader(VulkanRenderer gd, Device device) : base(gd, device)
+ {
+ }
+
+ public void SetRenderTarget(Auto<DisposableImageView> view, uint width, uint height, bool isDepthStencil, VkFormat format)
+ {
+ CreateFramebuffer(view, width, height, isDepthStencil, format);
+ CreateRenderPass();
+ SignalStateChange();
+ }
+
+ private void CreateFramebuffer(Auto<DisposableImageView> view, uint width, uint height, bool isDepthStencil, VkFormat format)
+ {
+ FramebufferParams = new FramebufferParams(Device, view, width, height, isDepthStencil, format);
+ UpdatePipelineAttachmentFormats();
+ }
+
+ public void SetCommandBuffer(CommandBufferScoped cbs)
+ {
+ CommandBuffer = (Cbs = cbs).CommandBuffer;
+
+ // Restore per-command buffer state.
+
+ if (Pipeline != null)
+ {
+ Gd.Api.CmdBindPipeline(CommandBuffer, Pbp, Pipeline.Get(CurrentCommandBuffer).Value);
+ }
+
+ SignalCommandBufferChange();
+ }
+
+ public void Finish()
+ {
+ EndRenderPass();
+ }
+ }
+}