Updated BlendFactor enum to match spec

Several of the enum names have changed recently. Update them to match
the spec and mark the older ones as deprecated.

BUG: chromium:1199057
Change-Id: I7a29588dd18b8fb738773c2478b173093f2aa834
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47860
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/RenderPipeline.cpp b/src/dawn_native/RenderPipeline.cpp
index eb30623..c09bdfb 100644
--- a/src/dawn_native/RenderPipeline.cpp
+++ b/src/dawn_native/RenderPipeline.cpp
@@ -211,7 +211,26 @@
             return {};
         }
 
-        MaybeError ValidateBlendState(const BlendState* descriptor) {
+        static constexpr wgpu::BlendFactor kFirstDeprecatedBlendFactor =
+            wgpu::BlendFactor::SrcColor;
+        static constexpr uint32_t kDeprecatedBlendFactorOffset = 100;
+
+        bool IsDeprecatedBlendFactor(wgpu::BlendFactor blendFactor) {
+            return blendFactor >= kFirstDeprecatedBlendFactor;
+        }
+
+        wgpu::BlendFactor NormalizeBlendFactor(wgpu::BlendFactor blendFactor) {
+            // If the specified format is from the deprecated range return the corresponding
+            // non-deprecated format.
+            if (blendFactor >= kFirstDeprecatedBlendFactor) {
+                uint32_t blendFactorValue = static_cast<uint32_t>(blendFactor);
+                return static_cast<wgpu::BlendFactor>(blendFactorValue -
+                                                      kDeprecatedBlendFactorOffset);
+            }
+            return blendFactor;
+        }
+
+        MaybeError ValidateBlendState(DeviceBase* device, const BlendState* descriptor) {
             DAWN_TRY(ValidateBlendOperation(descriptor->alpha.operation));
             DAWN_TRY(ValidateBlendFactor(descriptor->alpha.srcFactor));
             DAWN_TRY(ValidateBlendFactor(descriptor->alpha.dstFactor));
@@ -219,10 +238,18 @@
             DAWN_TRY(ValidateBlendFactor(descriptor->color.srcFactor));
             DAWN_TRY(ValidateBlendFactor(descriptor->color.dstFactor));
 
+            if (IsDeprecatedBlendFactor(descriptor->alpha.srcFactor) ||
+                IsDeprecatedBlendFactor(descriptor->alpha.dstFactor) ||
+                IsDeprecatedBlendFactor(descriptor->color.srcFactor) ||
+                IsDeprecatedBlendFactor(descriptor->color.dstFactor)) {
+                device->EmitDeprecationWarning(
+                    "Blend factor enums have changed and the old enums will be removed soon.");
+            }
+
             return {};
         }
 
-        MaybeError ValidateColorTargetState(const DeviceBase* device,
+        MaybeError ValidateColorTargetState(DeviceBase* device,
                                             const ColorTargetState* descriptor,
                                             bool fragmentWritten,
                                             wgpu::TextureComponentType fragmentOutputBaseType) {
@@ -231,7 +258,7 @@
             }
 
             if (descriptor->blend) {
-                DAWN_TRY(ValidateBlendState(descriptor->blend));
+                DAWN_TRY(ValidateBlendState(device, descriptor->blend));
             }
 
             DAWN_TRY(ValidateColorWriteMask(descriptor->writeMask));
@@ -440,6 +467,14 @@
             if (target->blend != nullptr) {
                 mTargetBlend[i] = *target->blend;
                 mTargets[i].blend = &mTargetBlend[i];
+                mTargetBlend[i].alpha.srcFactor =
+                    NormalizeBlendFactor(mTargetBlend[i].alpha.srcFactor);
+                mTargetBlend[i].alpha.dstFactor =
+                    NormalizeBlendFactor(mTargetBlend[i].alpha.dstFactor);
+                mTargetBlend[i].color.srcFactor =
+                    NormalizeBlendFactor(mTargetBlend[i].color.srcFactor);
+                mTargetBlend[i].color.dstFactor =
+                    NormalizeBlendFactor(mTargetBlend[i].color.dstFactor);
             }
         }
 
diff --git a/src/dawn_native/d3d12/RenderPipelineD3D12.cpp b/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
index 3aea032..7571195 100644
--- a/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
+++ b/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
@@ -151,17 +151,17 @@
                     return D3D12_BLEND_ZERO;
                 case wgpu::BlendFactor::One:
                     return D3D12_BLEND_ONE;
-                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::Src:
                     return D3D12_BLEND_SRC_COLOR;
-                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::OneMinusSrc:
                     return D3D12_BLEND_INV_SRC_COLOR;
                 case wgpu::BlendFactor::SrcAlpha:
                     return D3D12_BLEND_SRC_ALPHA;
                 case wgpu::BlendFactor::OneMinusSrcAlpha:
                     return D3D12_BLEND_INV_SRC_ALPHA;
-                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::Dst:
                     return D3D12_BLEND_DEST_COLOR;
-                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::OneMinusDst:
                     return D3D12_BLEND_INV_DEST_COLOR;
                 case wgpu::BlendFactor::DstAlpha:
                     return D3D12_BLEND_DEST_ALPHA;
@@ -169,10 +169,39 @@
                     return D3D12_BLEND_INV_DEST_ALPHA;
                 case wgpu::BlendFactor::SrcAlphaSaturated:
                     return D3D12_BLEND_SRC_ALPHA_SAT;
-                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::Constant:
                     return D3D12_BLEND_BLEND_FACTOR;
-                case wgpu::BlendFactor::OneMinusBlendColor:
+                case wgpu::BlendFactor::OneMinusConstant:
                     return D3D12_BLEND_INV_BLEND_FACTOR;
+
+                // Deprecated blend factors should be normalized prior to this call.
+                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::OneMinusBlendColor:
+                    UNREACHABLE();
+            }
+        }
+
+        // When a blend factor is defined for the alpha channel, any of the factors that don't
+        // explicitly state that they apply to alpha should be treated as their explicitly-alpha
+        // equivalents. See: https://github.com/gpuweb/gpuweb/issues/65
+        D3D12_BLEND D3D12AlphaBlend(wgpu::BlendFactor factor) {
+            switch (factor) {
+                case wgpu::BlendFactor::Src:
+                    return D3D12_BLEND_SRC_ALPHA;
+                case wgpu::BlendFactor::OneMinusSrc:
+                    return D3D12_BLEND_INV_SRC_ALPHA;
+                case wgpu::BlendFactor::Dst:
+                    return D3D12_BLEND_DEST_ALPHA;
+                case wgpu::BlendFactor::OneMinusDst:
+                    return D3D12_BLEND_INV_DEST_ALPHA;
+
+                // Other blend factors translate to the same D3D12 enum as the color blend factors.
+                default:
+                    return D3D12Blend(factor);
             }
         }
 
