// Copyright 2018 The Dawn & Tint Authors // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // 3. Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef INCLUDE_DAWN_NATIVE_DAWNNATIVE_H_ #define INCLUDE_DAWN_NATIVE_DAWNNATIVE_H_ #include <webgpu/webgpu_cpp.h> #include <string> #include <string_view> #include <vector> #include "dawn/dawn_proc_table.h" #include "dawn/native/dawn_native_export.h" namespace dawn::platform { class Platform; } // namespace dawn::platform namespace dawn::native { class InstanceBase; class AdapterBase; // Each toggle is assigned with a TogglesStage, indicating the validation and earliest usage // time of the toggle. enum class ToggleStage { … }; // A struct to record the information of a toggle. A toggle is a code path in Dawn device that // can be manually configured to run or not outside Dawn, including workarounds, special // features and optimizations. struct ToggleInfo { … }; // A struct to record the information of a feature. A feature is a GPU feature that is not // required to be supported by all Dawn backends and can only be used when it is enabled on the // creation of device. struct FeatureInfo { … }; // An adapter is an object that represent on possibility of creating devices in the system. // Most of the time it will represent a combination of a physical GPU and an API. Not that the // same GPU can be represented by multiple adapters but on different APIs. // // The underlying Dawn adapter is owned by the Dawn instance so this class is not RAII but just // a reference to an underlying adapter. class DAWN_NATIVE_EXPORT Adapter { … }; enum BackendValidationLevel { … }; // Can be chained in InstanceDescriptor struct DAWN_NATIVE_EXPORT DawnInstanceDescriptor : wgpu::ChainedStruct { … }; // Represents a connection to dawn_native and is used for dependency injection, discovering // system adapters and injecting custom adapters (like a Swiftshader Vulkan adapter). // // This is an RAII class for Dawn instances and also controls the lifetime of all adapters // for this instance. class DAWN_NATIVE_EXPORT Instance { … }; // Backend-agnostic API for dawn_native DAWN_NATIVE_EXPORT const DawnProcTable& GetProcs(); // Query the names of all the toggles that are enabled in device DAWN_NATIVE_EXPORT std::vector<const char*> GetTogglesUsed(WGPUDevice device); // Backdoor to get the number of lazy clears for testing DAWN_NATIVE_EXPORT size_t GetLazyClearCountForTesting(WGPUDevice device); // Query if texture has been initialized DAWN_NATIVE_EXPORT bool IsTextureSubresourceInitialized( WGPUTexture texture, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount, WGPUTextureAspect aspect = WGPUTextureAspect_All); // Backdoor to get the order of the ProcMap for testing DAWN_NATIVE_EXPORT std::vector<std::string_view> GetProcMapNamesForTesting(); DAWN_NATIVE_EXPORT bool DeviceTick(WGPUDevice device); DAWN_NATIVE_EXPORT bool InstanceProcessEvents(WGPUInstance instance); // ErrorInjector functions used for testing only. Defined in dawn_native/ErrorInjector.cpp DAWN_NATIVE_EXPORT void EnableErrorInjector(); DAWN_NATIVE_EXPORT void DisableErrorInjector(); DAWN_NATIVE_EXPORT void ClearErrorInjector(); DAWN_NATIVE_EXPORT uint64_t AcquireErrorInjectorCallCount(); DAWN_NATIVE_EXPORT void InjectErrorAt(uint64_t index); // The different types of external images enum ExternalImageType { … }; // Common properties of external images struct DAWN_NATIVE_EXPORT ExternalImageDescriptor { … }; struct DAWN_NATIVE_EXPORT ExternalImageExportInfo { … }; DAWN_NATIVE_EXPORT bool CheckIsErrorForTesting(void* objectHandle); DAWN_NATIVE_EXPORT const char* GetObjectLabelForTesting(void* objectHandle); DAWN_NATIVE_EXPORT uint64_t GetAllocatedSizeForTesting(WGPUBuffer buffer); DAWN_NATIVE_EXPORT std::vector<const ToggleInfo*> AllToggleInfos(); // Used to query the details of an feature. Return nullptr if featureName is not a valid // name of an feature supported in Dawn. DAWN_NATIVE_EXPORT const FeatureInfo* GetFeatureInfo(wgpu::FeatureName feature); class DAWN_NATIVE_EXPORT MemoryDump { … }; DAWN_NATIVE_EXPORT void DumpMemoryStatistics(WGPUDevice device, MemoryDump* dump); // Unlike memory dumps which include detailed information about allocations, this only returns the // total estimated memory usage, and is intended for background tracing for UMA. DAWN_NATIVE_EXPORT uint64_t ComputeEstimatedMemoryUsage(WGPUDevice device); // Free any unused GPU memory like staging buffers, cached resources, etc. DAWN_NATIVE_EXPORT void ReduceMemoryUsage(WGPUDevice device); } // namespace dawn::native #endif // INCLUDE_DAWN_NATIVE_DAWNNATIVE_H_