| # -*- coding: utf-8 -*- |
| |
| #------------------------------------------------------------------------- |
| # drawElements Quality Program utilities |
| # -------------------------------------- |
| # |
| # Copyright 2015 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| #------------------------------------------------------------------------- |
| |
| from src_util import * |
| import re |
| |
| class LogSpec: |
| def __init__ (self, argInPrints, argOutPrints = {}, returnPrint = None): |
| self.argInPrints = argInPrints |
| self.argOutPrints = argOutPrints |
| self.returnPrint = returnPrint |
| |
| def enum (group): |
| return lambda name: "get%sStr(%s)" % (group, name) |
| |
| def pointer (size): |
| return lambda name: "getPointerStr(%s, %s)" % (name, size) |
| |
| def enumPointer (group, size): |
| return lambda name: "getEnumPointerStr(%(name)s, %(size)s, %(nameFunc)s)" % {"name": name, "size": size, "nameFunc": ("get%sName" % group)} |
| |
| def booleanPointer (size): |
| return lambda name: "getBooleanPointerStr(%s, %s)" % (name, size) |
| |
| def textureUnit (name): |
| return "getTextureUnitStr(%s)" % name |
| |
| def voidPointer (name): |
| return "toHex(reinterpret_cast<deUintptr>(static_cast<const void*>(%s)))" % name |
| |
| def fnPointer (name): |
| return "toHex(reinterpret_cast<deUintptr>(%s))" % name |
| |
| stringVal = lambda name: "getStringStr(%s)" % name |
| |
| # Special rules for printing call arguments |
| CALL_LOG_SPECS = { |
| "glActiveTexture": LogSpec({0: textureUnit}), |
| "glBeginQuery": LogSpec({0: enum("QueryTarget")}), |
| "glBeginTransformFeedback": LogSpec({0: enum("PrimitiveType")}), |
| "glBindBuffer": LogSpec({0: enum("BufferTarget")}), |
| "glBindBufferBase": LogSpec({0: enum("BufferTarget")}), |
| "glBindBufferRange": LogSpec({0: enum("BufferTarget")}), |
| "glBindFramebuffer": LogSpec({0: enum("FramebufferTarget")}), |
| "glBindRenderbuffer": LogSpec({0: enum("FramebufferTarget")}), |
| "glBindTexture": LogSpec({0: enum("TextureTarget")}), |
| "glBindTransformFeedback": LogSpec({0: enum("TransformFeedbackTarget")}), |
| "glBlendEquation": LogSpec({0: enum("BlendEquation")}), |
| "glBlendEquationSeparate": LogSpec({0: enum("BlendEquation"), 1: enum("BlendEquation")}), |
| "glBlendEquationi": LogSpec({1: enum("BlendEquation")}), |
| "glBlendEquationSeparatei": LogSpec({1: enum("BlendEquation"), 2: enum("BlendEquation")}), |
| "glBlendFunc": LogSpec({0: enum("BlendFactor"), 1: enum("BlendFactor")}), |
| "glBlendFuncSeparate": LogSpec({0: enum("BlendFactor"), 1: enum("BlendFactor"), 2: enum("BlendFactor"), 3: enum("BlendFactor")}), |
| "glBlitFramebuffer": LogSpec({8: enum("BufferMask"), 9: enum("TextureFilter")}), |
| "glBufferData": LogSpec({0: enum("BufferTarget"), 3: enum("Usage")}), |
| "glBufferSubData": LogSpec({0: enum("BufferTarget")}), |
| "glCheckFramebufferStatus": LogSpec({0: enum("FramebufferTarget")}, returnPrint = enum("FramebufferStatus")), |
| "glClear": LogSpec({0: enum("BufferMask")}), |
| "glClearBufferfv": LogSpec({0: enum("Buffer")}), |
| "glClearBufferfi": LogSpec({0: enum("Buffer")}), |
| "glClearBufferiv": LogSpec({0: enum("Buffer")}), |
| "glClearBufferuiv": LogSpec({0: enum("Buffer")}), |
| "glCompressedTexImage2D": LogSpec({0: enum("TextureTarget"), 2: enum("CompressedTextureFormat")}), |
| "glCompressedTexSubImage2D": LogSpec({0: enum("TextureTarget"), 6: enum("CompressedTextureFormat")}), |
| "glCompressedTexImage3D": LogSpec({0: enum("TextureTarget"), 2: enum("CompressedTextureFormat")}), |
| "glCompressedTexSubImage3D": LogSpec({0: enum("TextureTarget"), 8: enum("CompressedTextureFormat")}), |
| "glCopyTexImage1D": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat")}), |
| "glCopyTexImage2D": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat")}), |
| "glCreateShader": LogSpec({0: enum("ShaderType")}), |
| "glCullFace": LogSpec({0: enum("Face")}), |
| "glDeleteBuffers": LogSpec({1: pointer(size = "n")}), |
| "glDeleteFramebuffers": LogSpec({1: pointer(size = "n")}), |
| "glDeleteQueries": LogSpec({1: pointer(size = "n")}), |
| "glDeleteRenderbuffers": LogSpec({1: pointer(size = "n")}), |
| "glDeleteBuffers": LogSpec({1: pointer(size = "n")}), |
| "glDeleteTextures": LogSpec({1: pointer(size = "n")}), |
| "glDeleteVertexArrays": LogSpec({1: pointer(size = "n")}), |
| "glDeleteProgramPipelines": LogSpec({1: pointer(size = "n")}), |
| "glDepthFunc": LogSpec({0: enum("CompareFunc")}), |
| "glDisable": LogSpec({0: enum("EnableCap")}), |
| "glDisablei": LogSpec({0: enum("IndexedEnableCap")}), |
| "glDrawArrays": LogSpec({0: enum("PrimitiveType")}), |
| "glDrawArraysInstanced": LogSpec({0: enum("PrimitiveType")}), |
| "glDrawBuffers": LogSpec({1: enumPointer("DrawReadBuffer", size = "n")}), |
| "glDrawElements": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glDrawElementsInstanced": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glDrawRangeElements": LogSpec({0: enum("PrimitiveType"), 4: enum("Type")}), |
| "glDrawArraysIndirect": LogSpec({0: enum("PrimitiveType")}), |
| "glDrawElementsIndirect": LogSpec({0: enum("PrimitiveType"), 1: enum("Type")}), |
| "glDrawElementsBaseVertex": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glDrawElementsInstancedBaseVertex": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glDrawRangeElementsBaseVertex": LogSpec({0: enum("PrimitiveType"), 4: enum("Type")}), |
| "glMultiDrawArrays": LogSpec({0: enum("PrimitiveType")}), |
| "glMultiDrawElements": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glMultiDrawElementsBaseVertex": LogSpec({0: enum("PrimitiveType"), 2: enum("Type")}), |
| "glEnable": LogSpec({0: enum("EnableCap")}), |
| "glEnablei": LogSpec({0: enum("IndexedEnableCap")}), |
| "glEndQuery": LogSpec({0: enum("QueryTarget")}), |
| "glFramebufferRenderbuffer": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferAttachment"), 2: enum("FramebufferTarget")}), |
| "glFramebufferTexture2D": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferAttachment"), 2: enum("TextureTarget")}), |
| "glFramebufferTextureLayer": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferAttachment")}), |
| "glFramebufferTexture": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferAttachment")}), |
| "glFramebufferParameteri": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferParameter")}), |
| "glFrontFace": LogSpec({0: enum("Winding")}), |
| "glGenBuffers": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenerateMipmap": LogSpec({0: enum("TextureTarget")}), |
| "glGenFramebuffers": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenQueries": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenRenderbuffers": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenTextures": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenTransformFeedbacks": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenVertexArrays": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| "glGenProgramPipelines": LogSpec({}, argOutPrints = {1: pointer(size = "n")}), |
| # "glGetActiveAttrib": |
| "glGetActiveUniform": LogSpec({}, argOutPrints = {3: pointer(size = "1"), 4: pointer(size = "1"), 5: enumPointer("ShaderVarType", size = "1"), 6: stringVal}), |
| "glGetActiveUniformsiv": LogSpec({2: pointer(size = "uniformCount"), 3: enum("UniformParam")}, argOutPrints = {4: pointer(size = "uniformCount")}), |
| # "glGetAttachedShaders": |
| "glGetBooleanv": |
| LogSpec( |
| { |
| 0: enum("GettableState"), |
| 1: voidPointer # second argument has type of GLboolean* (aka. char*). Prevent |
| # wrapper from attempting to print the argument as a C string. |
| }, |
| argOutPrints = {1: booleanPointer(size = "getBasicQueryNumArgsOut(pname)")}), |
| "glGetBufferParameteriv": LogSpec({0: enum("BufferTarget"), 1: enum("BufferQuery")}), |
| "glGetBufferParameteri64v": LogSpec({0: enum("BufferTarget"), 1: enum("BufferQuery")}), |
| "glGetError": LogSpec({}, returnPrint = enum("Error")), |
| "glGetFloatv": LogSpec({0: enum("GettableState")}, argOutPrints = {1: pointer(size = "getBasicQueryNumArgsOut(pname)")}), |
| "glGetFramebufferAttachmentParameteriv": |
| LogSpec( |
| { |
| 0: enum("FramebufferTarget"), |
| 1: enum("FramebufferAttachment"), |
| 2: enum("FramebufferAttachmentParameter") |
| }, |
| argOutPrints = {3: lambda name: "getFramebufferAttachmentParameterValueStr(pname, %s)" % name}), |
| "glGetFramebufferParameteriv": LogSpec({0: enum("FramebufferTarget"), 1: enum("FramebufferParameter")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetIntegerv": LogSpec({0: enum("GettableState")}, argOutPrints = {1: pointer(size = "getBasicQueryNumArgsOut(pname)")}), |
| "glGetInteger64v": LogSpec({0: enum("GettableState")}, argOutPrints = {1: pointer(size = "getBasicQueryNumArgsOut(pname)")}), |
| "glGetIntegeri_v": LogSpec({0: enum("GettableIndexedState")}, argOutPrints = {2:pointer(size = "getIndexedQueryNumArgsOut(target)")}), |
| "glGetInteger64i_v": LogSpec({0: enum("GettableIndexedState")}, argOutPrints = {2: pointer(size = "getIndexedQueryNumArgsOut(target)")}), |
| "glGetBooleani_v": |
| LogSpec( |
| { |
| 0: enum("GettableIndexedState"), |
| 2: voidPointer # last argument has type of GLboolean* (aka. char*). Prevent |
| # wrapper from attempting to print the argument as a C string. |
| }, |
| argOutPrints = {2: booleanPointer(size = "getIndexedQueryNumArgsOut(target)")}), |
| "glGetInternalformativ": LogSpec({0: enum("InternalFormatTarget"), 1: enum("UncompressedTextureFormat"), 2: enum("InternalFormatParameter")}, argOutPrints = {4: pointer(size = "bufSize")}), |
| "glGetMultisamplefv": LogSpec({0: enum("MultisampleParameter")}, argOutPrints = {2: pointer(size = "2")}), |
| "glGetPointerv": LogSpec({0: enum("PointerState")}, argOutPrints = {1: pointer(size = "1")}), |
| "glGetProgramiv": LogSpec({1: enum("ProgramParam")}, argOutPrints = {2: pointer(size = "getProgramQueryNumArgsOut(pname)")}), |
| "glGetProgramInfoLog": LogSpec({3: voidPointer}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetProgramPipelineiv": LogSpec({1: enum("PipelineParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetProgramPipelineInfoLog": LogSpec({3: voidPointer}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetQueryiv": LogSpec({0: enum("QueryTarget"), 1: enum("QueryParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetQueryObjectiv": LogSpec({1: enum("QueryObjectParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetQueryObjectuiv": LogSpec({1: enum("QueryObjectParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetQueryObjecti64v": LogSpec({1: enum("QueryObjectParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetQueryObjectui64v": LogSpec({1: enum("QueryObjectParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetRenderbufferParameteriv": LogSpec({0: enum("FramebufferTarget"), 1: enum("RenderbufferParameter")}), |
| "glGetSamplerParameterfv": LogSpec({1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetSamplerParameteriv": LogSpec({1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetSamplerParameterIiv": LogSpec({1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetSamplerParameterIuiv": LogSpec({1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetShaderiv": LogSpec({1: enum("ShaderParam")}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetShaderInfoLog": LogSpec({3: voidPointer}, argOutPrints = {2: pointer(size = "1")}), |
| "glGetShaderPrecisionFormat": LogSpec({0: enum("ShaderType"), 1: enum("PrecisionFormatType")}), |
| # "glGetShaderSource": |
| "glGetString": LogSpec({0: enum("GettableString")}, returnPrint=stringVal), |
| "glGetStringi": LogSpec({0: enum("GettableString")}, returnPrint=stringVal), |
| "glGetTexParameterfv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetTexParameteriv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetTexParameterIiv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetTexParameterIuiv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter")}, argOutPrints = {2: pointer(size = "getTextureParamQueryNumArgsOut(pname)")}), |
| "glGetTexLevelParameterfv": LogSpec({0: enum("TextureTarget"), 2: enum("TextureLevelParameter")}, argOutPrints = {3: pointer(size = "1")}), |
| "glGetTexLevelParameteriv": LogSpec({0: enum("TextureTarget"), 2: enum("TextureLevelParameter")}, argOutPrints = {3: pointer(size = "1")}), |
| # "glGetUniformfv": |
| # "glGetUniformiv": |
| "glGetUniformIndices": LogSpec({2: pointer(size = "uniformCount")}, argOutPrints = {3: pointer(size = "uniformCount")}), |
| "glGetVertexAttribfv": LogSpec({1: enum("VertexAttribParameterName")}, argOutPrints = {2: pointer(size = "getAttributeQueryNumArgsOut(pname)")}), |
| "glGetVertexAttribiv": LogSpec({1: enum("VertexAttribParameterName")}, argOutPrints = {2: pointer(size = "getAttributeQueryNumArgsOut(pname)")}), |
| "glGetVertexAttribIiv": LogSpec({1: enum("VertexAttribParameterName")}, argOutPrints = {2: pointer(size = "getAttributeQueryNumArgsOut(pname)")}), |
| "glGetVertexAttribIuiv": LogSpec({1: enum("VertexAttribParameterName")}, argOutPrints = {2: pointer(size = "getAttributeQueryNumArgsOut(pname)")}), |
| # "glGetVertexAttribPointerv": |
| "glHint": LogSpec({0: enum("Hint"), 1: enum("HintMode")}), |
| "glIsEnabled": LogSpec({0: enum("EnableCap")}), |
| "glIsEnabledi": LogSpec({0: enum("IndexedEnableCap")}), |
| "glPixelStorei": LogSpec({0: enum("PixelStoreParameter")}), |
| "glReadBuffer": LogSpec({0: enum("DrawReadBuffer")}), |
| "glReadPixels": LogSpec({4: enum("UncompressedTextureFormat"), 5: enum("Type")}), |
| "glRenderbufferStorage": LogSpec({0: enum("FramebufferTarget"), 1: enum("UncompressedTextureFormat")}), |
| "glRenderbufferStorageMultisample": LogSpec({0: enum("FramebufferTarget"), 2: enum("UncompressedTextureFormat")}), |
| "glStencilFunc": LogSpec({0: enum("CompareFunc")}), |
| "glStencilFuncSeparate": LogSpec({0: enum("Face"), 1: enum("CompareFunc")}), |
| "glStencilMaskSeparate": LogSpec({0: enum("Face")}), |
| "glStencilOp": LogSpec({0: enum("StencilOp"), 1: enum("StencilOp"), 2: enum("StencilOp")}), |
| "glStencilOpSeparate": LogSpec({0: enum("Face"), 1: enum("StencilOp"), 2: enum("StencilOp"), 3: enum("StencilOp")}), |
| "glTexImage1D": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 5: enum("UncompressedTextureFormat"), 6: enum("Type")}), |
| "glTexImage2D": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 6: enum("UncompressedTextureFormat"), 7: enum("Type")}), |
| "glTexImage2DMultisample": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 5: enum("Boolean")}), |
| "glTexImage3D": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 7: enum("UncompressedTextureFormat"), 8: enum("Type")}), |
| "glTexStorage2D": LogSpec({0: enum("TextureTarget"), 2: enum("TextureFormat")}), |
| "glTexStorage3D": LogSpec({0: enum("TextureTarget"), 2: enum("TextureFormat")}), |
| "glTexStorage2DMultisample": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 5: enum("Boolean")}), |
| "glTexStorage3DMultisample": LogSpec({0: enum("TextureTarget"), 2: enum("UncompressedTextureFormat"), 6: enum("Boolean")}), |
| # \todo [2012-03-08 pyry] Pointer values.. |
| "glTexParameterf": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter")}), |
| "glTexParameteri": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter"), 2: lambda name: "getTextureParameterValueStr(pname, %s)" % name}), |
| "glTexParameterfv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glTexParameteriv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glTexParameterIiv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glTexParameterIuiv": LogSpec({0: enum("TextureTarget"), 1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glSamplerParameterf": LogSpec({1: enum("TextureParameter")}), |
| "glSamplerParameteri": LogSpec({1: enum("TextureParameter"), 2: lambda name: "getTextureParameterValueStr(pname, %s)" % name}), |
| "glSamplerParameterfv": LogSpec({1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glSamplerParameteriv": LogSpec({1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glSamplerParameterIiv": LogSpec({1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glSamplerParameterIuiv": LogSpec({1: enum("TextureParameter"), 2: pointer(size = "getTextureParamNumArgs(pname)")}), |
| "glTexSubImage1D": LogSpec({0: enum("TextureTarget"), 4: enum("UncompressedTextureFormat"), 5: enum("Type")}), |
| "glTexSubImage2D": LogSpec({0: enum("TextureTarget"), 6: enum("UncompressedTextureFormat"), 7: enum("Type")}), |
| "glTexSubImage3D": LogSpec({0: enum("TextureTarget"), 8: enum("UncompressedTextureFormat"), 9: enum("Type")}), |
| "glUniform1fv": LogSpec({2: pointer(size = "(count * 1)")}), |
| "glUniform1iv": LogSpec({2: pointer(size = "(count * 1)")}), |
| "glUniform1uiv": LogSpec({2: pointer(size = "(count * 1)")}), |
| "glUniform2fv": LogSpec({2: pointer(size = "(count * 2)")}), |
| "glUniform2iv": LogSpec({2: pointer(size = "(count * 2)")}), |
| "glUniform2uiv": LogSpec({2: pointer(size = "(count * 2)")}), |
| "glUniform3fv": LogSpec({2: pointer(size = "(count * 3)")}), |
| "glUniform3iv": LogSpec({2: pointer(size = "(count * 3)")}), |
| "glUniform3uiv": LogSpec({2: pointer(size = "(count * 3)")}), |
| "glUniform4fv": LogSpec({2: pointer(size = "(count * 4)")}), |
| "glUniform4iv": LogSpec({2: pointer(size = "(count * 4)")}), |
| "glUniform4uiv": LogSpec({2: pointer(size = "(count * 4)")}), |
| "glUniformMatrix2fv": LogSpec({3: pointer(size = "(count * 2*2)")}), |
| "glUniformMatrix3fv": LogSpec({3: pointer(size = "(count * 3*3)")}), |
| "glUniformMatrix4fv": LogSpec({3: pointer(size = "(count * 4*4)")}), |
| "glUniformMatrix2x3fv": LogSpec({3: pointer(size = "(count * 2*3)")}), |
| "glUniformMatrix2x4fv": LogSpec({3: pointer(size = "(count * 2*4)")}), |
| "glUniformMatrix3x2fv": LogSpec({3: pointer(size = "(count * 3*2)")}), |
| "glUniformMatrix3x4fv": LogSpec({3: pointer(size = "(count * 3*4)")}), |
| "glUniformMatrix4x2fv": LogSpec({3: pointer(size = "(count * 4*2)")}), |
| "glUniformMatrix4x3fv": LogSpec({3: pointer(size = "(count * 4*3)")}), |
| "glUseProgramStages": LogSpec({1: enum("ShaderTypeMask")}), |
| "glPatchParameteri": LogSpec({0: enum("PatchParam")}), |
| "glProgramParameteri": LogSpec({1: enum("ProgramParam")}), |
| "glProgramUniform1fv": LogSpec({3: pointer(size = "(count * 1)")}), |
| "glProgramUniform1iv": LogSpec({3: pointer(size = "(count * 1)")}), |
| "glProgramUniform1uiv": LogSpec({3: pointer(size = "(count * 1)")}), |
| "glProgramUniform2fv": LogSpec({3: pointer(size = "(count * 2)")}), |
| "glProgramUniform2iv": LogSpec({3: pointer(size = "(count * 2)")}), |
| "glProgramUniform2uiv": LogSpec({3: pointer(size = "(count * 2)")}), |
| "glProgramUniform3fv": LogSpec({3: pointer(size = "(count * 3)")}), |
| "glProgramUniform3iv": LogSpec({3: pointer(size = "(count * 3)")}), |
| "glProgramUniform3uiv": LogSpec({3: pointer(size = "(count * 3)")}), |
| "glProgramUniform4fv": LogSpec({3: pointer(size = "(count * 4)")}), |
| "glProgramUniform4iv": LogSpec({3: pointer(size = "(count * 4)")}), |
| "glProgramUniform4uiv": LogSpec({3: pointer(size = "(count * 4)")}), |
| "glProgramUniformMatrix2fv": LogSpec({4: pointer(size = "(count * 2*2)")}), |
| "glProgramUniformMatrix3fv": LogSpec({4: pointer(size = "(count * 3*3)")}), |
| "glProgramUniformMatrix4fv": LogSpec({4: pointer(size = "(count * 4*4)")}), |
| "glProgramUniformMatrix2x3fv": LogSpec({4: pointer(size = "(count * 2*3)")}), |
| "glProgramUniformMatrix2x4fv": LogSpec({4: pointer(size = "(count * 2*4)")}), |
| "glProgramUniformMatrix3x2fv": LogSpec({4: pointer(size = "(count * 3*2)")}), |
| "glProgramUniformMatrix3x4fv": LogSpec({4: pointer(size = "(count * 3*4)")}), |
| "glProgramUniformMatrix4x3fv": LogSpec({4: pointer(size = "(count * 4*3)")}), |
| "glProgramUniformMatrix4x2fv": LogSpec({4: pointer(size = "(count * 4*2)")}), |
| "glProvokingVertex": LogSpec({0: enum("ProvokingVertex")}), |
| "glVertexAttrib1fv": LogSpec({1: pointer(size = "1")}), |
| "glVertexAttrib2fv": LogSpec({1: pointer(size = "2")}), |
| "glVertexAttrib3fv": LogSpec({1: pointer(size = "3")}), |
| "glVertexAttrib4fv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib1sv": LogSpec({1: pointer(size = "1")}), |
| "glVertexAttrib2sv": LogSpec({1: pointer(size = "2")}), |
| "glVertexAttrib3sv": LogSpec({1: pointer(size = "3")}), |
| "glVertexAttrib4sv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib1dv": LogSpec({1: pointer(size = "1")}), |
| "glVertexAttrib2dv": LogSpec({1: pointer(size = "2")}), |
| "glVertexAttrib3dv": LogSpec({1: pointer(size = "3")}), |
| "glVertexAttrib4dv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4bv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4iv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4ubv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4usv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4uiv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Nbv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Nsv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Niv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Nubv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Nusv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttrib4Nuiv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI1iv": LogSpec({1: pointer(size = "1")}), |
| "glVertexAttribI2iv": LogSpec({1: pointer(size = "2")}), |
| "glVertexAttribI3iv": LogSpec({1: pointer(size = "3")}), |
| "glVertexAttribI4iv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI1uiv": LogSpec({1: pointer(size = "1")}), |
| "glVertexAttribI2uiv": LogSpec({1: pointer(size = "2")}), |
| "glVertexAttribI3uiv": LogSpec({1: pointer(size = "3")}), |
| "glVertexAttribI4uiv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI4bv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI4sv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI4ubv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribI4usv": LogSpec({1: pointer(size = "4")}), |
| "glVertexAttribPointer": LogSpec({2: enum("Type")}), |
| "glVertexAttribIPointer": LogSpec({2: enum("Type")}), |
| "glVertexAttribFormat": LogSpec({2: enum("Type")}), |
| "glVertexAttribIFormat": LogSpec({2: enum("Type")}), |
| "glInvalidateFramebuffer": LogSpec({0: enum("FramebufferTarget"), 2: enumPointer("InvalidateAttachment", "numAttachments")}), |
| "glInvalidateSubFramebuffer": LogSpec({0: enum("FramebufferTarget"), 2: enumPointer("InvalidateAttachment", "numAttachments")}), |
| "glMapBufferRange": LogSpec({0: enum("BufferTarget"), 3: enum("BufferMapFlags")}), |
| "glUnmapBuffer": LogSpec({0: enum("BufferTarget")}), |
| "glFlushMappedBufferRange": LogSpec({0: enum("BufferTarget")}), |
| "glMemoryBarrier": LogSpec({0: enum("MemoryBarrierFlags")}), |
| "glBindImageTexture": LogSpec({5: enum("ImageAccess"), 6: enum("UncompressedTextureFormat")}), |
| "glGetProgramResourceIndex": LogSpec({1: enum("ProgramInterface")}), |
| "glGetProgramResourceiv": |
| LogSpec( |
| { |
| 1: enum("ProgramInterface"), |
| 4: enumPointer("ProgramResourceProperty", "propCount") |
| }, |
| argOutPrints = |
| { |
| 6: pointer(size = "1"), |
| 7: pointer(size = "((length == DE_NULL) ? (bufSize) : ((bufSize < *length) ? (bufSize) : (*length)))") |
| }), |
| "glDebugMessageInsert": LogSpec({0: enum("DebugMessageSource"), 1: enum("DebugMessageType"), 3: enum("DebugMessageSeverity")}), |
| "glDebugMessageControl": LogSpec({0: enum("DebugMessageSource"), 1: enum("DebugMessageType"), 2: enum("DebugMessageSeverity"), 4: pointer(size = "(count)")}), |
| "glDebugMessageCallback": LogSpec({0: fnPointer, 1: voidPointer}), |
| "glPushDebugGroup": LogSpec({0: enum("DebugMessageSource")}), |
| "glTexBuffer": LogSpec({0: enum("BufferTarget"), 1: enum("UncompressedTextureFormat")}), |
| "glTexBufferRange": LogSpec({0: enum("BufferTarget"), 1: enum("UncompressedTextureFormat")}), |
| } |
| |
| def glwPrefix (string): |
| return re.sub(r'\bGL', 'glw::GL', string) |
| |
| def prefixedParams (command): |
| if len(command.params) > 0: |
| return ", ".join(glwPrefix(param.declaration) for param in command.params) |
| else: |
| return "void" |
| |
| def commandLogWrapperMemberDecl (command): |
| return "%s\t%s\t(%s);" % (glwPrefix(command.type), command.name, prefixedParams(command)) |
| |
| def getVarDefaultPrint (type, varName): |
| if re.match(r'^const +GLchar *\*$', type): |
| return "getStringStr(%s)" % varName |
| elif re.match(r'(GLubyte|GLbyte|GLenum|GLushort|GLbitfield|\*)$', type): |
| return "toHex(%s)" % varName |
| elif type == 'GLboolean': |
| return "getBooleanStr(%s)" % varName |
| elif re.match(r'^(const +)?.+ *\*$', type) and not re.match(r'^(const +)?void *\*$', type): |
| # non-void pointer type, always cast to void* to avoid unforeseen consequences of |
| # implicit assumptions (such as char* should be printed as a zero-terminated string) |
| # \note use static_cast to break the build if function pointer is supplied |
| return "toHex(reinterpret_cast<deUintptr>(static_cast<const void*>(%s)))" % varName |
| else: |
| return varName |
| |
| def commandLogWrapperMemberDef (command): |
| src = "" |
| try: |
| logSpec = CALL_LOG_SPECS[command.name] |
| except KeyError: |
| logSpec = None |
| |
| src += "\n" |
| src += "%s CallLogWrapper::%s (%s)\n{\n" % (glwPrefix(command.type), command.name, prefixedParams(command)) |
| |
| # Append paramemetrs |
| callPrintItems = ["\"%s(\"" % command.name] |
| for paramNdx, param in enumerate(command.params): |
| if paramNdx > 0: |
| callPrintItems.append("\", \"") |
| |
| if logSpec and paramNdx in logSpec.argInPrints: |
| callPrintItems.append(logSpec.argInPrints[paramNdx](param.name)) |
| else: |
| callPrintItems.append(getVarDefaultPrint(param.type, param.name)) |
| |
| callPrintItems += ["\");\"", "TestLog::EndMessage"] |
| |
| src += "\tif (m_enableLog)\n" |
| src += "\t\tm_log << TestLog::Message << %s;\n" % " << ".join(callPrintItems) |
| |
| callStr = "m_gl.%s(%s)" % (getFunctionMemberName(command.name), ", ".join([p.name for p in command.params])) |
| |
| isVoid = command.type == 'void' |
| if isVoid: |
| src += "\t%s;\n" % callStr |
| else: |
| src += "\t%s returnValue = %s;\n" % (glwPrefix(command.type), callStr) |
| |
| if logSpec and len(logSpec.argOutPrints) > 0: |
| # Print values returned in pointers |
| src += "\tif (m_enableLog)\n" |
| printouts = "" |
| numPrintouts = 0 |
| |
| for paramNdx, param in enumerate(command.params): |
| if paramNdx in logSpec.argOutPrints: |
| printouts += "\t\tm_log << TestLog::Message << \"// %s = \" << %s << TestLog::EndMessage;\n" % (param.name, logSpec.argOutPrints[paramNdx](param.name)) |
| numPrintouts += 1 |
| |
| # If print handlers do not match the actual command, that is very likely an error. Check |
| # print handlers is a subset of all arguments. |
| if numPrintouts == 0 or len(set(logSpec.argOutPrints.keys()) - set(range(len(command.params)))) > 0: |
| raise Exception("Invalid print handlers when processing command %s" % command.name) |
| |
| if numPrintouts != 1: |
| src += "\t{\n" |
| src += printouts |
| if numPrintouts != 1: |
| src += "\t}\n" |
| |
| if not isVoid: |
| # Print return value |
| returnPrint = getVarDefaultPrint(command.type, "returnValue") |
| if logSpec and logSpec.returnPrint: |
| returnPrint = logSpec.returnPrint("returnValue") |
| |
| src += "\tif (m_enableLog)\n" |
| src += "\t\tm_log << TestLog::Message << \"// \" << %s << \" returned\" << TestLog::EndMessage;\n" % returnPrint |
| src += "\treturn returnValue;\n" |
| |
| src += "}" |
| return src |
| |
| def genCallLogWrapper (iface): |
| genCommandList(iface, commandLogWrapperMemberDecl, OPENGL_DIR, "gluCallLogWrapperApi.inl", True) |
| genCommandList(iface, commandLogWrapperMemberDef, OPENGL_DIR, "gluCallLogWrapper.inl", False) |
| |
| if __name__ == "__main__": |
| genCallLogWrapper(getHybridInterface()) |