@@ -214,8 +243,8 @@
                 blendDesc.SrcBlend = D3D12Blend(state->blend->color.srcFactor);
                 blendDesc.DestBlend = D3D12Blend(state->blend->color.dstFactor);
                 blendDesc.BlendOp = D3D12BlendOperation(state->blend->color.operation);
-                blendDesc.SrcBlendAlpha = D3D12Blend(state->blend->alpha.srcFactor);
-                blendDesc.DestBlendAlpha = D3D12Blend(state->blend->alpha.dstFactor);
+                blendDesc.SrcBlendAlpha = D3D12AlphaBlend(state->blend->alpha.srcFactor);
+                blendDesc.DestBlendAlpha = D3D12AlphaBlend(state->blend->alpha.dstFactor);
                 blendDesc.BlendOpAlpha = D3D12BlendOperation(state->blend->alpha.operation);
             }
             blendDesc.RenderTargetWriteMask = D3D12RenderTargetWriteMask(state->writeMask);
diff --git a/src/dawn_native/metal/RenderPipelineMTL.mm b/src/dawn_native/metal/RenderPipelineMTL.mm
index 8da8618..a79228c 100644
--- a/src/dawn_native/metal/RenderPipelineMTL.mm
+++ b/src/dawn_native/metal/RenderPipelineMTL.mm
@@ -135,17 +135,17 @@
                     return MTLBlendFactorZero;
                 case wgpu::BlendFactor::One:
                     return MTLBlendFactorOne;
