diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 98390282d77..3c10d0c7952 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1192,12 +1192,14 @@ get_device_properties(const struct v3dv_physical_device *device, .storageTexelBufferOffsetSingleTexelAlignment = false, .uniformTexelBufferOffsetAlignmentBytes = V3D_TMU_TEXEL_ALIGN, .uniformTexelBufferOffsetSingleTexelAlignment = false, - /* No native acceleration for integer dot product. We use NIR lowering. */ + /* V3D 7.1+ has native v8dot instructions for 4x8-bit packed dot + * products (unsigned, signed, mixed signedness). + */ .integerDotProduct8BitUnsignedAccelerated = false, .integerDotProduct8BitMixedSignednessAccelerated = false, - .integerDotProduct4x8BitPackedUnsignedAccelerated = false, - .integerDotProduct4x8BitPackedSignedAccelerated = false, - .integerDotProduct4x8BitPackedMixedSignednessAccelerated = false, + .integerDotProduct4x8BitPackedUnsignedAccelerated = device->devinfo.ver >= 71, + .integerDotProduct4x8BitPackedSignedAccelerated = device->devinfo.ver >= 71, + .integerDotProduct4x8BitPackedMixedSignednessAccelerated = device->devinfo.ver >= 71, .integerDotProduct16BitUnsignedAccelerated = false, .integerDotProduct16BitSignedAccelerated = false, .integerDotProduct16BitMixedSignednessAccelerated = false, diff --git a/src/broadcom/vulkan/v3dv_pipeline.c b/src/broadcom/vulkan/v3dv_pipeline.c index 800ce9c1dcb..99f0e17e26c 100644 --- a/src/broadcom/vulkan/v3dv_pipeline.c +++ b/src/broadcom/vulkan/v3dv_pipeline.c @@ -224,6 +224,11 @@ v3dv_pipeline_get_nir_options(const struct v3d_device_info *devinfo) if (!initialized) { options.lower_fsat = devinfo->ver < 71; + if (devinfo->ver >= 71) { + options.has_udot_4x8 = true; + options.has_sdot_4x8 = true; + options.has_sudot_4x8 = true; + } initialized = true; }