blob: f27adf0177d2b4b8276d92af56fcb5481e8575df [file] [log] [blame]
sergeyv8bd5edf2016-05-13 15:03:35 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <debug/NullGlesDriver.h>
18
19namespace android {
20namespace uirenderer {
21namespace debug {
22
Brian Osman8e874bb2019-04-08 12:24:46 -040023extern const GrGLInterface* CreateNullSkiaInterface();
24
Derek Sollenberger7e044fe2016-11-07 10:57:59 -050025sk_sp<const GrGLInterface> NullGlesDriver::getSkiaInterface() {
Brian Osman8e874bb2019-04-08 12:24:46 -040026 sk_sp<const GrGLInterface> skiaInterface(CreateNullSkiaInterface());
Derek Sollenberger7e044fe2016-11-07 10:57:59 -050027 return skiaInterface;
28}
29
sergeyv8bd5edf2016-05-13 15:03:35 -070030struct {
31 GLboolean scissorEnabled;
32} gState;
33
John Reck1bcacfd2017-11-03 10:12:19 -070034static void nullglGenCommon(GLsizei n, GLuint* buffers) {
sergeyv8bd5edf2016-05-13 15:03:35 -070035 static GLuint nextId = 0;
36 int i;
John Reck1bcacfd2017-11-03 10:12:19 -070037 for (i = 0; i < n; i++) {
sergeyv8bd5edf2016-05-13 15:03:35 -070038 buffers[i] = ++nextId;
39 }
40}
41
John Reck1bcacfd2017-11-03 10:12:19 -070042void NullGlesDriver::glGenBuffers_(GLsizei n, GLuint* buffers) {
sergeyv8bd5edf2016-05-13 15:03:35 -070043 nullglGenCommon(n, buffers);
44}
45
John Reck1bcacfd2017-11-03 10:12:19 -070046void NullGlesDriver::glGenFramebuffers_(GLsizei n, GLuint* framebuffers) {
sergeyv8bd5edf2016-05-13 15:03:35 -070047 nullglGenCommon(n, framebuffers);
48}
49
John Reck1bcacfd2017-11-03 10:12:19 -070050void NullGlesDriver::glGenRenderbuffers_(GLsizei n, GLuint* renderbuffers) {
sergeyv8bd5edf2016-05-13 15:03:35 -070051 nullglGenCommon(n, renderbuffers);
52}
53
John Reck1bcacfd2017-11-03 10:12:19 -070054void NullGlesDriver::glGenTextures_(GLsizei n, GLuint* textures) {
sergeyv8bd5edf2016-05-13 15:03:35 -070055 nullglGenCommon(n, textures);
56}
57
58GLuint NullGlesDriver::glCreateProgram_(void) {
59 static GLuint nextProgram = 0;
60 return ++nextProgram;
61}
62
63GLuint NullGlesDriver::glCreateShader_(GLenum type) {
64 static GLuint nextShader = 0;
65 return ++nextShader;
66}
67
John Reck1bcacfd2017-11-03 10:12:19 -070068void NullGlesDriver::glGetProgramiv_(GLuint program, GLenum pname, GLint* params) {
sergeyv8bd5edf2016-05-13 15:03:35 -070069 switch (pname) {
John Reck1bcacfd2017-11-03 10:12:19 -070070 case GL_DELETE_STATUS:
71 case GL_LINK_STATUS:
72 case GL_VALIDATE_STATUS:
73 *params = GL_TRUE;
74 break;
75 case GL_INFO_LOG_LENGTH:
76 *params = 16;
77 break;
sergeyv8bd5edf2016-05-13 15:03:35 -070078 }
79}
80
John Reck1bcacfd2017-11-03 10:12:19 -070081void NullGlesDriver::glGetProgramInfoLog_(GLuint program, GLsizei bufSize, GLsizei* length,
82 GLchar* infoLog) {
sergeyv8bd5edf2016-05-13 15:03:35 -070083 *length = snprintf(infoLog, bufSize, "success");
84 if (*length >= bufSize) {
85 *length = bufSize - 1;
86 }
87}
88
John Reck1bcacfd2017-11-03 10:12:19 -070089void NullGlesDriver::glGetShaderiv_(GLuint shader, GLenum pname, GLint* params) {
sergeyv8bd5edf2016-05-13 15:03:35 -070090 switch (pname) {
John Reck1bcacfd2017-11-03 10:12:19 -070091 case GL_COMPILE_STATUS:
92 case GL_DELETE_STATUS:
93 *params = GL_TRUE;
sergeyv8bd5edf2016-05-13 15:03:35 -070094 }
95}
96
John Reck1bcacfd2017-11-03 10:12:19 -070097void NullGlesDriver::glGetShaderInfoLog_(GLuint shader, GLsizei bufSize, GLsizei* length,
98 GLchar* infoLog) {
sergeyv8bd5edf2016-05-13 15:03:35 -070099 *length = snprintf(infoLog, bufSize, "success");
100 if (*length >= bufSize) {
101 *length = bufSize - 1;
102 }
103}
104
105void setBooleanState(GLenum cap, GLboolean value) {
106 switch (cap) {
John Reck1bcacfd2017-11-03 10:12:19 -0700107 case GL_SCISSOR_TEST:
108 gState.scissorEnabled = value;
109 break;
sergeyv8bd5edf2016-05-13 15:03:35 -0700110 }
111}
112
113void NullGlesDriver::glEnable_(GLenum cap) {
114 setBooleanState(cap, GL_TRUE);
115}
116
117void NullGlesDriver::glDisable_(GLenum cap) {
118 setBooleanState(cap, GL_FALSE);
119}
120
121GLboolean NullGlesDriver::glIsEnabled_(GLenum cap) {
122 switch (cap) {
John Reck1bcacfd2017-11-03 10:12:19 -0700123 case GL_SCISSOR_TEST:
124 return gState.scissorEnabled;
125 default:
126 return GL_FALSE;
sergeyv8bd5edf2016-05-13 15:03:35 -0700127 }
128}
129
John Reck1bcacfd2017-11-03 10:12:19 -0700130void NullGlesDriver::glGetIntegerv_(GLenum pname, GLint* data) {
sergeyv8bd5edf2016-05-13 15:03:35 -0700131 switch (pname) {
John Reck1bcacfd2017-11-03 10:12:19 -0700132 case GL_MAX_TEXTURE_SIZE:
133 *data = 2048;
134 break;
135 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
136 *data = 4;
137 break;
138 default:
139 *data = 0;
sergeyv8bd5edf2016-05-13 15:03:35 -0700140 }
141}
142
143GLenum NullGlesDriver::glCheckFramebufferStatus_(GLenum target) {
144 switch (target) {
John Reck1bcacfd2017-11-03 10:12:19 -0700145 case GL_FRAMEBUFFER:
146 return GL_FRAMEBUFFER_COMPLETE;
147 default:
148 return 0; // error case
sergeyv8bd5edf2016-05-13 15:03:35 -0700149 }
150}
151
152static const char* getString(GLenum name) {
153 switch (name) {
John Reck1bcacfd2017-11-03 10:12:19 -0700154 case GL_VENDOR:
155 return "android";
156 case GL_RENDERER:
157 return "null";
158 case GL_VERSION:
159 return "OpenGL ES 2.0 rev1";
160 case GL_SHADING_LANGUAGE_VERSION:
161 return "OpenGL ES GLSL ES 2.0 rev1";
162 case GL_EXTENSIONS:
163 default:
164 return "";
sergeyv8bd5edf2016-05-13 15:03:35 -0700165 }
166}
167
168const GLubyte* NullGlesDriver::glGetString_(GLenum name) {
John Reck1bcacfd2017-11-03 10:12:19 -0700169 return (GLubyte*)getString(name);
sergeyv8bd5edf2016-05-13 15:03:35 -0700170}
171
John Reck1bcacfd2017-11-03 10:12:19 -0700172} // namespace debug
173} // namespace uirenderer
174} // namespace android