Vulkan 1.3.228 Promotes One Of Valve's Extensions Used For Efficient D3D12 Emulation
The Khronos Group's Vulkan Working Group today released Vulkan API 1.3.228. Aside from the usual assortment of fixes/clarifications to the Vulkan spec, this spec update promotes one of Valve's existing extensions aimed at enhancing Direct3D 12 emulation with Vulkan into being a formal "EXT" extension.
Going back to late 2020, Valve engineers were working on VK_VALVE_mutable_descriptor_type as one of several efforts to make D3D12-over-Vulkan more efficient. That Valve vendor-prefixed extension was added in Vulkan 1.2.164 while today with Vulkan 1.3.228 has been promoted to VK_EXT_mutable_descriptor_type as being a formal, non-vendor-prefixed extension.
VK_EXT_mutable_descriptor_type's behavior is unchanged from the VK_VALVE_mutable_descriptor_type spec:
The promotion is in place with Vulkan 1.3.228 out today.
Hans-Kristian Arntzen as one of the Valve extension authors has already updated RADV in Mesa Git to support advertising VK_EXT_mutable_descriptor_type given that it supported the prior VALVE prefixed version. Additionally, VKD3D-Proton for Direct3D 12 over Vulkan for Steam Play (Proton) has enabled using this updated extension. For now VKD3D-Proton is supporting either the EXT or VALVE versions of the extension while with time will presumably drop the now deprecated VALVE extension.
Going back to late 2020, Valve engineers were working on VK_VALVE_mutable_descriptor_type as one of several efforts to make D3D12-over-Vulkan more efficient. That Valve vendor-prefixed extension was added in Vulkan 1.2.164 while today with Vulkan 1.3.228 has been promoted to VK_EXT_mutable_descriptor_type as being a formal, non-vendor-prefixed extension.
VK_EXT_mutable_descriptor_type's behavior is unchanged from the VK_VALVE_mutable_descriptor_type spec:
This extension allows applications to reduce descriptor memory footprint by allowing a descriptor to be able to mutate to a given list of descriptor types depending on which descriptor types are written into, or copied into a descriptor set.
The main use case this extension intends to address is descriptor indexing with VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT where the descriptor types are completely generic, as this means applications can allocate one large descriptor set, rather than having one large descriptor set per descriptor type, which significantly bloats descriptor memory usage and causes performance issues.
This extension also adds a mechanism to declare that a descriptor pool, and therefore the descriptor sets that are allocated from it, reside only in host memory; as such these descriptors can only be updated/copied, but not bound.
These features together allow much more efficient emulation of the raw D3D12 binding model. This extension is primarily intended to be useful for API layering efforts.
The promotion is in place with Vulkan 1.3.228 out today.
Hans-Kristian Arntzen as one of the Valve extension authors has already updated RADV in Mesa Git to support advertising VK_EXT_mutable_descriptor_type given that it supported the prior VALVE prefixed version. Additionally, VKD3D-Proton for Direct3D 12 over Vulkan for Steam Play (Proton) has enabled using this updated extension. For now VKD3D-Proton is supporting either the EXT or VALVE versions of the extension while with time will presumably drop the now deprecated VALVE extension.
3 Comments