diff --git a/docs/features.txt b/docs/features.txt index 70181c89079..0cf13c96784 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -540,7 +540,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_android_surface not started VK_KHR_calibrated_timestamps DONE (anv, hk, nvk, panvk/v10+, radv, tu/a750+, vn) VK_KHR_compute_shader_derivatives DONE (anv, lvp, nvk, radv, tu/a7xx+, vn) - VK_KHR_cooperative_matrix DONE (anv, nvk/Turing+, radv/gfx11+) + VK_KHR_cooperative_matrix DONE (anv, nvk/Turing+, radv/gfx11+, vn) VK_KHR_depth_clamp_zero_one DONE (anv, nvk, panvk, radv, vn) VK_KHR_deferred_host_operations DONE (anv, hasvk, lvp, radv, tu, vn) VK_KHR_display DONE (anv, nvk, panvk, pvr, radv, tu, v3dv, vn) diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 908386efa09..4048b5455c4 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -176,6 +176,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure; VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR compute_shader_derivatives; + VkPhysicalDeviceCooperativeMatrixFeaturesKHR cooperative_matrix; VkPhysicalDeviceDepthClampZeroOneFeaturesKHR depth_clamp_zero_one; VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR fragment_shader_barycentric; @@ -343,6 +344,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* KHR */ VN_ADD_PNEXT_EXT(feats2, ACCELERATION_STRUCTURE_FEATURES_KHR, local_feats.acceleration_structure, exts->KHR_acceleration_structure); VN_ADD_PNEXT_EXT(feats2, COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR, local_feats.compute_shader_derivatives, exts->KHR_compute_shader_derivatives || exts->NV_compute_shader_derivatives); + VN_ADD_PNEXT_EXT(feats2, COOPERATIVE_MATRIX_FEATURES_KHR, local_feats.cooperative_matrix, exts->KHR_cooperative_matrix); VN_ADD_PNEXT_EXT(feats2, DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR, local_feats.depth_clamp_zero_one, exts->KHR_depth_clamp_zero_one || exts->EXT_depth_clamp_zero_one); VN_ADD_PNEXT_EXT(feats2, FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, local_feats.fragment_shader_barycentric, exts->KHR_fragment_shader_barycentric); VN_ADD_PNEXT_EXT(feats2, FRAGMENT_SHADING_RATE_FEATURES_KHR, local_feats.fragment_shading_rate, exts->KHR_fragment_shading_rate); @@ -608,6 +610,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) acceleration_structure; VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR compute_shader_derivatives; + VkPhysicalDeviceCooperativeMatrixPropertiesKHR cooperative_matrix; VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR fragment_shader_barycentric; VkPhysicalDeviceFragmentShadingRatePropertiesKHR fragment_shading_rate; @@ -703,6 +706,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) /* KHR */ VN_ADD_PNEXT_EXT(props2, ACCELERATION_STRUCTURE_PROPERTIES_KHR, local_props.acceleration_structure, exts->KHR_acceleration_structure); VN_ADD_PNEXT_EXT(props2, COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR, local_props.compute_shader_derivatives, exts->KHR_compute_shader_derivatives); + VN_ADD_PNEXT_EXT(props2, COOPERATIVE_MATRIX_PROPERTIES_KHR, local_props.cooperative_matrix, exts->KHR_cooperative_matrix); VN_ADD_PNEXT_EXT(props2, FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR, local_props.fragment_shader_barycentric, exts->KHR_fragment_shader_barycentric); VN_ADD_PNEXT_EXT(props2, FRAGMENT_SHADING_RATE_PROPERTIES_KHR, local_props.fragment_shading_rate, exts->KHR_fragment_shading_rate); VN_ADD_PNEXT_EXT(props2, MAINTENANCE_7_PROPERTIES_KHR, local_props.maintenance_7, exts->KHR_maintenance7); @@ -784,6 +788,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) /* KHR */ VN_SET_VK_PROPS_EXT(props, &local_props.acceleration_structure, exts->KHR_acceleration_structure); VN_SET_VK_PROPS_EXT(props, &local_props.compute_shader_derivatives, exts->KHR_compute_shader_derivatives); + VN_SET_VK_PROPS_EXT(props, &local_props.cooperative_matrix, exts->KHR_cooperative_matrix); VN_SET_VK_PROPS_EXT(props, &local_props.fragment_shader_barycentric, exts->KHR_fragment_shader_barycentric); VN_SET_VK_PROPS_EXT(props, &local_props.fragment_shading_rate, exts->KHR_fragment_shading_rate); VN_SET_VK_PROPS_EXT(props, &local_props.maintenance_7, exts->KHR_maintenance7); @@ -1311,6 +1316,7 @@ vn_physical_device_get_passthrough_extensions( .KHR_acceleration_structure = physical_dev->ray_tracing, .KHR_calibrated_timestamps = true, .KHR_compute_shader_derivatives = true, + .KHR_cooperative_matrix = true, .KHR_depth_clamp_zero_one = true, .KHR_fragment_shader_barycentric = true, .KHR_fragment_shading_rate = true, @@ -2968,6 +2974,20 @@ vn_GetPhysicalDeviceCalibrateableTimeDomainsKHR( ring, physicalDevice, pTimeDomainCount, pTimeDomains); } +VkResult +vn_GetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkCooperativeMatrixPropertiesKHR *pProperties) +{ + struct vn_physical_device *physical_dev = + vn_physical_device_from_handle(physicalDevice); + struct vn_ring *ring = physical_dev->instance->ring.ring; + + return vn_call_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + ring, physicalDevice, pPropertyCount, pProperties); +} + VkResult vn_GetPhysicalDeviceFragmentShadingRatesKHR( VkPhysicalDevice physicalDevice,