Skip to content

Commit

Permalink
Add DEVICE_FEATURE for depth clamp zero one (#1074)
Browse files Browse the repository at this point in the history
  • Loading branch information
gnl21 authored Jan 9, 2025
1 parent 57962d1 commit ffc084a
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/amber_script.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ with:
* `Storage16BitFeatures.storageInputOutput16`
* `SubgroupSizeControl.subgroupSizeControl`
* `SubgroupSizeControl.computeFullSubgroups`
* `DepthClampZeroOneFeatures.depthClampZeroOne`
* `SubgroupSupportedOperations.basic`
* `SubgroupSupportedOperations.vote`
* `SubgroupSupportedOperations.arithmetic`
Expand Down
24 changes: 24 additions & 0 deletions samples/config_helper_vulkan.cc
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ const char k16BitStorage_InputOutput[] =
const char kSubgroupSizeControl[] = "SubgroupSizeControl.subgroupSizeControl";
const char kComputeFullSubgroups[] = "SubgroupSizeControl.computeFullSubgroups";

const char kDepthClampZeroOne[] = "DepthClampZeroOneFeatures.depthClampZeroOne";

const char kShaderSubgroupExtendedTypes[] =
"ShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes";

Expand Down Expand Up @@ -739,6 +741,8 @@ ConfigHelperVulkan::ConfigHelperVulkan()
storage_16bit_feature_(VkPhysicalDevice16BitStorageFeaturesKHR()),
subgroup_size_control_feature_(
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT()),
depth_clamp_zero_one_feature_(
VkPhysicalDeviceDepthClampZeroOneFeaturesEXT()),
acceleration_structure_feature_(
VkPhysicalDeviceAccelerationStructureFeaturesKHR()),
buffer_device_address_feature_(
Expand Down Expand Up @@ -888,6 +892,8 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
supports_shader_16bit_storage_ = true;
else if (ext == "VK_EXT_subgroup_size_control")
supports_subgroup_size_control_ = true;
else if (ext == "VK_EXT_depth_clamp_zero_one")
supports_depth_clamp_zero_one_ = true;
else if (ext == "VK_KHR_shader_subgroup_extended_types")
supports_shader_subgroup_extended_types_ = true;
else if (ext == "VK_KHR_variable_pointers")
Expand Down Expand Up @@ -916,6 +922,8 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
shader_subgroup_extended_types_features = {};
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
subgroup_size_control_features = {};
VkPhysicalDeviceDepthClampZeroOneFeaturesEXT
depth_clamp_zero_one_features = {};
VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointers_features = {};
VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features = {};
VkPhysicalDevice8BitStorageFeaturesKHR storage_8bit_features = {};
Expand All @@ -937,6 +945,13 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
next_ptr = &subgroup_size_control_features;
}

if (supports_depth_clamp_zero_one_) {
depth_clamp_zero_one_features.sType =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT;
depth_clamp_zero_one_features.pNext = next_ptr;
next_ptr = &depth_clamp_zero_one_features;
}

variable_pointers_features.sType =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR;
variable_pointers_features.pNext = next_ptr;
Expand Down Expand Up @@ -1030,6 +1045,8 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
subgroup_size_control_features.subgroupSizeControl == VK_FALSE) ||
(feature == kComputeFullSubgroups &&
subgroup_size_control_features.computeFullSubgroups == VK_FALSE) ||
(feature == kDepthClampZeroOne &&
depth_clamp_zero_one_features.depthClampZeroOne == VK_FALSE) ||
(feature == kFloat16Int8_Float16 &&
float16_int8_features.shaderFloat16 == VK_FALSE) ||
(feature == kFloat16Int8_Int8 &&
Expand Down Expand Up @@ -1244,6 +1261,11 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2(
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME);

init_feature(
supports_depth_clamp_zero_one_, depth_clamp_zero_one_feature_,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT,
VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME);

init_feature(
supports_acceleration_structure_, acceleration_structure_feature_,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR,
Expand Down Expand Up @@ -1322,6 +1344,8 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2(
subgroup_size_control_feature_.subgroupSizeControl = VK_TRUE;
else if (feature == kComputeFullSubgroups)
subgroup_size_control_feature_.computeFullSubgroups = VK_TRUE;
else if (feature == kDepthClampZeroOne)
depth_clamp_zero_one_feature_.depthClampZeroOne = VK_TRUE;
else if (feature == kShaderSubgroupExtendedTypes)
shader_subgroup_extended_types_feature_.shaderSubgroupExtendedTypes =
VK_TRUE;
Expand Down
2 changes: 2 additions & 0 deletions samples/config_helper_vulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ class ConfigHelperVulkan : public ConfigHelperImpl {
bool supports_shader_8bit_storage_ = false;
bool supports_shader_16bit_storage_ = false;
bool supports_subgroup_size_control_ = false;
bool supports_depth_clamp_zero_one_ = false;
bool supports_shader_subgroup_extended_types_ = false;
bool supports_acceleration_structure_ = false;
bool supports_buffer_device_address_ = false;
Expand All @@ -133,6 +134,7 @@ class ConfigHelperVulkan : public ConfigHelperImpl {
VkPhysicalDevice8BitStorageFeaturesKHR storage_8bit_feature_;
VkPhysicalDevice16BitStorageFeaturesKHR storage_16bit_feature_;
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT subgroup_size_control_feature_;
VkPhysicalDeviceDepthClampZeroOneFeaturesEXT depth_clamp_zero_one_feature_;
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
shader_subgroup_extended_types_feature_;
VkPhysicalDeviceAccelerationStructureFeaturesKHR
Expand Down
1 change: 1 addition & 0 deletions src/script.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ bool Script::IsKnownFeature(const std::string& name) const {
name == "Storage16BitFeatures.uniformAndStorageBuffer16BitAccess" ||
name == "Storage16BitFeatures.storagePushConstant16" ||
name == "Storage16BitFeatures.storageInputOutput16" ||
name == "DepthClampZeroOneFeatures.depthClampZeroOne" ||
name == "SubgroupSizeControl.subgroupSizeControl" ||
name == "SubgroupSizeControl.computeFullSubgroups" ||
name == "SubgroupSupportedOperations.basic" ||
Expand Down
13 changes: 13 additions & 0 deletions src/vulkan/device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ const char k16BitStorage_InputOutput[] =
const char kSubgroupSizeControl[] = "SubgroupSizeControl.subgroupSizeControl";
const char kComputeFullSubgroups[] = "SubgroupSizeControl.computeFullSubgroups";

const char kDepthClampZeroOne[] = "DepthClampZeroOneFeatures.depthClampZeroOne";

const char kSubgroupSupportedOperations[] = "SubgroupSupportedOperations";
const char kSubgroupSupportedOperationsBasic[] =
"SubgroupSupportedOperations.basic";
Expand Down Expand Up @@ -493,6 +495,8 @@ Result Device::Initialize(
VkPhysicalDeviceVulkan14Features* vulkan14_ptrs = nullptr;
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*
subgroup_size_control_features = nullptr;
VkPhysicalDeviceDepthClampZeroOneFeaturesEXT* depth_clamp_zero_one_features =
nullptr;
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*
shader_subgroup_extended_types_ptrs = nullptr;
VkPhysicalDeviceIndexTypeUint8FeaturesEXT* index_type_uint8_ptrs = nullptr;
Expand Down Expand Up @@ -526,6 +530,10 @@ Result Device::Initialize(
subgroup_size_control_features =
static_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(ptr);
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT:
depth_clamp_zero_one_features =
static_cast<VkPhysicalDeviceDepthClampZeroOneFeaturesEXT *>(ptr);
break;
// NOLINTNEXTLINE(whitespace/line_length)
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
shader_subgroup_extended_types_ptrs =
Expand Down Expand Up @@ -614,6 +622,11 @@ Result Device::Initialize(
return amber::Result(
"Subgroup extended types requested but feature not returned");
}
if (feature == kDepthClampZeroOne &&
(depth_clamp_zero_one_features == nullptr ||
depth_clamp_zero_one_features->depthClampZeroOne != VK_TRUE)) {
return amber::Result("Depth clamp zero one requested but not returned");
}
if (feature == kAccelerationStructure) {
if (acceleration_structure_ptrs == nullptr)
return amber::Result(
Expand Down

0 comments on commit ffc084a

Please sign in to comment.