What’s new in Yotsuba Shader
Explore the latest updates in the language, the compiler and related technologies.
Get every change
Leave your email and you will get a note from news@yotsubashader.com when there is a new release or a notable change. Nothing else. Your address is kept in the project's contact list and used only for these updates, and you can reply "unsubscribe" at any time.
Thanks! You are on the list.
That did not work. Please check the address and try again, or write to hello@yotsubashader.com.
No email? Follow the changes with a feed reader: releases (Atom) · every change (Atom). On GitHub you can also choose Watch → Custom → Releases.
Shader errors in your IDE
Live shader diagnostics and per-backend checks are planned. Current C# diagnostics are available through the playground.
The repository does not yet implement YotsubaTargets or a backend compatibility analyzer. See the documentation for the current API and planned workflows.
One package per syntax
The HLSL, GLSL, MSL, SPIR-V and WGSL vocabularies are now separate packages: YotsubaShader.HlslSyntax, YotsubaShader.GlslSyntax, YotsubaShader.MslSyntax, YotsubaShader.SpirvSyntax and YotsubaShader.WgslSyntax.
Use YotsubaShader.HlslSyntax for HLSL attributes and YotsubaShader.HlslSyntax.Resources for resources. The numbered Location attribute belongs to YotsubaShader.SpirvSyntax. These are source projects; published NuGet availability is not established here.
Do more with five syntaxes
The HLSL, GLSL, MSL, SPIR-V and WGSL syntaxes now share the same semantic model. Choose the names your team knows; the compiler resolves them to the same IR built-ins.
The frontend maps SV_Position, gl_Position, position, BuiltIn_Position and @builtin_position to the same position slot, and does the same for the vertex index. Interface slots declared with [Location(n)] work in every syntax.
Textures and samplers in the language
Describe a texture precisely: dimension, component type, usage, depth, format, arrays and multisampling. Samplers get their own attribute.
TextureAttribute takes a TextureDimension (D1, D2, D3, Cube) and TextureComponentTypes (Float, Int, Uint), with optional Usage, Depth, Format, Arrayed and Multisampled settings. The IR carries the same fields so each backend can lower them faithfully.
Roslyn-based shader discovery
The frontend finds your shaders by symbol, not by text, so aliases, using directives and long or short attribute names all just work.
ShaderDiscovery.Find walks the types of your project, returns each class with its entry points in declaration order, and exposes parameters and return types to the rest of the compiler. A test suite covers discovery and analysis.
Resource attributes for every syntax
Uniform buffers, storage buffers, textures, samplers and binding slots are available in each syntax.
Each syntax has its own resource attributes. SPIR-V uses separate DescriptorSet(n) and Binding(n); its StorageBuffer marker has no access-mode property.
Stricter vector and matrix declarations
Vector types declare their components with attributes, and invalid declarations fail with clear exceptions.
Mixing component types in one vector throws InconsistentVectorComponentTypeException; an unsupported component type throws VectorComponentTypeNotValidException. Matrices declare columns with [MatrixColumn].
SPIR-V 1.6 module construction
SPIR-V is an intermediate format used inside the compilation pipeline; shader authors do not need to construct its modules manually.
The operation table is generated from the official Khronos grammar, so every instruction, capability, execution model and decoration is available as a typed value.
Free and open source under the MS-PL
Yotsuba Shader is released under the Microsoft Public License (MS-PL): use it in any project, commercial or not, with no fee.
That includes proprietary game engines, frameworks and editors. The shaders you write and the binaries generated from them are yours.
