Reland "Remove SubgroupsF16 feature and subgroups_f16 WGSL extension"
This reverts commit deaeadb0e8b45be74c9d8c3d1bfc486f3bd2129c.
Reason for revert: Should work once ml_drift has rolled.
Bug: 380244620, 390632529, 383606929
Original change's description:
> Revert "Remove SubgroupsF16 feature and subgroups_f16 WGSL extension"
>
> This reverts commit 7bb9a04ba94d8f4b40e8dbb2d000199d75cc9453.
>
> Reason for revert: Broke rolls into g3 and Chromium. ML code depends on GPUFeatureName::SubroupsF16
>
> Bug: 380244620, 390632529, 383606929
> Original change's description:
> > Remove SubgroupsF16 feature and subgroups_f16 WGSL extension
> >
> > Bug: 380244620, 390632529, 383606929
> > Change-Id: Ie93be38eda90fb445c443f37466a01e67b071a0e
> > Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/235454
> > Reviewed-by: Corentin Wallez <cwallez@chromium.org>
> > Reviewed-by: David Neto <dneto@google.com>
> > Commit-Queue: Fr <beaufort.francois@gmail.com>
>
> Bug: 380244620, 390632529, 383606929
> Change-Id: I4e4e98ce2f756c9593184d0ae041c1aae83b53d9
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/236834
> Commit-Queue: David Neto <dneto@google.com>
> Commit-Queue: Kai Ninomiya <kainino@chromium.org>
> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
> Auto-Submit: David Neto <dneto@google.com>
> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Bug: 380244620, 390632529, 383606929
Change-Id: Iecf193494eb5affa1886b0a48e203fabbdbb4a6b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/237720
Reviewed-by: Fr <beaufort.francois@gmail.com>
Commit-Queue: Fr <beaufort.francois@gmail.com>
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index e0be433..a730227 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -2270,59 +2270,58 @@
{"value": 5, "name": "chromium experimental immediate data", "tags": ["dawn"]},
{"value": 6, "name": "transient attachments", "tags": ["dawn"]},
{"value": 7, "name": "MSAA render to single sampled", "tags": ["dawn"]},
- {"value": 8, "name": "subgroups f16", "tags": ["dawn", "emscripten", "deprecated"]},
- {"value": 9, "name": "D3D11 multithread protected", "tags": ["dawn", "native"]},
- {"value": 10, "name": "ANGLE texture sharing", "tags": ["dawn", "native"]},
- {"value": 11, "name": "pixel local storage coherent", "tags": ["dawn"]},
- {"value": 12, "name": "pixel local storage non coherent", "tags": ["dawn"]},
- {"value": 13, "name": "unorm16 texture formats", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-unorm16-texture-formats'"},
- {"value": 14, "name": "snorm16 texture formats", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-snorm16-texture-formats'"},
- {"value": 15, "name": "multi planar format extended usages", "tags": ["dawn"]},
- {"value": 16, "name": "multi planar format p010", "tags": ["dawn"]},
- {"value": 17, "name": "host mapped pointer", "tags": ["dawn"]},
- {"value": 18, "name": "multi planar render targets", "tags": ["dawn"]},
- {"value": 19, "name": "multi planar format nv12a", "tags": ["dawn"]},
- {"value": 20, "name": "framebuffer fetch", "tags": ["dawn"]},
- {"value": 21, "name": "buffer map extended usages", "tags": ["dawn"]},
- {"value": 22, "name": "adapter properties memory heaps", "tags": ["dawn"]},
- {"value": 23, "name": "adapter properties D3D", "tags": ["dawn"]},
- {"value": 24, "name": "adapter properties vk", "tags": ["dawn"]},
- {"value": 25, "name": "r8 unorm storage", "tags": ["dawn"]},
- {"value": 26, "name": "dawn format capabilities", "tags": ["dawn"]},
- {"value": 27, "name": "dawn drm format capabilities", "tags": ["dawn"]},
- {"value": 28, "name": "norm16 texture formats", "tags": ["dawn"]},
- {"value": 29, "name": "multi planar format nv16", "tags": ["dawn"]},
- {"value": 30, "name": "multi planar format nv24", "tags": ["dawn"]},
- {"value": 31, "name": "multi planar format p210", "tags": ["dawn"]},
- {"value": 32, "name": "multi planar format p410", "tags": ["dawn"]},
+ {"value": 8, "name": "D3D11 multithread protected", "tags": ["dawn", "native"]},
+ {"value": 9, "name": "ANGLE texture sharing", "tags": ["dawn", "native"]},
+ {"value": 10, "name": "pixel local storage coherent", "tags": ["dawn"]},
+ {"value": 11, "name": "pixel local storage non coherent", "tags": ["dawn"]},
+ {"value": 12, "name": "unorm16 texture formats", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-unorm16-texture-formats'"},
+ {"value": 13, "name": "snorm16 texture formats", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-snorm16-texture-formats'"},
+ {"value": 14, "name": "multi planar format extended usages", "tags": ["dawn"]},
+ {"value": 15, "name": "multi planar format p010", "tags": ["dawn"]},
+ {"value": 16, "name": "host mapped pointer", "tags": ["dawn"]},
+ {"value": 17, "name": "multi planar render targets", "tags": ["dawn"]},
+ {"value": 18, "name": "multi planar format nv12a", "tags": ["dawn"]},
+ {"value": 19, "name": "framebuffer fetch", "tags": ["dawn"]},
+ {"value": 20, "name": "buffer map extended usages", "tags": ["dawn"]},
+ {"value": 21, "name": "adapter properties memory heaps", "tags": ["dawn"]},
+ {"value": 22, "name": "adapter properties D3D", "tags": ["dawn"]},
+ {"value": 23, "name": "adapter properties vk", "tags": ["dawn"]},
+ {"value": 24, "name": "r8 unorm storage", "tags": ["dawn"]},
+ {"value": 25, "name": "dawn format capabilities", "tags": ["dawn"]},
+ {"value": 26, "name": "dawn drm format capabilities", "tags": ["dawn"]},
+ {"value": 27, "name": "norm16 texture formats", "tags": ["dawn"]},
+ {"value": 28, "name": "multi planar format nv16", "tags": ["dawn"]},
+ {"value": 29, "name": "multi planar format nv24", "tags": ["dawn"]},
+ {"value": 30, "name": "multi planar format p210", "tags": ["dawn"]},
+ {"value": 31, "name": "multi planar format p410", "tags": ["dawn"]},
- {"value": 33, "name": "shared texture memory vk dedicated allocation", "tags": ["dawn", "native"]},
- {"value": 34, "name": "shared texture memory a hardware buffer", "tags": ["dawn", "native"]},
- {"value": 35, "name": "shared texture memory dma buf", "tags": ["dawn", "native"]},
- {"value": 36, "name": "shared texture memory opaque FD", "tags": ["dawn", "native"]},
- {"value": 37, "name": "shared texture memory zircon handle", "tags": ["dawn", "native"]},
- {"value": 38, "name": "shared texture memory DXGI shared handle", "tags": ["dawn", "native"]},
- {"value": 39, "name": "shared texture memory D3D11 texture 2D", "tags": ["dawn", "native"]},
- {"value": 40, "name": "shared texture memory IO surface", "tags": ["dawn", "native"]},
- {"value": 41, "name": "shared texture memory EGL image", "tags": ["dawn", "native"]},
- {"value": 42, "name": "shared fence vk semaphore opaque FD", "tags": ["dawn", "native"]},
- {"value": 43, "name": "shared fence sync FD", "tags": ["dawn", "native"]},
- {"value": 44, "name": "shared fence vk semaphore zircon handle", "tags": ["dawn", "native"]},
- {"value": 45, "name": "shared fence DXGI shared handle", "tags": ["dawn", "native"]},
- {"value": 46, "name": "shared fence MTL shared event", "tags": ["dawn", "native"]},
- {"value": 47, "name": "shared buffer memory D3D12 resource", "tags": ["dawn", "native"]},
- {"value": 48, "name": "static samplers", "tags": ["dawn"]},
- {"value": 49, "name": "y cb cr vulkan samplers", "tags": ["dawn"]},
- {"value": 50, "name": "shader module compilation options", "tags": ["dawn"]},
+ {"value": 32, "name": "shared texture memory vk dedicated allocation", "tags": ["dawn", "native"]},
+ {"value": 33, "name": "shared texture memory a hardware buffer", "tags": ["dawn", "native"]},
+ {"value": 34, "name": "shared texture memory dma buf", "tags": ["dawn", "native"]},
+ {"value": 35, "name": "shared texture memory opaque FD", "tags": ["dawn", "native"]},
+ {"value": 36, "name": "shared texture memory zircon handle", "tags": ["dawn", "native"]},
+ {"value": 37, "name": "shared texture memory DXGI shared handle", "tags": ["dawn", "native"]},
+ {"value": 38, "name": "shared texture memory D3D11 texture 2D", "tags": ["dawn", "native"]},
+ {"value": 39, "name": "shared texture memory IO surface", "tags": ["dawn", "native"]},
+ {"value": 40, "name": "shared texture memory EGL image", "tags": ["dawn", "native"]},
+ {"value": 41, "name": "shared fence vk semaphore opaque FD", "tags": ["dawn", "native"]},
+ {"value": 42, "name": "shared fence sync FD", "tags": ["dawn", "native"]},
+ {"value": 43, "name": "shared fence vk semaphore zircon handle", "tags": ["dawn", "native"]},
+ {"value": 44, "name": "shared fence DXGI shared handle", "tags": ["dawn", "native"]},
+ {"value": 45, "name": "shared fence MTL shared event", "tags": ["dawn", "native"]},
+ {"value": 46, "name": "shared buffer memory D3D12 resource", "tags": ["dawn", "native"]},
+ {"value": 47, "name": "static samplers", "tags": ["dawn"]},
+ {"value": 48, "name": "y cb cr vulkan samplers", "tags": ["dawn"]},
+ {"value": 49, "name": "shader module compilation options", "tags": ["dawn"]},
- {"value": 51, "name": "dawn load resolve texture", "tags": ["dawn"]},
- {"value": 52, "name": "dawn partial load resolve texture", "tags": ["dawn"]},
- {"value": 53, "name": "multi draw indirect", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-multi-draw-indirect'"},
- {"value": 54, "name": "dawn texel copy buffer row alignment", "tags": ["dawn"]},
- {"value": 55, "name": "flexible texture views", "tags": ["dawn"]},
- {"value": 56, "name": "chromium experimental subgroup matrix", "tags": ["dawn"]},
- {"value": 57, "name": "shared fence EGL sync", "tags": ["dawn", "native"]},
- {"value": 58, "name": "dawn device allocator control", "tags": ["dawn"]}
+ {"value": 50, "name": "dawn load resolve texture", "tags": ["dawn"]},
+ {"value": 51, "name": "dawn partial load resolve texture", "tags": ["dawn"]},
+ {"value": 52, "name": "multi draw indirect", "tags": ["dawn", "emscripten"], "jsrepr": "'chromium-experimental-multi-draw-indirect'"},
+ {"value": 53, "name": "dawn texel copy buffer row alignment", "tags": ["dawn"]},
+ {"value": 54, "name": "flexible texture views", "tags": ["dawn"]},
+ {"value": 55, "name": "chromium experimental subgroup matrix", "tags": ["dawn"]},
+ {"value": 56, "name": "shared fence EGL sync", "tags": ["dawn", "native"]},
+ {"value": 57, "name": "dawn device allocator control", "tags": ["dawn"]}
]
},
"filter mode": {
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp
index 58b245b..6be0557 100644
--- a/src/dawn/native/Adapter.cpp
+++ b/src/dawn/native/Adapter.cpp
@@ -337,17 +337,6 @@
DAWN_INVALID_IF(!result.success, "Invalid feature required: %s",
result.errorMessage.c_str());
}
- // Validate features dependency.
- // TODO(349125474): Decide if this validation is needed, see
- // https://github.com/gpuweb/gpuweb/issues/4734 for detail.
- if (requiredFeatureSet.count(wgpu::FeatureName::SubgroupsF16) > 0) {
- DAWN_INVALID_IF((requiredFeatureSet.count(wgpu::FeatureName::Subgroups) == 0),
- "Feature %s must be required together with feature %s.",
- wgpu::FeatureName::SubgroupsF16, wgpu::FeatureName::Subgroups);
- DAWN_INVALID_IF(requiredFeatureSet.count(wgpu::FeatureName::ShaderF16) == 0,
- "Feature %s must be required together with feature %s.",
- wgpu::FeatureName::SubgroupsF16, wgpu::FeatureName::ShaderF16);
- }
if (descriptor->requiredLimits != nullptr) {
CombinedLimits requiredLimits;
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index e6f0c63..6c264ac 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -1649,9 +1649,6 @@
if (mEnabledFeatures.IsEnabled(Feature::Subgroups)) {
mWGSLAllowedFeatures.extensions.insert(tint::wgsl::Extension::kSubgroups);
}
- if (mEnabledFeatures.IsEnabled(Feature::SubgroupsF16)) {
- mWGSLAllowedFeatures.extensions.insert(tint::wgsl::Extension::kSubgroupsF16);
- }
if (IsToggleEnabled(Toggle::AllowUnsafeAPIs)) {
mWGSLAllowedFeatures.extensions.insert(
tint::wgsl::Extension::kChromiumDisableUniformityAnalysis);
diff --git a/src/dawn/native/Features.cpp b/src/dawn/native/Features.cpp
index 0a79dea..438e46a 100644
--- a/src/dawn/native/Features.cpp
+++ b/src/dawn/native/Features.cpp
@@ -375,10 +375,6 @@
{"Supports the \"enable subgroups;\" directive in WGSL.",
"https://github.com/gpuweb/gpuweb/blob/main/proposals/subgroups.md",
FeatureInfo::FeatureState::Stable}},
- {Feature::SubgroupsF16,
- {"Supports the \"enable subgroups_f16;\" directive in WGSL (deprecated).",
- "https://github.com/gpuweb/gpuweb/blob/main/proposals/subgroups.md",
- FeatureInfo::FeatureState::Stable}},
{Feature::CoreFeaturesAndLimits,
{"Lifts all compatibility mode restrictions (features and limits) to core when enabled on a "
"device.",
diff --git a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
index ce5ca24..69e6cef 100644
--- a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
+++ b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
@@ -176,11 +176,9 @@
// ShaderF16 features require DXC version being 1.4 or higher, shader model supporting 6.2 or
// higher, and native supporting F16 shader ops.
- bool shaderF16Enabled = false;
if (GetBackend()->IsDXCAvailableAndVersionAtLeast(1, 4, 1, 4) &&
mDeviceInfo.highestSupportedShaderModel >= 62 && mDeviceInfo.supportsNative16BitShaderOps) {
EnableFeature(Feature::ShaderF16);
- shaderF16Enabled = true;
}
// The function subgroupBroadcast(f16) fails for some edge cases on intel gen-9 devices.
@@ -189,11 +187,6 @@
// Subgroups feature requires SM >= 6.0 and capabilities flags.
if (!kForceDisableSubgroups && GetBackend()->IsDXCAvailable() && mDeviceInfo.supportsWaveOps) {
EnableFeature(Feature::Subgroups);
- // D3D12 devices that support both native f16 and wave ops can support subgroups-f16.
- // TODO(crbug.com/380244620): Remove when 'subgroups_f16' has been fully deprecated.
- if (shaderF16Enabled) {
- EnableFeature(Feature::SubgroupsF16);
- }
}
D3D12_FEATURE_DATA_FORMAT_SUPPORT bgra8unormFormatInfo = {};
@@ -419,7 +412,6 @@
switch (feature) {
case wgpu::FeatureName::ShaderF16:
case wgpu::FeatureName::Subgroups:
- case wgpu::FeatureName::SubgroupsF16:
return FeatureValidationResult(
absl::StrFormat("Feature %s requires DXC for D3D12.", feature));
default:
@@ -428,9 +420,8 @@
}
// Validate applied shader version.
switch (feature) {
- // The feature `shader-f16` and `subgroups-f16` requires using shader model 6.2 or higher.
- case wgpu::FeatureName::ShaderF16:
- case wgpu::FeatureName::SubgroupsF16: {
+ // The feature `shader-f16` requires using shader model 6.2 or higher.
+ case wgpu::FeatureName::ShaderF16: {
if (!(GetAppliedShaderModelUnderToggles(toggles) >= 62)) {
return FeatureValidationResult(absl::StrFormat(
"Feature %s requires shader model 6.2 or higher for D3D12.", feature));
diff --git a/src/dawn/native/metal/PhysicalDeviceMTL.mm b/src/dawn/native/metal/PhysicalDeviceMTL.mm
index 3fd7a8c..95ad86d 100644
--- a/src/dawn/native/metal/PhysicalDeviceMTL.mm
+++ b/src/dawn/native/metal/PhysicalDeviceMTL.mm
@@ -675,8 +675,6 @@
if (!kForceDisableSubgroups && ([*mDevice supportsFamily:MTLGPUFamilyApple6] ||
[*mDevice supportsFamily:MTLGPUFamilyMac2])) {
EnableFeature(Feature::Subgroups);
- // TODO(crbug.com/380244620) remove SubgroupsF16
- EnableFeature(Feature::SubgroupsF16);
}
if ([*mDevice supportsFamily:MTLGPUFamilyApple7]) {
diff --git a/src/dawn/native/vulkan/DeviceVk.cpp b/src/dawn/native/vulkan/DeviceVk.cpp
index a56b32f..570c07da 100644
--- a/src/dawn/native/vulkan/DeviceVk.cpp
+++ b/src/dawn/native/vulkan/DeviceVk.cpp
@@ -532,12 +532,9 @@
}
// Set device feature for subgroups with f16 types.
- if (HasFeature(Feature::SubgroupsF16) ||
- (HasFeature(Feature::ShaderF16) && HasFeature(Feature::Subgroups))) {
+ if (HasFeature(Feature::ShaderF16) && HasFeature(Feature::Subgroups)) {
DAWN_ASSERT(usedKnobs.HasExt(DeviceExt::ShaderSubgroupExtendedTypes) &&
- mDeviceInfo.shaderSubgroupExtendedTypes.shaderSubgroupExtendedTypes ==
- VK_TRUE &&
- HasFeature(Feature::ShaderF16) && HasFeature(Feature::Subgroups));
+ mDeviceInfo.shaderSubgroupExtendedTypes.shaderSubgroupExtendedTypes == VK_TRUE);
usedKnobs.shaderSubgroupExtendedTypes = mDeviceInfo.shaderSubgroupExtendedTypes;
featuresChain.Add(&usedKnobs.shaderSubgroupExtendedTypes);
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
index 17ac8fc..cf1bcbb 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -410,7 +410,8 @@
// and quad bits, and
// 4. VK_EXT_subgroup_size_control extension is valid, and both subgroupSizeControl
// and computeFullSubgroups is TRUE in VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.
- if (!kForceDisableSubgroups && (mDeviceInfo.properties.apiVersion >= VK_API_VERSION_1_1) &&
+ const bool hasBaseSubgroupSupport =
+ (mDeviceInfo.properties.apiVersion >= VK_API_VERSION_1_1) &&
(mDeviceInfo.subgroupProperties.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT) &&
(mDeviceInfo.subgroupProperties.supportedStages & VK_SHADER_STAGE_FRAGMENT_BIT) &&
(mDeviceInfo.subgroupProperties.supportedOperations & VK_SUBGROUP_FEATURE_BASIC_BIT) &&
@@ -422,26 +423,18 @@
(mDeviceInfo.subgroupProperties.supportedOperations & VK_SUBGROUP_FEATURE_QUAD_BIT) &&
(mDeviceInfo.HasExt(DeviceExt::SubgroupSizeControl)) &&
(mDeviceInfo.subgroupSizeControlFeatures.subgroupSizeControl == VK_TRUE) &&
- (mDeviceInfo.subgroupSizeControlFeatures.computeFullSubgroups == VK_TRUE)) {
- if (shaderF16Enabled) {
- if (mDeviceInfo.shaderSubgroupExtendedTypes.shaderSubgroupExtendedTypes == VK_TRUE) {
- // Enable SubgroupsF16 feature if:
- // 1. Subgroups feature is enabled, and
- // 2. ShaderF16 feature is enabled, and
- // 3. shaderSubgroupExtendedTypes is TRUE in
- // VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.
- // TODO(crbug.com/380244620): Remove when 'subgroups_f16' has been fully deprecated.
- EnableFeature(Feature::SubgroupsF16);
- // If shader f16 is enable we only enable subgroups if we extended subgroup support.
- // This means there is a vary narrow number of devices (~4%) will not get subgroup
- // support due to the fact that they support shader f16 but not actually f16
- // operations in subgroups.
- EnableFeature(Feature::Subgroups);
- }
- } else {
- // Subgroups without extended type support (f16).
- EnableFeature(Feature::Subgroups);
- }
+ (mDeviceInfo.subgroupSizeControlFeatures.computeFullSubgroups == VK_TRUE);
+
+ // If shader f16 is enabled we only enable subgroups if we extended subgroup support.
+ // This means there is a vary narrow number of devices (~4%) will not get subgroup
+ // support due to the fact that they support shader f16 but not actually f16
+ // operations in subgroups.
+ const bool hasRequiredF16Support =
+ !shaderF16Enabled ||
+ (mDeviceInfo.shaderSubgroupExtendedTypes.shaderSubgroupExtendedTypes == VK_TRUE);
+
+ if (!kForceDisableSubgroups && hasBaseSubgroupSupport && hasRequiredF16Support) {
+ EnableFeature(Feature::Subgroups);
}
// Enable subgroup matrix if all of the following are true:
diff --git a/src/dawn/node/binding/Converter.cpp b/src/dawn/node/binding/Converter.cpp
index 3c2b5e0..9d9b66e 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1624,7 +1624,6 @@
case wgpu::FeatureName::SharedTextureMemoryVkDedicatedAllocation:
case wgpu::FeatureName::SharedTextureMemoryZirconHandle:
case wgpu::FeatureName::StaticSamplers:
- case wgpu::FeatureName::SubgroupsF16:
case wgpu::FeatureName::TextureCompressionASTCSliced3D:
case wgpu::FeatureName::TransientAttachments:
case wgpu::FeatureName::YCbCrVulkanSamplers:
diff --git a/src/dawn/tests/end2end/SubgroupsTests.cpp b/src/dawn/tests/end2end/SubgroupsTests.cpp
index 620f320..e8b0423 100644
--- a/src/dawn/tests/end2end/SubgroupsTests.cpp
+++ b/src/dawn/tests/end2end/SubgroupsTests.cpp
@@ -196,16 +196,6 @@
mRequiredSubgroupsFeature = true;
requiredFeatures.push_back(wgpu::FeatureName::Subgroups);
}
- if (SupportsFeatures({wgpu::FeatureName::SubgroupsF16})) {
- // SubgroupsF16 feature could be supported only if ShaderF16 and Subgroups features
- // are also supported.
- DAWN_ASSERT(mRequiredShaderF16Feature && mRequiredSubgroupsFeature);
- mRequiredSubgroupsF16Feature = true;
- requiredFeatures.push_back(wgpu::FeatureName::SubgroupsF16);
- }
-
- mSubgroupsF16SupportedByBackend = SupportsFeatures({wgpu::FeatureName::SubgroupsF16});
-
return requiredFeatures;
}
@@ -217,23 +207,15 @@
if (mRequiredSubgroupsFeature) {
code << "enable subgroups;";
}
- if (mRequiredSubgroupsF16Feature) {
- code << "enable subgroups_f16;";
- }
return code;
}
bool IsShaderF16EnabledInWGSL() const { return mRequiredShaderF16Feature; }
bool IsSubgroupsEnabledInWGSL() const { return mRequiredSubgroupsFeature; }
- bool IsSubgroupsF16EnabledInWGSL() const { return mRequiredSubgroupsF16Feature; }
- bool IsSubgroupsF16SupportedByBackend() const { return mSubgroupsF16SupportedByBackend; }
private:
bool mRequiredShaderF16Feature = false;
bool mRequiredSubgroupsFeature = false;
- bool mRequiredSubgroupsF16Feature = false;
- // Indicates that backend actually supports using subgroups functions with f16 types.
- bool mSubgroupsF16SupportedByBackend = false;
};
class SubgroupsShaderTests : public SubgroupsTestsBase<AdapterTestParam> {
@@ -714,12 +696,9 @@
// and 256. Note that although we assume invocation 0 of the workgroup has a subgroup_id of 0 in its
// subgroup, we don't assume any other particular subgroups layout property.
TEST_P(SubgroupsBroadcastTests, SubgroupBroadcast) {
+ DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsEnabledInWGSL());
if (GetParam().mBroadcastType == BroadcastType::F16) {
- DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsF16SupportedByBackend());
- DAWN_ASSERT(IsShaderF16EnabledInWGSL() && IsSubgroupsEnabledInWGSL() &&
- IsSubgroupsF16EnabledInWGSL());
- } else {
- DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsEnabledInWGSL());
+ DAWN_TEST_UNSUPPORTED_IF(!IsShaderF16EnabledInWGSL());
}
for (uint32_t workgroupSize : {1, 2, 3, 4, 7, 8, 15, 16, 31, 32, 63, 64, 127, 128, 255, 256}) {
@@ -907,8 +886,9 @@
};
TEST_P(SubgroupsShaderInclusiveTest, InclusiveExecution) {
+ DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsEnabledInWGSL());
if (GetParam().mSubgroupOpDataType == SubgroupOpDataType::F16) {
- DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsF16SupportedByBackend());
+ DAWN_TEST_UNSUPPORTED_IF(!IsShaderF16EnabledInWGSL());
// TODO(361330160): The f16 implementation does not seem produce correct values in
// execution. It is not clear if this is due to something wrong with the polyfill or the
@@ -919,11 +899,6 @@
// TODO(361330160): Also fails on MacBookPro16,1 with AMD Radeon Pro 5300M
DAWN_SUPPRESS_TEST_IF(gpu_info::IsAMDRDNA1(GetParam().adapterProperties.vendorID,
GetParam().adapterProperties.deviceID));
-
- DAWN_ASSERT(IsShaderF16EnabledInWGSL() && IsSubgroupsEnabledInWGSL() &&
- IsSubgroupsF16EnabledInWGSL());
- } else {
- DAWN_TEST_UNSUPPORTED_IF(!IsSubgroupsEnabledInWGSL());
}
for (uint32_t workgroupSize : {1, 2, 3, 4, 7, 8, 15, 16, 31, 32, 63, 64, 127, 128, 255, 256}) {
diff --git a/src/dawn/tests/perf_tests/MatrixVectorMultiplyPerf.cpp b/src/dawn/tests/perf_tests/MatrixVectorMultiplyPerf.cpp
index dfba797..3d18958 100644
--- a/src/dawn/tests/perf_tests/MatrixVectorMultiplyPerf.cpp
+++ b/src/dawn/tests/perf_tests/MatrixVectorMultiplyPerf.cpp
@@ -98,7 +98,6 @@
std::vector<wgpu::FeatureName> GetRequiredFeatures() override {
mUsingF16 = false;
mUsingSubgroups = false;
- mUsingSubgroupsF16 = false;
mAllFeaturesSupported = true;
auto requirements =
@@ -117,10 +116,6 @@
if (GetParam().mImpl == KernelImplementation::Subgroup) {
mUsingSubgroups = true;
requireFeature(wgpu::FeatureName::Subgroups);
- if (mUsingF16) {
- mUsingSubgroupsF16 = true;
- requireFeature(wgpu::FeatureName::SubgroupsF16);
- }
}
return requirements;
}
@@ -153,7 +148,6 @@
bool mUsingF16;
bool mUsingSubgroups;
- bool mUsingSubgroupsF16;
bool mAllFeaturesSupported;
};
@@ -177,7 +171,7 @@
DAWN_TEST_UNSUPPORTED_IF(!mAllFeaturesSupported);
// D3D12 device must be using DXC to support subgroups feature.
- DAWN_ASSERT(!(mUsingSubgroups || mUsingSubgroupsF16) || !IsD3D12() || IsDXC());
+ DAWN_ASSERT(!mUsingSubgroups || !IsD3D12() || IsDXC());
wgpu::BufferDescriptor bufferDesc;
bufferDesc.usage = wgpu::BufferUsage::Storage;
diff --git a/src/dawn/tests/unittests/FeatureTests.cpp b/src/dawn/tests/unittests/FeatureTests.cpp
index 293fcab..3770ca5 100644
--- a/src/dawn/tests/unittests/FeatureTests.cpp
+++ b/src/dawn/tests/unittests/FeatureTests.cpp
@@ -123,13 +123,7 @@
// For a given feature, returns a set containing the feature and its depending features if any to
// ensure creating device with these features can success
std::unordered_set<wgpu::FeatureName> FeatureAndDependenciesSet(wgpu::FeatureName feature) {
- switch (feature) {
- case wgpu::FeatureName::SubgroupsF16:
- return {wgpu::FeatureName::SubgroupsF16, wgpu::FeatureName::ShaderF16,
- wgpu::FeatureName::Subgroups};
- default:
- return {feature};
- }
+ return {feature};
}
bool IsExperimental(wgpu::FeatureName feature) {
diff --git a/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp b/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
index 83114fb..a3f34bd 100644
--- a/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
@@ -224,62 +224,6 @@
mRequestDeviceCallback.Callback());
}
-// Test that it is an error to request limits with an invalid chained struct
-TEST_F(RequestDeviceValidationTest, InvalidChainedStruct) {
- wgpu::ChainedStructOut chain = {};
- wgpu::Limits limits = {};
- limits.nextInChain = &chain;
-
- wgpu::DeviceDescriptor descriptor;
- descriptor.requiredLimits = &limits;
- EXPECT_CALL(mRequestDeviceCallback,
- Call(wgpu::RequestDeviceStatus::Error, IsNull(), NonEmptySizedString()))
- .Times(1);
- adapter.RequestDevice(&descriptor, wgpu::CallbackMode::AllowSpontaneous,
- mRequestDeviceCallback.Callback());
-}
-
-// Test that requiring subroups-f16 feature requires subgroups and shader-f16 features as well
-// TODO(349125474): Decide if this validation is needed, see
-// https://github.com/gpuweb/gpuweb/issues/4734 for detail.
-TEST_F(RequestDeviceValidationTest, SubgroupsF16FeatureDependency) {
- for (bool requireShaderF16 : {false, true}) {
- for (bool requireSubgroups : {false, true}) {
- std::vector<wgpu::FeatureName> features;
- if (requireShaderF16) {
- features.push_back(wgpu::FeatureName::ShaderF16);
- }
- if (requireSubgroups) {
- features.push_back(wgpu::FeatureName::Subgroups);
- }
- features.push_back(wgpu::FeatureName::SubgroupsF16);
-
- wgpu::DeviceDescriptor descriptor;
- descriptor.requiredFeatureCount = features.size();
- descriptor.requiredFeatures = features.data();
-
- // Device request with subgroups-f16 feature can only success if shader-f16 feature
- // and subgroups features are required as well.
- const bool isSuccess = requireSubgroups && requireShaderF16;
-
- if (isSuccess) {
- EXPECT_CALL(mRequestDeviceCallback,
- Call(wgpu::RequestDeviceStatus::Success, NotNull(), EmptySizedString()))
- .Times(1);
- } else {
- EXPECT_CALL(mRequestDeviceCallback,
- Call(wgpu::RequestDeviceStatus::Error, IsNull(), NonEmptySizedString()))
- .Times(1);
- }
-
- EXPECT_DEPRECATION_WARNINGS(
- adapter.RequestDevice(&descriptor, wgpu::CallbackMode::AllowSpontaneous,
- mRequestDeviceCallback.Callback()),
- GetDeviceCreationDeprecationWarningExpectation(descriptor));
- }
- }
-}
-
class DeviceTickValidationTest : public ValidationTest {};
// Device destroy before API-level Tick should always result in no-op and false.
diff --git a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
index 8f8658b..1962f85 100644
--- a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
@@ -822,7 +822,6 @@
{"clip_distances", false, {"clip-distances"}, {}},
{"dual_source_blending", false, {"dual-source-blending"}, {}},
{"subgroups", false, {"subgroups"}, {}},
- {"subgroups_f16", false, {"shader-f16", "subgroups", "subgroups-f16"}, {"f16", "subgroups"}},
{"chromium_experimental_pixel_local", true, {"pixel-local-storage-coherent"}, {}},
{"chromium_disable_uniformity_analysis", true, {}, {}},
{"chromium_internal_graphite", true, {}, {}},
diff --git a/src/dawn/wire/SupportedFeatures.cpp b/src/dawn/wire/SupportedFeatures.cpp
index 8824627..33c75bf 100644
--- a/src/dawn/wire/SupportedFeatures.cpp
+++ b/src/dawn/wire/SupportedFeatures.cpp
@@ -112,7 +112,6 @@
case WGPUFeatureName_DawnLoadResolveTexture:
case WGPUFeatureName_DawnPartialLoadResolveTexture:
case WGPUFeatureName_Subgroups:
- case WGPUFeatureName_SubgroupsF16:
case WGPUFeatureName_ClipDistances:
case WGPUFeatureName_ChromiumExperimentalImmediateData:
case WGPUFeatureName_DawnTexelCopyBufferRowAlignment:
diff --git a/src/tint/cmd/bench/BUILD.bazel b/src/tint/cmd/bench/BUILD.bazel
index 358ae92..816c8a6 100644
--- a/src/tint/cmd/bench/BUILD.bazel
+++ b/src/tint/cmd/bench/BUILD.bazel
@@ -99,7 +99,6 @@
"//src/tint/lang/wgsl/ast",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/sem",
- "//src/tint/lang/wgsl:bench",
"//src/tint/utils",
"//src/tint/utils/containers",
"//src/tint/utils/diagnostic",
diff --git a/src/tint/cmd/bench/BUILD.cmake b/src/tint/cmd/bench/BUILD.cmake
index 470a020..4dc16d6 100644
--- a/src/tint/cmd/bench/BUILD.cmake
+++ b/src/tint/cmd/bench/BUILD.cmake
@@ -58,7 +58,6 @@
tint_lang_wgsl_ast
tint_lang_wgsl_program
tint_lang_wgsl_sem
- tint_lang_wgsl_bench
tint_utils
tint_utils_containers
tint_utils_diagnostic
diff --git a/src/tint/cmd/bench/BUILD.gn b/src/tint/cmd/bench/BUILD.gn
index 0594f4a..35ca535 100644
--- a/src/tint/cmd/bench/BUILD.gn
+++ b/src/tint/cmd/bench/BUILD.gn
@@ -104,7 +104,6 @@
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
- "${tint_src_dir}/lang/wgsl:bench",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/sem",
diff --git a/src/tint/cmd/bench/extension_bench.cc b/src/tint/cmd/bench/extension_bench.cc
index f56cff5..ed317c7 100644
--- a/src/tint/cmd/bench/extension_bench.cc
+++ b/src/tint/cmd/bench/extension_bench.cc
@@ -122,13 +122,6 @@
"subgr6u33O",
"s96grQttupoo",
"sugro66ps",
- "ubgrxupszzO166",
- "suyygroups_f16",
- "sHHbgroups_Z",
- "subgroups_f16",
- "ubgWWou44q_f16",
- "sOObgroup_f16",
- "suboruph_Y16",
};
for (auto _ : state) {
for (auto* str : kStrings) {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 39ff80a..85d3eef 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -421,7 +421,6 @@
"subgroup_size"
"subgroup_uniformity"
"subgroups"
-"subgroups_f16"
"switch"
"tan"
"tanh"
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
index fb7b7df..d9caefe 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
@@ -554,7 +554,6 @@
wgsl::Extension::kF16,
wgsl::Extension::kDualSourceBlending,
wgsl::Extension::kSubgroups,
- wgsl::Extension::kSubgroupsF16,
})) {
return false;
}
diff --git a/src/tint/lang/wgsl/BUILD.bazel b/src/tint/lang/wgsl/BUILD.bazel
index bf28d37..ab45c5d 100644
--- a/src/tint/lang/wgsl/BUILD.bazel
+++ b/src/tint/lang/wgsl/BUILD.bazel
@@ -133,26 +133,6 @@
copts = COPTS,
visibility = ["//visibility:public"],
)
-cc_library(
- name = "bench",
- alwayslink = True,
- srcs = [
- "extension_bench.cc",
- ],
- deps = [
- "//src/tint/lang/wgsl",
- "//src/tint/utils/containers",
- "//src/tint/utils/ice",
- "//src/tint/utils/macros",
- "//src/tint/utils/math",
- "//src/tint/utils/memory",
- "//src/tint/utils/rtti",
- "@benchmark",
- "//src/utils",
- ],
- copts = COPTS,
- visibility = ["//visibility:public"],
-)
alias(
name = "tint_build_wgsl_reader",
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index cfa73cc..c4baf01 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -143,26 +143,3 @@
tint_lang_wgsl_writer
)
endif(TINT_BUILD_WGSL_WRITER)
-
-################################################################################
-# Target: tint_lang_wgsl_bench
-# Kind: bench
-################################################################################
-tint_add_target(tint_lang_wgsl_bench bench
- lang/wgsl/extension_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_wgsl_bench bench
- tint_lang_wgsl
- tint_utils_containers
- tint_utils_ice
- tint_utils_macros
- tint_utils_math
- tint_utils_memory
- tint_utils_rtti
-)
-
-tint_target_add_external_dependencies(tint_lang_wgsl_bench bench
- "google-benchmark"
- "src_utils"
-)
diff --git a/src/tint/lang/wgsl/BUILD.gn b/src/tint/lang/wgsl/BUILD.gn
index d993a9d..3e27659 100644
--- a/src/tint/lang/wgsl/BUILD.gn
+++ b/src/tint/lang/wgsl/BUILD.gn
@@ -126,19 +126,3 @@
}
}
}
-if (tint_build_benchmarks) {
- tint_benchmarks_source_set("bench") {
- sources = [ "extension_bench.cc" ]
- deps = [
- "${dawn_root}/src/utils:utils",
- "${tint_src_dir}:google_benchmark",
- "${tint_src_dir}/lang/wgsl",
- "${tint_src_dir}/utils/containers",
- "${tint_src_dir}/utils/ice",
- "${tint_src_dir}/utils/macros",
- "${tint_src_dir}/utils/math",
- "${tint_src_dir}/utils/memory",
- "${tint_src_dir}/utils/rtti",
- ]
- }
-}
diff --git a/src/tint/lang/wgsl/extension.cc b/src/tint/lang/wgsl/extension.cc
index c3cd9ca..06c9696 100644
--- a/src/tint/lang/wgsl/extension.cc
+++ b/src/tint/lang/wgsl/extension.cc
@@ -75,9 +75,6 @@
if (str == "subgroups") {
return Extension::kSubgroups;
}
- if (str == "subgroups_f16") {
- return Extension::kSubgroupsF16;
- }
return Extension::kUndefined;
}
@@ -107,8 +104,6 @@
return "f16";
case Extension::kSubgroups:
return "subgroups";
- case Extension::kSubgroupsF16:
- return "subgroups_f16";
}
return "<unknown>";
}
diff --git a/src/tint/lang/wgsl/extension.h b/src/tint/lang/wgsl/extension.h
index 771bfc5..46f6d3c 100644
--- a/src/tint/lang/wgsl/extension.h
+++ b/src/tint/lang/wgsl/extension.h
@@ -57,7 +57,6 @@
kDualSourceBlending,
kF16,
kSubgroups,
- kSubgroupsF16,
};
/// @param value the enum value
@@ -89,7 +88,6 @@
"dual_source_blending",
"f16",
"subgroups",
- "subgroups_f16",
};
/// All extensions
@@ -105,7 +103,6 @@
Extension::kDualSourceBlending,
Extension::kF16,
Extension::kSubgroups,
- Extension::kSubgroupsF16,
};
/// A unique vector of extensions
diff --git a/src/tint/lang/wgsl/extension_bench.cc b/src/tint/lang/wgsl/extension_bench.cc
deleted file mode 100644
index 2f8861d..0000000
--- a/src/tint/lang/wgsl/extension_bench.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2022 The Dawn & Tint Authors
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this
-// list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the following disclaimer in the documentation
-// and/or other materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-////////////////////////////////////////////////////////////////////////////////
-// File generated by 'tools/src/cmd/gen' using the template:
-// src/tint/lang/wgsl/extension_bench.cc.tmpl
-//
-// To regenerate run: './tools/run gen'
-//
-// Do not modify this file directly
-////////////////////////////////////////////////////////////////////////////////
-
-#include "src/tint/lang/wgsl/extension.h"
-
-#include <array>
-
-#include "benchmark/benchmark.h"
-
-namespace tint::wgsl {
-namespace {
-
-void ExtensionParser(::benchmark::State& state) {
- const char* kStrings[] = {
- "chromium_disableuniformiccy_analysis",
- "chromil3_disable_unifority_analss",
- "chromium_disable_Vniformity_analysis",
- "chromium_disable_uniformity_analysis",
- "chromium_dis1ble_uniformity_analysis",
- "chromium_qqisable_unifomity_anaJysis",
- "chrollium_disable_uniformity_analysi77",
- "cqqromium_eppperimental_framebuffe_fetcHH",
- "chrmium_experimvntal_frcmebufer_ftch",
- "chromium_expebimental_framGbufer_fetch",
- "chromium_experimental_framebuffer_fetch",
- "chromium_experimental_vramebuffeii_fetch",
- "chro8WWum_experimental_framebuffer_fetch",
- "chromium_eperimenxxMl_framebuffer_fetch",
- "chromum_experimental_pixeX_loggal",
- "chromium_expVrXmntal_ixel_local",
- "3hromium_experimental_pixel_local",
- "chromium_experimental_pixel_local",
- "chromium_eEperimental_pixel_local",
- "chTTomiu_experimentaPP_pixel_local",
- "cxxromium_expddrimenal_pixel_local",
- "c44romium_experimental_push_constant",
- "chromium_experimental_pSSsVV_constant",
- "chrom22Rm_experimental_pushRonstant",
- "chromium_experimental_push_constant",
- "chromium_exp9rimFntal_ush_constant",
- "chrmium_experimental_push_constant",
- "cOOromium_experiVeHtal_puh_conRRtant",
- "chromium_eyperimental_subgoup_matrix",
- "Ghromium_experrim77nllal_subgnnoup_matrix",
- "ch4omium_experimental00subgroup_matrix",
- "chromium_experimental_subgroup_matrix",
- "chromium_exeimoontal_subgroup_atrix",
- "chromium_experimnal_subgroup_mazzrix",
- "chro11ium_experienial_subgrppup_matrix",
- "chXXomium_internal_graphite",
- "chromi55m_internnal_gra99hiIIe",
- "chSSomiuY_internal_aarHHphrrte",
- "chromium_internal_graphite",
- "kkhromium_nternal_rahHte",
- "chromium_nRegnaj_graphite",
- "chromium_ntebnal_gaphite",
- "chromium_internal_input_atjachments",
- "chromium_internal_inpt_attachments",
- "chromium_nteral_iqput_attachments",
- "chromium_internal_input_attachments",
- "chromium_internal_input_aNNtachents",
- "chromium_internalinpt_attavvhments",
- "chromium_internal_inut_attacQQments",
- "chromirm_intenal_rfflaxed_unifrm_layout",
- "chromium_internal_jelaxed_uniform_layout",
- "chromium_interna_relNNxed_uwwiform_lay82t",
- "chromium_internal_relaxed_uniform_layout",
- "chromium_internal_relaxed_uniform_layut",
- "chromium_internal_relaxed_rrniform_layout",
- "chromium_internal_relaxedGuniform_layout",
- "clip_distanceFF",
- "cEipdtances",
- "cli_rristances",
- "clip_distances",
- "lip_distanes",
- "DXp_diJJtances",
- "cl8pdistane",
- "dul_okrc_blen11ing",
- "dua_source_blending",
- "duJl_source_blendig",
- "dual_source_blending",
- "dual_source_clending",
- "dual_sOurce_blending",
- "dualKKs__urce_blttvnding",
- "xx8",
- "__F",
- "f1q",
- "f16",
- "331O",
- "ftt6QQ",
- "666",
- "zzxbO6rops",
- "subgyyoups",
- "HHugroZs",
- "subgroups",
- "sWW44roupq",
- "sOObgoups",
- "sbgroYps",
- "subroups_f",
- "suFgoups_f16",
- "subgowps_f16",
- "subgroups_f16",
- "suffgKups_f6",
- "KKubgroqps_f16",
- "subFroup3mmf16",
- };
- for (auto _ : state) {
- for (auto* str : kStrings) {
- auto result = ParseExtension(str);
- benchmark::DoNotOptimize(result);
- }
- }
-} // NOLINT(readability/fn_size)
-
-BENCHMARK(ExtensionParser);
-
-} // namespace
-} // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/extension_test.cc b/src/tint/lang/wgsl/extension_test.cc
index 7bc4fa3..9434d4f 100644
--- a/src/tint/lang/wgsl/extension_test.cc
+++ b/src/tint/lang/wgsl/extension_test.cc
@@ -68,7 +68,6 @@
{"dual_source_blending", Extension::kDualSourceBlending},
{"f16", Extension::kF16},
{"subgroups", Extension::kSubgroups},
- {"subgroups_f16", Extension::kSubgroupsF16},
};
static constexpr Case kInvalidCases[] = {
@@ -105,9 +104,6 @@
{"skkkgroups", Extension::kUndefined},
{"siibgrop", Extension::kUndefined},
{"subgroupXX", Extension::kUndefined},
- {"subII9rnn55ps_f16", Extension::kUndefined},
- {"YubHHrouaas_SSr16", Extension::kUndefined},
- {"subgupkkHf1", Extension::kUndefined},
};
using ExtensionParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
index 8080b15..5c72205 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -175,7 +175,7 @@
// Error when unknown extension found
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -189,7 +189,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -203,7 +203,7 @@
// Error when unknown extension found
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -251,7 +251,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -262,7 +262,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -274,7 +274,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups', 'subgroups_f16')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
diff --git a/src/tint/lang/wgsl/resolver/builtin_validation_test.cc b/src/tint/lang/wgsl/resolver/builtin_validation_test.cc
index 0b603a0..9b82b58 100644
--- a/src/tint/lang/wgsl/resolver/builtin_validation_test.cc
+++ b/src/tint/lang/wgsl/resolver/builtin_validation_test.cc
@@ -987,7 +987,7 @@
EXPECT_TRUE(r()->Resolve());
}
-TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithoutSubgroupsF16Extension_F16) {
+TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithExtension_F16) {
// enable f16;
// enable subgroups;
// fn func -> f16 { return subgroupBroadcast(1.h,0); }
@@ -1016,7 +1016,6 @@
}
TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithoutShaderF16Extension_F16) {
- // enable f16;
// fn func -> f16 { return subgroupBroadcast(1.h,0); }
Enable(wgsl::Extension::kSubgroups);
Func("func", tint::Empty, ty.f16(),
@@ -1027,39 +1026,6 @@
EXPECT_EQ(r()->error(), R"(error: 'f16' type used without 'f16' extension enabled)");
}
-TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithSubgroupsF16WithoutShaderF16Extension) {
- // enable f16;
- // fn func -> f16 { return subgroupBroadcast(1.h,0); }
- Enable(wgsl::Extension::kSubgroups);
- Enable(wgsl::Extension::kSubgroupsF16);
- Func("func", tint::Empty, ty.f16(),
- Vector{
- Return(Call(Source{{12, 34}}, "subgroupBroadcast", 1_h, 0_u)),
- });
- EXPECT_FALSE(r()->Resolve());
- EXPECT_EQ(r()->error(),
- R"(error: 'f16' type used without 'f16' extension enabled
-error: extension 'subgroups_f16' cannot be used without extension 'f16')");
-}
-
-TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithExtensions_F16) {
- // enable f16;
- // enable subgroups;
- // enable subgroups_f16;
- // fn func -> f16 { return subgroupBroadcast(1.h,0); }
- Enable(wgsl::Extension::kF16);
- Enable(wgsl::Extension::kSubgroups);
- // TODO(crbug.com/380244620): Remove when 'subgroups_f16' has been fully deprecated.
- Enable(wgsl::Extension::kSubgroupsF16);
-
- Func("func", tint::Empty, ty.f16(),
- Vector{
- Return(Call("subgroupBroadcast", 1_h, 0_u)),
- });
-
- EXPECT_TRUE(r()->Resolve());
-}
-
TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithoutExtension_VecF16) {
// enable f16;
// enable subgroups;
@@ -1074,15 +1040,12 @@
EXPECT_TRUE(r()->Resolve());
}
-TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithExtensions_VecF16) {
+TEST_F(ResolverBuiltinValidationTest, SubgroupBroadcastWithExtension_VecF16) {
// enable f16;
// enable subgroups;
- // enable subgroups_f16;
// fn func -> vec4<f16> { return subgroupBroadcast(vec4(1.h),0); }
Enable(wgsl::Extension::kF16);
Enable(wgsl::Extension::kSubgroups);
- // TODO(crbug.com/380244620): Remove when 'subgroups_f16' has been fully deprecated.
- Enable(wgsl::Extension::kSubgroupsF16);
Func("func", tint::Empty, ty.vec4<f16>(),
Vector{
diff --git a/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc b/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
index 3fa8e4d..440633f 100644
--- a/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
+++ b/src/tint/lang/wgsl/resolver/subgroups_extension_test.cc
@@ -38,26 +38,6 @@
using ResolverSubgroupsExtensionTest = ResolverTest;
-// Enabling subgroups_f16 without enabling subgroups should fail.
-TEST_F(ResolverSubgroupsExtensionTest, UseSubgroupsF16WithoutSubgroups) {
- Enable(wgsl::Extension::kF16);
- Enable(wgsl::Extension::kSubgroupsF16);
-
- EXPECT_FALSE(r()->Resolve());
- EXPECT_EQ(r()->error(),
- R"(error: extension 'subgroups_f16' cannot be used without extension 'subgroups')");
-}
-
-// Enabling subgroups_f16 without enabling f16 should fail.
-TEST_F(ResolverSubgroupsExtensionTest, UseSubgroupsF16WithoutF16) {
- Enable(wgsl::Extension::kSubgroups);
- Enable(wgsl::Extension::kSubgroupsF16);
-
- EXPECT_FALSE(r()->Resolve());
- EXPECT_EQ(r()->error(),
- R"(error: extension 'subgroups_f16' cannot be used without extension 'f16')");
-}
-
// Using a subgroup_size builtin attribute without subgroups enabled should fail.
TEST_F(ResolverSubgroupsExtensionTest, UseSubgroupSizeAttribWithoutExtensionError) {
Structure("Inputs",
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 8a05a68..eaa3576 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -286,21 +286,6 @@
}
}
- if (enabled_extensions_.Contains(wgsl::Extension::kSubgroupsF16)) {
- if (!enabled_extensions_.Contains(wgsl::Extension::kSubgroups)) {
- AddError(source_of(wgsl::Extension::kSubgroupsF16))
- << "extension " << style::Code("subgroups_f16")
- << " cannot be used without extension " << style::Code("subgroups");
- return false;
- }
- if (!enabled_extensions_.Contains(wgsl::Extension::kF16)) {
- AddError(source_of(wgsl::Extension::kSubgroupsF16))
- << "extension " << style::Code("subgroups_f16")
- << " cannot be used without extension " << style::Code("f16");
- return false;
- }
- }
-
return true;
}
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 257c4b0..2bd1e29 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -79,8 +79,6 @@
dual_source_blending
// WGSL Extension "subgroups"
subgroups
- // WGSL Extension "subgroups_f16"
- subgroups_f16
// A Chromium-specific extension for disabling uniformity analysis.
chromium_disable_uniformity_analysis
diff --git a/test/tint/builtins/gen/gen.wgsl.tmpl b/test/tint/builtins/gen/gen.wgsl.tmpl
index 34ff24a..798f45d 100644
--- a/test/tint/builtins/gen/gen.wgsl.tmpl
+++ b/test/tint/builtins/gen/gen.wgsl.tmpl
@@ -297,7 +297,7 @@
{{- /* Emit 'enable chromium_experimental_subgroup_matrix' if required */ -}}
{{- if (HasPrefix $builtin_name "subgroupMatrix")}}
enable chromium_experimental_subgroup_matrix;
-{{/* Emit 'enable subgroups' and 'enable subgroups_f16' if required */ -}}
+{{/* Emit 'enable subgroups' if required */ -}}
{{- else if or (HasPrefix $builtin_name "subgroup") (HasPrefix $builtin_name "quad")}}
enable subgroups;
{{ end -}}