radv: Expose VK_KHR_cooperative_matrix.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24683>
This commit is contained in:

committed by
Marge Bot

parent
9df4703fbb
commit
653bcbcb09
@@ -18,3 +18,4 @@ GL_OES_sample_variables on Asahi
|
|||||||
GL_OES_shader_multisample_interpolation on Asahi
|
GL_OES_shader_multisample_interpolation on Asahi
|
||||||
GL_OES_gpu_shader5 on Asahi
|
GL_OES_gpu_shader5 on Asahi
|
||||||
EGL_ANDROID_blob_cache works when disk caching is disabled
|
EGL_ANDROID_blob_cache works when disk caching is disabled
|
||||||
|
VK_KHR_cooperative_matrix on RADV/GFX11+
|
||||||
|
@@ -380,6 +380,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device
|
|||||||
.KHR_8bit_storage = true,
|
.KHR_8bit_storage = true,
|
||||||
.KHR_16bit_storage = true,
|
.KHR_16bit_storage = true,
|
||||||
.KHR_acceleration_structure = radv_enable_rt(device, false),
|
.KHR_acceleration_structure = radv_enable_rt(device, false),
|
||||||
|
.KHR_cooperative_matrix = device->rad_info.gfx_level >= GFX11 && !device->use_llvm,
|
||||||
.KHR_bind_memory2 = true,
|
.KHR_bind_memory2 = true,
|
||||||
.KHR_buffer_device_address = true,
|
.KHR_buffer_device_address = true,
|
||||||
.KHR_copy_commands2 = true,
|
.KHR_copy_commands2 = true,
|
||||||
@@ -1038,6 +1039,10 @@ radv_physical_device_get_features(const struct radv_physical_device *pdevice, st
|
|||||||
.deviceGeneratedCompute = true,
|
.deviceGeneratedCompute = true,
|
||||||
.deviceGeneratedComputePipelines = false,
|
.deviceGeneratedComputePipelines = false,
|
||||||
.deviceGeneratedComputeCaptureReplay = false,
|
.deviceGeneratedComputeCaptureReplay = false,
|
||||||
|
|
||||||
|
/* VK_KHR_cooperative_matrix */
|
||||||
|
.cooperativeMatrix = pdevice->rad_info.gfx_level >= GFX11 && !pdevice->use_llvm,
|
||||||
|
.cooperativeMatrixRobustBufferAccess = pdevice->rad_info.gfx_level >= GFX11 && !pdevice->use_llvm,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1710,6 +1715,9 @@ radv_get_physical_device_properties(struct radv_physical_device *pdevice)
|
|||||||
p->polygonModePointSize = true;
|
p->polygonModePointSize = true;
|
||||||
p->nonStrictSinglePixelWideLinesUseParallelogram = false;
|
p->nonStrictSinglePixelWideLinesUseParallelogram = false;
|
||||||
p->nonStrictWideLinesUseParallelogram = false;
|
p->nonStrictWideLinesUseParallelogram = false;
|
||||||
|
|
||||||
|
/* VK_KHR_cooperative_matrix */
|
||||||
|
p->cooperativeMatrixSupportedStages = VK_SHADER_STAGE_COMPUTE_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
@@ -2436,3 +2444,65 @@ radv_GetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t *
|
|||||||
|
|
||||||
return vk_outarray_status(&out);
|
return vk_outarray_status(&out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL
|
||||||
|
radv_GetPhysicalDeviceCooperativeMatrixPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount,
|
||||||
|
VkCooperativeMatrixPropertiesKHR *pProperties)
|
||||||
|
{
|
||||||
|
VK_OUTARRAY_MAKE_TYPED(VkCooperativeMatrixPropertiesKHR, out, pProperties, pPropertyCount);
|
||||||
|
|
||||||
|
vk_outarray_append_typed(VkCooperativeMatrixPropertiesKHR, &out, p)
|
||||||
|
{
|
||||||
|
*p = (struct VkCooperativeMatrixPropertiesKHR){.sType = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR,
|
||||||
|
.MSize = 16,
|
||||||
|
.NSize = 16,
|
||||||
|
.KSize = 16,
|
||||||
|
.AType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.BType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.CType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.ResultType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.saturatingAccumulation = false,
|
||||||
|
.scope = VK_SCOPE_SUBGROUP_KHR};
|
||||||
|
}
|
||||||
|
|
||||||
|
vk_outarray_append_typed(VkCooperativeMatrixPropertiesKHR, &out, p)
|
||||||
|
{
|
||||||
|
*p = (struct VkCooperativeMatrixPropertiesKHR){.sType = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR,
|
||||||
|
.MSize = 16,
|
||||||
|
.NSize = 16,
|
||||||
|
.KSize = 16,
|
||||||
|
.AType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.BType = VK_COMPONENT_TYPE_FLOAT16_KHR,
|
||||||
|
.CType = VK_COMPONENT_TYPE_FLOAT32_KHR,
|
||||||
|
.ResultType = VK_COMPONENT_TYPE_FLOAT32_KHR,
|
||||||
|
.saturatingAccumulation = false,
|
||||||
|
.scope = VK_SCOPE_SUBGROUP_KHR};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned asigned = 0; asigned < 2; asigned++) {
|
||||||
|
for (unsigned bsigned = 0; bsigned < 2; bsigned++) {
|
||||||
|
for (unsigned csigned = 0; csigned < 2; csigned++) {
|
||||||
|
for (unsigned saturate = 0; saturate < 2; saturate++) {
|
||||||
|
if (!csigned && saturate)
|
||||||
|
continue; /* The HW only supports signed acc. */
|
||||||
|
vk_outarray_append_typed(VkCooperativeMatrixPropertiesKHR, &out, p)
|
||||||
|
{
|
||||||
|
*p = (struct VkCooperativeMatrixPropertiesKHR){
|
||||||
|
.sType = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR,
|
||||||
|
.MSize = 16,
|
||||||
|
.NSize = 16,
|
||||||
|
.KSize = 16,
|
||||||
|
.AType = asigned ? VK_COMPONENT_TYPE_SINT8_KHR : VK_COMPONENT_TYPE_UINT8_KHR,
|
||||||
|
.BType = bsigned ? VK_COMPONENT_TYPE_SINT8_KHR : VK_COMPONENT_TYPE_UINT8_KHR,
|
||||||
|
.CType = csigned ? VK_COMPONENT_TYPE_SINT32_KHR : VK_COMPONENT_TYPE_UINT32_KHR,
|
||||||
|
.ResultType = csigned ? VK_COMPONENT_TYPE_SINT32_KHR : VK_COMPONENT_TYPE_UINT32_KHR,
|
||||||
|
.saturatingAccumulation = saturate,
|
||||||
|
.scope = VK_SCOPE_SUBGROUP_KHR};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vk_outarray_status(&out);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user