Fix Emulated OOB Index In Primitive Restart Tests

Recognizes an OOB vertex index to show consistent behavior when trying
to emulate an OOB index across backends.

Bug: dawn:575
Change-Id: Ie06d6706614843c75c217f7b3b144dc25996cd0b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/34924
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones <brandon1.jones@intel.com>
This commit is contained in:
Brandon Jones 2020-12-07 17:29:43 +00:00 committed by Commit Bot service account
parent f0a0c38623
commit 224a3a4ab5
1 changed files with 7 additions and 15 deletions

View File

@ -34,9 +34,15 @@ class IndexFormatTest : public DawnTest {
wgpu::PrimitiveTopology primitiveTopology = wgpu::PrimitiveTopology::TriangleStrip) {
wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
[[location(0)]] var<in> pos : vec4<f32>;
[[builtin(vertex_idx)]] var<in> idx : u32;
[[builtin(position)]] var<out> Position : vec4<f32>;
[[stage(vertex)]] fn main() -> void {
Position = pos;
# 0xFFFFFFFE is a designated invalid index used by some tests.
if (idx == 0xFFFFFFFEu) {
Position = vec4<f32>(0.0, 0.0, 0.0, 1.0);
} else {
Position = pos;
}
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
@ -287,13 +293,6 @@ TEST_P(TriangleStripPrimitiveRestartTests, Uint32PrimitiveRestart) {
// Same as the above test, but uses an OOB index to emulate primitive restart being disabled,
// causing point C to be written to.
TEST_P(TriangleStripPrimitiveRestartTests, Uint32WithoutPrimitiveRestart) {
// TODO: Re-enable for all backends after robust vertex access is implemented.
// The behavior of OOB indexes is not strictly defined on non-D3D12 platforms.
DAWN_SKIP_TEST_IF(!IsD3D12());
// OOB indexes should return a (0,0,0,1) vertex in D3D12, however this does not occur on Intel
// GPUs, so we must skip this test on Intel for now.
DAWN_SKIP_TEST_IF(IsIntel() && IsD3D12());
wgpu::RenderPipeline pipeline = MakeTestPipeline(wgpu::IndexFormat::Uint32);
wgpu::Buffer indexBuffer =
utils::CreateBufferFromData<uint32_t>(device, wgpu::BufferUsage::Index,
@ -419,13 +418,6 @@ TEST_P(LineStripPrimitiveRestartTests, Uint32PrimitiveRestart) {
// Same as the above test, but uses an OOB index to emulate primitive restart being disabled,
// causing point A to be written to.
TEST_P(LineStripPrimitiveRestartTests, Uint32WithoutPrimitiveRestart) {
// TODO: Re-enable for all backends after robust vertex access is implemented.
// The behavior of OOB indexes is not strictly defined on non-D3D12 platforms.
DAWN_SKIP_TEST_IF(!IsD3D12());
// OOB indexes should return a (0,0,0,1) vertex in D3D12, however this does not occur on Intel
// GPUs, so we must skip this test on Intel for now.
DAWN_SKIP_TEST_IF(IsIntel() && IsD3D12());
wgpu::RenderPipeline pipeline =
MakeTestPipeline(wgpu::IndexFormat::Uint32, wgpu::PrimitiveTopology::LineStrip);