| /* |
| * Copyright 2020 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "tools/gpu/d3d/D3DTestContext.h" |
| |
| #ifdef SK_DIRECT3D |
| |
| #include "include/gpu/GrDirectContext.h" |
| #include "tools/gpu/d3d/D3DTestUtils.h" |
| |
| namespace { |
| |
| class D3DTestContextImpl : public sk_gpu_test::D3DTestContext { |
| public: |
| static D3DTestContext* Create(D3DTestContext* sharedContext) { |
| GrD3DBackendContext backendContext; |
| bool ownsContext; |
| if (sharedContext) { |
| // take from the given context |
| ownsContext = false; |
| backendContext = sharedContext->getD3DBackendContext(); |
| } else { |
| // create our own |
| if (!sk_gpu_test::CreateD3DBackendContext(&backendContext)) { |
| return nullptr; |
| } |
| |
| ownsContext = true; |
| } |
| return new D3DTestContextImpl(backendContext, ownsContext); |
| } |
| |
| ~D3DTestContextImpl() override { this->teardown(); } |
| |
| void testAbandon() override {} |
| |
| void finish() override {} |
| |
| sk_sp<GrDirectContext> makeContext(const GrContextOptions& options) override { |
| return GrDirectContext::MakeDirect3D(fD3D, options); |
| } |
| |
| protected: |
| void teardown() override { |
| INHERITED::teardown(); |
| if (fOwnsContext) { |
| // delete all the D3D objects in the backend context |
| } |
| } |
| |
| private: |
| D3DTestContextImpl(const GrD3DBackendContext& backendContext, bool ownsContext) |
| : D3DTestContext(backendContext, ownsContext) { |
| fFenceSupport = true; |
| } |
| |
| void onPlatformMakeNotCurrent() const override {} |
| void onPlatformMakeCurrent() const override {} |
| std::function<void()> onPlatformGetAutoContextRestore() const override { return nullptr; } |
| |
| using INHERITED = sk_gpu_test::D3DTestContext; |
| }; |
| } // anonymous namespace |
| |
| namespace sk_gpu_test { |
| D3DTestContext* CreatePlatformD3DTestContext(D3DTestContext* sharedContext) { |
| return D3DTestContextImpl::Create(sharedContext); |
| } |
| } // namespace sk_gpu_test |
| |
| #endif |