Query API: Extensions
Add extensions of pipeline statistics and timestamp queries.
Bug: dawn:434
Change-Id: I1a472ee4819bd36ce629034cf5175430bab1febc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/22100
Commit-Queue: Hao Li <hao.x.li@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/dawn.json b/dawn.json
index dc39bb5..739eb13 100644
--- a/dawn.json
+++ b/dawn.json
@@ -651,7 +651,9 @@
"extensible": false,
"members": [
{"name": "texture compression BC", "type": "bool", "default": "false"},
- {"name": "shader float16", "type": "bool", "default": "false"}
+ {"name": "shader float16", "type": "bool", "default": "false"},
+ {"name": "pipeline statistics query", "type": "bool", "default": "false"},
+ {"name": "timestamp query", "type": "bool", "default": "false"}
]
},
"depth stencil state descriptor": {
diff --git a/src/dawn_native/Extensions.cpp b/src/dawn_native/Extensions.cpp
index de6214f..d356616 100644
--- a/src/dawn_native/Extensions.cpp
+++ b/src/dawn_native/Extensions.cpp
@@ -39,7 +39,15 @@
{"shader_float16",
"Support 16bit float arithmetic and declarations in uniform and storage buffers",
"https://bugs.chromium.org/p/dawn/issues/detail?id=426"},
- &WGPUDeviceProperties::shaderFloat16}}};
+ &WGPUDeviceProperties::shaderFloat16},
+ {Extension::PipelineStatisticsQuery,
+ {"pipeline_statistics_query", "Support Pipeline Statistics Query",
+ "https://bugs.chromium.org/p/dawn/issues/detail?id=434"},
+ &WGPUDeviceProperties::pipelineStatisticsQuery},
+ {Extension::TimestampQuery,
+ {"timestamp_query", "Support Timestamp Query",
+ "https://bugs.chromium.org/p/dawn/issues/detail?id=434"},
+ &WGPUDeviceProperties::timestampQuery}}};
} // anonymous namespace
diff --git a/src/dawn_native/Extensions.h b/src/dawn_native/Extensions.h
index 9dbdf77..fbc1d8b 100644
--- a/src/dawn_native/Extensions.h
+++ b/src/dawn_native/Extensions.h
@@ -26,6 +26,8 @@
enum class Extension {
TextureCompressionBC,
ShaderFloat16,
+ PipelineStatisticsQuery,
+ TimestampQuery,
EnumCount,
InvalidEnum = EnumCount,
diff --git a/src/dawn_native/d3d12/AdapterD3D12.cpp b/src/dawn_native/d3d12/AdapterD3D12.cpp
index 8e665d0..4124a76 100644
--- a/src/dawn_native/d3d12/AdapterD3D12.cpp
+++ b/src/dawn_native/d3d12/AdapterD3D12.cpp
@@ -92,6 +92,8 @@
void Adapter::InitializeSupportedExtensions() {
mSupportedExtensions.EnableExtension(Extension::TextureCompressionBC);
+ mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
+ mSupportedExtensions.EnableExtension(Extension::TimestampQuery);
}
ResultOrError<DeviceBase*> Adapter::CreateDeviceImpl(const DeviceDescriptor* descriptor) {
diff --git a/src/dawn_native/metal/BackendMTL.mm b/src/dawn_native/metal/BackendMTL.mm
index 63567a2..093cceb 100644
--- a/src/dawn_native/metal/BackendMTL.mm
+++ b/src/dawn_native/metal/BackendMTL.mm
@@ -214,6 +214,11 @@
if ([mDevice supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily1_v1]) {
mSupportedExtensions.EnableExtension(Extension::TextureCompressionBC);
}
+
+ if (@available(macOS 10.15, *)) {
+ mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
+ mSupportedExtensions.EnableExtension(Extension::TimestampQuery);
+ }
#endif
}
diff --git a/src/dawn_native/vulkan/AdapterVk.cpp b/src/dawn_native/vulkan/AdapterVk.cpp
index 86041df..c220a8e 100644
--- a/src/dawn_native/vulkan/AdapterVk.cpp
+++ b/src/dawn_native/vulkan/AdapterVk.cpp
@@ -80,6 +80,14 @@
mDeviceInfo._16BitStorageFeatures.uniformAndStorageBuffer16BitAccess == VK_TRUE) {
mSupportedExtensions.EnableExtension(Extension::ShaderFloat16);
}
+
+ if (mDeviceInfo.features.pipelineStatisticsQuery == VK_TRUE) {
+ mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
+ }
+
+ if (mDeviceInfo.properties.limits.timestampComputeAndGraphics == VK_TRUE) {
+ mSupportedExtensions.EnableExtension(Extension::TimestampQuery);
+ }
}
ResultOrError<DeviceBase*> Adapter::CreateDeviceImpl(const DeviceDescriptor* descriptor) {
diff --git a/src/tests/unittests/wire/WireWGPUDevicePropertiesTests.cpp b/src/tests/unittests/wire/WireWGPUDevicePropertiesTests.cpp
index 70abc2c..120e4a9 100644
--- a/src/tests/unittests/wire/WireWGPUDevicePropertiesTests.cpp
+++ b/src/tests/unittests/wire/WireWGPUDevicePropertiesTests.cpp
@@ -23,6 +23,9 @@
TEST_F(WireWGPUDevicePropertiesTests, SerializeWGPUDeviceProperties) {
WGPUDeviceProperties sentWGPUDeviceProperties;
sentWGPUDeviceProperties.textureCompressionBC = true;
+ // Set false to test that the serialization can handle both true and false correctly.
+ sentWGPUDeviceProperties.pipelineStatisticsQuery = false;
+ sentWGPUDeviceProperties.timestampQuery = true;
size_t sentWGPUDevicePropertiesSize =
dawn_wire::SerializedWGPUDevicePropertiesSize(&sentWGPUDeviceProperties);
@@ -33,4 +36,6 @@
WGPUDeviceProperties receivedWGPUDeviceProperties;
dawn_wire::DeserializeWGPUDeviceProperties(&receivedWGPUDeviceProperties, buffer.data());
ASSERT_TRUE(receivedWGPUDeviceProperties.textureCompressionBC);
+ ASSERT_FALSE(receivedWGPUDeviceProperties.pipelineStatisticsQuery);
+ ASSERT_TRUE(receivedWGPUDeviceProperties.timestampQuery);
}