Corentin Wallez d26ee85fba Implement the webgpu.h swapchains in the frontend and Null backend.
The state-tracking of the webgpu.h swapchain is a bit complicated
because contrary to implementation-based swapchains, they have more
guarantees and a "replacing mechanism". For example instead of hoping
the implementation-based swapchain resize automatically, the
surface-based swapchain needs to be replaced by a new swapchain and
invalidated.

This mechanism of invalidation also needs to be triggered when the last
reference to the surface is lost because we don't want to risk the
application destroying the window from under us.

Adds tests for all the cases of invalidation I could think of apart from
device loss.

Bug: dawn:269

Change-Id: Id515dbb640e13c6e30bb1f1e93b8e54f1e2bba4b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/15400
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2020-01-25 10:05:40 +00:00

62 lines
1.5 KiB
C++

// Copyright 2017 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef DAWNNATIVE_FORWARD_H_
#define DAWNNATIVE_FORWARD_H_
#include <cstdint>
namespace dawn_native {
class AdapterBase;
class BindGroupBase;
class BindGroupLayoutBase;
class BufferBase;
class ComputePipelineBase;
class CommandBufferBase;
class CommandEncoder;
class ComputePassEncoder;
class Fence;
class InstanceBase;
class PipelineBase;
class PipelineLayoutBase;
class QueueBase;
class RenderBundleBase;
class RenderBundleEncoder;
class RenderPassEncoder;
class RenderPipelineBase;
class ResourceHeapBase;
class SamplerBase;
class Surface;
class ShaderModuleBase;
class StagingBufferBase;
class SwapChainBase;
class NewSwapChainBase;
class TextureBase;
class TextureViewBase;
class DeviceBase;
template <typename T>
class Ref;
template <typename T>
class PerStage;
struct Format;
} // namespace dawn_native
#endif // DAWNNATIVE_FORWARD_H_