-                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::Src:
                     return MTLBlendFactorSourceColor;
-                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::OneMinusSrc:
                     return MTLBlendFactorOneMinusSourceColor;
                 case wgpu::BlendFactor::SrcAlpha:
                     return MTLBlendFactorSourceAlpha;
                 case wgpu::BlendFactor::OneMinusSrcAlpha:
                     return MTLBlendFactorOneMinusSourceAlpha;
-                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::Dst:
                     return MTLBlendFactorDestinationColor;
-                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::OneMinusDst:
                     return MTLBlendFactorOneMinusDestinationColor;
                 case wgpu::BlendFactor::DstAlpha:
                     return MTLBlendFactorDestinationAlpha;
@@ -153,11 +153,20 @@
                     return MTLBlendFactorOneMinusDestinationAlpha;
                 case wgpu::BlendFactor::SrcAlphaSaturated:
                     return MTLBlendFactorSourceAlphaSaturated;
-                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::Constant:
                     return alpha ? MTLBlendFactorBlendAlpha : MTLBlendFactorBlendColor;
-                case wgpu::BlendFactor::OneMinusBlendColor:
+                case wgpu::BlendFactor::OneMinusConstant:
                     return alpha ? MTLBlendFactorOneMinusBlendAlpha
                                  : MTLBlendFactorOneMinusBlendColor;
+
+                // Deprecated blend factors should be normalized prior to this call.
+                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::OneMinusBlendColor:
+                    UNREACHABLE();
             }
         }
 
diff --git a/src/dawn_native/opengl/RenderPipelineGL.cpp b/src/dawn_native/opengl/RenderPipelineGL.cpp
index 3c153fb..2511786 100644
--- a/src/dawn_native/opengl/RenderPipelineGL.cpp
+++ b/src/dawn_native/opengl/RenderPipelineGL.cpp
@@ -62,17 +62,17 @@
                     return GL_ZERO;
                 case wgpu::BlendFactor::One:
                     return GL_ONE;
-                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::Src:
                     return GL_SRC_COLOR;
-                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::OneMinusSrc:
                     return GL_ONE_MINUS_SRC_COLOR;
                 case wgpu::BlendFactor::SrcAlpha:
                     return GL_SRC_ALPHA;
                 case wgpu::BlendFactor::OneMinusSrcAlpha:
                     return GL_ONE_MINUS_SRC_ALPHA;
-                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::Dst:
                     return GL_DST_COLOR;
-                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::OneMinusDst:
                     return GL_ONE_MINUS_DST_COLOR;
                 case wgpu::BlendFactor::DstAlpha:
                     return GL_DST_ALPHA;
@@ -80,10 +80,19 @@
                     return GL_ONE_MINUS_DST_ALPHA;
                 case wgpu::BlendFactor::SrcAlphaSaturated:
                     return GL_SRC_ALPHA_SATURATE;
-                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::Constant:
                     return alpha ? GL_CONSTANT_ALPHA : GL_CONSTANT_COLOR;
-                case wgpu::BlendFactor::OneMinusBlendColor:
+                case wgpu::BlendFactor::OneMinusConstant:
                     return alpha ? GL_ONE_MINUS_CONSTANT_ALPHA : GL_ONE_MINUS_CONSTANT_COLOR;
+
+                // Deprecated blend factors should be normalized prior to this call.
+                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::OneMinusBlendColor:
+                    UNREACHABLE();
             }
         }
 
diff --git a/src/dawn_native/vulkan/RenderPipelineVk.cpp b/src/dawn_native/vulkan/RenderPipelineVk.cpp
index a743b8d..52e9e0f 100644
--- a/src/dawn_native/vulkan/RenderPipelineVk.cpp
+++ b/src/dawn_native/vulkan/RenderPipelineVk.cpp
@@ -158,17 +158,17 @@
                     return VK_BLEND_FACTOR_ZERO;
                 case wgpu::BlendFactor::One:
                     return VK_BLEND_FACTOR_ONE;
