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 <hao.x.li@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/QuerySet.cpp b/src/dawn_native/QuerySet.cpp
index e8e3c90..598bac2 100644
--- a/src/dawn_native/QuerySet.cpp
+++ b/src/dawn_native/QuerySet.cpp
@@ -94,6 +94,12 @@
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 53a650f..f7f8ce6 100644
--- a/src/tests/unittests/validation/QueryValidationTests.cpp
+++ b/src/tests/unittests/validation/QueryValidationTests.cpp
@@ -227,6 +227,7 @@
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 c5cab0f..7504bc9 100644
--- a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
+++ b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
@@ -191,6 +191,7 @@
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 @@
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));
+ }
+}