1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 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 #ifndef GpuToolUtils_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GpuToolUtils_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImage.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GANESH) 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDirectContext.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrRecordingContext.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/SkImageGanesh.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrCaps.h" 20*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrDirectContextPriv.h" 21*c8dee2aaSAndroid Build Coastguard Worker #endif 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 24*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/Image.h" 25*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/Recorder.h" 26*c8dee2aaSAndroid Build Coastguard Worker #endif 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker namespace ToolUtils { 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker // We do not put this in a .cpp file because otherwise the defines from the client 31*c8dee2aaSAndroid Build Coastguard Worker // (e.g. dm) won't be seen if this is compiled into a "core" tools library. MakeTextureImage(SkCanvas * canvas,sk_sp<SkImage> orig)32*c8dee2aaSAndroid Build Coastguard Workerinline sk_sp<SkImage> MakeTextureImage(SkCanvas* canvas, sk_sp<SkImage> orig) { 33*c8dee2aaSAndroid Build Coastguard Worker if (!orig) { 34*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 35*c8dee2aaSAndroid Build Coastguard Worker } 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GANESH) 38*c8dee2aaSAndroid Build Coastguard Worker if (canvas->recordingContext() && canvas->recordingContext()->asDirectContext()) { 39*c8dee2aaSAndroid Build Coastguard Worker GrDirectContext* dContext = canvas->recordingContext()->asDirectContext(); 40*c8dee2aaSAndroid Build Coastguard Worker const GrCaps* caps = dContext->priv().caps(); 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker if (orig->width() >= caps->maxTextureSize() || orig->height() >= caps->maxTextureSize()) { 43*c8dee2aaSAndroid Build Coastguard Worker // Ganesh is able to tile large SkImage draws. Always forcing SkImages to be uploaded 44*c8dee2aaSAndroid Build Coastguard Worker // prevents this feature from being tested by our tools. For now, leave excessively 45*c8dee2aaSAndroid Build Coastguard Worker // large SkImages as bitmaps. 46*c8dee2aaSAndroid Build Coastguard Worker return orig; 47*c8dee2aaSAndroid Build Coastguard Worker } 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker return SkImages::TextureFromImage(dContext, orig); 50*c8dee2aaSAndroid Build Coastguard Worker } 51*c8dee2aaSAndroid Build Coastguard Worker #endif 52*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 53*c8dee2aaSAndroid Build Coastguard Worker if (canvas->recorder()) { 54*c8dee2aaSAndroid Build Coastguard Worker return SkImages::TextureFromImage(canvas->recorder(), orig, {/*fMipmapped=*/false}); 55*c8dee2aaSAndroid Build Coastguard Worker } 56*c8dee2aaSAndroid Build Coastguard Worker #endif 57*c8dee2aaSAndroid Build Coastguard Worker return orig; 58*c8dee2aaSAndroid Build Coastguard Worker } 59*c8dee2aaSAndroid Build Coastguard Worker } // namespace ToolUtils 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker #endif 62