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