-                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::Src:
                     return VK_BLEND_FACTOR_SRC_COLOR;
-                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::OneMinusSrc:
                     return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR;
                 case wgpu::BlendFactor::SrcAlpha:
                     return VK_BLEND_FACTOR_SRC_ALPHA;
                 case wgpu::BlendFactor::OneMinusSrcAlpha:
                     return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
-                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::Dst:
                     return VK_BLEND_FACTOR_DST_COLOR;
-                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::OneMinusDst:
                     return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR;
                 case wgpu::BlendFactor::DstAlpha:
                     return VK_BLEND_FACTOR_DST_ALPHA;
@@ -176,10 +176,19 @@
                     return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA;
                 case wgpu::BlendFactor::SrcAlphaSaturated:
                     return VK_BLEND_FACTOR_SRC_ALPHA_SATURATE;
-                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::Constant:
                     return VK_BLEND_FACTOR_CONSTANT_COLOR;
-                case wgpu::BlendFactor::OneMinusBlendColor:
+                case wgpu::BlendFactor::OneMinusConstant:
                     return VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR;
+
+                // Deprecated blend factors should be normalized prior to this call.
+                case wgpu::BlendFactor::SrcColor:
+                case wgpu::BlendFactor::OneMinusSrcColor:
+                case wgpu::BlendFactor::DstColor:
+                case wgpu::BlendFactor::OneMinusDstColor:
+                case wgpu::BlendFactor::BlendColor:
+                case wgpu::BlendFactor::OneMinusBlendColor:
+                    UNREACHABLE();
             }
         }
 
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 4940d37..1e91432 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -371,7 +371,7 @@
     CheckSrcBlendFactor(base, wgpu::BlendFactor::One, wgpu::BlendFactor::One, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorSrcColor) {
+TEST_P(ColorStateTest, SrcBlendFactorSrc) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -381,10 +381,10 @@
                        RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::SrcColor, wgpu::BlendFactor::Zero, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::Src, wgpu::BlendFactor::Zero, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorOneMinusSrcColor) {
+TEST_P(ColorStateTest, SrcBlendFactorOneMinusSrc) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -394,7 +394,7 @@
                        RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusSrcColor, wgpu::BlendFactor::Zero, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusSrc, wgpu::BlendFactor::Zero, tests);
 }
 
 TEST_P(ColorStateTest, SrcBlendFactorSrcAlpha) {
@@ -422,7 +422,7 @@
                         wgpu::BlendFactor::OneMinusSrcAlpha, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorDstColor) {
+TEST_P(ColorStateTest, SrcBlendFactorDst) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -432,10 +432,10 @@
                        RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::DstColor, wgpu::BlendFactor::Zero, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::Dst, wgpu::BlendFactor::Zero, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorOneMinusDstColor) {
+TEST_P(ColorStateTest, SrcBlendFactorOneMinusDst) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -445,7 +445,7 @@
                        RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusDstColor, wgpu::BlendFactor::Zero, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusDst, wgpu::BlendFactor::Zero, tests);
 }
 
 TEST_P(ColorStateTest, SrcBlendFactorDstAlpha) {
@@ -487,7 +487,7 @@
                         wgpu::BlendFactor::SrcAlphaSaturated, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorBlendColor) {
+TEST_P(ColorStateTest, SrcBlendFactorConstant) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(
@@ -496,10 +496,10 @@
             RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, triangleSpec.blendFactor);
             return std::make_pair(triangleSpec, expected);
         });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::BlendColor, wgpu::BlendFactor::BlendColor, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::Constant, wgpu::BlendFactor::Constant, tests);
 }
 
-TEST_P(ColorStateTest, SrcBlendFactorOneMinusBlendColor) {
+TEST_P(ColorStateTest, SrcBlendFactorOneMinusConstant) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -509,8 +509,8 @@
                        RGBA8 expected = base + mix(RGBA8(0, 0, 0, 0), color, f);
                        return std::make_pair(triangleSpec, expected);
                    });
