Add informational toggle that sample mask is broken on Mac Intel
Bug: dawn:1462 Change-Id: Ifec68914edb7d0f7eaf90e066491a0af3fe7b232 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/114400 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
5082727e55
commit
e48253f31e
|
@ -332,6 +332,12 @@ static constexpr ToggleEnumAndInfoList kToggleNameAndInfoList = {{
|
||||||
"This toggle is off by default. It is expected to turn on or get removed when WebGPU V1 "
|
"This toggle is off by default. It is expected to turn on or get removed when WebGPU V1 "
|
||||||
"ships and stays stable.",
|
"ships and stays stable.",
|
||||||
"https://crbug.com/dawn/1563"}},
|
"https://crbug.com/dawn/1563"}},
|
||||||
|
{Toggle::NoWorkaroundSampleMaskBecomesZeroForAllButLastColorTarget,
|
||||||
|
{"no_workaround_sample_mask_becomes_zero_for_all_but_last_color_target",
|
||||||
|
"MacOS 12.0+ Intel has a bug where the sample mask is only applied for the last color "
|
||||||
|
"target. If there are multiple color targets, all but the last one will use a sample mask "
|
||||||
|
"of zero.",
|
||||||
|
"https://crbug.com/dawn/1462"}}
|
||||||
// Comment to separate the }} so it is clearer what to copy-paste to add a toggle.
|
// Comment to separate the }} so it is clearer what to copy-paste to add a toggle.
|
||||||
}};
|
}};
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
|
@ -84,6 +84,9 @@ enum class Toggle {
|
||||||
D3D12Allocate2DTexturewithCopyDstAsCommittedResource,
|
D3D12Allocate2DTexturewithCopyDstAsCommittedResource,
|
||||||
DisallowDeprecatedAPIs,
|
DisallowDeprecatedAPIs,
|
||||||
|
|
||||||
|
// Unresolved issues.
|
||||||
|
NoWorkaroundSampleMaskBecomesZeroForAllButLastColorTarget,
|
||||||
|
|
||||||
EnumCount,
|
EnumCount,
|
||||||
InvalidEnum = EnumCount,
|
InvalidEnum = EnumCount,
|
||||||
};
|
};
|
||||||
|
|
|
@ -257,6 +257,15 @@ void Device::InitTogglesFromDriver() {
|
||||||
if (@available(macos 11.0, iOS 14.0, *)) {
|
if (@available(macos 11.0, iOS 14.0, *)) {
|
||||||
SetToggle(Toggle::MetalUseMockBlitEncoderForWriteTimestamp, true);
|
SetToggle(Toggle::MetalUseMockBlitEncoderForWriteTimestamp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DAWN_PLATFORM_IS(MACOS)
|
||||||
|
if (gpu_info::IsIntel(vendorId)) {
|
||||||
|
if ([NSProcessInfo.processInfo
|
||||||
|
isOperatingSystemAtLeastVersion:NSOperatingSystemVersion{12, 0, 0}]) {
|
||||||
|
ForceSetToggle(Toggle::NoWorkaroundSampleMaskBecomesZeroForAllButLastColorTarget, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultOrError<Ref<BindGroupBase>> Device::CreateBindGroupImpl(
|
ResultOrError<Ref<BindGroupBase>> Device::CreateBindGroupImpl(
|
||||||
|
|
|
@ -643,9 +643,6 @@ TEST_P(MultisampledRenderingTest, ResolveInto2DTextureWithEmptyFinalSampleMask)
|
||||||
// Test doing MSAA resolve into multiple resolve targets works correctly with a non-default sample
|
// Test doing MSAA resolve into multiple resolve targets works correctly with a non-default sample
|
||||||
// mask.
|
// mask.
|
||||||
TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithSampleMask) {
|
TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithSampleMask) {
|
||||||
// TODO(crbug.com/dawn/1462): Re-enable on Mac Intel 12.4.
|
|
||||||
DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel() && (IsMacOS(12, 4) || IsMacOS(12, 5)));
|
|
||||||
|
|
||||||
// TODO(dawn:1550) Fails on ARM-based Android devices.
|
// TODO(dawn:1550) Fails on ARM-based Android devices.
|
||||||
DAWN_SUPPRESS_TEST_IF(IsAndroid() && IsARM());
|
DAWN_SUPPRESS_TEST_IF(IsAndroid() && IsARM());
|
||||||
|
|
||||||
|
@ -682,7 +679,13 @@ TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithSampleMas
|
||||||
wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
|
wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
|
||||||
queue.Submit(1, &commandBuffer);
|
queue.Submit(1, &commandBuffer);
|
||||||
|
|
||||||
VerifyResolveTarget(kRed, mResolveTexture, 0, 0, kMSAACoverage);
|
// TODO(crbug.com/dawn/1462): Work around that a sample mask of zero is used for all
|
||||||
|
// color targets except the last one.
|
||||||
|
VerifyResolveTarget(
|
||||||
|
HasToggleEnabled("no_workaround_sample_mask_becomes_zero_for_all_but_last_color_target")
|
||||||
|
? wgpu::Color{}
|
||||||
|
: kRed,
|
||||||
|
mResolveTexture, 0, 0, kMSAACoverage);
|
||||||
VerifyResolveTarget(kGreen, resolveTexture2, 0, 0, kMSAACoverage);
|
VerifyResolveTarget(kGreen, resolveTexture2, 0, 0, kMSAACoverage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -812,9 +815,6 @@ TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithShaderOut
|
||||||
// supported on some platforms.
|
// supported on some platforms.
|
||||||
DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
|
DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
|
||||||
|
|
||||||
// TODO(crbug.com/dawn/1462): Re-enable on Mac Intel 12.4.
|
|
||||||
DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel() && (IsMacOS(12, 4) || IsMacOS(12, 5)));
|
|
||||||
|
|
||||||
wgpu::TextureView multisampledColorView2 =
|
wgpu::TextureView multisampledColorView2 =
|
||||||
CreateTextureForRenderAttachment(kColorFormat, kSampleCount).CreateView();
|
CreateTextureForRenderAttachment(kColorFormat, kSampleCount).CreateView();
|
||||||
wgpu::Texture resolveTexture2 = CreateTextureForRenderAttachment(kColorFormat, 1);
|
wgpu::Texture resolveTexture2 = CreateTextureForRenderAttachment(kColorFormat, 1);
|
||||||
|
@ -866,7 +866,13 @@ TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithShaderOut
|
||||||
wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
|
wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
|
||||||
queue.Submit(1, &commandBuffer);
|
queue.Submit(1, &commandBuffer);
|
||||||
|
|
||||||
VerifyResolveTarget(kRed, mResolveTexture, 0, 0, kMSAACoverage);
|
// TODO(crbug.com/dawn/1462): Work around that a sample mask of zero is used for all
|
||||||
|
// color targets except the last one.
|
||||||
|
VerifyResolveTarget(
|
||||||
|
HasToggleEnabled("no_workaround_sample_mask_becomes_zero_for_all_but_last_color_target")
|
||||||
|
? wgpu::Color{}
|
||||||
|
: kRed,
|
||||||
|
mResolveTexture, 0, 0, kMSAACoverage);
|
||||||
VerifyResolveTarget(kGreen, resolveTexture2, 0, 0, kMSAACoverage);
|
VerifyResolveTarget(kGreen, resolveTexture2, 0, 0, kMSAACoverage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue