Track enabled status of some subgroup vulkan extensions we care about

This commit is contained in:
baldurk
2025-01-31 14:09:03 +00:00
parent b191a02cd1
commit 983cf91ef0
2 changed files with 26 additions and 5 deletions
+10 -2
View File
@@ -540,7 +540,11 @@
DeclExt(KHR_ray_query); \
DeclExt(EXT_nested_command_buffer); \
DeclExt(EXT_shader_object); \
DeclExt(KHR_ray_tracing_pipeline);
DeclExt(KHR_ray_tracing_pipeline); \
DeclExt(EXT_subgroup_size_control); \
DeclExt(EXT_shader_subgroup_ballot); \
DeclExt(EXT_shader_subgroup_vote); \
DeclExt(KHR_shader_subgroup_uniform_control_flow);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -670,7 +674,11 @@
CheckExt(KHR_acceleration_structure, VKXX); \
CheckExt(KHR_ray_query, VKXX); \
CheckExt(EXT_shader_object, VKXX); \
CheckExt(KHR_ray_tracing_pipeline, VKXX);
CheckExt(KHR_ray_tracing_pipeline, VKXX); \
CheckExt(EXT_subgroup_size_control, VK13); \
CheckExt(EXT_shader_subgroup_ballot, VK11); \
CheckExt(EXT_shader_subgroup_vote, VK11); \
CheckExt(KHR_shader_subgroup_uniform_control_flow, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -1762,6 +1762,9 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
AddRequiredExtensions(false, Extensions, supportedExtensions);
VkPhysicalDeviceProperties physProps;
ObjDisp(physicalDevice)->GetPhysicalDeviceProperties(Unwrap(physicalDevice), &physProps);
// Drop VK_KHR_driver_properties if it's not available, but add it if it is
bool driverPropsSupported = (supportedExtensions.find(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME) !=
supportedExtensions.end());
@@ -1892,6 +1895,19 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
"mesh stage will not be available");
}
// enable VK_KHR_shader_subgroup_uniform_control_flow if it's available, to make subgroup
// debugging more reliable/spec-clean.
// if we can't get it, we'll just emit the same code anyway and hope it compiles to something sensible
if(RDCMIN(m_EnabledExtensions.vulkanVersion, physProps.apiVersion) >= VK_MAKE_VERSION(1, 1, 0))
{
if(supportedExtensions.find(VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME) !=
supportedExtensions.end())
{
Extensions.push_back(VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME);
RDCLOG("Enabling VK_KHR_shader_subgroup_uniform_control_flow extension");
}
}
bool KHRbuffer = false, EXTbuffer = false;
if(supportedExtensions.find(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME) !=
@@ -3543,9 +3559,6 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
SAFE_DELETE_ARRAY(exts);
VkPhysicalDeviceProperties physProps;
ObjDisp(physicalDevice)->GetPhysicalDeviceProperties(Unwrap(physicalDevice), &physProps);
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR pipeExecFeatures = {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR,
};