Yotsuba Shader
Documentation

Reference

SPIR-V syntax attributes

Every attribute of the SPIR-V syntax: SPIR-V BuiltIn names (BuiltIn_Position), DescriptorSet and Binding.

Overview#

The SPIR-V syntax is inspired by SPIR-V (Vulkan). It contains 34 attributes in the YotsubaShader.SpirvSyntax package, whose namespace has the same name. They are generated below from its sources.

C#
using YotsubaShader.SpirvSyntax;

public struct VertexOutput
{
    [BuiltIn_Position]
    public Vector4 Position;
}

These pages list declared attributes. They do not imply that every concept is lowered by Roslyn or supported by every output target. Vector names in the listings require compatible project types.

See the same concepts side by side in Built-in values across syntaxes and Resource attributes across syntaxes.

Input attributes#

Apply to fields, parameters and properties that receive values from the pipeline.

Input.cs
using YotsubaShader.Language;
using YotsubaShader.SpirvSyntax;

public struct InputExamples
{
    // Barycentric coordinates
    [BuiltIn_BaryCoord] public Vector4 BarycentricCoordinates;
    // Barycentric coordinates (no perspective)
    [BuiltIn_BaryCoordNoPersp]
    public Vector4 BarycentricCoordinates2;
    // Base instance
    [BuiltIn_BaseInstance] public int BaseInstance;
    // Base vertex
    [BuiltIn_BaseVertex] public int BaseVertex;
    // Fragment coordinate
    [BuiltIn_FragCoord] public Vector4 FragmentCoordinate;
    // Front-facing flag
    [BuiltIn_FrontFacing] public bool FrontFacingFlag;
    // Global invocation id
    [BuiltIn_GlobalInvocationId]
    public UInt3 GlobalInvocationId;
    // Helper invocation
    [BuiltIn_HelperInvocation] public bool HelperInvocation;
    // Instance index
    [BuiltIn_InstanceIndex] public int InstanceIndex;
    // Local invocation id
    [BuiltIn_LocalInvocationId] public UInt3 LocalInvocationId;
    // Local invocation index
    [BuiltIn_LocalInvocationIndex]
    public uint LocalInvocationIndex;
    // Number of subgroups
    [BuiltIn_NumSubgroups] public uint NumberOfSubgroups;
    // Number of workgroups
    [BuiltIn_NumWorkgroups] public UInt3 NumberOfWorkgroups;
    // Primitive index
    [BuiltIn_PrimitiveId] public uint PrimitiveIndex;
    // Sample index
    [BuiltIn_SampleId] public uint SampleIndex;
    // Sample position
    [BuiltIn_SamplePosition] public Vector2 SamplePosition;
    // Subgroup id
    [BuiltIn_SubgroupId] public uint SubgroupId;
    // Subgroup invocation id
    [BuiltIn_SubgroupInvocationId]
    public UInt3 SubgroupInvocationId;
    // Subgroup size
    [BuiltIn_SubgroupSize] public uint SubgroupSize;
    // Vertex index
    [BuiltIn_VertexIndex] public int VertexIndex;
    // Workgroup id
    [BuiltIn_WorkgroupId] public UInt3 WorkgroupId;
    // Workgroup size (built-in value)
    [BuiltIn_WorkgroupSize] public UInt3 WorkgroupSize;
}

Input and output attributes#

Apply to values that can be received or produced, depending on the stage.

InputOutput.cs
using YotsubaShader.Language;
using YotsubaShader.SpirvSyntax;

public struct InputOutputExamples
{
    // Clip distance
    [BuiltIn_ClipDistance] public float ClipDistance;
    // Render target layer
    [BuiltIn_Layer] public uint RenderTargetLayer;
    // Clip-space position (vertex output)
    [BuiltIn_Position] public Vector4 ClipSpacePosition;
    // Sample mask
    [BuiltIn_SampleMask] public uint SampleMask;
    // Viewport index
    [BuiltIn_ViewportIndex] public uint ViewportIndex;
    [Location] public Vector4 Value6;
}

Output attributes#

Apply to fields, parameters and return values the stage produces.

Output.cs
using YotsubaShader.Language;
using YotsubaShader.SpirvSyntax;

public struct OutputExamples
{
    // Fragment depth (output)
    [BuiltIn_FragDepth] public float FragmentDepth;
    // Stencil reference (output)
    [BuiltIn_FragStencilRef] public uint StencilReference;
}

Resource attributes#

Declare uniforms, buffers, textures, samplers and binding slots.

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

public class ResourceExamples
{
    [@Binding(0)] public float Value1;
    [DescriptorSet(0)] public float Value2;
    [StorageBuffer] public float Value3;
    [Uniform] public float Value4;
}

Supporting types#

Structs, classes and enums used together with the attributes.

Type.cs
using YotsubaShader.Language;
using YotsubaShader.SpirvSyntax;

public class Types
{
    public YotsubaShader.SpirvSyntax.Resources.Type.Image1D<float> Image1DGenericValue;
    public YotsubaShader.SpirvSyntax.Resources.Type.Image2D<float> Image2DGenericValue;
    public YotsubaShader.SpirvSyntax.Resources.Type.Image3D<float> Image3DGenericValue;
    public YotsubaShader.SpirvSyntax.Resources.Type.ImageCube<float> ImageCubeGenericValue;
    public YotsubaShader.SpirvSyntax.Resources.Type.Sampler SamplerValue;
}
Copyright © 2026 Yotsuba Shader contributors · Licensing · GitHub