The VkLayerSettingEXT struct has a values field that is a pointer to some data, and a ty field indicating the type of data.
ty can be one of: boolean, 32 or 64 bits signed or unsigned integer, 32 or 64 bits floating point, or string.
According to this example, when ty is for example a boolean (booleans in Vulkan are always 32 bits), then values must point to 4 bytes of memory containing the boolean value.
However, the values setter generated by ash accepts a &[u8], and automatically does valueCount = values.len().
So for example if you want to pass an integer, you might be tempted to do .values(&u32::to_ne_bytes(some_value)), but that would set valueCount to 4, which is wrong, as it's supposed to be 1.
If I'm not mistaken, it's not possible to actually use this API without relying on transmute-based dark magic.
The
VkLayerSettingEXTstruct has avaluesfield that is a pointer to some data, and atyfield indicating the type of data.tycan be one of: boolean, 32 or 64 bits signed or unsigned integer, 32 or 64 bits floating point, or string.According to this example, when
tyis for example a boolean (booleans in Vulkan are always 32 bits), thenvaluesmust point to 4 bytes of memory containing the boolean value.However, the
valuessetter generated byashaccepts a&[u8], and automatically doesvalueCount = values.len().So for example if you want to pass an integer, you might be tempted to do
.values(&u32::to_ne_bytes(some_value)), but that would setvalueCountto 4, which is wrong, as it's supposed to be 1.If I'm not mistaken, it's not possible to actually use this API without relying on transmute-based dark magic.