Yotsuba Shader
Documentación

Referencia

Atributos de la sintaxis WGSL

Cada atributo de la sintaxis WGSL: el vocabulario @builtin(...), @group y @binding de WebGPU, escrito con identificadores @ que siguen siendo C# válido.

Resumen#

La sintaxis WGSL está inspirada en WGSL (WebGPU). Contiene 24 atributos en el paquete YotsubaShader.WgslSyntax, cuyo namespace tiene el mismo nombre. Se generan a continuación a partir de sus fuentes.

C#
using YotsubaShader.WgslSyntax;

public struct VertexOutput
{
    [@builtin_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.

Input.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;

public struct InputExamples
{
    // Indicador de cara frontal
    [@builtin_front_facing] public bool FrontFacingFlag;
    // Id de invocación global
    [@builtin_global_invocation_id]
    public UInt3 GlobalInvocationId;
    // Índice de instancia
    [@builtin_instance_index] public uint InstanceIndex;
    // Id de invocación local
    [@builtin_local_invocation_id]
    public UInt3 LocalInvocationId;
    // Índice de invocación local
    [@builtin_local_invocation_index]
    public uint LocalInvocationIndex;
    // Número de subgrupos
    [@builtin_num_subgroups] public uint NumberOfSubgroups;
    // Número de workgroups
    [@builtin_num_workgroups] public UInt3 NumberOfWorkgroups;
    // Índice de primitiva
    [@builtin_primitive_index] public uint PrimitiveIndex;
    // Índice de muestra
    [@builtin_sample_index] public uint SampleIndex;
    // Id del subgrupo
    [@builtin_subgroup_id] public uint SubgroupId;
    // Id de invocación del subgrupo
    [@builtin_subgroup_invocation_id]
    public UInt3 SubgroupInvocationId;
    // Tamaño del subgrupo
    [@builtin_subgroup_size] public uint SubgroupSize;
    // Índice de vértice
    [@builtin_vertex_index] public uint VertexIndex;
    // Id de workgroup
    [@builtin_workgroup_id] public UInt3 WorkgroupId;
}

Atributos de entrada y salida#

Se aplican a valores que se pueden recibir o producir, según la etapa.

InputOutput.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;

public struct InputOutputExamples
{
    // Posición en clip space (salida de vertex)
    [@builtin_position] public Vector4 ClipSpacePosition;
    // Máscara de muestras
    [@builtin_sample_mask] public uint SampleMask;
    [@location(0)] public Vector4 Value3;
}

Atributos de salida#

Se aplican a campos, parámetros y valores de retorno que produce la etapa.

Output.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;

public struct OutputExamples
{
    // Distancia de clip
    [@builtin_clip_distances] public float ClipDistance;
    // Profundidad del fragmento (salida)
    [@builtin_frag_depth] public float FragmentDepth;
}

Atributos de método#

Se aplican a métodos, por ejemplo para definir el tamaño del workgroup de compute.

Method.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;

public class MethodExamples
{
    [ShaderStage(Stage.Compute)]
    [@workgroup_size(8)]
    public void Workgroup_sizeExample() { }
}

Atributos de recursos#

Declaran uniforms, buffers, texturas, samplers y slots de binding.

Resource.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;
using YotsubaShader.WgslSyntax.Resources;

public class ResourceExamples
{
    [@binding(0)] public float Value1;
    [@group(0)] public float Value2;
    [storage(storage_use.read_write)] public float Value3;
    [uniform] public float Value4;
}

Tipos de apoyo#

Structs, clases y enums que se usan junto con los atributos.

Type.cs
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;

public class Types
{
    public YotsubaShader.WgslSyntax.Resources.Types.sampler SamplerValue;
    public YotsubaShader.WgslSyntax.Resources.Types.sampler_comparison Sampler_comparisonValue;
    public YotsubaShader.WgslSyntax.Resources.storage_use Storage_useValue;
    public YotsubaShader.WgslSyntax.Resources.Types.texture_1d<float> texture_1dGenericValue;
    public YotsubaShader.WgslSyntax.Resources.Types.texture_2d<float> texture_2dGenericValue;
    public YotsubaShader.WgslSyntax.Resources.Types.texture_2d_array<float> texture_2d_arrayGenericValue;
    public YotsubaShader.WgslSyntax.Resources.Types.texture_3d<float> texture_3dGenericValue;
    public YotsubaShader.WgslSyntax.Resources.Types.texture_cube<float> texture_cubeGenericValue;
}
Copyright © 2026 Colaboradores de Yotsuba Shader · Licencias · GitHub