xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrAHardwareBufferUtils.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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 
8*c8dee2aaSAndroid Build Coastguard Worker #include "include/android/GrAHardwareBufferUtils.h"
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_BUILD_FOR_ANDROID) && __ANDROID_API__ >= 26
11*c8dee2aaSAndroid Build Coastguard Worker #define GL_GLEXT_PROTOTYPES
12*c8dee2aaSAndroid Build Coastguard Worker #define EGL_EGLEXT_PROTOTYPES
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker #include <android/hardware_buffer.h>
15*c8dee2aaSAndroid Build Coastguard Worker 
16*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS)
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDirectContext.h"
18*c8dee2aaSAndroid Build Coastguard Worker #endif
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker // TODO: remove this once Android is using the AHardwareBufferUtils version of
21*c8dee2aaSAndroid Build Coastguard Worker // GetSkColorTypeFromBufferFormat
22*c8dee2aaSAndroid Build Coastguard Worker #include "include/android/AHardwareBufferUtils.h"
23*c8dee2aaSAndroid Build Coastguard Worker 
24*c8dee2aaSAndroid Build Coastguard Worker namespace GrAHardwareBufferUtils {
25*c8dee2aaSAndroid Build Coastguard Worker 
GetSkColorTypeFromBufferFormat(uint32_t bufferFormat)26*c8dee2aaSAndroid Build Coastguard Worker SkColorType GetSkColorTypeFromBufferFormat(uint32_t bufferFormat) {
27*c8dee2aaSAndroid Build Coastguard Worker     return AHardwareBufferUtils::GetSkColorTypeFromBufferFormat(bufferFormat);
28*c8dee2aaSAndroid Build Coastguard Worker }
29*c8dee2aaSAndroid Build Coastguard Worker 
30*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS)
GetBackendFormat(GrDirectContext * dContext,AHardwareBuffer * hardwareBuffer,uint32_t bufferFormat,bool requireKnownFormat)31*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat GetBackendFormat(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer,
32*c8dee2aaSAndroid Build Coastguard Worker                                  uint32_t bufferFormat, bool requireKnownFormat) {
33*c8dee2aaSAndroid Build Coastguard Worker     GrBackendApi backend = dContext->backend();
34*c8dee2aaSAndroid Build Coastguard Worker 
35*c8dee2aaSAndroid Build Coastguard Worker     if (backend == GrBackendApi::kOpenGL) {
36*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_GL
37*c8dee2aaSAndroid Build Coastguard Worker         return GetGLBackendFormat(dContext, bufferFormat, requireKnownFormat);
38*c8dee2aaSAndroid Build Coastguard Worker #else // SK_GL
39*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendFormat();
40*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_GL
41*c8dee2aaSAndroid Build Coastguard Worker     } else if (backend == GrBackendApi::kVulkan) {
42*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_VULKAN
43*c8dee2aaSAndroid Build Coastguard Worker         return GetVulkanBackendFormat(dContext, hardwareBuffer, bufferFormat, requireKnownFormat);
44*c8dee2aaSAndroid Build Coastguard Worker #else // SK_VULKAN
45*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendFormat();
46*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_VULKAN
47*c8dee2aaSAndroid Build Coastguard Worker     }
48*c8dee2aaSAndroid Build Coastguard Worker     return GrBackendFormat();
49*c8dee2aaSAndroid Build Coastguard Worker }
50*c8dee2aaSAndroid Build Coastguard Worker 
MakeBackendTexture(GrDirectContext * dContext,AHardwareBuffer * hardwareBuffer,int width,int height,DeleteImageProc * deleteProc,UpdateImageProc * updateProc,TexImageCtx * imageCtx,bool isProtectedContent,const GrBackendFormat & backendFormat,bool isRenderable,bool fromAndroidWindow)51*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture MakeBackendTexture(GrDirectContext* dContext,
52*c8dee2aaSAndroid Build Coastguard Worker                                     AHardwareBuffer* hardwareBuffer,
53*c8dee2aaSAndroid Build Coastguard Worker                                     int width, int height,
54*c8dee2aaSAndroid Build Coastguard Worker                                     DeleteImageProc* deleteProc,
55*c8dee2aaSAndroid Build Coastguard Worker                                     UpdateImageProc* updateProc,
56*c8dee2aaSAndroid Build Coastguard Worker                                     TexImageCtx* imageCtx,
57*c8dee2aaSAndroid Build Coastguard Worker                                     bool isProtectedContent,
58*c8dee2aaSAndroid Build Coastguard Worker                                     const GrBackendFormat& backendFormat,
59*c8dee2aaSAndroid Build Coastguard Worker                                     bool isRenderable,
60*c8dee2aaSAndroid Build Coastguard Worker                                     bool fromAndroidWindow) {
61*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(dContext);
62*c8dee2aaSAndroid Build Coastguard Worker     if (!dContext || dContext->abandoned()) {
63*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendTexture();
64*c8dee2aaSAndroid Build Coastguard Worker     }
65*c8dee2aaSAndroid Build Coastguard Worker 
66*c8dee2aaSAndroid Build Coastguard Worker     if (GrBackendApi::kOpenGL == dContext->backend()) {
67*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_GL
68*c8dee2aaSAndroid Build Coastguard Worker         return MakeGLBackendTexture(dContext, hardwareBuffer, width, height, deleteProc,
69*c8dee2aaSAndroid Build Coastguard Worker                                     updateProc, imageCtx, isProtectedContent, backendFormat,
70*c8dee2aaSAndroid Build Coastguard Worker                                     isRenderable);
71*c8dee2aaSAndroid Build Coastguard Worker #else
72*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendTexture();
73*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_GL
74*c8dee2aaSAndroid Build Coastguard Worker     } else {
75*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(GrBackendApi::kVulkan == dContext->backend());
76*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_VULKAN
77*c8dee2aaSAndroid Build Coastguard Worker         return MakeVulkanBackendTexture(dContext, hardwareBuffer, width, height, deleteProc,
78*c8dee2aaSAndroid Build Coastguard Worker                                         updateProc, imageCtx, isProtectedContent, backendFormat,
79*c8dee2aaSAndroid Build Coastguard Worker                                         isRenderable, fromAndroidWindow);
80*c8dee2aaSAndroid Build Coastguard Worker #else
81*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendTexture();
82*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_VULKAN
83*c8dee2aaSAndroid Build Coastguard Worker     }
84*c8dee2aaSAndroid Build Coastguard Worker }
85*c8dee2aaSAndroid Build Coastguard Worker #endif
86*c8dee2aaSAndroid Build Coastguard Worker 
87*c8dee2aaSAndroid Build Coastguard Worker }  // namespace GrAHardwareBufferUtils
88*c8dee2aaSAndroid Build Coastguard Worker 
89*c8dee2aaSAndroid Build Coastguard Worker #endif
90