1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google Inc. 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 #ifndef GrAHardwareBufferUtils_DEFINED 8*c8dee2aaSAndroid Build Coastguard Worker #define GrAHardwareBufferUtils_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_BUILD_FOR_ANDROID) && __ANDROID_API__ >= 26 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrBackendSurface.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class GrDirectContext; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker extern "C" { 20*c8dee2aaSAndroid Build Coastguard Worker typedef struct AHardwareBuffer AHardwareBuffer; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker namespace GrAHardwareBufferUtils { 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker // TODO: remove this function once Android has been updated to call the AHardwareBufferUtils 26*c8dee2aaSAndroid Build Coastguard Worker // version 27*c8dee2aaSAndroid Build Coastguard Worker SkColorType GetSkColorTypeFromBufferFormat(uint32_t bufferFormat); 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS) 30*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat GetBackendFormat(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer, 31*c8dee2aaSAndroid Build Coastguard Worker uint32_t bufferFormat, bool requireKnownFormat); 32*c8dee2aaSAndroid Build Coastguard Worker #endif 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat GetGLBackendFormat(GrDirectContext* dContext, uint32_t bufferFormat, 35*c8dee2aaSAndroid Build Coastguard Worker bool requireKnownFormat); 36*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat GetVulkanBackendFormat(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer, 37*c8dee2aaSAndroid Build Coastguard Worker uint32_t bufferFormat, bool requireKnownFormat); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker typedef void* TexImageCtx; 40*c8dee2aaSAndroid Build Coastguard Worker typedef void (*DeleteImageProc)(TexImageCtx); 41*c8dee2aaSAndroid Build Coastguard Worker typedef void (*UpdateImageProc)(TexImageCtx, GrDirectContext*); 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker /** 44*c8dee2aaSAndroid Build Coastguard Worker * Create a GrBackendTexture from AHardwareBuffer 45*c8dee2aaSAndroid Build Coastguard Worker * 46*c8dee2aaSAndroid Build Coastguard Worker * @param context GPU context 47*c8dee2aaSAndroid Build Coastguard Worker * @param hardwareBuffer AHB 48*c8dee2aaSAndroid Build Coastguard Worker * @param width texture width 49*c8dee2aaSAndroid Build Coastguard Worker * @param height texture height 50*c8dee2aaSAndroid Build Coastguard Worker * @param deleteProc returns a function that deletes the texture and 51*c8dee2aaSAndroid Build Coastguard Worker * other GPU resources. Must be invoked on the same 52*c8dee2aaSAndroid Build Coastguard Worker * thread as MakeBackendTexture 53*c8dee2aaSAndroid Build Coastguard Worker * @param updateProc returns a function, that needs to be invoked, when 54*c8dee2aaSAndroid Build Coastguard Worker * AHB buffer content has changed. Must be invoked on 55*c8dee2aaSAndroid Build Coastguard Worker * the same thread as MakeBackendTexture 56*c8dee2aaSAndroid Build Coastguard Worker * @param imageCtx returns an opaque image context, that is passed as 57*c8dee2aaSAndroid Build Coastguard Worker * first argument to deleteProc and updateProc 58*c8dee2aaSAndroid Build Coastguard Worker * @param isProtectedContent if true, GL backend uses EXT_protected_content 59*c8dee2aaSAndroid Build Coastguard Worker * @param backendFormat backend format, usually created with helper 60*c8dee2aaSAndroid Build Coastguard Worker * function GetBackendFormat 61*c8dee2aaSAndroid Build Coastguard Worker * @param isRenderable true if GrBackendTexture can be used as a color 62*c8dee2aaSAndroid Build Coastguard Worker * attachment 63*c8dee2aaSAndroid Build Coastguard Worker * @return valid GrBackendTexture object on success 64*c8dee2aaSAndroid Build Coastguard Worker */ 65*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS) 66*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture MakeBackendTexture(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer, 67*c8dee2aaSAndroid Build Coastguard Worker int width, int height, 68*c8dee2aaSAndroid Build Coastguard Worker DeleteImageProc* deleteProc, 69*c8dee2aaSAndroid Build Coastguard Worker UpdateImageProc* updateProc, 70*c8dee2aaSAndroid Build Coastguard Worker TexImageCtx* imageCtx, 71*c8dee2aaSAndroid Build Coastguard Worker bool isProtectedContent, 72*c8dee2aaSAndroid Build Coastguard Worker const GrBackendFormat& backendFormat, 73*c8dee2aaSAndroid Build Coastguard Worker bool isRenderable, 74*c8dee2aaSAndroid Build Coastguard Worker bool fromAndroidWindow = false); 75*c8dee2aaSAndroid Build Coastguard Worker #endif 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture MakeGLBackendTexture(GrDirectContext* dContext, 78*c8dee2aaSAndroid Build Coastguard Worker AHardwareBuffer* hardwareBuffer, 79*c8dee2aaSAndroid Build Coastguard Worker int width, int height, 80*c8dee2aaSAndroid Build Coastguard Worker DeleteImageProc* deleteProc, 81*c8dee2aaSAndroid Build Coastguard Worker UpdateImageProc* updateProc, 82*c8dee2aaSAndroid Build Coastguard Worker TexImageCtx* imageCtx, 83*c8dee2aaSAndroid Build Coastguard Worker bool isProtectedContent, 84*c8dee2aaSAndroid Build Coastguard Worker const GrBackendFormat& backendFormat, 85*c8dee2aaSAndroid Build Coastguard Worker bool isRenderable); 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture MakeVulkanBackendTexture(GrDirectContext* dContext, 88*c8dee2aaSAndroid Build Coastguard Worker AHardwareBuffer* hardwareBuffer, 89*c8dee2aaSAndroid Build Coastguard Worker int width, int height, 90*c8dee2aaSAndroid Build Coastguard Worker DeleteImageProc* deleteProc, 91*c8dee2aaSAndroid Build Coastguard Worker UpdateImageProc* updateProc, 92*c8dee2aaSAndroid Build Coastguard Worker TexImageCtx* imageCtx, 93*c8dee2aaSAndroid Build Coastguard Worker bool isProtectedContent, 94*c8dee2aaSAndroid Build Coastguard Worker const GrBackendFormat& backendFormat, 95*c8dee2aaSAndroid Build Coastguard Worker bool isRenderable, 96*c8dee2aaSAndroid Build Coastguard Worker bool fromAndroidWindow = false); 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrAHardwareBufferUtils 99*c8dee2aaSAndroid Build Coastguard Worker 100*c8dee2aaSAndroid Build Coastguard Worker #endif 101*c8dee2aaSAndroid Build Coastguard Worker #endif 102