// Copyright 2020 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 SRC_DAWN_NATIVE_SURFACE_H_ #define SRC_DAWN_NATIVE_SURFACE_H_ #include <memory> #include <string> #include "dawn/native/Error.h" #include "dawn/native/Forward.h" #include "dawn/native/ObjectBase.h" #include "partition_alloc/pointers/raw_ptr.h" #include "dawn/native/dawn_platform.h" #include "dawn/common/Platform.h" #if DAWN_PLATFORM_IS(WINDOWS) #include "dawn/native/d3d/d3d_platform.h" #endif // DAWN_PLATFORM_IS(WINDOWS) // Forward declare IUnknown // GetCoreWindow needs to return an IUnknown pointer // non-windows platforms don't have this type struct IUnknown; namespace dawn::native { struct PhysicalDeviceSurfaceCapabilities; // Adapter surface capabilities are cached by the surface class AdapterSurfaceCapCache; ResultOrError<UnpackedPtr<SurfaceDescriptor>> ValidateSurfaceDescriptor( InstanceBase* instance, const SurfaceDescriptor* rawDescriptor); MaybeError ValidateSurfaceConfiguration(DeviceBase* device, const PhysicalDeviceSurfaceCapabilities& capabilities, const SurfaceConfiguration* config, const Surface* surface); // A surface is a sum types of all the kind of windows Dawn supports. The OS-specific types // aren't used because they would cause compilation errors on other OSes (or require // ObjectiveC). // The surface is also used to store the current swapchain so that we can detach it when it is // replaced. class Surface final : public ErrorMonad { … }; // Not defined in webgpu_absl_format.h/cpp because you can't forward-declare a nested type. absl::FormatConvertResult<absl::FormatConversionCharSet::kString> AbslFormatConvert(Surface::Type value, const absl::FormatConversionSpec& spec, absl::FormatSink* s); } // namespace dawn::native #endif // SRC_DAWN_NATIVE_SURFACE_H_