Resumen#
La sintaxis HLSL está inspirada en HLSL (Direct3D). Contiene 31 atributos en el paquete YotsubaShader.HlslSyntax, cuyo namespace tiene el mismo nombre. Se generan a continuación a partir de sus fuentes.
using YotsubaShader.HlslSyntax;
public struct VertexOutput
{
[SV_Position]
public Vector4 Position;
}
Estas páginas enumeran atributos declarados. No implican que Roslyn convierta cada concepto ni que todos los destinos lo soporten. Los nombres de vectores de los listados necesitan tipos compatibles del proyecto.
Consulta los mismos conceptos lado a lado en Valores integrados en todas las sintaxis y Atributos de recursos en todas las sintaxis.
Atributos de entrada#
Se aplican a campos, parámetros y propiedades que reciben valores del pipeline.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public struct InputExamples
{
// Coordenadas baricéntricas
[SV_Barycentrics] public Vector4 BarycentricCoordinates;
// Id de invocación global
[SV_DispatchThreadID] public UInt3 GlobalInvocationId;
// Id de workgroup
[SV_GroupID] public UInt3 WorkgroupId;
// Índice de invocación local
[SV_GroupIndex] public uint LocalInvocationIndex;
// Id de invocación local
[SV_GroupThreadID] public UInt3 LocalInvocationId;
// Índice de instancia
[SV_InstanceID] public uint InstanceIndex;
// Indicador de cara frontal
[SV_IsFrontFace] public bool FrontFacingFlag;
// Índice de primitiva
[SV_PrimitiveID] public uint PrimitiveIndex;
// Índice de muestra
[SV_SampleIndex] public uint SampleIndex;
// Instancia base
[SV_StartInstanceLocation] public uint BaseInstance;
// Vértice base
[SV_StartVertexLocation] public uint BaseVertex;
// Índice de vértice
[SV_VertexID] public uint VertexIndex;
}
Atributos de entrada y salida#
Se aplican a valores que se pueden recibir o producir, según la etapa.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public struct InputOutputExamples
{
[BINORMAL] public Vector4 Value1;
[COLOR] public Vector4 Value2;
[NORMAL] public Vector4 Value3;
[POSITION] public Vector4 Value4;
[SV_ClipDistanceN] public Vector4 Value5;
// Máscara de muestras
[SV_Coverage] public uint SampleMask;
// Posición en clip space (salida de vertex)
[SV_Position] public Vector4 ClipSpacePosition;
// Capa del render target
[SV_RenderTargetArrayIndex] public uint RenderTargetLayer;
// Índice de viewport
[SV_ViewportArrayIndex] public uint ViewportIndex;
[TANGENT] public Vector4 Value10;
[TEXCOORD] public Vector4 Value11;
}
Atributos de salida#
Se aplican a campos, parámetros y valores de retorno que produce la etapa.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public struct OutputExamples
{
// Profundidad del fragmento (salida)
[SV_Depth] public float FragmentDepth;
// Profundidad conservadora
[SV_DepthGreaterEqual] public float ConservativeDepth;
// Profundidad conservadora
[SV_DepthLessEqual] public float ConservativeDepth2;
// Referencia de stencil (salida)
[SV_StencilRef] public uint StencilReference;
[SV_Target] public Vector4 Value5;
}
Atributos de método#
Se aplican a métodos, por ejemplo para definir el tamaño del workgroup de compute.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public class MethodExamples
{
[ShaderStage(Stage.Compute)]
[numthreads(8, 8, 1)]
public void NumthreadsExample() { }
}
Atributos de recursos#
Declaran uniforms, buffers, texturas, samplers y slots de binding.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
using YotsubaShader.HlslSyntax.Resources;
public class ResourceExamples
{
[cbuffer] public float Value1;
[register(RegisterPrefix.b, 0)] public float Value2;
// La sobrecarga con cadena: letra + número
[register("b1")]
public float Value3;
}
Tipos de apoyo#
Structs, clases y enums que se usan junto con los atributos.
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public class Types
{
public YotsubaShader.HlslSyntax.Resources.ConstantBuffer<float> ConstantBufferGenericValue;
public YotsubaShader.HlslSyntax.Resources.RegisterPrefix RegisterPrefixValue;
public YotsubaShader.HlslSyntax.Resources.RWStructuredBuffer<float> RWStructuredBufferGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.SamplerComparisonState SamplerComparisonStateValue;
public YotsubaShader.HlslSyntax.Resources.Types.SamplerState SamplerStateValue;
public YotsubaShader.HlslSyntax.Resources.StructuredBuffer<float> StructuredBufferGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture1D Texture1DValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture1D<float> Texture1DGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture2D Texture2DValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture2D<float> Texture2DGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture2DArray Texture2DArrayValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture2DArray<float> Texture2DArrayGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture2DMS<float> Texture2DMSGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture3D Texture3DValue;
public YotsubaShader.HlslSyntax.Resources.Types.Texture3D<float> Texture3DGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.TextureCube TextureCubeValue;
public YotsubaShader.HlslSyntax.Resources.Types.TextureCube<float> TextureCubeGenericValue;
public YotsubaShader.HlslSyntax.Resources.Types.TextureCubeArray TextureCubeArrayValue;
public YotsubaShader.HlslSyntax.Resources.Types.TextureCubeArray<float> TextureCubeArrayGenericValue;
}
