xref: /aosp_15_r20/external/angle/src/libANGLE/Platform.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // Platform.cpp: Implementation methods for angle::Platform.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include <platform/PlatformMethods.h>
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include <cstring>
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker namespace
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker // TODO(jmadill): Make methods owned by egl::Display.
PlatformMethods()18*8975f5c5SAndroid Build Coastguard Worker angle::PlatformMethods &PlatformMethods()
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker     static angle::PlatformMethods platformMethods;
21*8975f5c5SAndroid Build Coastguard Worker     return platformMethods;
22*8975f5c5SAndroid Build Coastguard Worker }
23*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
24*8975f5c5SAndroid Build Coastguard Worker 
ANGLEPlatformCurrent()25*8975f5c5SAndroid Build Coastguard Worker angle::PlatformMethods *ANGLEPlatformCurrent()
26*8975f5c5SAndroid Build Coastguard Worker {
27*8975f5c5SAndroid Build Coastguard Worker     return &PlatformMethods();
28*8975f5c5SAndroid Build Coastguard Worker }
29*8975f5c5SAndroid Build Coastguard Worker 
ANGLEGetDisplayPlatform(angle::EGLDisplayType display,const char * const methodNames[],unsigned int methodNameCount,void * context,void * platformMethods)30*8975f5c5SAndroid Build Coastguard Worker bool ANGLE_APIENTRY ANGLEGetDisplayPlatform(angle::EGLDisplayType display,
31*8975f5c5SAndroid Build Coastguard Worker                                             const char *const methodNames[],
32*8975f5c5SAndroid Build Coastguard Worker                                             unsigned int methodNameCount,
33*8975f5c5SAndroid Build Coastguard Worker                                             void *context,
34*8975f5c5SAndroid Build Coastguard Worker                                             void *platformMethods)
35*8975f5c5SAndroid Build Coastguard Worker {
36*8975f5c5SAndroid Build Coastguard Worker     angle::PlatformMethods **platformMethodsOut =
37*8975f5c5SAndroid Build Coastguard Worker         reinterpret_cast<angle::PlatformMethods **>(platformMethods);
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker     // We allow for a lower input count of impl platform methods if the subset is correct.
40*8975f5c5SAndroid Build Coastguard Worker     if (methodNameCount > angle::g_NumPlatformMethods)
41*8975f5c5SAndroid Build Coastguard Worker     {
42*8975f5c5SAndroid Build Coastguard Worker         ERR() << "Invalid platform method count: " << methodNameCount << ", expected "
43*8975f5c5SAndroid Build Coastguard Worker               << angle::g_NumPlatformMethods << ".";
44*8975f5c5SAndroid Build Coastguard Worker         return false;
45*8975f5c5SAndroid Build Coastguard Worker     }
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker     for (unsigned int nameIndex = 0; nameIndex < methodNameCount; ++nameIndex)
48*8975f5c5SAndroid Build Coastguard Worker     {
49*8975f5c5SAndroid Build Coastguard Worker         const char *expectedName = angle::g_PlatformMethodNames[nameIndex];
50*8975f5c5SAndroid Build Coastguard Worker         const char *actualName   = methodNames[nameIndex];
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker         // Skip deprecated methods.  The names of these methods start with |placeholder|.
53*8975f5c5SAndroid Build Coastguard Worker         constexpr char kPlaceholder[] = "placeholder";
54*8975f5c5SAndroid Build Coastguard Worker         if (strncmp(expectedName, kPlaceholder, sizeof(kPlaceholder) - 1) == 0)
55*8975f5c5SAndroid Build Coastguard Worker         {
56*8975f5c5SAndroid Build Coastguard Worker             continue;
57*8975f5c5SAndroid Build Coastguard Worker         }
58*8975f5c5SAndroid Build Coastguard Worker         if (strcmp(expectedName, actualName) != 0)
59*8975f5c5SAndroid Build Coastguard Worker         {
60*8975f5c5SAndroid Build Coastguard Worker             ERR() << "Invalid platform method name: " << actualName << ", expected " << expectedName
61*8975f5c5SAndroid Build Coastguard Worker                   << ".";
62*8975f5c5SAndroid Build Coastguard Worker             return false;
63*8975f5c5SAndroid Build Coastguard Worker         }
64*8975f5c5SAndroid Build Coastguard Worker     }
65*8975f5c5SAndroid Build Coastguard Worker 
66*8975f5c5SAndroid Build Coastguard Worker     // TODO(jmadill): Store platform methods in display.
67*8975f5c5SAndroid Build Coastguard Worker     PlatformMethods().context = context;
68*8975f5c5SAndroid Build Coastguard Worker     *platformMethodsOut       = &PlatformMethods();
69*8975f5c5SAndroid Build Coastguard Worker     return true;
70*8975f5c5SAndroid Build Coastguard Worker }
71*8975f5c5SAndroid Build Coastguard Worker 
ANGLEResetDisplayPlatform(angle::EGLDisplayType display)72*8975f5c5SAndroid Build Coastguard Worker void ANGLE_APIENTRY ANGLEResetDisplayPlatform(angle::EGLDisplayType display)
73*8975f5c5SAndroid Build Coastguard Worker {
74*8975f5c5SAndroid Build Coastguard Worker     // TODO(jmadill): Store platform methods in display.
75*8975f5c5SAndroid Build Coastguard Worker     PlatformMethods() = angle::PlatformMethods();
76*8975f5c5SAndroid Build Coastguard Worker }
77