Remove all NativeSwapChain*
These were helpers to avoid the need for users of implementation-based
swapchains to implement them themselves. They are no longer used and can
be removed.
Also removes SwapChainuUtils.h that's no longer used.
Bug: dawn:269
Change-Id: I3c563edaf107e9ce04f708e8bacae9d231b0f40d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/126421
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/include/dawn/native/D3D12Backend.h b/include/dawn/native/D3D12Backend.h
index 131afa7..7c26687 100644
--- a/include/dawn/native/D3D12Backend.h
+++ b/include/dawn/native/D3D12Backend.h
@@ -23,7 +23,6 @@
#include <memory>
#include <vector>
-#include "dawn/dawn_wsi.h"
#include "dawn/native/D3DBackend.h"
struct ID3D12Device;
@@ -36,10 +35,6 @@
class ExternalImageDXGIImpl;
DAWN_NATIVE_EXPORT Microsoft::WRL::ComPtr<ID3D12Device> GetD3D12Device(WGPUDevice device);
-DAWN_NATIVE_EXPORT DawnSwapChainImplementation CreateNativeSwapChainImpl(WGPUDevice device,
- HWND window);
-DAWN_NATIVE_EXPORT WGPUTextureFormat
-GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain);
enum MemorySegment {
Local,
diff --git a/include/dawn/native/MetalBackend.h b/include/dawn/native/MetalBackend.h
index b9ab707..4fd2752 100644
--- a/include/dawn/native/MetalBackend.h
+++ b/include/dawn/native/MetalBackend.h
@@ -17,7 +17,6 @@
#include <vector>
-#include "dawn/dawn_wsi.h"
#include "dawn/native/DawnNative.h"
// The specifics of the Metal backend expose types in function signatures that might not be
diff --git a/include/dawn/native/NullBackend.h b/include/dawn/native/NullBackend.h
index bfa8a63..c28b90f 100644
--- a/include/dawn/native/NullBackend.h
+++ b/include/dawn/native/NullBackend.h
@@ -15,11 +15,12 @@
#ifndef INCLUDE_DAWN_NATIVE_NULLBACKEND_H_
#define INCLUDE_DAWN_NATIVE_NULLBACKEND_H_
-#include "dawn/dawn_wsi.h"
#include "dawn/native/DawnNative.h"
namespace dawn::native::null {
-DAWN_NATIVE_EXPORT DawnSwapChainImplementation CreateNativeSwapChainImpl();
+
+// Nothing for now \o/
+
} // namespace dawn::native::null
#endif // INCLUDE_DAWN_NATIVE_NULLBACKEND_H_
diff --git a/include/dawn/native/OpenGLBackend.h b/include/dawn/native/OpenGLBackend.h
index cceaab8..fd41b70 100644
--- a/include/dawn/native/OpenGLBackend.h
+++ b/include/dawn/native/OpenGLBackend.h
@@ -17,7 +17,6 @@
typedef void* EGLImage;
-#include "dawn/dawn_wsi.h"
#include "dawn/native/DawnNative.h"
namespace dawn::native::opengl {
@@ -33,13 +32,6 @@
AdapterDiscoveryOptionsES();
};
-using PresentCallback = void (*)(void*);
-DAWN_NATIVE_EXPORT DawnSwapChainImplementation CreateNativeSwapChainImpl(WGPUDevice device,
- PresentCallback present,
- void* presentUserdata);
-DAWN_NATIVE_EXPORT WGPUTextureFormat
-GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain);
-
struct DAWN_NATIVE_EXPORT ExternalImageDescriptorEGLImage : ExternalImageDescriptor {
public:
ExternalImageDescriptorEGLImage();
diff --git a/include/dawn/native/VulkanBackend.h b/include/dawn/native/VulkanBackend.h
index 68767b8..a056356 100644
--- a/include/dawn/native/VulkanBackend.h
+++ b/include/dawn/native/VulkanBackend.h
@@ -20,7 +20,6 @@
#include <array>
#include <vector>
-#include "dawn/dawn_wsi.h"
#include "dawn/native/DawnNative.h"
namespace dawn::native::vulkan {
@@ -29,11 +28,6 @@
DAWN_NATIVE_EXPORT PFN_vkVoidFunction GetInstanceProcAddr(WGPUDevice device, const char* pName);
-DAWN_NATIVE_EXPORT DawnSwapChainImplementation CreateNativeSwapChainImpl(WGPUDevice device,
- ::VkSurfaceKHR surface);
-DAWN_NATIVE_EXPORT WGPUTextureFormat
-GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain);
-
struct DAWN_NATIVE_EXPORT AdapterDiscoveryOptions : public AdapterDiscoveryOptionsBase {
AdapterDiscoveryOptions();
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index 533ec13..df20a6c 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -263,7 +263,6 @@
"SlabAllocator.cpp",
"SlabAllocator.h",
"StackContainer.h",
- "SwapChainUtils.h",
"SystemUtils.cpp",
"SystemUtils.h",
"TypeTraits.h",
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index a2741d1..45de3dc 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -69,7 +69,6 @@
"SlabAllocator.cpp"
"SlabAllocator.h"
"StackContainer.h"
- "SwapChainUtils.h"
"SystemUtils.cpp"
"SystemUtils.h"
"TypeTraits.h"
diff --git a/src/dawn/common/SwapChainUtils.h b/src/dawn/common/SwapChainUtils.h
deleted file mode 100644
index 93f9b61..0000000
--- a/src/dawn/common/SwapChainUtils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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 SRC_DAWN_COMMON_SWAPCHAINUTILS_H_
-#define SRC_DAWN_COMMON_SWAPCHAINUTILS_H_
-
-#include "dawn/dawn_wsi.h"
-
-template <typename T>
-DawnSwapChainImplementation CreateSwapChainImplementation(T* swapChain) {
- DawnSwapChainImplementation impl = {};
- impl.userData = swapChain;
- impl.Init = [](void* userData, void* wsiContext) {
- auto* ctx = static_cast<typename T::WSIContext*>(wsiContext);
- reinterpret_cast<T*>(userData)->Init(ctx);
- };
- impl.Destroy = [](void* userData) { delete reinterpret_cast<T*>(userData); };
- impl.Configure = [](void* userData, WGPUTextureFormat format, WGPUTextureUsage allowedUsage,
- uint32_t width, uint32_t height) {
- return static_cast<T*>(userData)->Configure(format, allowedUsage, width, height);
- };
- impl.GetNextTexture = [](void* userData, DawnSwapChainNextTexture* nextTexture) {
- return static_cast<T*>(userData)->GetNextTexture(nextTexture);
- };
- impl.Present = [](void* userData) { return static_cast<T*>(userData)->Present(); };
- return impl;
-}
-
-#endif // SRC_DAWN_COMMON_SWAPCHAINUTILS_H_
diff --git a/src/dawn/native/BUILD.gn b/src/dawn/native/BUILD.gn
index e3cf1e0..ee5f541 100644
--- a/src/dawn/native/BUILD.gn
+++ b/src/dawn/native/BUILD.gn
@@ -476,8 +476,6 @@
"d3d12/HeapD3D12.cpp",
"d3d12/HeapD3D12.h",
"d3d12/IntegerTypes.h",
- "d3d12/NativeSwapChainImplD3D12.cpp",
- "d3d12/NativeSwapChainImplD3D12.h",
"d3d12/PageableD3D12.cpp",
"d3d12/PageableD3D12.h",
"d3d12/PipelineLayoutD3D12.cpp",
@@ -613,8 +611,6 @@
"opengl/Forward.h",
"opengl/GLFormat.cpp",
"opengl/GLFormat.h",
- "opengl/NativeSwapChainImplGL.cpp",
- "opengl/NativeSwapChainImplGL.h",
"opengl/OpenGLFunctions.cpp",
"opengl/OpenGLFunctions.h",
"opengl/OpenGLVersion.cpp",
@@ -677,8 +673,6 @@
"vulkan/FencedDeleter.cpp",
"vulkan/FencedDeleter.h",
"vulkan/Forward.h",
- "vulkan/NativeSwapChainImplVk.cpp",
- "vulkan/NativeSwapChainImplVk.h",
"vulkan/PipelineCacheVk.cpp",
"vulkan/PipelineCacheVk.h",
"vulkan/PipelineLayoutVk.cpp",
diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
index 7c479a0..f8d90ba 100644
--- a/src/dawn/native/CMakeLists.txt
+++ b/src/dawn/native/CMakeLists.txt
@@ -334,8 +334,6 @@
"d3d12/HeapD3D12.cpp"
"d3d12/HeapD3D12.h"
"d3d12/IntegerTypes.h"
- "d3d12/NativeSwapChainImplD3D12.cpp"
- "d3d12/NativeSwapChainImplD3D12.h"
"d3d12/PageableD3D12.cpp"
"d3d12/PageableD3D12.h"
"d3d12/PipelineLayoutD3D12.cpp"
@@ -482,8 +480,6 @@
"opengl/Forward.h"
"opengl/GLFormat.cpp"
"opengl/GLFormat.h"
- "opengl/NativeSwapChainImplGL.cpp"
- "opengl/NativeSwapChainImplGL.h"
"opengl/OpenGLFunctions.cpp"
"opengl/OpenGLFunctions.h"
"opengl/OpenGLVersion.cpp"
@@ -550,8 +546,6 @@
"vulkan/FencedDeleter.cpp"
"vulkan/FencedDeleter.h"
"vulkan/Forward.h"
- "vulkan/NativeSwapChainImplVk.cpp"
- "vulkan/NativeSwapChainImplVk.h"
"vulkan/PipelineCacheVk.cpp"
"vulkan/PipelineCacheVk.h"
"vulkan/PipelineLayoutVk.cpp"
diff --git a/src/dawn/native/d3d12/D3D12Backend.cpp b/src/dawn/native/d3d12/D3D12Backend.cpp
index d7e3139..164276f 100644
--- a/src/dawn/native/d3d12/D3D12Backend.cpp
+++ b/src/dawn/native/d3d12/D3D12Backend.cpp
@@ -22,11 +22,9 @@
#include "dawn/common/Log.h"
#include "dawn/common/Math.h"
-#include "dawn/common/SwapChainUtils.h"
#include "dawn/native/d3d12/D3D11on12Util.h"
#include "dawn/native/d3d12/DeviceD3D12.h"
#include "dawn/native/d3d12/ExternalImageDXGIImpl.h"
-#include "dawn/native/d3d12/NativeSwapChainImplD3D12.h"
#include "dawn/native/d3d12/ResidencyManagerD3D12.h"
#include "dawn/native/d3d12/TextureD3D12.h"
@@ -36,21 +34,6 @@
return ToBackend(FromAPI(device))->GetD3D12Device();
}
-DawnSwapChainImplementation CreateNativeSwapChainImpl(WGPUDevice device, HWND window) {
- Device* backendDevice = ToBackend(FromAPI(device));
-
- DawnSwapChainImplementation impl;
- impl = CreateSwapChainImplementation(new NativeSwapChainImpl(backendDevice, window));
- impl.textureUsage = WGPUTextureUsage_Present;
-
- return impl;
-}
-
-WGPUTextureFormat GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain) {
- NativeSwapChainImpl* impl = reinterpret_cast<NativeSwapChainImpl*>(swapChain->userData);
- return static_cast<WGPUTextureFormat>(impl->GetPreferredFormat());
-}
-
ExternalImageDescriptorDXGISharedHandle::ExternalImageDescriptorDXGISharedHandle()
: ExternalImageDescriptor(ExternalImageType::DXGISharedHandle) {}
diff --git a/src/dawn/native/d3d12/NativeSwapChainImplD3D12.cpp b/src/dawn/native/d3d12/NativeSwapChainImplD3D12.cpp
deleted file mode 100644
index 91b9687..0000000
--- a/src/dawn/native/d3d12/NativeSwapChainImplD3D12.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2018 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.
-
-#include "dawn/native/d3d12/NativeSwapChainImplD3D12.h"
-
-#include "dawn/common/Assert.h"
-#include "dawn/native/d3d/UtilsD3D.h"
-#include "dawn/native/d3d12/DeviceD3D12.h"
-#include "dawn/native/d3d12/TextureD3D12.h"
-
-namespace dawn::native::d3d12 {
-
-namespace {
-DXGI_USAGE D3D12SwapChainBufferUsage(WGPUTextureUsage allowedUsages) {
- DXGI_USAGE usage = DXGI_CPU_ACCESS_NONE;
- if (allowedUsages & WGPUTextureUsage_TextureBinding) {
- usage |= DXGI_USAGE_SHADER_INPUT;
- }
- if (allowedUsages & WGPUTextureUsage_StorageBinding) {
- usage |= DXGI_USAGE_UNORDERED_ACCESS;
- }
- if (allowedUsages & WGPUTextureUsage_RenderAttachment) {
- usage |= DXGI_USAGE_RENDER_TARGET_OUTPUT;
- }
- return usage;
-}
-
-static constexpr unsigned int kFrameCount = 3;
-} // anonymous namespace
-
-NativeSwapChainImpl::NativeSwapChainImpl(Device* device, HWND window)
- : mWindow(window), mDevice(device), mInterval(1) {}
-
-NativeSwapChainImpl::~NativeSwapChainImpl() {}
-
-void NativeSwapChainImpl::Init(DawnWSIContextD3D12* /*context*/) {}
-
-DawnSwapChainError NativeSwapChainImpl::Configure(WGPUTextureFormat format,
- WGPUTextureUsage usage,
- uint32_t width,
- uint32_t height) {
- ASSERT(width > 0);
- ASSERT(height > 0);
- ASSERT(format == static_cast<WGPUTextureFormat>(GetPreferredFormat()));
-
- ComPtr<IDXGIFactory4> factory = mDevice->GetFactory();
- ComPtr<ID3D12CommandQueue> queue = mDevice->GetCommandQueue();
-
- mInterval = mDevice->IsToggleEnabled(Toggle::TurnOffVsync) == true ? 0 : 1;
-
- // Create the D3D12 swapchain, assuming only two buffers for now
- DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {};
- swapChainDesc.Width = width;
- swapChainDesc.Height = height;
- swapChainDesc.Format = d3d::DXGITextureFormat(GetPreferredFormat());
- swapChainDesc.BufferUsage = D3D12SwapChainBufferUsage(usage);
- swapChainDesc.BufferCount = kFrameCount;
- swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
- swapChainDesc.SampleDesc.Count = 1;
- swapChainDesc.SampleDesc.Quality = 0;
-
- ComPtr<IDXGISwapChain1> swapChain1;
- ASSERT_SUCCESS(factory->CreateSwapChainForHwnd(queue.Get(), mWindow, &swapChainDesc, nullptr,
- nullptr, &swapChain1));
-
- ASSERT_SUCCESS(swapChain1.As(&mSwapChain));
-
- // Gather the resources that will be used to present to the swapchain
- mBuffers.resize(kFrameCount);
- for (uint32_t i = 0; i < kFrameCount; ++i) {
- ASSERT_SUCCESS(mSwapChain->GetBuffer(i, IID_PPV_ARGS(&mBuffers[i])));
- }
-
- // Set the initial serial of buffers to 0 so that we don't wait on them when they are first
- // used
- mBufferSerials.resize(kFrameCount, ExecutionSerial(0));
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::GetNextTexture(DawnSwapChainNextTexture* nextTexture) {
- mCurrentBuffer = mSwapChain->GetCurrentBackBufferIndex();
- nextTexture->texture.ptr = mBuffers[mCurrentBuffer].Get();
-
- // TODO(crbug.com/dawn/269) Currently we force the CPU to wait for the GPU to be finished
- // with the buffer. Ideally the synchronization should be all done on the GPU.
- ASSERT(mDevice->WaitForSerial(mBufferSerials[mCurrentBuffer]).IsSuccess());
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::Present() {
- // This assumes the texture has already been transition to the PRESENT state.
-
- ASSERT_SUCCESS(mSwapChain->Present(mInterval, 0));
- // TODO(crbug.com/dawn/833): Make the serial ticking implicit.
- ASSERT(mDevice->NextSerial().IsSuccess());
-
- mBufferSerials[mCurrentBuffer] = mDevice->GetPendingCommandSerial();
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-wgpu::TextureFormat NativeSwapChainImpl::GetPreferredFormat() const {
- return wgpu::TextureFormat::RGBA8Unorm;
-}
-
-} // namespace dawn::native::d3d12
diff --git a/src/dawn/native/d3d12/NativeSwapChainImplD3D12.h b/src/dawn/native/d3d12/NativeSwapChainImplD3D12.h
deleted file mode 100644
index 6bedd2d..0000000
--- a/src/dawn/native/d3d12/NativeSwapChainImplD3D12.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2018 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 SRC_DAWN_NATIVE_D3D12_NATIVESWAPCHAINIMPLD3D12_H_
-#define SRC_DAWN_NATIVE_D3D12_NATIVESWAPCHAINIMPLD3D12_H_
-
-#include <vector>
-
-#include "dawn/native/d3d12/d3d12_platform.h"
-
-#include "dawn/dawn_wsi.h"
-#include "dawn/native/IntegerTypes.h"
-#include "dawn/native/dawn_platform.h"
-
-namespace dawn::native::d3d12 {
-
-class Device;
-
-class NativeSwapChainImpl {
- public:
- using WSIContext = DawnWSIContextD3D12;
-
- NativeSwapChainImpl(Device* device, HWND window);
- ~NativeSwapChainImpl();
-
- void Init(DawnWSIContextD3D12* context);
- DawnSwapChainError Configure(WGPUTextureFormat format,
- WGPUTextureUsage,
- uint32_t width,
- uint32_t height);
- DawnSwapChainError GetNextTexture(DawnSwapChainNextTexture* nextTexture);
- DawnSwapChainError Present();
-
- wgpu::TextureFormat GetPreferredFormat() const;
-
- private:
- HWND mWindow = nullptr;
- Device* mDevice = nullptr;
- UINT mInterval;
-
- ComPtr<IDXGISwapChain3> mSwapChain = nullptr;
- std::vector<ComPtr<ID3D12Resource>> mBuffers;
- std::vector<ExecutionSerial> mBufferSerials;
- uint32_t mCurrentBuffer;
-};
-
-} // namespace dawn::native::d3d12
-
-#endif // SRC_DAWN_NATIVE_D3D12_NATIVESWAPCHAINIMPLD3D12_H_
diff --git a/src/dawn/native/null/DeviceNull.cpp b/src/dawn/native/null/DeviceNull.cpp
index 897e0a01..30cf6cb 100644
--- a/src/dawn/native/null/DeviceNull.cpp
+++ b/src/dawn/native/null/DeviceNull.cpp
@@ -494,29 +494,6 @@
return {};
}
-// NativeSwapChainImpl
-
-void NativeSwapChainImpl::Init(WSIContext* context) {}
-
-DawnSwapChainError NativeSwapChainImpl::Configure(WGPUTextureFormat format,
- WGPUTextureUsage,
- uint32_t width,
- uint32_t height) {
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::GetNextTexture(DawnSwapChainNextTexture* nextTexture) {
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::Present() {
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-wgpu::TextureFormat NativeSwapChainImpl::GetPreferredFormat() const {
- return wgpu::TextureFormat::RGBA8Unorm;
-}
-
uint32_t Device::GetOptimalBytesPerRowAlignment() const {
return 1;
}
diff --git a/src/dawn/native/null/DeviceNull.h b/src/dawn/native/null/DeviceNull.h
index 402b155..1f0c7d9 100644
--- a/src/dawn/native/null/DeviceNull.h
+++ b/src/dawn/native/null/DeviceNull.h
@@ -322,19 +322,6 @@
MaybeError OnBeforePresent(TextureViewBase*) override;
};
-class NativeSwapChainImpl {
- public:
- using WSIContext = struct {};
- void Init(WSIContext* context);
- DawnSwapChainError Configure(WGPUTextureFormat format,
- WGPUTextureUsage,
- uint32_t width,
- uint32_t height);
- DawnSwapChainError GetNextTexture(DawnSwapChainNextTexture* nextTexture);
- DawnSwapChainError Present();
- wgpu::TextureFormat GetPreferredFormat() const;
-};
-
class Texture : public TextureBase {
public:
Texture(DeviceBase* device, const TextureDescriptor* descriptor, TextureState state);
diff --git a/src/dawn/native/null/NullBackend.cpp b/src/dawn/native/null/NullBackend.cpp
index 7e4ce53..fcd4b55 100644
--- a/src/dawn/native/null/NullBackend.cpp
+++ b/src/dawn/native/null/NullBackend.cpp
@@ -17,16 +17,10 @@
#include "dawn/native/NullBackend.h"
-#include "dawn/common/SwapChainUtils.h"
#include "dawn/native/null/DeviceNull.h"
namespace dawn::native::null {
-DawnSwapChainImplementation CreateNativeSwapChainImpl() {
- DawnSwapChainImplementation impl;
- impl = CreateSwapChainImplementation(new NativeSwapChainImpl());
- impl.textureUsage = WGPUTextureUsage_Present;
- return impl;
-}
+// Nothing for now \o/
} // namespace dawn::native::null
diff --git a/src/dawn/native/opengl/NativeSwapChainImplGL.cpp b/src/dawn/native/opengl/NativeSwapChainImplGL.cpp
deleted file mode 100644
index 05e377a..0000000
--- a/src/dawn/native/opengl/NativeSwapChainImplGL.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2019 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.
-
-#include "dawn/native/opengl/NativeSwapChainImplGL.h"
-
-#include "dawn/native/opengl/DeviceGL.h"
-
-namespace dawn::native::opengl {
-
-NativeSwapChainImpl::NativeSwapChainImpl(Device* device,
- PresentCallback present,
- void* presentUserdata)
- : mPresentCallback(present), mPresentUserdata(presentUserdata), mDevice(device) {}
-
-NativeSwapChainImpl::~NativeSwapChainImpl() {
- const OpenGLFunctions& gl = mDevice->GetGL();
- gl.DeleteTextures(1, &mBackTexture);
- gl.DeleteFramebuffers(1, &mBackFBO);
-}
-
-void NativeSwapChainImpl::Init(DawnWSIContextGL* /*context*/) {
- const OpenGLFunctions& gl = mDevice->GetGL();
- gl.GenTextures(1, &mBackTexture);
- gl.BindTexture(GL_TEXTURE_2D, mBackTexture);
- gl.TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-
- gl.GenFramebuffers(1, &mBackFBO);
- gl.BindFramebuffer(GL_READ_FRAMEBUFFER, mBackFBO);
- gl.FramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mBackTexture,
- 0);
-}
-
-DawnSwapChainError NativeSwapChainImpl::Configure(WGPUTextureFormat format,
- WGPUTextureUsage usage,
- uint32_t width,
- uint32_t height) {
- if (format != WGPUTextureFormat_RGBA8Unorm) {
- return "unsupported format";
- }
- ASSERT(width > 0);
- ASSERT(height > 0);
- mWidth = width;
- mHeight = height;
-
- const OpenGLFunctions& gl = mDevice->GetGL();
- gl.BindTexture(GL_TEXTURE_2D, mBackTexture);
- // Reallocate the texture
- gl.TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::GetNextTexture(DawnSwapChainNextTexture* nextTexture) {
- nextTexture->texture.u32 = mBackTexture;
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::Present() {
- const OpenGLFunctions& gl = mDevice->GetGL();
- gl.BindFramebuffer(GL_READ_FRAMEBUFFER, mBackFBO);
- gl.BindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
- gl.Scissor(0, 0, mWidth, mHeight);
- gl.BlitFramebuffer(0, 0, mWidth, mHeight, 0, mHeight, mWidth, 0, GL_COLOR_BUFFER_BIT,
- GL_NEAREST);
-
- mPresentCallback(mPresentUserdata);
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-wgpu::TextureFormat NativeSwapChainImpl::GetPreferredFormat() const {
- return wgpu::TextureFormat::RGBA8Unorm;
-}
-
-} // namespace dawn::native::opengl
diff --git a/src/dawn/native/opengl/NativeSwapChainImplGL.h b/src/dawn/native/opengl/NativeSwapChainImplGL.h
deleted file mode 100644
index 1a2013e..0000000
--- a/src/dawn/native/opengl/NativeSwapChainImplGL.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// 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 SRC_DAWN_NATIVE_OPENGL_NATIVESWAPCHAINIMPLGL_H_
-#define SRC_DAWN_NATIVE_OPENGL_NATIVESWAPCHAINIMPLGL_H_
-
-#include "dawn/native/OpenGLBackend.h"
-
-#include "dawn/native/dawn_platform.h"
-#include "dawn/native/opengl/opengl_platform.h"
-
-namespace dawn::native::opengl {
-
-class Device;
-
-class NativeSwapChainImpl {
- public:
- using WSIContext = DawnWSIContextGL;
-
- NativeSwapChainImpl(Device* device, PresentCallback present, void* presentUserdata);
- ~NativeSwapChainImpl();
-
- void Init(DawnWSIContextGL* context);
- DawnSwapChainError Configure(WGPUTextureFormat format,
- WGPUTextureUsage,
- uint32_t width,
- uint32_t height);
- DawnSwapChainError GetNextTexture(DawnSwapChainNextTexture* nextTexture);
- DawnSwapChainError Present();
-
- wgpu::TextureFormat GetPreferredFormat() const;
-
- private:
- PresentCallback mPresentCallback;
- void* mPresentUserdata;
-
- uint32_t mWidth = 0;
- uint32_t mHeight = 0;
- GLuint mBackFBO = 0;
- GLuint mBackTexture = 0;
-
- Device* mDevice = nullptr;
-};
-
-} // namespace dawn::native::opengl
-
-#endif // SRC_DAWN_NATIVE_OPENGL_NATIVESWAPCHAINIMPLGL_H_
diff --git a/src/dawn/native/opengl/OpenGLBackend.cpp b/src/dawn/native/opengl/OpenGLBackend.cpp
index 87cd37f..7a4c720 100644
--- a/src/dawn/native/opengl/OpenGLBackend.cpp
+++ b/src/dawn/native/opengl/OpenGLBackend.cpp
@@ -17,9 +17,7 @@
#include "dawn/native/OpenGLBackend.h"
-#include "dawn/common/SwapChainUtils.h"
#include "dawn/native/opengl/DeviceGL.h"
-#include "dawn/native/opengl/NativeSwapChainImplGL.h"
namespace dawn::native::opengl {
@@ -29,24 +27,6 @@
AdapterDiscoveryOptionsES::AdapterDiscoveryOptionsES()
: AdapterDiscoveryOptions(WGPUBackendType_OpenGLES) {}
-DawnSwapChainImplementation CreateNativeSwapChainImpl(WGPUDevice device,
- PresentCallback present,
- void* presentUserdata) {
- Device* backendDevice = ToBackend(FromAPI(device));
-
- DawnSwapChainImplementation impl;
- impl = CreateSwapChainImplementation(
- new NativeSwapChainImpl(backendDevice, present, presentUserdata));
- impl.textureUsage = WGPUTextureUsage_Present;
-
- return impl;
-}
-
-WGPUTextureFormat GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain) {
- NativeSwapChainImpl* impl = reinterpret_cast<NativeSwapChainImpl*>(swapChain->userData);
- return static_cast<WGPUTextureFormat>(impl->GetPreferredFormat());
-}
-
ExternalImageDescriptorEGLImage::ExternalImageDescriptorEGLImage()
: ExternalImageDescriptor(ExternalImageType::EGLImage) {}
diff --git a/src/dawn/native/vulkan/NativeSwapChainImplVk.cpp b/src/dawn/native/vulkan/NativeSwapChainImplVk.cpp
deleted file mode 100644
index 6a6f4e2..0000000
--- a/src/dawn/native/vulkan/NativeSwapChainImplVk.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright 2018 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.
-
-#include "dawn/native/vulkan/NativeSwapChainImplVk.h"
-
-#include <limits>
-
-#include "dawn/native/vulkan/DeviceVk.h"
-#include "dawn/native/vulkan/FencedDeleter.h"
-#include "dawn/native/vulkan/TextureVk.h"
-
-namespace dawn::native::vulkan {
-
-namespace {
-
-bool chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes,
- bool turnOffVsync,
- VkPresentModeKHR* presentMode) {
- if (turnOffVsync) {
- for (const auto& availablePresentMode : availablePresentModes) {
- if (availablePresentMode == VK_PRESENT_MODE_IMMEDIATE_KHR) {
- *presentMode = availablePresentMode;
- return true;
- }
- }
- return false;
- }
-
- *presentMode = VK_PRESENT_MODE_FIFO_KHR;
- return true;
-}
-
-bool ChooseSurfaceConfig(const VulkanSurfaceInfo& info,
- NativeSwapChainImpl::ChosenConfig* config,
- bool turnOffVsync) {
- VkPresentModeKHR presentMode;
- if (!chooseSwapPresentMode(info.presentModes, turnOffVsync, &presentMode)) {
- return false;
- }
- // TODO(crbug.com/dawn/269): For now this is hardcoded to what works with one NVIDIA
- // driver. Need to generalize
- config->nativeFormat = VK_FORMAT_B8G8R8A8_UNORM;
- config->colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
- config->format = wgpu::TextureFormat::BGRA8Unorm;
- config->minImageCount = 3;
- // TODO(crbug.com/dawn/269): This is upside down compared to what we want, at least
- // on Linux
- config->preTransform = info.capabilities.currentTransform;
- config->presentMode = presentMode;
- config->compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
-
- return true;
-}
-} // anonymous namespace
-
-NativeSwapChainImpl::NativeSwapChainImpl(Device* device, VkSurfaceKHR surface)
- : mSurface(surface), mDevice(device) {
- // Call this immediately, so that BackendBinding::GetPreferredSwapChainTextureFormat
- // will return a correct result before a SwapChain is created.
- UpdateSurfaceConfig();
-}
-
-NativeSwapChainImpl::~NativeSwapChainImpl() {
- if (mSwapChain != VK_NULL_HANDLE) {
- mDevice->GetFencedDeleter()->DeleteWhenUnused(mSwapChain);
- mSwapChain = VK_NULL_HANDLE;
- }
- if (mSurface != VK_NULL_HANDLE) {
- mDevice->GetFencedDeleter()->DeleteWhenUnused(mSurface);
- mSurface = VK_NULL_HANDLE;
- }
-}
-
-void NativeSwapChainImpl::UpdateSurfaceConfig() {
- if (mDevice->ConsumedError(GatherSurfaceInfo(*ToBackend(mDevice->GetAdapter()), mSurface),
- &mInfo)) {
- ASSERT(false);
- }
-
- if (!ChooseSurfaceConfig(mInfo, &mConfig, mDevice->IsToggleEnabled(Toggle::TurnOffVsync))) {
- ASSERT(false);
- }
-}
-
-void NativeSwapChainImpl::Init(DawnWSIContextVulkan* /*context*/) {
- UpdateSurfaceConfig();
-}
-
-DawnSwapChainError NativeSwapChainImpl::Configure(WGPUTextureFormat format,
- WGPUTextureUsage usage,
- uint32_t width,
- uint32_t height) {
- UpdateSurfaceConfig();
-
- ASSERT(mInfo.capabilities.minImageExtent.width <= width);
- ASSERT(mInfo.capabilities.maxImageExtent.width >= width);
- ASSERT(mInfo.capabilities.minImageExtent.height <= height);
- ASSERT(mInfo.capabilities.maxImageExtent.height >= height);
-
- ASSERT(format == static_cast<WGPUTextureFormat>(GetPreferredFormat()));
- // TODO(crbug.com/dawn/269): need to check usage works too
-
- // Create the swapchain with the configuration we chose
- VkSwapchainKHR oldSwapchain = mSwapChain;
- VkSwapchainCreateInfoKHR createInfo;
- createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
- createInfo.pNext = nullptr;
- createInfo.flags = 0;
- createInfo.surface = mSurface;
- createInfo.minImageCount = mConfig.minImageCount;
- createInfo.imageFormat = mConfig.nativeFormat;
- createInfo.imageColorSpace = mConfig.colorSpace;
- createInfo.imageExtent.width = width;
- createInfo.imageExtent.height = height;
- createInfo.imageArrayLayers = 1;
- createInfo.imageUsage = VulkanImageUsage(static_cast<wgpu::TextureUsage>(usage),
- mDevice->GetValidInternalFormat(mConfig.format));
- createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
- createInfo.queueFamilyIndexCount = 0;
- createInfo.pQueueFamilyIndices = nullptr;
- createInfo.preTransform = mConfig.preTransform;
- createInfo.compositeAlpha = mConfig.compositeAlpha;
- createInfo.presentMode = mConfig.presentMode;
- createInfo.clipped = false;
- createInfo.oldSwapchain = oldSwapchain;
-
- if (mDevice->fn.CreateSwapchainKHR(mDevice->GetVkDevice(), &createInfo, nullptr,
- &*mSwapChain) != VK_SUCCESS) {
- ASSERT(false);
- }
-
- // Gather the swapchain's images. Implementations are allowed to return more images than the
- // number we asked for.
- uint32_t count = 0;
- if (mDevice->fn.GetSwapchainImagesKHR(mDevice->GetVkDevice(), mSwapChain, &count, nullptr) !=
- VK_SUCCESS) {
- ASSERT(false);
- }
-
- ASSERT(count >= mConfig.minImageCount);
- mSwapChainImages.resize(count);
- if (mDevice->fn.GetSwapchainImagesKHR(mDevice->GetVkDevice(), mSwapChain, &count,
- AsVkArray(mSwapChainImages.data())) != VK_SUCCESS) {
- ASSERT(false);
- }
-
- if (oldSwapchain != VK_NULL_HANDLE) {
- mDevice->GetFencedDeleter()->DeleteWhenUnused(oldSwapchain);
- }
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::GetNextTexture(DawnSwapChainNextTexture* nextTexture) {
- // Transiently create a semaphore that will be signaled when the presentation engine is done
- // with the swapchain image. Further operations on the image will wait for this semaphore.
- VkSemaphore semaphore = VK_NULL_HANDLE;
- {
- VkSemaphoreCreateInfo createInfo;
- createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
- createInfo.pNext = nullptr;
- createInfo.flags = 0;
- if (mDevice->fn.CreateSemaphore(mDevice->GetVkDevice(), &createInfo, nullptr,
- &*semaphore) != VK_SUCCESS) {
- ASSERT(false);
- }
- }
-
- if (mDevice->fn.AcquireNextImageKHR(mDevice->GetVkDevice(), mSwapChain,
- std::numeric_limits<uint64_t>::max(), semaphore, VkFence{},
- &mLastImageIndex) != VK_SUCCESS) {
- ASSERT(false);
- }
-
- nextTexture->texture.u64 =
-#if DAWN_PLATFORM_IS(64_BIT)
- reinterpret_cast<uint64_t>
-#endif
- (*mSwapChainImages[mLastImageIndex]);
- mDevice->GetPendingRecordingContext()->waitSemaphores.push_back(semaphore);
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-DawnSwapChainError NativeSwapChainImpl::Present() {
- // This assumes that the image has already been transitioned to the PRESENT layout and
- // writes were made available to the stage.
-
- // Assuming that the present queue is the same as the graphics queue, the proper
- // synchronization has already been done on the queue so we don't need to wait on any
- // semaphores.
- VkPresentInfoKHR presentInfo;
- presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
- presentInfo.pNext = nullptr;
- presentInfo.waitSemaphoreCount = 0;
- presentInfo.pWaitSemaphores = nullptr;
- presentInfo.swapchainCount = 1;
- presentInfo.pSwapchains = &*mSwapChain;
- presentInfo.pImageIndices = &mLastImageIndex;
- presentInfo.pResults = nullptr;
-
- VkQueue queue = mDevice->GetQueue();
- if (mDevice->fn.QueuePresentKHR(queue, &presentInfo) != VK_SUCCESS) {
- ASSERT(false);
- }
-
- return DAWN_SWAP_CHAIN_NO_ERROR;
-}
-
-wgpu::TextureFormat NativeSwapChainImpl::GetPreferredFormat() const {
- return mConfig.format;
-}
-
-} // namespace dawn::native::vulkan
diff --git a/src/dawn/native/vulkan/NativeSwapChainImplVk.h b/src/dawn/native/vulkan/NativeSwapChainImplVk.h
deleted file mode 100644
index db22472..0000000
--- a/src/dawn/native/vulkan/NativeSwapChainImplVk.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2018 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 SRC_DAWN_NATIVE_VULKAN_NATIVESWAPCHAINIMPLVK_H_
-#define SRC_DAWN_NATIVE_VULKAN_NATIVESWAPCHAINIMPLVK_H_
-
-#include <vector>
-
-#include "dawn/dawn_wsi.h"
-#include "dawn/native/dawn_platform.h"
-#include "dawn/native/vulkan/VulkanInfo.h"
-
-namespace dawn::native::vulkan {
-
-class Device;
-
-class NativeSwapChainImpl {
- public:
- using WSIContext = DawnWSIContextVulkan;
-
- NativeSwapChainImpl(Device* device, VkSurfaceKHR surface);
- ~NativeSwapChainImpl();
-
- void Init(DawnWSIContextVulkan* context);
- DawnSwapChainError Configure(WGPUTextureFormat format,
- WGPUTextureUsage,
- uint32_t width,
- uint32_t height);
- DawnSwapChainError GetNextTexture(DawnSwapChainNextTexture* nextTexture);
- DawnSwapChainError Present();
-
- wgpu::TextureFormat GetPreferredFormat() const;
-
- struct ChosenConfig {
- VkFormat nativeFormat;
- wgpu::TextureFormat format;
- VkColorSpaceKHR colorSpace;
- VkSurfaceTransformFlagBitsKHR preTransform;
- uint32_t minImageCount;
- VkPresentModeKHR presentMode;
- VkCompositeAlphaFlagBitsKHR compositeAlpha;
- };
-
- private:
- void UpdateSurfaceConfig();
-
- VkSurfaceKHR mSurface = VK_NULL_HANDLE;
- VkSwapchainKHR mSwapChain = VK_NULL_HANDLE;
- std::vector<VkImage> mSwapChainImages;
- uint32_t mLastImageIndex = 0;
-
- VulkanSurfaceInfo mInfo;
-
- ChosenConfig mConfig;
-
- Device* mDevice = nullptr;
-};
-
-} // namespace dawn::native::vulkan
-
-#endif // SRC_DAWN_NATIVE_VULKAN_NATIVESWAPCHAINIMPLVK_H_
diff --git a/src/dawn/native/vulkan/VulkanBackend.cpp b/src/dawn/native/vulkan/VulkanBackend.cpp
index f6788c5..c4f282f 100644
--- a/src/dawn/native/vulkan/VulkanBackend.cpp
+++ b/src/dawn/native/vulkan/VulkanBackend.cpp
@@ -21,9 +21,7 @@
#include "dawn/native/VulkanBackend.h"
-#include "dawn/common/SwapChainUtils.h"
#include "dawn/native/vulkan/DeviceVk.h"
-#include "dawn/native/vulkan/NativeSwapChainImplVk.h"
#include "dawn/native/vulkan/TextureVk.h"
namespace dawn::native::vulkan {
@@ -38,25 +36,6 @@
return (*backendDevice->fn.GetInstanceProcAddr)(backendDevice->GetVkInstance(), pName);
}
-// Explicitly export this function because it uses the "native" type for surfaces while the
-// header as seen in this file uses the wrapped type.
-DAWN_NATIVE_EXPORT DawnSwapChainImplementation
-CreateNativeSwapChainImpl(WGPUDevice device, ::VkSurfaceKHR surfaceNative) {
- Device* backendDevice = ToBackend(FromAPI(device));
- VkSurfaceKHR surface = VkSurfaceKHR::CreateFromHandle(surfaceNative);
-
- DawnSwapChainImplementation impl;
- impl = CreateSwapChainImplementation(new NativeSwapChainImpl(backendDevice, surface));
- impl.textureUsage = WGPUTextureUsage_Present;
-
- return impl;
-}
-
-WGPUTextureFormat GetNativeSwapChainPreferredFormat(const DawnSwapChainImplementation* swapChain) {
- NativeSwapChainImpl* impl = reinterpret_cast<NativeSwapChainImpl*>(swapChain->userData);
- return static_cast<WGPUTextureFormat>(impl->GetPreferredFormat());
-}
-
AdapterDiscoveryOptions::AdapterDiscoveryOptions()
: AdapterDiscoveryOptionsBase(WGPUBackendType_Vulkan) {}