using Ryujinx.Common.Memory; using System; using System.Runtime.InteropServices; namespace Ryujinx.Graphics.Gpu.Shader { /// /// Transform feedback descriptor. /// struct TransformFeedbackDescriptor { // New fields should be added to the end of the struct to keep disk shader cache compatibility. /// /// Index of the transform feedback. /// public readonly int BufferIndex; /// /// Amount of bytes consumed per vertex. /// public readonly int Stride; /// /// Number of varyings written into the buffer. /// public readonly int VaryingCount; /// /// Location of varyings to be written into the buffer. Each byte is one location. /// public Array32 VaryingLocations; // Making this readonly breaks AsSpan /// /// Creates a new transform feedback descriptor. /// /// Index of the transform feedback /// Amount of bytes consumed per vertex /// Number of varyings written into the buffer. Indicates size in bytes of /// Location of varyings to be written into the buffer. Each byte is one location public TransformFeedbackDescriptor(int bufferIndex, int stride, int varyingCount, ref Array32 varyingLocations) { BufferIndex = bufferIndex; Stride = stride; VaryingCount = varyingCount; VaryingLocations = varyingLocations; } /// /// Gets a span of the . /// /// Span of varying locations public ReadOnlySpan AsSpan() { return MemoryMarshal.Cast(VaryingLocations.AsSpan()).Slice(0, Math.Min(128, VaryingCount)); } } }