diff --git a/src/dawn/native/BindGroupLayout.cpp b/src/dawn/native/BindGroupLayout.cpp index d4bd324558..d6e1a56f5a 100644 --- a/src/dawn/native/BindGroupLayout.cpp +++ b/src/dawn/native/BindGroupLayout.cpp @@ -113,6 +113,14 @@ MaybeError ValidateBindGroupLayoutEntry(DeviceBase* device, DAWN_INVALID_IF(texture.multisampled && viewDimension != wgpu::TextureViewDimension::e2D, "View dimension (%s) for a multisampled texture bindings was not %s.", viewDimension, wgpu::TextureViewDimension::e2D); + + if (texture.multisampled && texture.sampleType == wgpu::TextureSampleType::Float) { + std::string warning = absl::StrFormat( + "Sample type %s for multisampled texture bindings is deprecated " + "and will be invalid in a future version.", + wgpu::TextureSampleType::Float); + device->EmitDeprecationWarning(warning.c_str()); + } } if (entry.storageTexture.access != wgpu::StorageTextureAccess::Undefined) { diff --git a/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp b/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp index 112c6691c9..36e43e2c96 100644 --- a/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp +++ b/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp @@ -781,7 +781,7 @@ TEST_F(BindGroupValidationTest, BufferOffsetAlignment) { // Tests constraints on the texture for MultisampledTexture bindings TEST_F(BindGroupValidationTest, MultisampledTexture) { wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout( - device, {{0, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Float, + device, {{0, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::e2D, true}}); wgpu::BindGroupEntry binding; @@ -1420,63 +1420,70 @@ TEST_F(BindGroupLayoutValidationTest, DynamicBufferNumberLimit) { // Test that multisampled textures must be 2D sampled textures TEST_F(BindGroupLayoutValidationTest, MultisampledTextureViewDimension) { // Multisampled 2D texture works. - utils::MakeBindGroupLayout(device, - { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, - wgpu::TextureViewDimension::e2D, true}, - }); + utils::MakeBindGroupLayout( + device, { + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, + wgpu::TextureViewDimension::e2D, true}, + }); // Multisampled 2D (defaulted) texture works. - utils::MakeBindGroupLayout(device, - { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, - wgpu::TextureViewDimension::Undefined, true}, - }); + utils::MakeBindGroupLayout( + device, { + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, + wgpu::TextureViewDimension::Undefined, true}, + }); // Multisampled 2D array texture is invalid. ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout( device, { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::e2DArray, true}, })); // Multisampled cube texture is invalid. ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout( device, { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::Cube, true}, })); // Multisampled cube array texture is invalid. ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout( device, { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::CubeArray, true}, })); // Multisampled 3D texture is invalid. ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout( device, { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::e3D, true}, })); // Multisampled 1D texture is invalid. ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout( device, { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, wgpu::TextureViewDimension::e1D, true}, })); } // Test that multisampled texture bindings are valid TEST_F(BindGroupLayoutValidationTest, MultisampledTextureSampleType) { - // Multisampled float sample type works. - utils::MakeBindGroupLayout(device, - { - {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, - wgpu::TextureViewDimension::e2D, true}, - }); + // Multisampled float sample type deprecated. + EXPECT_DEPRECATION_WARNING(utils::MakeBindGroupLayout( + device, { + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Float, + wgpu::TextureViewDimension::e2D, true}, + })); + + // Multisampled unfilterable float sample type works. + utils::MakeBindGroupLayout( + device, { + {0, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::UnfilterableFloat, + wgpu::TextureViewDimension::e2D, true}, + }); // Multisampled uint sample type works. utils::MakeBindGroupLayout(device,