blob: 4a261bf1f612c5c714e0fed603ee55075311eb47 [file]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tools/graphite/dawn/GraphiteDawnToggles.h"
namespace skiatest::graphite {
wgpu::DawnTogglesDescriptor GetInstanceToggles() {
static constexpr const char* kToggles[] = {
// Needed for newer Dawn APIs that aren't launched in WebGPU.
"allow_unsafe_apis",
};
wgpu::DawnTogglesDescriptor togglesDesc;
togglesDesc.enabledToggleCount = std::size(kToggles);
togglesDesc.enabledToggles = kToggles;
return togglesDesc;
}
wgpu::DawnTogglesDescriptor GetAdapterToggles() {
static constexpr const char* kToggles[] = {
#if defined(SK_DEBUG)
// Setting labels on backend objects has performance overhead.
"use_user_defined_labels_in_backend",
#else
"skip_validation",
#endif
// Lazy clear has performance overhead.
"disable_lazy_clear_for_mapped_at_creation_buffer",
// Robustness impacts performance and is always disabled when running Graphite in
// Chrome, so this keeps Skia's tests operating closer to real-use behavior.
"disable_robustness",
// Validating the SPIR-V shaders generated by Tint may have some overhead, and is
// not required for Graphite since the input is trusted.
"enable_spirv_validation",
};
wgpu::DawnTogglesDescriptor togglesDesc;
togglesDesc.enabledToggleCount = std::size(kToggles);
togglesDesc.enabledToggles = kToggles;
return togglesDesc;
}
void AddPreferredFeatures(const wgpu::Adapter& adapter, std::vector<wgpu::FeatureName>& features) {
auto addFeature = [&](wgpu::FeatureName feature) {
if (adapter.HasFeature(feature)) {
for (auto existing : features) {
if (existing == feature) {
return; // Don't re-add it if it was already in `features`
}
}
features.push_back(feature);
}
};
addFeature(wgpu::FeatureName::BufferMapExtendedUsages);
addFeature(wgpu::FeatureName::DawnLoadResolveTexture);
addFeature(wgpu::FeatureName::DawnPartialLoadResolveTexture);
addFeature(wgpu::FeatureName::DawnTexelCopyBufferRowAlignment);
addFeature(wgpu::FeatureName::DualSourceBlending);
addFeature(wgpu::FeatureName::FramebufferFetch);
addFeature(wgpu::FeatureName::ImplicitDeviceSynchronization);
addFeature(wgpu::FeatureName::MSAARenderToSingleSampled);
addFeature(wgpu::FeatureName::ShaderF16);
addFeature(wgpu::FeatureName::TextureCompressionBC);
addFeature(wgpu::FeatureName::TextureCompressionETC2);
addFeature(wgpu::FeatureName::TextureFormatsTier1);
addFeature(wgpu::FeatureName::TimestampQuery);
addFeature(wgpu::FeatureName::TransientAttachments);
addFeature(wgpu::FeatureName::Unorm16TextureFormats);
addFeature(wgpu::FeatureName::RenderPassRenderArea);
}
} // namespace skiatest::graphite