venus: support VK_KHR_cooperative_matrix

Tested with dEQP-VK.compute.pipeline.cooperative_matrix.* on anv with
INTEL_LOWER_DPAS=true

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38722>
This commit is contained in:
Yiwei Zhang 2025-11-28 15:14:54 -08:00 committed by Marge Bot
parent 463ab89afb
commit 219bb0e01e
2 changed files with 21 additions and 1 deletions

View file

@ -540,7 +540,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_KHR_android_surface not started VK_KHR_android_surface not started
VK_KHR_calibrated_timestamps DONE (anv, hk, nvk, panvk/v10+, radv, tu/a750+, vn) 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_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_depth_clamp_zero_one DONE (anv, nvk, panvk, radv, vn)
VK_KHR_deferred_host_operations DONE (anv, hasvk, lvp, radv, tu, 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) VK_KHR_display DONE (anv, nvk, panvk, pvr, radv, tu, v3dv, vn)

View file

@ -176,6 +176,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure; VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure;
VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR
compute_shader_derivatives; compute_shader_derivatives;
VkPhysicalDeviceCooperativeMatrixFeaturesKHR cooperative_matrix;
VkPhysicalDeviceDepthClampZeroOneFeaturesKHR depth_clamp_zero_one; VkPhysicalDeviceDepthClampZeroOneFeaturesKHR depth_clamp_zero_one;
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
fragment_shader_barycentric; fragment_shader_barycentric;
@ -343,6 +344,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
/* KHR */ /* KHR */
VN_ADD_PNEXT_EXT(feats2, ACCELERATION_STRUCTURE_FEATURES_KHR, local_feats.acceleration_structure, exts->KHR_acceleration_structure); 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, 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, 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_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); 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; acceleration_structure;
VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR
compute_shader_derivatives; compute_shader_derivatives;
VkPhysicalDeviceCooperativeMatrixPropertiesKHR cooperative_matrix;
VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR
fragment_shader_barycentric; fragment_shader_barycentric;
VkPhysicalDeviceFragmentShadingRatePropertiesKHR fragment_shading_rate; VkPhysicalDeviceFragmentShadingRatePropertiesKHR fragment_shading_rate;
@ -703,6 +706,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev)
/* KHR */ /* KHR */
VN_ADD_PNEXT_EXT(props2, ACCELERATION_STRUCTURE_PROPERTIES_KHR, local_props.acceleration_structure, exts->KHR_acceleration_structure); 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, 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_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, 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); 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 */ /* KHR */
VN_SET_VK_PROPS_EXT(props, &local_props.acceleration_structure, exts->KHR_acceleration_structure); 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.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_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.fragment_shading_rate, exts->KHR_fragment_shading_rate);
VN_SET_VK_PROPS_EXT(props, &local_props.maintenance_7, exts->KHR_maintenance7); 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_acceleration_structure = physical_dev->ray_tracing,
.KHR_calibrated_timestamps = true, .KHR_calibrated_timestamps = true,
.KHR_compute_shader_derivatives = true, .KHR_compute_shader_derivatives = true,
.KHR_cooperative_matrix = true,
.KHR_depth_clamp_zero_one = true, .KHR_depth_clamp_zero_one = true,
.KHR_fragment_shader_barycentric = true, .KHR_fragment_shader_barycentric = true,
.KHR_fragment_shading_rate = true, .KHR_fragment_shading_rate = true,
@ -2968,6 +2974,20 @@ vn_GetPhysicalDeviceCalibrateableTimeDomainsKHR(
ring, physicalDevice, pTimeDomainCount, pTimeDomains); 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 VkResult
vn_GetPhysicalDeviceFragmentShadingRatesKHR( vn_GetPhysicalDeviceFragmentShadingRatesKHR(
VkPhysicalDevice physicalDevice, VkPhysicalDevice physicalDevice,