summaryrefslogtreecommitdiff
path: root/host
diff options
context:
space:
mode:
authorLingfeng Yang <lfy@google.com>2017-01-24 08:32:51 -0800
committerGreg Hartman <ghartman@google.com>2018-08-23 17:30:51 -0700
commit9e931bd35f1d98d9565e7a258d7d3d297591327e (patch)
tree99ff9e0a4b86cd4d97e4a095dec763bf5a710f84 /host
parent1efed05b0331491aa22474c45d348e830153d120 (diff)
downloadopengl-transport-9e931bd35f1d98d9565e7a258d7d3d297591327e.tar.gz
GL state snapshot - initial structure
- sit between udnerlying es driver and guest - work with any es backend (angle, swiftshader, etc) - snapshot clear color as a smoke test TODO - plug into rest of snapshot - snapshot minimum set of GL state necessary to get to home screen Change-Id: Idf2eb9822d62f9308275ff2df8d12f4402e085c3
Diffstat (limited to 'host')
-rw-r--r--host/commands/emugen/ApiGen.cpp48
-rw-r--r--host/libs/virglrenderer/GLESv1_dec/gles1.attrib10
-rw-r--r--host/libs/virglrenderer/GLESv3_dec/gles3.attrib246
3 files changed, 297 insertions, 7 deletions
diff --git a/host/commands/emugen/ApiGen.cpp b/host/commands/emugen/ApiGen.cpp
index b8b871935..0c1d078f3 100644
--- a/host/commands/emugen/ApiGen.cpp
+++ b/host/commands/emugen/ApiGen.cpp
@@ -105,6 +105,23 @@ int ApiGen::genProcTypes(const std::string &filename, SideType side)
}
}
fprintf(fp, ");\n");
+
+ if (side == SERVER_SIDE && e->customDecoder() && !e->notApi()) {
+ fprintf(fp, "typedef ");
+ e->retval().printType(fp);
+ fprintf(fp, " (%s_APIENTRY *%s_dec_%s_proc_t) (", basename, e->name().c_str(), sideString(side));
+
+ VarsArray & evars = e->vars();
+ size_t n = evars.size();
+
+ for (size_t j = 0; j < n; j++) {
+ if (!evars[j].isVoid()) {
+ if (j != 0) fprintf(fp, ", ");
+ evars[j].printType(fp);
+ }
+ }
+ fprintf(fp, ");\n");
+ }
}
fprintf(fp, "\n\n#endif\n");
return 0;
@@ -170,7 +187,12 @@ int ApiGen::genContext(const std::string & filename, SideType side)
// API entry points
for (size_t i = 0; i < size(); i++) {
EntryPoint *e = &at(i);
- fprintf(fp, "\t%s_%s_proc_t %s;\n", e->name().c_str(), sideString(side), e->name().c_str());
+ if (side == SERVER_SIDE && e->customDecoder() && !e->notApi()) {
+ fprintf(fp, "\t%s_dec_%s_proc_t %s;\n", e->name().c_str(), sideString(side), e->name().c_str());
+ fprintf(fp, "\t%s_%s_proc_t %s_dec;\n", e->name().c_str(), sideString(side), e->name().c_str());
+ } else {
+ fprintf(fp, "\t%s_%s_proc_t %s;\n", e->name().c_str(), sideString(side), e->name().c_str());
+ }
}
// virtual destructor
@@ -889,11 +911,19 @@ int ApiGen::genContextImpl(const std::string &filename, SideType side)
fprintf(fp, "int %s::initDispatchByName(void *(*getProc)(const char *, void *userData), void *userData)\n{\n", classname.c_str());
for (size_t i = 0; i < n; i++) {
EntryPoint *e = &at(i);
- fprintf(fp, "\t%s = (%s_%s_proc_t) getProc(\"%s\", userData);\n",
- e->name().c_str(),
- e->name().c_str(),
- sideString(side),
- e->name().c_str());
+ if (e->customDecoder() && !e->notApi()) {
+ fprintf(fp, "\t%s = (%s_dec_%s_proc_t) getProc(\"%s\", userData);\n",
+ e->name().c_str(),
+ e->name().c_str(),
+ sideString(side),
+ e->name().c_str());
+ } else {
+ fprintf(fp, "\t%s = (%s_%s_proc_t) getProc(\"%s\", userData);\n",
+ e->name().c_str(),
+ e->name().c_str(),
+ sideString(side),
+ e->name().c_str());
+ }
}
fprintf(fp, "\treturn 0;\n");
fprintf(fp, "}\n\n");
@@ -1035,7 +1065,11 @@ R"( // Do this on every iteration, as some commands may change the checks
}
if (pass == PASS_FunctionCall) {
- fprintf(fp, "\t\t\tthis->%s(", e->name().c_str());
+ if (e->customDecoder() && !e->notApi()) {
+ fprintf(fp, "\t\t\tthis->%s_dec(", e->name().c_str());
+ } else {
+ fprintf(fp, "\t\t\tthis->%s(", e->name().c_str());
+ }
if (e->customDecoder()) {
fprintf(fp, "this"); // add a context to the call
}
diff --git a/host/libs/virglrenderer/GLESv1_dec/gles1.attrib b/host/libs/virglrenderer/GLESv1_dec/gles1.attrib
index 8889bd70c..3cbc9d37e 100644
--- a/host/libs/virglrenderer/GLESv1_dec/gles1.attrib
+++ b/host/libs/virglrenderer/GLESv1_dec/gles1.attrib
@@ -102,11 +102,13 @@ glCompressedTexSubImage2D
#void glDeleteBuffers(GLsizei n, GLuint *buffers)
glDeleteBuffers
+ flag custom_decoder
len buffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glDeleteTextures(GLsizei n, GLuint *textures)
glDeleteTextures
+ flag custom_decoder
len textures (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -133,12 +135,14 @@ glGetBufferParameteriv
#void glGenBuffers(GLsizei n, GLuint *buffers)
glGenBuffers
+ flag custom_decoder
len buffers (n * sizeof(GLuint))
dir buffers out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenTextures(GLsizei n, GLuint *textures)
glGenTextures
+ flag custom_decoder
len textures (n * sizeof(GLuint))
dir textures out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -473,12 +477,14 @@ glTexParameterxvOES
#void glDeleteRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
glDeleteRenderbuffersOES
+ flag custom_decoder
dir renderbuffers in
len renderbuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
glGenRenderbuffersOES
+ flag custom_decoder
dir renderbuffers out
len renderbuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -490,12 +496,14 @@ glGetRenderbufferParameterivOES
#void glDeleteFramebuffersOES(GLsizei n, GLuint *framebuffers)
glDeleteFramebuffersOES
+ flag custom_decoder
dir framebuffers in
len framebuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenFramebuffersOES(GLsizei n, GLuint *framebuffers)
glGenFramebuffersOES
+ flag custom_decoder
dir framebuffers out
len framebuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -571,12 +579,14 @@ glGetTexGenxvOES
#void glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
glDeleteVertexArraysOES
+ flag custom_decoder
dir arrays in
len arrays (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenVertexArraysOES(GLsizei n, GLuint *arrays)
glGenVertexArraysOES
+ flag custom_decoder
dir arrays out
len arrays (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
diff --git a/host/libs/virglrenderer/GLESv3_dec/gles3.attrib b/host/libs/virglrenderer/GLESv3_dec/gles3.attrib
index bc657c582..6b452f409 100644
--- a/host/libs/virglrenderer/GLESv3_dec/gles3.attrib
+++ b/host/libs/virglrenderer/GLESv3_dec/gles3.attrib
@@ -4,6 +4,7 @@ GLOBAL
#void glBindAttribLocation(GLuint program, GLuint index, GLchar *name)
glBindAttribLocation
+ flag custom_decoder
len name (strlen(name) + 1)
#void glBufferData(GLenum target, GLsizeiptr size, GLvoid *data, GLenum usage)
@@ -30,23 +31,33 @@ glCompressedTexSubImage2D
var_flag data nullAllowed isLarge
param_check imageSize if(imageSize<0){ ctx->setError(GL_INVALID_VALUE); return; }
+glDeleteShader
+ flag custom_decoder
+
+glDeleteProgram
+ flag custom_decoder
+
#void glDeleteBuffers(GLsizei n, GLuint *buffers)
glDeleteBuffers
+ flag custom_decoder
len buffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
glDeleteFramebuffers
+ flag custom_decoder
len framebuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
glDeleteRenderbuffers
+ flag custom_decoder
len renderbuffers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glDeleteTextures(GLsizei n, GLuint *textures)
glDeleteTextures
+ flag custom_decoder
len textures (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -54,26 +65,51 @@ glDeleteTextures
glDrawElements
flag unsupported
+glCreateShader
+ flag custom_decoder
+
+glCompileShader
+ flag custom_decoder
+
+glAttachShader
+ flag custom_decoder
+
+glDetachShader
+ flag custom_decoder
+
+glIsShader
+ flag custom_decoder
+
+glLinkProgram
+ flag custom_decoder
+
+glCreateProgram
+ flag custom_decoder
+
#void glGenBuffers(GLsizei n, GLuint *buffers)
glGenBuffers
+ flag custom_decoder
len buffers (n * sizeof(GLuint))
dir buffers out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenFramebuffers(GLsizei n, GLuint *framebuffers)
glGenFramebuffers
+ flag custom_decoder
len framebuffers (n * sizeof(GLuint))
dir framebuffers out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
glGenRenderbuffers
+ flag custom_decoder
len renderbuffers (n * sizeof(GLuint))
dir renderbuffers out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenTextures(GLsizei n, GLuint *textures)
glGenTextures
+ flag custom_decoder
len textures (n * sizeof(GLuint))
dir textures out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -150,11 +186,13 @@ glGetIntegerv
#void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
glGetProgramiv
+ flag custom_decoder
dir params out
len params (glUtilsParamSize(pname) * sizeof(GLint))
#void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei *length, GLchar *infolog)
glGetProgramInfoLog
+ flag custom_decoder
dir infolog out
len infolog bufsize
param_check bufsize if(bufsize<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -170,12 +208,14 @@ glGetRenderbufferParameteriv
#void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
glGetShaderiv
+ flag custom_decoder
dir params out
len params sizeof(GLint)
# XXX - might change if pname with value larger then one is added
#void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *infolog)
glGetShaderInfoLog
+ flag custom_decoder
dir length out
len length (sizeof(GLsizei))
var_flag length nullAllowed
@@ -192,6 +232,7 @@ glGetShaderPrecisionFormat
#void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source)
glGetShaderSource
+ flag custom_decoder
dir length out
len length (sizeof(GLsizei))
var_flag length nullAllowed
@@ -371,11 +412,13 @@ glCompressedTexSubImage3DOES
#void glDeleteVertexArraysOES(GLsizei n, GLuint *arrays)
glDeleteVertexArraysOES
+ flag custom_decoder
len arrays (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
#void glGenVertexArraysOES(GLsizei n, GLuint *arrays)
glGenVertexArraysOES
+ flag custom_decoder
len arrays (n * sizeof(GLuint))
dir arrays out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -605,11 +648,13 @@ glFinishRoundTrip
# GLES 3.0
glGenVertexArrays
+ flag custom_decoder
len arrays (n * sizeof(GLuint))
dir arrays out
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
glDeleteVertexArrays
+ flag custom_decoder
len arrays (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -863,11 +908,13 @@ glInvalidateSubFramebuffer
len attachments (numAttachments * sizeof(GLenum))
glGenTransformFeedbacks
+ flag custom_decoder
dir ids out
len ids (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
glDeleteTransformFeedbacks
+ flag custom_decoder
len ids (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -896,11 +943,13 @@ glGetTransformFeedbackVarying
var_flag type nullAllowed
glGenSamplers
+ flag custom_decoder
dir samplers out
len samplers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
glDeleteSamplers
+ flag custom_decoder
len samplers (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -919,11 +968,13 @@ glGetSamplerParameteriv
len params (glUtilsParamSize(pname) * sizeof(GLint))
glGenQueries
+ flag custom_decoder
dir queries out
len queries (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
glDeleteQueries
+ flag custom_decoder
len queries (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -1011,10 +1062,12 @@ glGetBooleani_v
len data (sizeof(GLboolean))
glGenProgramPipelines
+ flag custom_decoder
dir pipelines out
len pipelines (n * sizeof(GLuint))
glDeleteProgramPipelines
+ flag custom_decoder
len pipelines (n * sizeof(GLuint))
param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; }
@@ -1167,3 +1220,196 @@ glGetTexLevelParameterfv
glGetTexLevelParameteriv
dir params out
len params (glUtilsParamSize(pname) * sizeof(GLint))
+glUseProgram
+ flag custom_decoder
+
+glValidateProgram
+ flag custom_decoder
+
+glIsProgram
+ flag custom_decoder
+
+glGetActiveAttrib
+ flag custom_decoder
+
+glGetActiveUniform
+ flag custom_decoder
+
+glGetAttachedShaders
+ flag custom_decoder
+
+glGetAttribLocation
+ flag custom_decoder
+
+glGetUniformfv
+ flag custom_decoder
+
+glGetUniformiv
+ flag custom_decoder
+
+glGetUniformLocation
+ flag custom_decoder
+
+glGetProgramBinaryOES
+ flag custom_decoder
+
+glProgramBinaryOES
+ flag custom_decoder
+
+glUniformBlockBinding
+ flag custom_decoder
+
+glGetUniformBlockIndex
+ flag custom_decoder
+
+glGetActiveUniformBlockiv
+ flag custom_decoder
+
+glGetActiveUniformBlockName
+ flag custom_decoder
+
+glGetUniformuiv
+ flag custom_decoder
+
+glGetActiveUniformsiv
+ flag custom_decoder
+
+glTransformFeedbackVaryings
+ flag custom_decoder
+
+glGetTransformFeedbackVarying
+ flag custom_decoder
+
+glProgramParameteri
+ flag custom_decoder
+
+glProgramBinary
+ flag custom_decoder
+
+glGetProgramBinary
+ flag custom_decoder
+
+glGetFragDataLocation
+ flag custom_decoder
+
+glUseProgramStages
+ flag custom_decoder
+
+glActiveShaderProgram
+ flag custom_decoder
+
+glProgramUniform1f
+ flag custom_decoder
+
+glProgramUniform2f
+ flag custom_decoder
+
+glProgramUniform3f
+ flag custom_decoder
+
+glProgramUniform4f
+ flag custom_decoder
+
+glProgramUniform1i
+ flag custom_decoder
+
+glProgramUniform2i
+ flag custom_decoder
+
+glProgramUniform3i
+ flag custom_decoder
+
+glProgramUniform4i
+ flag custom_decoder
+
+glProgramUniform1ui
+ flag custom_decoder
+
+glProgramUniform2ui
+ flag custom_decoder
+
+glProgramUniform3ui
+ flag custom_decoder
+
+glProgramUniform4ui
+ flag custom_decoder
+
+glProgramUniform1fv
+ flag custom_decoder
+
+glProgramUniform2fv
+ flag custom_decoder
+
+glProgramUniform3fv
+ flag custom_decoder
+
+glProgramUniform4fv
+ flag custom_decoder
+
+glProgramUniform1iv
+ flag custom_decoder
+
+glProgramUniform2iv
+ flag custom_decoder
+
+glProgramUniform3iv
+ flag custom_decoder
+
+glProgramUniform4iv
+ flag custom_decoder
+
+glProgramUniform1uiv
+ flag custom_decoder
+
+glProgramUniform2uiv
+ flag custom_decoder
+
+glProgramUniform3uiv
+ flag custom_decoder
+
+glProgramUniform4uiv
+ flag custom_decoder
+
+glProgramUniformMatrix2fv
+ flag custom_decoder
+
+glProgramUniformMatrix3fv
+ flag custom_decoder
+
+glProgramUniformMatrix4fv
+ flag custom_decoder
+
+glProgramUniformMatrix2x3fv
+ flag custom_decoder
+
+glProgramUniformMatrix3x2fv
+ flag custom_decoder
+
+glProgramUniformMatrix2x4fv
+ flag custom_decoder
+
+glProgramUniformMatrix4x2fv
+ flag custom_decoder
+
+glProgramUniformMatrix3x4fv
+ flag custom_decoder
+
+glProgramUniformMatrix4x3fv
+ flag custom_decoder
+
+glGetProgramInterfaceiv
+ flag custom_decoder
+
+glGetProgramResourceiv
+ flag custom_decoder
+
+glGetProgramResourceIndex
+ flag custom_decoder
+
+glGetProgramResourceLocation
+ flag custom_decoder
+
+glGetProgramResourceName
+ flag custom_decoder
+
+