-    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusBlendColor,
-                        wgpu::BlendFactor::OneMinusBlendColor, tests);
+    CheckSrcBlendFactor(base, wgpu::BlendFactor::OneMinusConstant,
+                        wgpu::BlendFactor::OneMinusConstant, tests);
 }
 
 // The following tests check that the Destination blend factor works
@@ -532,7 +532,7 @@
     CheckDstBlendFactor(base, wgpu::BlendFactor::One, wgpu::BlendFactor::One, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorSrcColor) {
+TEST_P(ColorStateTest, DstBlendFactorSrc) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -542,10 +542,10 @@
                        RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::SrcColor, wgpu::BlendFactor::Zero, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::Src, wgpu::BlendFactor::Zero, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorOneMinusSrcColor) {
+TEST_P(ColorStateTest, DstBlendFactorOneMinusSrc) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -555,7 +555,7 @@
                        RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusSrcColor, wgpu::BlendFactor::Zero, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusSrc, wgpu::BlendFactor::Zero, tests);
 }
 
 TEST_P(ColorStateTest, DstBlendFactorSrcAlpha) {
@@ -583,7 +583,7 @@
                         wgpu::BlendFactor::OneMinusSrcAlpha, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorDstColor) {
+TEST_P(ColorStateTest, DstBlendFactorDst) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -593,10 +593,10 @@
                        RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::DstColor, wgpu::BlendFactor::Zero, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::Dst, wgpu::BlendFactor::Zero, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorOneMinusDstColor) {
+TEST_P(ColorStateTest, DstBlendFactorOneMinusDst) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -606,7 +606,7 @@
                        RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, fac);
                        return std::make_pair(TriangleSpec({{color}}), expected);
                    });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusDstColor, wgpu::BlendFactor::Zero, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusDst, wgpu::BlendFactor::Zero, tests);
 }
 
 TEST_P(ColorStateTest, DstBlendFactorDstAlpha) {
@@ -648,7 +648,7 @@
                         wgpu::BlendFactor::SrcAlphaSaturated, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorBlendColor) {
+TEST_P(ColorStateTest, DstBlendFactorConstant) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(
@@ -657,10 +657,10 @@
             RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, triangleSpec.blendFactor);
             return std::make_pair(triangleSpec, expected);
         });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::BlendColor, wgpu::BlendFactor::BlendColor, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::Constant, wgpu::BlendFactor::Constant, tests);
 }
 
-TEST_P(ColorStateTest, DstBlendFactorOneMinusBlendColor) {
+TEST_P(ColorStateTest, DstBlendFactorOneMinusConstant) {
     RGBA8 base(32, 64, 128, 192);
     std::vector<std::pair<TriangleSpec, RGBA8>> tests;
     std::transform(kColors.begin(), kColors.end(), std::back_inserter(tests),
@@ -670,8 +670,8 @@
                        RGBA8 expected = color + mix(RGBA8(0, 0, 0, 0), base, f);
                        return std::make_pair(triangleSpec, expected);
                    });
-    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusBlendColor,
-                        wgpu::BlendFactor::OneMinusBlendColor, tests);
+    CheckDstBlendFactor(base, wgpu::BlendFactor::OneMinusConstant,
+                        wgpu::BlendFactor::OneMinusConstant, tests);
 }
 
 // Check that the color write mask works
@@ -931,7 +931,7 @@
 
     wgpu::BlendComponent blendComponent;
     blendComponent.operation = wgpu::BlendOperation::Add;
-    blendComponent.srcFactor = wgpu::BlendFactor::BlendColor;
+    blendComponent.srcFactor = wgpu::BlendFactor::Constant;
     blendComponent.dstFactor = wgpu::BlendFactor::One;
 
     wgpu::BlendState blend;
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index a7c8c0b..aaadf5e 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -549,3 +549,102 @@
                       OpenGLBackend(),
                       OpenGLESBackend(),
                       VulkanBackend());
