diff options
author | Lingfeng Yang <lfy@google.com> | 2017-01-24 08:32:51 -0800 |
---|---|---|
committer | Greg Hartman <ghartman@google.com> | 2018-08-23 17:30:51 -0700 |
commit | 9e931bd35f1d98d9565e7a258d7d3d297591327e (patch) | |
tree | 99ff9e0a4b86cd4d97e4a095dec763bf5a710f84 /host | |
parent | 1efed05b0331491aa22474c45d348e830153d120 (diff) | |
download | opengl-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.cpp | 48 | ||||
-rw-r--r-- | host/libs/virglrenderer/GLESv1_dec/gles1.attrib | 10 | ||||
-rw-r--r-- | host/libs/virglrenderer/GLESv3_dec/gles3.attrib | 246 |
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 + + |