Uniform buffers y storage buffers#
Estos son ejemplos de declaraciones con slots de binding. Los marcadores de acceso dependen de la sintaxis; los ejemplos GLSL y SPIR-V no distinguen el acceso de solo lectura.
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;
}
using YotsubaShader.Language;
using YotsubaShader.GlslSyntax;
using YotsubaShader.GlslSyntax.Resources;
public struct Material
{
public float Exposure;
}
public class Resources
{
// Uniform buffer, con su slot de binding
[uniform, layout(0, 0)]
public Material Material;
// Storage buffer de lectura y escritura
[buffer, layout(0, 1)]
public float[] Output;
// Storage buffer de solo lectura (el mismo atributo)
[buffer, layout(0, 2)]
public float[] Input;
}
using YotsubaShader.Language;
using YotsubaShader.MslSyntax;
using YotsubaShader.MslSyntax.Resources;
public struct Material
{
public float Exposure;
}
public class Resources
{
// Uniform buffer, con su slot de binding
[constant, buffer(0)]
public Material Material;
// Storage buffer de lectura y escritura
[device, buffer(1)]
public float[] Output;
// Storage buffer de solo lectura
[device(readOnly: true), buffer(2)]
public float[] Input;
}
using YotsubaShader.Language;
using YotsubaShader.SpirvSyntax;
using YotsubaShader.SpirvSyntax.Resources;
public struct Material
{
public float Exposure;
}
public class Resources
{
// Uniform buffer, con su slot de binding
[Uniform, DescriptorSet(0), @Binding(0)]
public Material Material;
// Storage buffer de lectura y escritura
[StorageBuffer, DescriptorSet(0), @Binding(1)]
public float[] Output;
// Storage buffer de solo lectura (el mismo atributo)
[StorageBuffer, DescriptorSet(0), @Binding(2)]
public float[] Input;
}
using YotsubaShader.Language;
using YotsubaShader.WgslSyntax;
using YotsubaShader.WgslSyntax.Resources;
public struct Material
{
public float Exposure;
}
public class Resources
{
// Uniform buffer, con su slot de binding
[uniform, @group(0), @binding(0)]
public Material Material;
// Storage buffer de lectura y escritura
[storage(storage_use.read_write), @group(0), @binding(1)]
public float[] Output;
// Storage buffer de solo lectura
[storage(storage_use.read), @group(0), @binding(2)]
public float[] Input;
}
Texturas y samplers#
Una textura y un sampler enlazados a sus slots.
using YotsubaShader.HlslSyntax;
using YotsubaShader.HlslSyntax.Resources;
public class Surface
{
[register(RegisterPrefix.t, 0)]
public Texture2D Albedo;
// El mismo registro, escrito como cadena: letra + número
[register("s0")]
public SamplerState Sampler;
}
using YotsubaShader.GlslSyntax;
using YotsubaShader.GlslSyntax.Resources;
public class Surface
{
[layout(0, 0)]
public Texture2D Albedo;
[layout(0, 1)]
public SamplerState Sampler;
}
using YotsubaShader.MslSyntax;
using YotsubaShader.MslSyntax.Resources;
public class Surface
{
[texture(0)]
public Texture2D Albedo;
[sampler(0)]
public SamplerState Sampler;
}
using YotsubaShader.SpirvSyntax;
using YotsubaShader.SpirvSyntax.Resources;
public class Surface
{
[DescriptorSet(0), @Binding(0)]
public Texture2D Albedo;
[DescriptorSet(0), @Binding(1)]
public SamplerState Sampler;
}
using YotsubaShader.WgslSyntax;
using YotsubaShader.WgslSyntax.Resources;
public class Surface
{
[@group(0), @binding(0)]
public Texture2D Albedo;
[@group(0), @binding(1)]
public SamplerState Sampler;
}
Namespaces de recursos#
Los recursos pertenecen al namespace de cada sintaxis, como YotsubaShader.HlslSyntax.Resources o YotsubaShader.SpirvSyntax.Resources. Las declaraciones no demuestran una conversión completa de recursos. Consulta el tutorial de buffers para conocer los constructores actuales.
