Escalares y vectores#
El procesador de almacenamiento actual reconoce bool, int, uint, float y double, además de tipos con atributos de mapeo de vectores. Los componentes de vector pueden ser float, int o uint; todos deben tener el mismo tipo.
using YotsubaShader.Language.Native.Types.Matrix;
using YotsubaShader.Language.Native.Types.Vector;
// Los tipos propios de tu proyecto, asociados a tipos nativos de la GPU con atributos.
// Los mismos structs pueden usarlos tu código de CPU y tus shaders.
[Vector]
public struct Vector2
{
[VectorComponent(0)] public float X;
[VectorComponent(1)] public float Y;
public Vector2(float x, float y) { X = x; Y = y; }
}
[Vector]
public struct Vector3
{
[VectorComponent(0)] public float X;
[VectorComponent(1)] public float Y;
[VectorComponent(2)] public float Z;
public Vector3(float x, float y, float z) { X = x; Y = y; Z = z; }
}
[Vector]
public struct Vector4
{
[VectorComponent(0)] public float X;
[VectorComponent(1)] public float Y;
[VectorComponent(2)] public float Z;
[VectorComponent(3)] public float W;
public Vector4(float x, float y, float z, float w) { X = x; Y = y; Z = z; W = w; }
}
[Vector]
public struct UInt3
{
[VectorComponent(0)] public uint X;
[VectorComponent(1)] public uint Y;
[VectorComponent(2)] public uint Z;
}
[Matrix]
public struct Matrix4
{
[MatrixColumn(0)] public Vector4 Column0;
[MatrixColumn(1)] public Vector4 Column1;
[MatrixColumn(2)] public Vector4 Column2;
[MatrixColumn(3)] public Vector4 Column3;
}
Matrices y arrays#
Existen MatrixAttribute, MatrixColumnAttribute y los records de matrices y arrays del IR. Las anotaciones matriciales describen vectores columna. La ruta actual de almacenamiento Roslyn no implementa un mapeo nativo completo de matrices o arrays; los comentarios del IR sobre formas de arrays expresan intención de diseño, no una lista de soporte.
Los structs sin anotar se inspeccionan recursivamente, omitiendo miembros estáticos, miembros declarados implícitamente e indexers. Esta inspección de tipos no implementa métodos C#, operadores, asignaciones de memoria ni colecciones administradas arbitrarias en la GPU.
