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())[..Math.Min(128, VaryingCount)];
}
}
}