1/* 2 * Copyright 2020 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "tools/gpu/d3d/D3DTestContext.h" 9 10#ifdef SK_DIRECT3D 11 12#include "include/gpu/GrDirectContext.h" 13#include "tools/gpu/d3d/D3DTestUtils.h" 14 15namespace { 16 17class D3DTestContextImpl : public sk_gpu_test::D3DTestContext { 18public: 19 static D3DTestContext* Create(D3DTestContext* sharedContext) { 20 GrD3DBackendContext backendContext; 21 bool ownsContext; 22 if (sharedContext) { 23 // take from the given context 24 ownsContext = false; 25 backendContext = sharedContext->getD3DBackendContext(); 26 } else { 27 // create our own 28 if (!sk_gpu_test::CreateD3DBackendContext(&backendContext)) { 29 return nullptr; 30 } 31 32 ownsContext = true; 33 } 34 return new D3DTestContextImpl(backendContext, ownsContext); 35 } 36 37 ~D3DTestContextImpl() override { this->teardown(); } 38 39 void testAbandon() override {} 40 41 void finish() override {} 42 43 sk_sp<GrDirectContext> makeContext(const GrContextOptions& options) override { 44 return GrDirectContext::MakeDirect3D(fD3D, options); 45 } 46 47protected: 48 void teardown() override { 49 INHERITED::teardown(); 50 if (fOwnsContext) { 51 // delete all the D3D objects in the backend context 52 } 53 } 54 55private: 56 D3DTestContextImpl(const GrD3DBackendContext& backendContext, bool ownsContext) 57 : D3DTestContext(backendContext, ownsContext) { 58 fFenceSupport = true; 59 } 60 61 void onPlatformMakeNotCurrent() const override {} 62 void onPlatformMakeCurrent() const override {} 63 std::function<void()> onPlatformGetAutoContextRestore() const override { return nullptr; } 64 65 using INHERITED = sk_gpu_test::D3DTestContext; 66}; 67} // anonymous namespace 68 69namespace sk_gpu_test { 70D3DTestContext* CreatePlatformD3DTestContext(D3DTestContext* sharedContext) { 71 return D3DTestContextImpl::Create(sharedContext); 72} 73} // namespace sk_gpu_test 74 75#endif 76