Disallow pipeline statistics query as UnsafeAPIs
- Pipeline statistics query is not fully implemented, disallow its
creation as unsafe
- Add pipeline statistics creation in UnsafeAPIsTest, because it needs
enable extension, add a separate test class for it.
BUG: chromium:1177506
Change-Id: Ic77e04c9c854b396e7240674bd9deb0caf97a513
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53889
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn_native/QuerySet.cpp b/src/dawn_native/QuerySet.cpp
index 26e9c6d..e8e3c90 100644
--- a/src/dawn_native/QuerySet.cpp
+++ b/src/dawn_native/QuerySet.cpp
@@ -58,6 +58,14 @@
break;
case wgpu::QueryType::PipelineStatistics: {
+ // TODO(crbug.com/1177506): Pipeline statistics query is not fully implemented.
+ // Disallow it as unsafe until the implementaion is completed.
+ if (device->IsToggleEnabled(Toggle::DisallowUnsafeAPIs)) {
+ return DAWN_VALIDATION_ERROR(
+ "Pipeline statistics query is disallowed because it's not fully "
+ "implemented");
+ }
+
if (!device->IsExtensionEnabled(Extension::PipelineStatisticsQuery)) {
return DAWN_VALIDATION_ERROR(
"The pipeline statistics query feature is not supported");
diff --git a/src/tests/unittests/validation/QueryValidationTests.cpp b/src/tests/unittests/validation/QueryValidationTests.cpp
index 1ee0134..53a650f 100644
--- a/src/tests/unittests/validation/QueryValidationTests.cpp
+++ b/src/tests/unittests/validation/QueryValidationTests.cpp
@@ -226,7 +226,7 @@
protected:
WGPUDevice CreateTestDevice() override {
dawn_native::DeviceDescriptor descriptor;
- descriptor.requiredExtensions = {"timestamp_query"};
+ descriptor.requiredExtensions.push_back("timestamp_query");
return adapter.CreateDevice(&descriptor);
}
};
@@ -429,7 +429,10 @@
protected:
WGPUDevice CreateTestDevice() override {
dawn_native::DeviceDescriptor descriptor;
- descriptor.requiredExtensions = {"pipeline_statistics_query"};
+ descriptor.requiredExtensions.push_back("pipeline_statistics_query");
+ // TODO(crbug.com/1177506): Pipeline statistic query is an unsafe API, disable disallowing
+ // unsafe APIs to test it.
+ 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 6eebeb0..02e55fd 100644
--- a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
+++ b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
@@ -201,3 +201,35 @@
ASSERT_DEVICE_ERROR(device.CreateBindGroupLayout(&desc));
}
}
+
+class UnsafeQueryAPIValidationTest : public ValidationTest {
+ protected:
+ WGPUDevice CreateTestDevice() override {
+ dawn_native::DeviceDescriptor descriptor;
+ descriptor.requiredExtensions.push_back("pipeline_statistics_query");
+ descriptor.forceEnabledToggles.push_back("disallow_unsafe_apis");
+ return adapter.CreateDevice(&descriptor);
+ }
+};
+
+// Check that pipeline statistics query are disallowed.
+TEST_F(UnsafeQueryAPIValidationTest, PipelineStatisticsDisallowed) {
+ wgpu::QuerySetDescriptor descriptor;
+ descriptor.count = 1;
+
+ // Control case: occlusion query creation is allowed.
+ {
+ descriptor.type = wgpu::QueryType::Occlusion;
+ device.CreateQuerySet(&descriptor);
+ }
+
+ // Error case: pipeline statistics query creation is disallowed.
+ {
+ descriptor.type = wgpu::QueryType::PipelineStatistics;
+ std::vector<wgpu::PipelineStatisticName> pipelineStatistics = {
+ wgpu::PipelineStatisticName::VertexShaderInvocations};
+ descriptor.pipelineStatistics = pipelineStatistics.data();
+ descriptor.pipelineStatisticsCount = pipelineStatistics.size();
+ ASSERT_DEVICE_ERROR(device.CreateQuerySet(&descriptor));
+ }
+}