Yotsuba Shader
Documentación

Tutorial

Uniforms y storage buffers

Declara buffers y bindings utilizando los namespaces de recursos y constructores que existen actualmente.

Namespaces de recursos#

Los atributos de recursos pertenecen a cada proyecto de sintaxis, no a YotsubaShader.Language.Resources. El vocabulario SPIR-V actual utiliza atributos separados DescriptorSet y Binding. No existe un constructor compartido Binding(set, binding) ni un enum ResourceAccess.

C#
using YotsubaShader.HlslSyntax.Resources;

public struct Settings
{
    public float Exposure;
}

public class Resources
{
    [cbuffer, register(RegisterPrefix.b, 0)]
    public Settings Settings;

    [register(RegisterPrefix.u, 0)]
    public RWStructuredBuffer<float> Values;
}

StorageBuffer no tiene una propiedad Access. Utiliza las declaraciones específicas de sintaxis mostradas abajo; GLSL y SPIR-V utilizan el mismo marcador de buffer para ambos ejemplos y no expresan una opción de solo lectura mediante ese marcador.

Resources.cs
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
using YotsubaShader.HlslSyntax.Resources;

public struct Material
{
    public float Exposure;
}

public class Resources
{
    // Uniform buffer, con su slot de binding
    [cbuffer, register(RegisterPrefix.b, 0)]
    public Material Material;

    // Storage buffer de lectura y escritura
    [register(RegisterPrefix.u, 0)]
    public RWStructuredBuffer<float> Output;

    // Storage buffer de solo lectura
    [register("t0")]
    public StructuredBuffer<float> Input;
}

Existen metadatos de recursos y conceptos de bindings. No se debe asumir que la carga automática, el descubrimiento completo de campos, las operaciones sobre arrays GPU y la integración de layout/reflexión funcionen de extremo a extremo.

Copyright © 2026 Colaboradores de Yotsuba Shader · Licencias · GitHub