From 01ceccb1eb3320b276db1a0429a9294047142f71 Mon Sep 17 00:00:00 2001 From: Austin Eng Date: Thu, 22 Jul 2021 18:13:00 +0000 Subject: [PATCH] Disallow timestamp query creation if disallow_unsafe_apis Bug: chromium:1226078 Change-Id: I567522c5562d8cba616ef4315c91a0420d5146d6 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59044 Reviewed-by: Hao Li Reviewed-by: Corentin Wallez Commit-Queue: Austin Eng --- src/dawn_native/QuerySet.cpp | 6 ++++++ .../validation/QueryValidationTests.cpp | 1 + .../validation/UnsafeAPIValidationTests.cpp | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/dawn_native/QuerySet.cpp b/src/dawn_native/QuerySet.cpp index e8e3c9083c..598bac24d0 100644 --- a/src/dawn_native/QuerySet.cpp +++ b/src/dawn_native/QuerySet.cpp @@ -94,6 +94,12 @@ namespace dawn_native { return DAWN_VALIDATION_ERROR("The timestamp query feature is not supported"); } + if (device->IsToggleEnabled(Toggle::DisallowUnsafeAPIs)) { + return DAWN_VALIDATION_ERROR( + "The timestamp query is disallowed because it may expose precise timing " + "information"); + } + if (descriptor->pipelineStatisticsCount != 0) { return DAWN_VALIDATION_ERROR( "The pipeline statistics should not be set if query type is Timestamp"); diff --git a/src/tests/unittests/validation/QueryValidationTests.cpp b/src/tests/unittests/validation/QueryValidationTests.cpp index 53a650f56e..f7f8ce6467 100644 --- a/src/tests/unittests/validation/QueryValidationTests.cpp +++ b/src/tests/unittests/validation/QueryValidationTests.cpp @@ -227,6 +227,7 @@ class TimestampQueryValidationTest : public QuerySetValidationTest { WGPUDevice CreateTestDevice() override { dawn_native::DeviceDescriptor descriptor; descriptor.requiredExtensions.push_back("timestamp_query"); + descriptor.forceDisabledToggles.push_back("disallow_unsafe_apis"); return adapter.CreateDevice(&descriptor); } }; diff --git a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp index c5cab0fb41..7504bc980e 100644 --- a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp +++ b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp @@ -191,6 +191,7 @@ class UnsafeQueryAPIValidationTest : public ValidationTest { WGPUDevice CreateTestDevice() override { dawn_native::DeviceDescriptor descriptor; descriptor.requiredExtensions.push_back("pipeline_statistics_query"); + descriptor.requiredExtensions.push_back("timestamp_query"); descriptor.forceEnabledToggles.push_back("disallow_unsafe_apis"); return adapter.CreateDevice(&descriptor); } @@ -217,3 +218,21 @@ TEST_F(UnsafeQueryAPIValidationTest, PipelineStatisticsDisallowed) { ASSERT_DEVICE_ERROR(device.CreateQuerySet(&descriptor)); } } + +// Check timestamp queries are disallowed. +TEST_F(UnsafeQueryAPIValidationTest, TimestampQueryDisallowed) { + wgpu::QuerySetDescriptor descriptor; + descriptor.count = 1; + + // Control case: occlusion query creation is allowed. + { + descriptor.type = wgpu::QueryType::Occlusion; + device.CreateQuerySet(&descriptor); + } + + // Error case: timestamp query creation is disallowed. + { + descriptor.type = wgpu::QueryType::Timestamp; + ASSERT_DEVICE_ERROR(device.CreateQuerySet(&descriptor)); + } +}