mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-15 16:16:08 +00:00
Add wgpu::TextureComponentType::DepthComparison
And deprecate using ::Float in the bind group layout for "shadow textures" in the pipeline (along with a deprecation test). Adds the ability to be used with DepthComparison only to depth textures, this could potentially a breaking change if users where doing depth-comparison on float32 textures but that's not supported in WebGPU. Bug: dawn:527 Change-Id: Ib28b0443e3002e0aa2811713b9e843c2417e13e7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/30240 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Stephen White <senorblanco@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
2a8ada7951
commit
4196a546bf
@@ -118,6 +118,50 @@ TEST_P(DeprecationTests, BGLEntryMultisampledBooleanTracking) {
|
||||
utils::MakeBindGroup(device, bgl, {{0, texture4Sample.CreateView()}});
|
||||
}
|
||||
|
||||
// Test that compiling a pipeline with TextureComponentType::Float in the BGL when ::DepthComparison
|
||||
// is expected emits a deprecation warning but isn't an error.
|
||||
TEST_P(DeprecationTests, TextureComponentTypeFloatWhenDepthComparisonIsExpected) {
|
||||
wgpu::ShaderModule module =
|
||||
utils::CreateShaderModule(device, utils::SingleShaderStage::Compute, R"(
|
||||
#version 450
|
||||
layout(set = 0, binding = 0) uniform samplerShadow samp;
|
||||
layout(set = 0, binding = 1) uniform texture2D tex;
|
||||
|
||||
void main() {
|
||||
texture(sampler2DShadow(tex, samp), vec3(0.5, 0.5, 0.5));
|
||||
}
|
||||
)");
|
||||
|
||||
{
|
||||
wgpu::BindGroupLayout goodBgl = utils::MakeBindGroupLayout(
|
||||
device,
|
||||
{{0, wgpu::ShaderStage::Compute, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Compute, wgpu::BindingType::SampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison}});
|
||||
|
||||
wgpu::ComputePipelineDescriptor goodDesc;
|
||||
goodDesc.layout = utils::MakeBasicPipelineLayout(device, &goodBgl);
|
||||
goodDesc.computeStage.module = module;
|
||||
goodDesc.computeStage.entryPoint = "main";
|
||||
|
||||
device.CreateComputePipeline(&goodDesc);
|
||||
}
|
||||
|
||||
{
|
||||
wgpu::BindGroupLayout badBgl = utils::MakeBindGroupLayout(
|
||||
device, {{0, wgpu::ShaderStage::Compute, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Compute, wgpu::BindingType::SampledTexture, false, 0,
|
||||
false, wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::Float}});
|
||||
|
||||
wgpu::ComputePipelineDescriptor badDesc;
|
||||
badDesc.layout = utils::MakeBasicPipelineLayout(device, &badBgl);
|
||||
badDesc.computeStage.module = module;
|
||||
badDesc.computeStage.entryPoint = "main";
|
||||
|
||||
EXPECT_DEPRECATION_WARNING(device.CreateComputePipeline(&badDesc));
|
||||
}
|
||||
}
|
||||
|
||||
DAWN_INSTANTIATE_TEST(DeprecationTests,
|
||||
D3D12Backend(),
|
||||
MetalBackend(),
|
||||
|
||||
@@ -151,9 +151,11 @@ class DepthSamplingTest : public DawnTest {
|
||||
// TODO(dawn:367): Cannot use GetBindGroupLayout for comparison samplers without shader
|
||||
// reflection data.
|
||||
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
|
||||
device, {{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Fragment, wgpu::BindingType::SampledTexture},
|
||||
{2, wgpu::ShaderStage::Fragment, wgpu::BindingType::UniformBuffer}});
|
||||
device,
|
||||
{{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Fragment, wgpu::BindingType::SampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison},
|
||||
{2, wgpu::ShaderStage::Fragment, wgpu::BindingType::UniformBuffer}});
|
||||
|
||||
utils::ComboRenderPipelineDescriptor pipelineDescriptor(device);
|
||||
pipelineDescriptor.vertexStage.module = vsModule;
|
||||
@@ -185,10 +187,12 @@ class DepthSamplingTest : public DawnTest {
|
||||
|
||||
// TODO(dawn:367): Cannot use GetBindGroupLayout without shader reflection data.
|
||||
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
|
||||
device, {{0, wgpu::ShaderStage::Compute, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Compute, wgpu::BindingType::SampledTexture},
|
||||
{2, wgpu::ShaderStage::Compute, wgpu::BindingType::UniformBuffer},
|
||||
{3, wgpu::ShaderStage::Compute, wgpu::BindingType::StorageBuffer}});
|
||||
device,
|
||||
{{0, wgpu::ShaderStage::Compute, wgpu::BindingType::ComparisonSampler},
|
||||
{1, wgpu::ShaderStage::Compute, wgpu::BindingType::SampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison},
|
||||
{2, wgpu::ShaderStage::Compute, wgpu::BindingType::UniformBuffer},
|
||||
{3, wgpu::ShaderStage::Compute, wgpu::BindingType::StorageBuffer}});
|
||||
|
||||
wgpu::ComputePipelineDescriptor pipelineDescriptor;
|
||||
pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl);
|
||||
|
||||
@@ -345,6 +345,41 @@ TEST_F(BindGroupValidationTest, SamplingDepthTexture) {
|
||||
}
|
||||
}
|
||||
|
||||
// Check that a texture must have a correct format for DepthComparison
|
||||
TEST_F(BindGroupValidationTest, TextureComponentTypeDepthComparison) {
|
||||
wgpu::BindGroupLayout depthLayout = utils::MakeBindGroupLayout(
|
||||
device,
|
||||
{{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::SampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison}});
|
||||
|
||||
// Control case: setting a depth texture works.
|
||||
wgpu::Texture depthTexture =
|
||||
CreateTexture(wgpu::TextureUsage::Sampled, wgpu::TextureFormat::Depth32Float, 1);
|
||||
utils::MakeBindGroup(device, depthLayout, {{0, depthTexture.CreateView()}});
|
||||
|
||||
// Error case: setting a Float typed texture view fails.
|
||||
ASSERT_DEVICE_ERROR(utils::MakeBindGroup(device, depthLayout, {{0, mSampledTextureView}}));
|
||||
}
|
||||
|
||||
// Check that a depth texture is allowed to be used for both TextureComponentType::Float and
|
||||
// ::DepthComparison
|
||||
TEST_F(BindGroupValidationTest, TextureComponentTypeForDepthTexture) {
|
||||
wgpu::BindGroupLayout depthLayout = utils::MakeBindGroupLayout(
|
||||
device,
|
||||
{{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::SampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison}});
|
||||
|
||||
wgpu::BindGroupLayout floatLayout = utils::MakeBindGroupLayout(
|
||||
device, {{0, wgpu::ShaderStage::Fragment, wgpu::BindingType::SampledTexture, false, 0,
|
||||
false, wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::Float}});
|
||||
|
||||
wgpu::Texture depthTexture =
|
||||
CreateTexture(wgpu::TextureUsage::Sampled, wgpu::TextureFormat::Depth32Float, 1);
|
||||
|
||||
utils::MakeBindGroup(device, depthLayout, {{0, depthTexture.CreateView()}});
|
||||
utils::MakeBindGroup(device, floatLayout, {{0, depthTexture.CreateView()}});
|
||||
}
|
||||
|
||||
// Check that a texture must have the correct dimension
|
||||
TEST_F(BindGroupValidationTest, TextureDimension) {
|
||||
wgpu::BindGroupLayout layout = utils::MakeBindGroupLayout(
|
||||
@@ -900,7 +935,7 @@ TEST_F(BindGroupLayoutValidationTest, DynamicBufferNumberLimit) {
|
||||
}
|
||||
|
||||
// Test that multisampled textures must be 2D sampled textures
|
||||
TEST_F(BindGroupLayoutValidationTest, MultisampledTextures) {
|
||||
TEST_F(BindGroupLayoutValidationTest, MultisampledTextureViewDimension) {
|
||||
// Multisampled 2D texture works.
|
||||
utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
@@ -958,6 +993,45 @@ TEST_F(BindGroupLayoutValidationTest, MultisampledTextures) {
|
||||
}));
|
||||
}
|
||||
|
||||
// Test that multisampled textures cannot be DepthComparison
|
||||
TEST_F(BindGroupLayoutValidationTest, MultisampledTextureComponentType) {
|
||||
// Multisampled float component type works.
|
||||
utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
{0, wgpu::ShaderStage::Compute, wgpu::BindingType::MultisampledTexture, false,
|
||||
0, false, wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::Float},
|
||||
});
|
||||
|
||||
// Multisampled float (defaulted) component type works.
|
||||
utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
{0, wgpu::ShaderStage::Compute, wgpu::BindingType::MultisampledTexture, false,
|
||||
0, false, wgpu::TextureViewDimension::e2D},
|
||||
});
|
||||
|
||||
// Multisampled uint component type works.
|
||||
utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
{0, wgpu::ShaderStage::Compute, wgpu::BindingType::MultisampledTexture, false,
|
||||
0, false, wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::Uint},
|
||||
});
|
||||
|
||||
// Multisampled sint component type works.
|
||||
utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
{0, wgpu::ShaderStage::Compute, wgpu::BindingType::MultisampledTexture, false,
|
||||
0, false, wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::Sint},
|
||||
});
|
||||
|
||||
// Multisampled depth comparison component typeworks.
|
||||
ASSERT_DEVICE_ERROR(utils::MakeBindGroupLayout(
|
||||
device,
|
||||
{
|
||||
{0, wgpu::ShaderStage::Compute, wgpu::BindingType::MultisampledTexture, false, 0, false,
|
||||
wgpu::TextureViewDimension::e2D, wgpu::TextureComponentType::DepthComparison},
|
||||
}));
|
||||
}
|
||||
|
||||
// Test that it is an error to pass multisampled=true for non-texture bindings
|
||||
TEST_F(BindGroupLayoutValidationTest, MultisampledMustBeTexture) {
|
||||
// Base: Multisampled 2D texture works.
|
||||
|
||||
Reference in New Issue
Block a user