skia2/tools/sk_app/win/DawnD3D12WindowContext_win.cpp
Corentin Wallez e2c5bcf868 Remove the dependency on Dawn's SwapChainUtils.
This is not part of the public API of Dawn and will be unnecessary once
Dawn move to "surface based swapchains". DawnD3D12WindowContext didn't
need the include so all that's needed is copying the helper in
DawnMTLWindowContext.

Change-Id: I8d0682b6b0801dc311ad4c7d73d4c07e575ecf4e
Bug: chromium:1064305
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/282496
Reviewed-by: Zhenyao Mo <zmo@google.com>
Reviewed-by: Stephen White <senorblanco@chromium.org>
2020-04-09 20:31:30 +00:00

72 lines
2.1 KiB
C++

/*
* Copyright 2019 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tools/sk_app/DawnWindowContext.h"
#include "tools/sk_app/win/WindowContextFactory_win.h"
#include "dawn/webgpu_cpp.h"
#include "dawn/dawn_wsi.h"
#include "dawn_native/DawnNative.h"
#include "dawn_native/D3D12Backend.h"
namespace sk_app {
class DawnD3D12WindowContext : public DawnWindowContext {
public:
DawnD3D12WindowContext(HWND hwnd, const DisplayParams& params);
~DawnD3D12WindowContext() override;
wgpu::Device onInitializeContext() override;
void onDestroyContext() override;
DawnSwapChainImplementation createSwapChainImplementation(
int width, int height, const DisplayParams& params) override;
void onSwapBuffers() override;
private:
HWND fWindow;
};
// NOTE: this texture format must match the one in D3D12's swap chain impl
DawnD3D12WindowContext::DawnD3D12WindowContext(HWND hwnd, const DisplayParams& params)
: DawnWindowContext(params, wgpu::TextureFormat::RGBA8Unorm)
, fWindow(hwnd) {
RECT rect;
GetClientRect(hwnd, &rect);
this->initializeContext(rect.right - rect.left, rect.bottom - rect.top);
}
DawnD3D12WindowContext::~DawnD3D12WindowContext() {
this->destroyContext();
}
DawnSwapChainImplementation DawnD3D12WindowContext::createSwapChainImplementation(
int width, int height, const DisplayParams& params) {
return dawn_native::d3d12::CreateNativeSwapChainImpl(fDevice.Get(), fWindow);
}
wgpu::Device DawnD3D12WindowContext::onInitializeContext() {
return this->createDevice(dawn_native::BackendType::D3D12);
}
void DawnD3D12WindowContext::onDestroyContext() {
}
void DawnD3D12WindowContext::onSwapBuffers() {
}
namespace window_context_factory {
std::unique_ptr<WindowContext> MakeDawnD3D12ForWin(HWND hwnd,
const DisplayParams& params) {
std::unique_ptr<WindowContext> ctx(new DawnD3D12WindowContext(hwnd, params));
if (!ctx->isValid()) {
return nullptr;
}
return ctx;
}
}
} //namespace sk_app