Add an option for the Adapter to use tiered limits

Does nothing right now since Dawn always exposes the default limits.
In the future, setting useTieredLimits to true will bucket the
exposed adapter limits to minimize fingerprinting surface.

Disabled by default for native applications, but Chrome will always
enable it.

Bug: dawn:685
Change-Id: I0ecfefc93f7a554f8f8be7906cef9fa8d4745ac2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/64524
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
Austin Eng 2021-09-17 17:24:44 +00:00 committed by Dawn LUCI CQ
parent c389182758
commit 2e48f011b0
4 changed files with 21 additions and 1 deletions

View File

@ -82,7 +82,14 @@ namespace dawn_native {
if (limits->nextInChain != nullptr) { if (limits->nextInChain != nullptr) {
return false; return false;
} }
limits->limits = mLimits.v1; if (mUseTieredLimits) {
// TODO(crbug.com/dawn/685): Apply limit tiers.
// For now, set all limits to the defaults until tiers are
// defined.
GetDefaultLimits(&limits->limits);
} else {
limits->limits = mLimits.v1;
}
return true; return true;
} }
@ -136,6 +143,10 @@ namespace dawn_native {
return {}; return {};
} }
void AdapterBase::SetUseTieredLimits(bool useTieredLimits) {
mUseTieredLimits = useTieredLimits;
}
void AdapterBase::ResetInternalDeviceForTesting() { void AdapterBase::ResetInternalDeviceForTesting() {
mInstance->ConsumedError(ResetInternalDeviceForTestingImpl()); mInstance->ConsumedError(ResetInternalDeviceForTestingImpl());
} }

View File

@ -54,6 +54,8 @@ namespace dawn_native {
bool GetLimits(SupportedLimits* limits) const; bool GetLimits(SupportedLimits* limits) const;
void SetUseTieredLimits(bool useTieredLimits);
virtual bool SupportsExternalImages() const = 0; virtual bool SupportsExternalImages() const = 0;
protected: protected:
@ -71,6 +73,7 @@ namespace dawn_native {
InstanceBase* mInstance = nullptr; InstanceBase* mInstance = nullptr;
wgpu::BackendType mBackend; wgpu::BackendType mBackend;
CombinedLimits mLimits; CombinedLimits mLimits;
bool mUseTieredLimits = false;
}; };
} // namespace dawn_native } // namespace dawn_native

View File

@ -110,6 +110,10 @@ namespace dawn_native {
return mImpl->GetLimits(reinterpret_cast<SupportedLimits*>(limits)); return mImpl->GetLimits(reinterpret_cast<SupportedLimits*>(limits));
} }
void Adapter::SetUseTieredLimits(bool useTieredLimits) {
mImpl->SetUseTieredLimits(useTieredLimits);
}
bool Adapter::SupportsExternalImages() const { bool Adapter::SupportsExternalImages() const {
return mImpl->SupportsExternalImages(); return mImpl->SupportsExternalImages();
} }

View File

@ -112,6 +112,8 @@ namespace dawn_native {
WGPUDeviceProperties GetAdapterProperties() const; WGPUDeviceProperties GetAdapterProperties() const;
bool GetLimits(WGPUSupportedLimits* limits) const; bool GetLimits(WGPUSupportedLimits* limits) const;
void SetUseTieredLimits(bool useTieredLimits);
// Check that the Adapter is able to support importing external images. This is necessary // Check that the Adapter is able to support importing external images. This is necessary
// to implement the swapchain and interop APIs in Chromium. // to implement the swapchain and interop APIs in Chromium.
bool SupportsExternalImages() const; bool SupportsExternalImages() const;