using Ryujinx.Graphics.GAL; using SharpMetal.Metal; using System.Collections.Generic; using System.Runtime.Versioning; namespace Ryujinx.Graphics.Metal { [SupportedOSPlatform("macos")] public struct EncoderState { public const int MaxColorAttachments = 8; public MTLFunction? VertexFunction = null; public MTLFunction? FragmentFunction = null; public Dictionary FragmentTextures = new(); public Dictionary FragmentSamplers = new(); public Dictionary VertexTextures = new(); public Dictionary VertexSamplers = new(); public List VertexBuffers = []; public List UniformBuffers = []; public List StorageBuffers = []; public MTLBuffer IndexBuffer = default; public MTLIndexType IndexType = MTLIndexType.UInt16; public ulong IndexBufferOffset = 0; public MTLDepthStencilState? DepthStencilState = null; public MTLCompareFunction DepthCompareFunction = MTLCompareFunction.Always; public bool DepthWriteEnabled = false; public MTLStencilDescriptor BackFaceStencil = new(); public MTLStencilDescriptor FrontFaceStencil = new(); public bool StencilTestEnabled = false; public PrimitiveTopology Topology = PrimitiveTopology.Triangles; public MTLCullMode CullMode = MTLCullMode.None; public MTLWinding Winding = MTLWinding.Clockwise; public MTLViewport[] Viewports = []; public MTLScissorRect[] Scissors = []; // Changes to attachments take recreation! public MTLTexture DepthStencil = default; public MTLTexture[] RenderTargets = new MTLTexture[MaxColorAttachments]; public MTLVertexDescriptor VertexDescriptor = new(); public Dictionary BlendDescriptors = new(); public ColorF BlendColor = new(); public EncoderState() { } } }