v3dv: expose VK_KHR_shader_integer_dot_product
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 11 Jan 2023 10:25:59 +0000 (11:25 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 11 Jan 2023 11:23:14 +0000 (11:23 +0000)
NIR will automatically lower all of these opcodes unless the driver
specifies that it can handle them natively. We don't have any hardware
support for any of these opcodes though, so we just let NIR lower
all of them.

Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20639>

docs/features.txt
docs/relnotes/new_features.txt
src/broadcom/vulkan/v3dv_device.c

index e92182f..e5efeb0 100644 (file)
@@ -477,7 +477,7 @@ Vulkan 1.3 -- all DONE: anv, radv, tu, lvp, vn
   VK_KHR_dynamic_rendering                              DONE (anv, dzn, lvp, radv, tu, vn)
   VK_KHR_format_feature_flags2                          DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_maintenance4                                   DONE (anv, lvp, radv, tu, v3dv, vn)
-  VK_KHR_shader_integer_dot_product                     DONE (anv, lvp, radv, tu, vn)
+  VK_KHR_shader_integer_dot_product                     DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_KHR_shader_non_semantic_info                       DONE (anv, radv, tu, v3dv, vn)
   VK_KHR_shader_terminate_invocation                    DONE (anv, lvp, radv, tu, vn)
   VK_KHR_synchronization2                               DONE (anv, lvp, panvk, radv, v3dv, tu, vn)
index 15f8a86..bbf9e15 100644 (file)
@@ -6,3 +6,4 @@ Enabled VK_EXT_mesh_shader by default on RADV/RDNA2
 Implemented more VK_EXT_dynamic_state3 features on RADV
 Various raytracing, graphics pipeline library and RDNA3 improvements on RADV
 Radeon Memory Visualizer support with RADV.
+VK_KHR_shader_integer_dot_product on V3DV
index bd81f02..994b6d6 100644 (file)
@@ -155,6 +155,7 @@ get_device_extensions(const struct v3dv_physical_device *device,
       .KHR_storage_buffer_storage_class     = true,
       .KHR_timeline_semaphore               = true,
       .KHR_uniform_buffer_standard_layout   = true,
+      .KHR_shader_integer_dot_product       = true,
       .KHR_synchronization2                 = true,
       .KHR_workgroup_memory_explicit_layout = true,
 #ifdef V3DV_USE_WSI_PLATFORM
@@ -1169,6 +1170,7 @@ v3dv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
       .shaderZeroInitializeWorkgroupMemory = true,
       .synchronization2 = true,
       .robustImageAccess = true,
+      .shaderIntegerDotProduct = true,
    };
 
    VkPhysicalDeviceVulkan12Features vk12 = {
@@ -1622,6 +1624,36 @@ v3dv_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
       .storageTexelBufferOffsetSingleTexelAlignment = false,
       .uniformTexelBufferOffsetAlignmentBytes = V3D_TMU_TEXEL_ALIGN,
       .uniformTexelBufferOffsetSingleTexelAlignment = false,
+      /* No native acceleration for integer dot product. We use NIR lowering. */
+      .integerDotProduct8BitUnsignedAccelerated = false,
+      .integerDotProduct8BitMixedSignednessAccelerated = false,
+      .integerDotProduct4x8BitPackedUnsignedAccelerated = false,
+      .integerDotProduct4x8BitPackedSignedAccelerated = false,
+      .integerDotProduct4x8BitPackedMixedSignednessAccelerated = false,
+      .integerDotProduct16BitUnsignedAccelerated = false,
+      .integerDotProduct16BitSignedAccelerated = false,
+      .integerDotProduct16BitMixedSignednessAccelerated = false,
+      .integerDotProduct32BitUnsignedAccelerated = false,
+      .integerDotProduct32BitSignedAccelerated = false,
+      .integerDotProduct32BitMixedSignednessAccelerated = false,
+      .integerDotProduct64BitUnsignedAccelerated = false,
+      .integerDotProduct64BitSignedAccelerated = false,
+      .integerDotProduct64BitMixedSignednessAccelerated = false,
+      .integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating8BitSignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = false,
+      .integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false,
+      .integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating16BitSignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = false,
+      .integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating32BitSignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = false,
+      .integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating64BitSignedAccelerated = false,
+      .integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = false,
    };
 
    VkPhysicalDeviceVulkan12Properties vk12 = {