mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-24 10:23:01 -06:00
Vulkan: Fix the checks for primitive restart extension.
This commit is contained in:
parent
14d2c77f91
commit
6c00151d17
3 changed files with 28 additions and 21 deletions
|
@ -605,8 +605,11 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.topology = input_assembly_topology,
|
.topology = input_assembly_topology,
|
||||||
.primitiveRestartEnable = key.state.primitive_restart_enable != 0 &&
|
.primitiveRestartEnable = key.state.primitive_restart_enable != 0 &&
|
||||||
(device.IsExtPrimitiveTopologyListRestartSupported() ||
|
((input_assembly_topology != VK_PRIMITIVE_TOPOLOGY_PATCH_LIST &&
|
||||||
SupportsPrimitiveRestart(input_assembly_topology)),
|
device.IsTopologyListPrimitiveRestartSupported()) ||
|
||||||
|
SupportsPrimitiveRestart(input_assembly_topology) ||
|
||||||
|
(input_assembly_topology == VK_PRIMITIVE_TOPOLOGY_PATCH_LIST &&
|
||||||
|
device.IsPatchListPrimitiveRestartSupported())),
|
||||||
};
|
};
|
||||||
const VkPipelineTessellationStateCreateInfo tessellation_ci{
|
const VkPipelineTessellationStateCreateInfo tessellation_ci{
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
|
||||||
|
|
|
@ -1129,6 +1129,19 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) {
|
||||||
khr_pipeline_executable_properties = true;
|
khr_pipeline_executable_properties = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (has_ext_primitive_topology_list_restart) {
|
||||||
|
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT primitive_topology_list_restart{};
|
||||||
|
primitive_topology_list_restart.sType =
|
||||||
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT;
|
||||||
|
primitive_topology_list_restart.pNext = nullptr;
|
||||||
|
features.pNext = &primitive_topology_list_restart;
|
||||||
|
physical.GetFeatures2KHR(features);
|
||||||
|
|
||||||
|
is_topology_list_restart_supported =
|
||||||
|
primitive_topology_list_restart.primitiveTopologyListRestart;
|
||||||
|
is_patch_list_restart_supported =
|
||||||
|
primitive_topology_list_restart.primitiveTopologyPatchListRestart;
|
||||||
|
}
|
||||||
if (has_khr_image_format_list && has_khr_swapchain_mutable_format) {
|
if (has_khr_image_format_list && has_khr_swapchain_mutable_format) {
|
||||||
extensions.push_back(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME);
|
extensions.push_back(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME);
|
||||||
extensions.push_back(VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME);
|
extensions.push_back(VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME);
|
||||||
|
@ -1144,18 +1157,6 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) {
|
||||||
|
|
||||||
max_push_descriptors = push_descriptor.maxPushDescriptors;
|
max_push_descriptors = push_descriptor.maxPushDescriptors;
|
||||||
}
|
}
|
||||||
if (has_ext_primitive_topology_list_restart) {
|
|
||||||
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT primitive_topology_list_restart{};
|
|
||||||
primitive_topology_list_restart.sType =
|
|
||||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT;
|
|
||||||
primitive_topology_list_restart.pNext = nullptr;
|
|
||||||
physical_properties.pNext = &primitive_topology_list_restart;
|
|
||||||
physical.GetProperties2KHR(physical_properties);
|
|
||||||
is_topology_list_restart_supported =
|
|
||||||
primitive_topology_list_restart.primitiveTopologyListRestart;
|
|
||||||
is_patch_list_restart_supported =
|
|
||||||
primitive_topology_list_restart.primitiveTopologyPatchListRestart;
|
|
||||||
}
|
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -238,14 +238,19 @@ public:
|
||||||
return khr_workgroup_memory_explicit_layout;
|
return khr_workgroup_memory_explicit_layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if the device supports VK_EXT_index_type_uint8.
|
/// Returns true if the device supports VK_EXT_primitive_topology_list_restart.
|
||||||
bool IsExtIndexTypeUint8Supported() const {
|
bool IsTopologyListPrimitiveRestartSupported() const {
|
||||||
return ext_index_type_uint8;
|
return is_topology_list_restart_supported;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if the device supports VK_EXT_primitive_topology_list_restart.
|
/// Returns true if the device supports VK_EXT_primitive_topology_list_restart.
|
||||||
bool IsExtPrimitiveTopologyListRestartSupported() const {
|
bool IsPatchListPrimitiveRestartSupported() const {
|
||||||
return ext_primitive_topology_list_restart;
|
return is_patch_list_restart_supported;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns true if the device supports VK_EXT_index_type_uint8.
|
||||||
|
bool IsExtIndexTypeUint8Supported() const {
|
||||||
|
return ext_index_type_uint8;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if the device supports VK_EXT_sampler_filter_minmax.
|
/// Returns true if the device supports VK_EXT_sampler_filter_minmax.
|
||||||
|
@ -419,8 +424,6 @@ private:
|
||||||
bool khr_pipeline_executable_properties{}; ///< Support for executable properties.
|
bool khr_pipeline_executable_properties{}; ///< Support for executable properties.
|
||||||
bool khr_swapchain_mutable_format{}; ///< Support for VK_KHR_swapchain_mutable_format.
|
bool khr_swapchain_mutable_format{}; ///< Support for VK_KHR_swapchain_mutable_format.
|
||||||
bool ext_index_type_uint8{}; ///< Support for VK_EXT_index_type_uint8.
|
bool ext_index_type_uint8{}; ///< Support for VK_EXT_index_type_uint8.
|
||||||
bool ext_primitive_topology_list_restart{}; ///< Support for
|
|
||||||
///< VK_EXT_primitive_topology_list_restart.
|
|
||||||
bool ext_sampler_filter_minmax{}; ///< Support for VK_EXT_sampler_filter_minmax.
|
bool ext_sampler_filter_minmax{}; ///< Support for VK_EXT_sampler_filter_minmax.
|
||||||
bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted.
|
bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted.
|
||||||
bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer.
|
bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer.
|
||||||
|
|
Loading…
Reference in a new issue