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 SurfaceAndroid_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SurfaceAndroid_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker struct AHardwareBuffer; 14*c8dee2aaSAndroid Build Coastguard Worker class SkColorSpace; 15*c8dee2aaSAndroid Build Coastguard Worker class SkSurface; 16*c8dee2aaSAndroid Build Coastguard Worker class SkSurfaceProps; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 19*c8dee2aaSAndroid Build Coastguard Worker class Recorder; 20*c8dee2aaSAndroid Build Coastguard Worker } 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker namespace SkSurfaces { 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker using ReleaseContext = void*; 25*c8dee2aaSAndroid Build Coastguard Worker using BufferReleaseProc = void (*)(ReleaseContext); 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker /** Private; only to be used by Android Framework. 28*c8dee2aaSAndroid Build Coastguard Worker Creates an SkSurface from an Android hardware buffer. 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker Upon success bufferReleaseProc is called when it is safe to delete the buffer in the 31*c8dee2aaSAndroid Build Coastguard Worker backend API (accounting only for use of the buffer by this surface). If SkSurface creation 32*c8dee2aaSAndroid Build Coastguard Worker fails bufferReleaseProc is called before this function returns. 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker Currently this is only supported for buffers that can be textured as well as rendered to. 35*c8dee2aaSAndroid Build Coastguard Worker In other words the buffer must have both AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT and 36*c8dee2aaSAndroid Build Coastguard Worker AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE usage bits. 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker @param recorder the applicable Graphite recorder 39*c8dee2aaSAndroid Build Coastguard Worker @param hardwareBuffer an Android hardware buffer 40*c8dee2aaSAndroid Build Coastguard Worker @param colorSpace range of colors; may be nullptr 41*c8dee2aaSAndroid Build Coastguard Worker @param surfaceProps LCD striping orientation and setting for device independent 42*c8dee2aaSAndroid Build Coastguard Worker fonts; may be nullptr 43*c8dee2aaSAndroid Build Coastguard Worker @param bufferReleaseProc function called when the buffer can be released 44*c8dee2aaSAndroid Build Coastguard Worker @param ReleaseContext state passed to bufferReleaseProc 45*c8dee2aaSAndroid Build Coastguard Worker @param fromWindow Whether or not the AHardwareBuffer is part of an Android Window. 46*c8dee2aaSAndroid Build Coastguard Worker Currently only used with Vulkan backend. 47*c8dee2aaSAndroid Build Coastguard Worker @return created SkSurface, or nullptr 48*c8dee2aaSAndroid Build Coastguard Worker */ 49*c8dee2aaSAndroid Build Coastguard Worker SK_API sk_sp<SkSurface> WrapAndroidHardwareBuffer(skgpu::graphite::Recorder* recorder, 50*c8dee2aaSAndroid Build Coastguard Worker AHardwareBuffer* hardwareBuffer, 51*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> colorSpace, 52*c8dee2aaSAndroid Build Coastguard Worker const SkSurfaceProps* surfaceProps, 53*c8dee2aaSAndroid Build Coastguard Worker BufferReleaseProc = nullptr, 54*c8dee2aaSAndroid Build Coastguard Worker ReleaseContext = nullptr, 55*c8dee2aaSAndroid Build Coastguard Worker bool fromWindow = false); 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSurfaces 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker #endif // SurfaceAndroid_DEFINED 60