+
+// Tests that deprecated blend factors properly raise a deprecation warning when used
+class BlendFactorDeprecationTests : public DeprecationTests {
+  protected:
+    // Runs the test
+    void DoTest(const wgpu::BlendFactor blendFactor, bool deprecated) {
+        wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
+                [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
+                    return vec4<f32>(0.0, 0.0, 0.0, 1.0);
+                }
+            )");
+        wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
+                [[stage(fragment)]] fn main() -> [[location(0)]] vec4<f32> {
+                    return vec4<f32>(1.0, 1.0, 1.0, 1.0);
+                }
+            )");
+
+        utils::ComboRenderPipelineDescriptor2 descriptor;
+        descriptor.vertex.module = vsModule;
+        descriptor.cFragment.module = fsModule;
+        descriptor.cTargets[0].blend = &descriptor.cBlends[0];
+
+        descriptor.cBlends[0].color.srcFactor = blendFactor;
+        if (deprecated) {
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+        } else {
+            device.CreateRenderPipeline2(&descriptor);
+        }
+        descriptor.cBlends[0].color.srcFactor = wgpu::BlendFactor::One;
+
+        descriptor.cBlends[0].color.dstFactor = blendFactor;
+        if (deprecated) {
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+        } else {
+            device.CreateRenderPipeline2(&descriptor);
+        }
+        descriptor.cBlends[0].color.dstFactor = wgpu::BlendFactor::Zero;
+
+        descriptor.cBlends[0].alpha.srcFactor = blendFactor;
+        if (deprecated) {
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+        } else {
+            device.CreateRenderPipeline2(&descriptor);
+        }
+        descriptor.cBlends[0].alpha.srcFactor = wgpu::BlendFactor::One;
+
+        descriptor.cBlends[0].alpha.dstFactor = blendFactor;
+        if (deprecated) {
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+        } else {
+            device.CreateRenderPipeline2(&descriptor);
+        }
+        descriptor.cBlends[0].alpha.dstFactor = wgpu::BlendFactor::Zero;
+    }
+};
+
+static constexpr std::array<wgpu::BlendFactor, 13> kBlendFactors = {
+    wgpu::BlendFactor::Zero,
+    wgpu::BlendFactor::One,
+    wgpu::BlendFactor::Src,
+    wgpu::BlendFactor::OneMinusSrc,
+    wgpu::BlendFactor::SrcAlpha,
+    wgpu::BlendFactor::OneMinusSrcAlpha,
+    wgpu::BlendFactor::Dst,
+    wgpu::BlendFactor::OneMinusDst,
+    wgpu::BlendFactor::DstAlpha,
+    wgpu::BlendFactor::OneMinusDstAlpha,
+    wgpu::BlendFactor::SrcAlphaSaturated,
+    wgpu::BlendFactor::Constant,
+    wgpu::BlendFactor::OneMinusConstant,
+};
+
+TEST_P(BlendFactorDeprecationTests, CurrentBlendFactors) {
+    // Using the new blend factors does not emit a warning.
+    for (auto& format : kBlendFactors) {
+        DoTest(format, false);
+    }
+}
+
+static constexpr std::array<wgpu::BlendFactor, 6> kDeprecatedBlendFactors = {
+    wgpu::BlendFactor::SrcColor,   wgpu::BlendFactor::OneMinusSrcColor,
+    wgpu::BlendFactor::DstColor,   wgpu::BlendFactor::OneMinusDstColor,
+    wgpu::BlendFactor::BlendColor, wgpu::BlendFactor::OneMinusBlendColor,
+};
+
+TEST_P(BlendFactorDeprecationTests, DeprecatedBlendFactors) {
+    // Using deprecated blend factors does emit a warning.
+    for (auto& format : kDeprecatedBlendFactors) {
+        DoTest(format, true);
+    }
+}
+
+DAWN_INSTANTIATE_TEST(BlendFactorDeprecationTests,
+                      D3D12Backend(),
+                      MetalBackend(),
+                      NullBackend(),
+                      OpenGLBackend(),
+                      OpenGLESBackend(),
+                      VulkanBackend());