From 26c8f13ff51b42eb8a13091bf99e07d182ae668f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Thu, 25 Jan 2024 10:54:01 +0100 Subject: [PATCH] vulkan: enable VK_KHR_shader_expect_assume This implementation ignores the hints. Acked-by: Caio Oliveira Part-of: --- docs/features.txt | 1 + docs/relnotes/new_features.txt | 1 + src/amd/vulkan/radv_physical_device.c | 4 ++++ src/broadcom/vulkan/v3dv_device.c | 4 ++++ src/freedreno/vulkan/tu_device.cc | 4 ++++ src/gallium/frontends/lavapipe/lvp_device.c | 4 ++++ src/imagination/vulkan/pvr_device.c | 3 +++ src/intel/vulkan/anv_device.c | 4 ++++ src/intel/vulkan_hasvk/anv_device.c | 4 ++++ src/microsoft/vulkan/dzn_device.c | 2 ++ src/nouveau/vulkan/nvk_physical_device.c | 4 ++++ src/panfrost/vulkan/panvk_device.c | 4 ++++ src/virtio/vulkan/vn_physical_device.c | 3 +++ 13 files changed, 42 insertions(+) diff --git a/docs/features.txt b/docs/features.txt index 452d496328b..6f0a73d73d4 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -536,6 +536,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_ray_tracing_pipeline DONE (anv/gfx12.5+, radv/gfx10.3+) VK_KHR_ray_tracing_position_fetch DONE (anv, radv/gfx10.3+) VK_KHR_shader_clock DONE (anv, hasvk, lvp, nvk, radv, vn) + VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_subgroup_rotate DONE (anv, radv) VK_KHR_shader_subgroup_uniform_control_flow DONE (anv, hasvk, radv) VK_KHR_shared_presentable_image not started diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index bfb9b11f496..01599155cba 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -2,3 +2,4 @@ VK_KHR_shader_subgroup_rotate on RADV VK_KHR_load_store_op_none on RADV VK_KHR_line_rasterization on RADV VK_KHR_index_type_uint8 on RADV +VK_KHR_shader_expect_assume on all Vulkan drivers diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index 6f6ff88ff89..41d64da6076 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -500,6 +500,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device .KHR_shader_atomic_int64 = true, .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = true, .KHR_shader_float_controls = true, .KHR_shader_integer_dot_product = true, @@ -1129,6 +1130,9 @@ radv_physical_device_get_features(const struct radv_physical_device *pdevice, st /* VK_EXT_shader_object */ .shaderObject = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; } diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 3f8b1970f44..b6abc239956 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -161,6 +161,7 @@ get_device_extensions(const struct v3dv_physical_device *device, .KHR_multiview = true, .KHR_pipeline_executable_properties = true, .KHR_separate_depth_stencil_layouts = true, + .KHR_shader_expect_assume = true, .KHR_shader_float_controls = true, .KHR_shader_non_semantic_info = true, .KHR_sampler_mirror_clamp_to_edge = true, @@ -453,6 +454,9 @@ get_features(const struct v3dv_physical_device *physical_device, /* VK_EXT_subgroup_size_control */ .subgroupSizeControl = true, .computeFullSubgroups = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; } diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 430cf3c1642..1b95e5f2821 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -191,6 +191,7 @@ get_device_extensions(const struct tu_physical_device *device, .KHR_sampler_ycbcr_conversion = true, .KHR_separate_depth_stencil_layouts = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = true, .KHR_shader_float_controls = true, .KHR_shader_integer_dot_product = true, @@ -582,6 +583,9 @@ tu_get_features(struct tu_physical_device *pdevice, /* VK_KHR_maintenance5 */ features->maintenance5 = true; + + /* VK_KHR_shader_expect_assume */ + features->shaderExpectAssume = true; } static const struct vk_pipeline_cache_object_ops *const cache_import_ops[] = { diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 3f53b5afa02..f844a2d06b8 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -136,6 +136,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported = .KHR_shader_atomic_int64 = true, .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = true, .KHR_shader_integer_dot_product = true, .KHR_shader_non_semantic_info = true, @@ -611,6 +612,9 @@ lvp_get_features(const struct lvp_physical_device *pdevice, /* maintenance6 */ .maintenance6 = true, + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, + /* VK_AMDX_shader_enqueue */ #ifdef VK_ENABLE_BETA_EXTENSIONS .shaderEnqueue = true, diff --git a/src/imagination/vulkan/pvr_device.c b/src/imagination/vulkan/pvr_device.c index 4cd38c3536c..19830d93704 100644 --- a/src/imagination/vulkan/pvr_device.c +++ b/src/imagination/vulkan/pvr_device.c @@ -180,6 +180,7 @@ static void pvr_physical_device_get_supported_extensions( .KHR_external_semaphore_fd = PVR_USE_WSI_PLATFORM, .KHR_get_memory_requirements2 = true, .KHR_image_format_list = true, + .KHR_shader_expect_assume = true, .KHR_swapchain = PVR_USE_WSI_PLATFORM, .KHR_timeline_semaphore = true, .KHR_uniform_buffer_standard_layout = true, @@ -273,6 +274,8 @@ static void pvr_physical_device_get_supported_features( /* Vulkan 1.3 / VK_EXT_texel_buffer_alignment */ .texelBufferAlignment = true, + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; } diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 773d5df60a4..a67b454c1c6 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -294,6 +294,7 @@ get_device_extensions(const struct anv_physical_device *device, .KHR_shader_atomic_int64 = true, .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = !device->instance->no_16bit, .KHR_shader_float_controls = true, .KHR_shader_integer_dot_product = true, @@ -888,6 +889,9 @@ get_features(const struct anv_physical_device *pdevice, /* VK_EXT_attachment_feedback_loop_dynamic_state */ .attachmentFeedbackLoopDynamicState = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; /* The new DOOM and Wolfenstein games require depthBounds without diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c index 5eb8102ca16..988e0395326 100644 --- a/src/intel/vulkan_hasvk/anv_device.c +++ b/src/intel/vulkan_hasvk/anv_device.c @@ -239,6 +239,7 @@ get_device_extensions(const struct anv_physical_device *device, .KHR_separate_depth_stencil_layouts = true, .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = device->info.ver >= 8 && !device->instance->no_16bit, .KHR_shader_float_controls = true, .KHR_shader_integer_dot_product = true, @@ -629,6 +630,9 @@ get_features(const struct anv_physical_device *pdevice, /* VK_EXT_depth_clip_control */ .depthClipControl = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; /* We can't do image stores in vec4 shaders */ diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index 0648854648f..fadfe0861ce 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -128,6 +128,7 @@ dzn_physical_device_get_extensions(struct dzn_physical_device *pdev) .KHR_sampler_mirror_clamp_to_edge = true, .KHR_separate_depth_stencil_layouts = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float16_int8 = pdev->options4.Native16BitShaderOpsSupported, .KHR_shader_float_controls = true, .KHR_shader_integer_dot_product = true, @@ -778,6 +779,7 @@ dzn_physical_device_get_features(const struct dzn_physical_device *pdev, .dynamicRendering = true, .shaderIntegerDotProduct = true, .maintenance4 = false, + .shaderExpectAssume = true, .vertexAttributeInstanceRateDivisor = true, .vertexAttributeInstanceRateZeroDivisor = true, diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index a9b252ab2e6..a95ab210d21 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -130,6 +130,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance, nvk_use_nak(info), .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, + .KHR_shader_expect_assume = true, .KHR_shader_float_controls = true, .KHR_shader_float16_int8 = true, .KHR_shader_integer_dot_product = true, @@ -527,6 +528,9 @@ nvk_get_device_features(const struct nv_device_info *info, /* VK_VALVE_mutable_descriptor_type */ .mutableDescriptorType = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; } diff --git a/src/panfrost/vulkan/panvk_device.c b/src/panfrost/vulkan/panvk_device.c index 28563cad20f..2a1e63c140d 100644 --- a/src/panfrost/vulkan/panvk_device.c +++ b/src/panfrost/vulkan/panvk_device.c @@ -158,6 +158,7 @@ panvk_get_device_extensions(const struct panvk_physical_device *device, { *ext = (struct vk_device_extension_table){ .KHR_copy_commands2 = true, + .KHR_shader_expect_assume = true, .KHR_storage_buffer_storage_class = true, .KHR_descriptor_update_template = true, #ifdef PANVK_USE_WSI_PLATFORM @@ -289,6 +290,9 @@ panvk_get_features(const struct panvk_physical_device *device, /* VK_EXT_custom_border_color */ .customBorderColors = true, .customBorderColorWithoutFormat = true, + + /* VK_KHR_shader_expect_assume */ + .shaderExpectAssume = true, }; } diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index a56e4a106e6..602c6025db6 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -142,6 +142,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* KHR */ VkPhysicalDeviceShaderClockFeaturesKHR shader_clock; + VkPhysicalDeviceShaderExpectAssumeFeaturesKHR expect_assume; /* EXT */ VkPhysicalDeviceBorderColorSwizzleFeaturesEXT border_color_swizzle; @@ -244,6 +245,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* KHR */ VN_ADD_PNEXT_EXT(feats2, SHADER_CLOCK_FEATURES_KHR, local_feats.shader_clock, exts->KHR_shader_clock); + VN_ADD_PNEXT_EXT(feats2, SHADER_EXPECT_ASSUME_FEATURES_KHR, local_feats.expect_assume, exts->KHR_shader_expect_assume); /* EXT */ VN_ADD_PNEXT_EXT(feats2, BORDER_COLOR_SWIZZLE_FEATURES_EXT, local_feats.border_color_swizzle, exts->EXT_border_color_swizzle); @@ -1122,6 +1124,7 @@ vn_physical_device_get_passthrough_extensions( .KHR_pipeline_library = true, .KHR_push_descriptor = true, .KHR_shader_clock = true, + .KHR_shader_expect_assume = true, /* EXT */ .EXT_border_color_swizzle = true,