Shader execution options (such as local workgroup sizes for compute shaders, origin for fragment shaders) may now be specified with ShaderExecutionOptions
as a new field of ShaderInterface
.
LayoutStrategy
has been moved from ShaderInterface
to Shader
, because LayoutStrategy
may now require an IR to be created if using a VulkanLayout
.
VulkanLayout
now stores information regarding storage classes and interface blocks, so that it no longer implicitly depends on an external TypeMetadata
for providing it while computing strides and alignments. VulkanAlignment
should be used to specify layout requirements in a decoration-agnostic way.
CFG
has been renamed to SPIRVTarget
, as the semantics of the structure evolved and control-flow has been streamlined a bit more internally.
A new Decorations
structure has been introduced instead of Pair{SPIRV.Decoration, Vector{Any}}
free-form pairs. This has been done to perform parameter checking so that it is impossible to decorate variables or members with the wrong number of decoration arguments nor to provide decoration arguments with the wrong types. The API around setting decorations has also been improved.
ShaderInterface
now relies on SPIRVTarget
and Decorations
.
make_shader
has been removed in favor of a more explicit Shader
type for turning SPIRVTarget
s into Vulkan-compliant shader modules.
Data can now be extracted from Julia values with no memory padding, and can be properly padded to satisfy SPIR-V alignemnt requirements. This is however undocumented at the moment.