e2c5bcf868
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>
72 lines
2.1 KiB
C++
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
|