summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-02-04 21:23:45 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2013-02-07 18:13:37 +0100
commit72a841745eea6f3a4b4e857d7534b1b6dccb5d53 (patch)
treebc9440d44c882f836923dc5b2a41068ee79c3458 /tools
parentcf4bd4b6123ae7b2df8f7ea9a05b42b367b29e73 (diff)
gallium state: running prototype
Diffstat (limited to 'tools')
-rw-r--r--tools/data/gles2.xml1215
-rw-r--r--tools/data/viv_gallium_state.txt96
-rw-r--r--tools/etnaviv/parse_rng.py3
-rwxr-xr-xtools/gen_weave_state.py189
4 files changed, 1502 insertions, 1 deletions
diff --git a/tools/data/gles2.xml b/tools/data/gles2.xml
new file mode 100644
index 0000000..67f34b3
--- /dev/null
+++ b/tools/data/gles2.xml
@@ -0,0 +1,1215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2012-2013 Wladimir J. van der Laan
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sub license,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial portions
+ of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+-->
+<!-- List of OpenGL ES 2.0 functions with parameters.
+ GLES2 specification in machine-parseable format for state probing.
+ -->
+<root>
+
+<!-- format roughly based on rnndb -->
+<!-- should be extendable by extensions (later work)
+ values are not important here and would only cause clutter, as the values of state bits depend on the hw,
+ also the same tokens can (and should) be part of multiple enumerations without any harm,
+ they could be mapped with another map (tokens.xml) if important, ie to build hash tables
+ -->
+<enum name="Boolean">
+ <value name="FALSE"/>
+ <value name="TRUE"/>
+</enum>
+<bitset name="ClearBufferMask">
+ <bitfield name="DEPTH_BUFFER_BIT"/>
+ <bitfield name="STENCIL_BUFFER_BIT"/>
+ <bitfield name="COLOR_BUFFER_BIT"/>
+</bitset>
+<enum name="BeginMode"> <!-- primitive type -->
+ <value name="POINTS"/>
+ <value name="LINES"/>
+ <value name="LINE_LOOP"/>
+ <value name="LINE_STRIP"/>
+ <value name="TRIANGLES"/>
+ <value name="TRIANGLE_STRIP"/>
+ <value name="TRIANGLE_FAN"/>
+ <!-- XXX QUADS also supported by Vivante blob, not in GLES2 -->
+</enum>
+<enum name="BlendingFactorDest">
+ <value name="ZERO"/>
+ <value name="ONE"/>
+ <value name="SRC_COLOR"/>
+ <value name="ONE_MINUS_SRC_COLOR"/>
+ <value name="DST_COLOR"/>
+ <value name="ONE_MINUS_DST_COLOR"/>
+ <value name="SRC_ALPHA"/>
+ <value name="ONE_MINUS_SRC_ALPHA"/>
+ <value name="DST_ALPHA"/>
+ <value name="ONE_MINUS_DST_ALPHA"/>
+ <value name="CONSTANT_COLOR"/>
+ <value name="ONE_MINUS_CONSTANT_COLOR"/>
+ <value name="CONSTANT_ALPHA"/>
+ <value name="ONE_MINUS_CONSTANT_ALPHA"/>
+</enum>
+<enum name="BlendingFactorSrc">
+ <value name="ZERO"/>
+ <value name="ONE"/>
+ <value name="SRC_COLOR"/>
+ <value name="ONE_MINUS_SRC_COLOR"/>
+ <value name="DST_COLOR"/>
+ <value name="ONE_MINUS_DST_COLOR"/>
+ <value name="SRC_ALPHA"/>
+ <value name="ONE_MINUS_SRC_ALPHA"/>
+ <value name="DST_ALPHA"/>
+ <value name="ONE_MINUS_DST_ALPHA"/>
+ <value name="CONSTANT_COLOR"/>
+ <value name="ONE_MINUS_CONSTANT_COLOR"/>
+ <value name="CONSTANT_ALPHA"/>
+ <value name="ONE_MINUS_CONSTANT_ALPHA"/>
+ <value name="SRC_ALPHA_SATURATE"/>
+</enum>
+<enum name="BlendEquation">
+ <value name="FUNC_ADD"/>
+ <value name="FUNC_SUBTRACT"/>
+ <value name="FUNC_REVERSE_SUBTRACT"/>
+ <!-- MIN -->
+ <!-- MAX -->
+</enum>
+<enum name="CullFaceMode"> <!-- Used by CullFace and XXXSeparate to specify face -->
+ <value name="FRONT"/>
+ <value name="BACK"/>
+ <value name="FRONT_AND_BACK"/>
+</enum>
+<enum name="EnableCap"> <!-- Enable/Disable/IsEnabled -->
+ <value name="BLEND"/>
+ <value name="CULL_FACE"/>
+ <value name="DEPTH_TEST"/>
+ <value name="DITHER"/>
+ <value name="POLYGON_OFFSET_FILL"/>
+ <value name="SAMPLE_ALPHA_TO_COVERAGE"/>
+ <value name="SAMPLE_COVERAGE"/>
+ <value name="SCISSOR_TEST"/>
+ <value name="STENCIL_TEST"/>
+</enum>
+<enum name="DepthFunction">
+ <value name="NEVER"/>
+ <value name="LESS"/>
+ <value name="EQUAL"/>
+ <value name="LEQUAL"/>
+ <value name="GREATER"/>
+ <value name="NOTEQUAL"/>
+ <value name="GEQUAL"/>
+ <value name="ALWAYS"/>
+</enum>
+<enum name="ErrorCode">
+ <value name="NO_ERROR"/>
+ <value name="INVALID_ENUM"/>
+ <value name="INVALID_VALUE"/>
+ <value name="INVALID_OPERATION"/>
+ <value name="INVALID_FRAMEBUFFER_OPERATION"/>
+ <value name="OUT_OF_MEMORY"/>
+</enum>
+<enum name="FrontFaceDirection">
+ <value name="CW"/>
+ <value name="CCW"/>
+</enum>
+<enum name="HintMode">
+ <value name="DONT_CARE"/>
+ <value name="FASTEST"/>
+ <value name="NICEST"/>
+</enum>
+<enum name="HintTarget">
+ <value name="GENERATE_MIPMAP_HINT"/>
+</enum>
+<enum name="DataType">
+ <value name="BYTE"/>
+ <value name="UNSIGNED_BYTE"/>
+ <value name="SHORT"/>
+ <value name="UNSIGNED_SHORT"/>
+ <value name="INT"/>
+ <value name="UNSIGNED_INT"/>
+ <value name="FLOAT"/>
+ <value name="FIXED"/>
+</enum>
+<enum name="PixelFormat">
+ <!-- XXX split up? used by various functions;
+ ReadPixels only accepts ALPHA, RGB, RGBA
+ TexImage2D only accepts ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA
+ See also TextureInternalFormat
+ -->
+ <value name="DEPTH_COMPONENT"/>
+ <value name="ALPHA"/>
+ <value name="RGB"/>
+ <value name="RGBA"/>
+ <value name="LUMINANCE"/>
+ <value name="LUMINANCE_ALPHA"/>
+</enum>
+<enum name="PixelType">
+ <value name="UNSIGNED_BYTE"/>
+ <value name="UNSIGNED_SHORT_4_4_4_4"/>
+ <value name="UNSIGNED_SHORT_5_5_5_1"/>
+ <value name="UNSIGNED_SHORT_5_6_5"/>
+</enum>
+<enum name="StencilFunction">
+ <value name="NEVER"/>
+ <value name="LESS"/>
+ <value name="EQUAL"/>
+ <value name="LEQUAL"/>
+ <value name="GREATER"/>
+ <value name="NOTEQUAL"/>
+ <value name="GEQUAL"/>
+ <value name="ALWAYS"/>
+</enum>
+<enum name="StencilOp">
+ <value name="ZERO"/>
+ <value name="KEEP"/>
+ <value name="REPLACE"/>
+ <value name="INCR"/>
+ <value name="DECR"/>
+ <value name="INVERT"/>
+ <value name="INCR_WRAP"/>
+ <value name="DECR_WRAP"/>
+</enum>
+<enum name="StringName">
+ <value name="VENDOR"/>
+ <value name="RENDERER"/>
+ <value name="VERSION"/>
+ <value name="SHADING_LANGUAGE_VERSION"/>
+ <value name="EXTENSIONS"/>
+</enum>
+<enum name="TextureMagFilter">
+ <value name="NEAREST"/>
+ <value name="LINEAR"/>
+</enum>
+<enum name="TextureMinFilter">
+ <value name="NEAREST"/>
+ <value name="LINEAR"/>
+ <value name="NEAREST_MIPMAP_NEAREST"/>
+ <value name="LINEAR_MIPMAP_NEAREST"/>
+ <value name="NEAREST_MIPMAP_LINEAR"/>
+ <value name="LINEAR_MIPMAP_LINEAR"/>
+</enum>
+<enum name="TextureParameterName">
+ <value name="TEXTURE_MAG_FILTER"/>
+ <value name="TEXTURE_MIN_FILTER"/>
+ <value name="TEXTURE_WRAP_S"/>
+ <value name="TEXTURE_WRAP_T"/>
+</enum>
+<enum name="TextureTarget"> <!-- general texture target -->
+ <value name="TEXTURE_2D"/>
+ <value name="TEXTURE_CUBE_MAP"/>
+</enum>
+<enum name="TextureTargetFace"> <!-- used when a specific face is to be specified, ie when uploading or binding framebuffer texture -->
+ <value name="TEXTURE_2D"/>
+ <value name="TEXTURE_CUBE_MAP_POSITIVE_X"/>
+ <value name="TEXTURE_CUBE_MAP_NEGATIVE_X"/>
+ <value name="TEXTURE_CUBE_MAP_POSITIVE_Y"/>
+ <value name="TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
+ <value name="TEXTURE_CUBE_MAP_POSITIVE_Z"/>
+ <value name="TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
+</enum>
+<enum name="TextureUnit">
+ <value name="TEXTURE0"/>
+ <value name="TEXTURE1"/>
+ <value name="TEXTURE2"/>
+ <value name="TEXTURE3"/>
+ <value name="TEXTURE4"/>
+ <value name="TEXTURE5"/>
+ <value name="TEXTURE6"/>
+ <value name="TEXTURE7"/>
+ <value name="TEXTURE8"/>
+ <value name="TEXTURE9"/>
+ <value name="TEXTURE10"/>
+ <value name="TEXTURE11"/>
+ <value name="TEXTURE12"/>
+ <value name="TEXTURE13"/>
+ <value name="TEXTURE14"/>
+ <value name="TEXTURE15"/>
+ <value name="TEXTURE16"/>
+ <value name="TEXTURE17"/>
+ <value name="TEXTURE18"/>
+ <value name="TEXTURE19"/>
+ <value name="TEXTURE20"/>
+ <value name="TEXTURE21"/>
+ <value name="TEXTURE22"/>
+ <value name="TEXTURE23"/>
+ <value name="TEXTURE24"/>
+ <value name="TEXTURE25"/>
+ <value name="TEXTURE26"/>
+ <value name="TEXTURE27"/>
+ <value name="TEXTURE28"/>
+ <value name="TEXTURE29"/>
+ <value name="TEXTURE30"/>
+ <value name="TEXTURE31"/>
+</enum>
+<enum name="TextureWrapMode">
+ <value name="REPEAT"/>
+ <value name="CLAMP_TO_EDGE"/>
+ <value name="MIRRORED_REPEAT"/>
+</enum>
+<enum name="TextureInternalFormat"> <!-- (Copy)TexImage2D -->
+ <value name="ALPHA"/>
+ <value name="LUMINANCE"/>
+ <value name="LUMINANCE_ALPHA"/>
+ <value name="RGB"/>
+ <value name="RGBA"/>
+</enum>
+<enum name="RenderbufferInternalFormat"> <!-- RenderbufferStorage / GetRenderbufferParameter -->
+ <value name="RGBA4"/>
+ <value name="RGB565"/>
+ <value name="RGB5_A1"/>
+ <value name="DEPTH_COMPONENT16"/>
+ <value name="STENCIL_INDEX8"/>
+</enum>
+<enum name="UniformType"> <!-- GetActiveAttrib/GetActiveUniform -->
+ <value name="FLOAT"/>
+ <value name="FLOAT_VEC2"/>
+ <value name="FLOAT_VEC3"/>
+ <value name="FLOAT_VEC4"/>
+ <value name="INT"/>
+ <value name="INT_VEC2"/>
+ <value name="INT_VEC3"/>
+ <value name="INT_VEC4"/>
+ <value name="BOOL"/>
+ <value name="BOOL_VEC2"/>
+ <value name="BOOL_VEC3"/>
+ <value name="BOOL_VEC4"/>
+ <value name="FLOAT_MAT2"/>
+ <value name="FLOAT_MAT3"/>
+ <value name="FLOAT_MAT4"/>
+ <value name="SAMPLER_2D"/>
+ <value name="SAMPLER_CUBE"/>
+</enum>
+<enum name="FramebufferAttachment">
+ <value name="COLOR_ATTACHMENT0"/>
+ <value name="DEPTH_ATTACHMENT"/>
+ <value name="STENCIL_ATTACHMENT"/>
+</enum>
+<enum name="FramebufferStatus"> <!-- as returned by CheckFramebufferStatus -->
+ <value name="FRAMEBUFFER_COMPLETE"/>
+ <value name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT"/>
+ <value name="FRAMEBUFFER_INCOMPLETE_DIMENSIONS"/>
+ <value name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"/>
+ <value name="FRAMEBUFFER_UNSUPPORTED"/>
+</enum>
+<enum name="FramebufferTarget">
+ <value name="FRAMEBUFFER"/>
+</enum>
+<enum name="RenderbufferTarget">
+ <value name="RENDERBUFFER"/>
+</enum>
+<enum name="GetVertexAttribParameterPName">
+ <value name="VERTEX_ATTRIB_ARRAY_ENABLED"/>
+ <value name="VERTEX_ATTRIB_ARRAY_SIZE"/>
+ <value name="VERTEX_ATTRIB_ARRAY_STRIDE"/>
+ <value name="VERTEX_ATTRIB_ARRAY_TYPE"/>
+ <value name="VERTEX_ATTRIB_ARRAY_NORMALIZED"/>
+ <value name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/>
+ <value name="CURRENT_VERTEX_ATTRIB"/>
+</enum>
+<enum name="GetBufferParameterPName">
+ <value name="BUFFER_SIZE"/>
+ <value name="BUFFER_USAGE"/>
+</enum>
+<enum name="BufferTarget">
+ <value name="ARRAY_BUFFER"/>
+ <value name="ELEMENT_ARRAY_BUFFER"/>
+</enum>
+<enum name="BufferUsage">
+ <value name="STREAM_DRAW"/>
+ <value name="STATIC_DRAW"/>
+ <value name="DYNAMIC_DRAW"/>
+</enum>
+<enum name="ShaderType">
+ <value name="VERTEX_SHADER"/>
+ <value name="FRAGMENT_SHADER"/>
+</enum>
+<enum name="PrecisionType"> <!-- GetShaderPrecisionFormat -->
+ <value name="LOW_FLOAT"/>
+ <value name="MEDIUM_FLOAT"/>
+ <value name="HIGH_FLOAT"/>
+ <value name="LOW_INT"/>
+ <value name="MEDIUM_INT"/>
+ <value name="HIGH_INT"/>
+</enum>
+<enum name="IndexType"> <!-- glDrawElephants type -->
+ <value name="UNSIGNED_SHORT" brief="16 bit indices"/>
+ <value name="UNSIGNED_BYTE" brief="32 bit indices"/>
+</enum>
+<enum name="GetPName">
+ <value name="ACTIVE_TEXTURE"/>
+ <value name="ALIASED_LINE_WIDTH_RANGE"/>
+ <value name="ALIASED_POINT_SIZE_RANGE"/>
+ <value name="ALPHA_BITS"/>
+ <value name="ARRAY_BUFFER_BINDING"/>
+ <value name="BLEND"/>
+ <value name="BLEND_COLOR"/>
+ <value name="BLEND_DST_ALPHA"/>
+ <value name="BLEND_DST_RGB"/>
+ <value name="BLEND_EQUATION_ALPHA"/>
+ <value name="BLEND_EQUATION_RGB"/>
+ <value name="BLEND_SRC_ALPHA"/>
+ <value name="BLEND_SRC_RGB"/>
+ <value name="BLUE_BITS"/>
+ <value name="COLOR_CLEAR_VALUE"/>
+ <value name="COLOR_WRITEMASK"/>
+ <value name="COMPRESSED_TEXTURE_FORMATS"/>
+ <value name="CULL_FACE"/>
+ <value name="CULL_FACE_MODE"/>
+ <value name="CURRENT_PROGRAM"/>
+ <value name="DEPTH_BITS"/>
+ <value name="DEPTH_CLEAR_VALUE"/>
+ <value name="DEPTH_FUNC"/>
+ <value name="DEPTH_RANGE"/>
+ <value name="DEPTH_TEST"/>
+ <value name="DEPTH_WRITEMASK"/>
+ <value name="DITHER"/>
+ <value name="ELEMENT_ARRAY_BUFFER_BINDING"/>
+ <value name="FRAMEBUFFER_BINDING"/>
+ <value name="FRONT_FACE"/>
+ <value name="GENERATE_MIPMAP_HINT"/>
+ <value name="GREEN_BITS"/>
+ <value name="IMPLEMENTATION_COLOR_READ_FORMAT"/>
+ <value name="IMPLEMENTATION_COLOR_READ_TYPE"/>
+ <value name="LINE_WIDTH"/>
+ <value name="MAX_COMBINED_TEXTURE_IMAGE_UNITS"/>
+ <value name="MAX_CUBE_MAP_TEXTURE_SIZE"/>
+ <value name="MAX_FRAGMENT_UNIFORM_VECTORS"/>
+ <value name="MAX_RENDERBUFFER_SIZE"/>
+ <value name="MAX_TEXTURE_IMAGE_UNITS"/>
+ <value name="MAX_TEXTURE_SIZE"/>
+ <value name="MAX_VARYING_VECTORS"/>
+ <value name="MAX_VERTEX_ATTRIBS"/>
+ <value name="MAX_VERTEX_TEXTURE_IMAGE_UNITS"/>
+ <value name="MAX_VERTEX_UNIFORM_VECTORS"/>
+ <value name="MAX_VIEWPORT_DIMS"/>
+ <value name="NUM_COMPRESSED_TEXTURE_FORMATS"/>
+ <value name="NUM_SHADER_BINARY_FORMATS"/>
+ <value name="PACK_ALIGNMENT"/>
+ <value name="POLYGON_OFFSET_FACTOR"/>
+ <value name="POLYGON_OFFSET_FILL"/>
+ <value name="POLYGON_OFFSET_UNITS"/>
+ <value name="RED_BITS"/>
+ <value name="RENDERBUFFER_BINDING"/>
+ <value name="SAMPLE_TO_ALPHA_COVERAGE"/>
+ <value name="SAMPLE_BUFFERS"/>
+ <value name="SAMPLE_COVERAGE"/>
+ <value name="SAMPLE_COVERAGE_INVERT"/>
+ <value name="SAMPLE_COVERAGE_VALUE"/>
+ <value name="SAMPLES"/>
+ <value name="SCISSOR_BOX"/>
+ <value name="SCISSOR_TEST"/>
+ <value name="SHADER_BINARY_FORMATS"/>
+ <value name="SHADER_COMPILER"/>
+ <value name="STENCIL_BACK_FAIL"/>
+ <value name="STENCIL_BACK_FUNC"/>
+ <value name="STENCIL_BACK_PASS_DEPTH_FAIL"/>
+ <value name="STENCIL_BACK_PASS_DEPTH_PASS"/>
+ <value name="STENCIL_BACK_REF"/>
+ <value name="STENCIL_BACK_VALUE_MASK"/>
+ <value name="STENCIL_BACK_WRITEMASK"/>
+ <value name="STENCIL_BITS"/>
+ <value name="STENCIL_CLEAR_VALUE"/>
+ <value name="STENCIL_FAIL"/>
+ <value name="STENCIL_FUNC"/>
+ <value name="STENCIL_PASS_DEPTH_FAIL"/>
+ <value name="STENCIL_PASS_DEPTH_PASS"/>
+ <value name="STENCIL_REF"/>
+ <value name="STENCIL_TEST"/>
+ <value name="STENCIL_VALUE_MASK"/>
+ <value name="STENCIL_WRITEMASK"/>
+ <value name="SUBPIXEL_BITS"/>
+ <value name="TEXTURE_BINDING_2D"/>
+ <value name="TEXTURE_BINDING_CUBE_MAP"/>
+ <value name="UNPACK_ALIGNMENT"/>
+ <value name="VIEWPORT"/>
+</enum>
+<enum name="FramebufferAttachmentParameter">
+ <value name="ATTACHMENT_OBJECT_TYPE"/>
+ <value name="ATTACHMENT_OBJECT_NAME"/>
+ <value name="ATTACHMENT_TEXTURE_LEVEL"/>
+ <value name="ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
+</enum>
+<enum name="FramebufferAttachmentObjectType"> <!-- returned by GetFrameBufferAttachmentParameteriv -->
+ <value name="RENDERBUFFER"/>
+ <value name="TEXTURE"/>
+ <value name="NONE"/>
+</enum>
+<enum name="GetProgramPName">
+ <value name="DELETE_STATUS"/>
+ <value name="LINK_STATUS"/>
+ <value name="VALIDATE_STATUS"/>
+ <value name="INFO_LOG_LENGTH"/>
+ <value name="ATTACHED_SHADERS"/>
+ <value name="ACTIVE_ATTRIBUTES"/>
+ <value name="ACTIVE_ATTRIBUTE_MAX_LENGTH"/>
+ <value name="ACTIVE_UNIFORMS"/>
+ <value name="ACTIVE_UNIFORM_MAX_LENGTH"/>
+</enum>
+<enum name="GetRenderbufferParameterPName">
+ <value name="RENDERBUFFER_WIDTH"/>
+ <value name="RENDERBUFFER_HEIGHT"/>
+ <value name="RENDERBUFFER_INTERNAL_FORMAT"/>
+ <value name="RENDERBUFFER_RED_SIZE"/>
+ <value name="RENDERBUFFER_GREEN_SIZE"/>
+ <value name="RENDERBUFFER_BLUE_SIZE"/>
+ <value name="RENDERBUFFER_ALPHA_SIZE"/>
+ <value name="RENDERBUFFER_DEPTH_SIZE"/>
+ <value name="RENDERBUFFER_STENCIL_SIZE"/>
+</enum>
+<enum name="GetVertexAttribPointerPName">
+ <value name="VERTEX_ATTRIB_ARRAY_POINTER"/>
+</enum>
+<enum name="PixelStorePName">
+ <value name="PACK_ALIGNMENT"/>
+ <value name="UNPACK_ALIGNMENT"/>
+</enum>
+<enum name="ShaderBinaryFormat">
+ <!-- None by default, provided by extensions -->
+</enum>
+<enum name="CompressedTextureFormat">
+ <!-- None by default, provided by extensions -->
+</enum>
+<enum name="VertexAttribType"> <!-- subset of DataType -->
+ <!-- VertexAttribPointer only needs BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, FIXED, FLOAT
+ What about (UNSIGNED_)INT? Are these part of an extension?
+ -->
+ <value name="BYTE"/>
+ <value name="UNSIGNED_BYTE"/>
+ <value name="SHORT"/>
+ <value name="UNSIGNED_SHORT"/>
+ <!-- <value name="INT"/> -->
+ <!-- <value name="UNSIGNED_INT"/> -->
+ <value name="FLOAT"/>
+ <value name="FIXED"/>
+</enum>
+<enum name="GetFramebufferAttachmentParameterPName">
+ <value name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"/>
+ <value name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"/>
+ <value name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"/>
+ <value name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
+</enum>
+<enum name="GetShaderPName">
+ <value name="SHADER_TYPE"/>
+ <value name="DELETE_STATUS"/>
+ <value name="COMPILE_STATUS"/>
+ <value name="INFO_LOG_LENGTH"/>
+ <value name="SHADER_SOURCE_LENGTH"/>
+</enum>
+
+<functions>
+<!-- based on mesa/src/mapi/glapi/gen/*.xml -->
+ <function name="ActiveTexture">
+ <param name="texture" type="GLenum" enum="TextureUnit"/>
+ </function>
+ <function name="AttachShader">
+ <param name="program" type="GLuint"/>
+ <param name="shader" type="GLuint"/>
+ </function>
+ <function name="BindAttribLocation">
+ <param name="program" type="GLuint"/>
+ <param name="index" type="GLuint"/>
+ <param name="name" type="const GLchar *"/>
+ </function>
+ <function name="BindBuffer">
+ <param name="target" type="GLenum" enum="BufferTarget"/>
+ <param name="buffer" type="GLuint"/>
+ </function>
+ <function name="BindFramebuffer">
+ <param name="target" type="GLenum" enum="FramebufferTarget"/>
+ <param name="framebuffer" type="GLuint"/>
+ </function>
+ <function name="BindRenderbuffer">
+ <param name="target" type="GLenum" enum="RenderbufferTarget"/>
+ <param name="renderbuffer" type="GLuint"/>
+ </function>
+ <function name="BindTexture">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="texture" type="GLuint"/>
+ </function>
+ <function name="BlendColor">
+ <param name="red" type="GLclampf"/>
+ <param name="green" type="GLclampf"/>
+ <param name="blue" type="GLclampf"/>
+ <param name="alpha" type="GLclampf"/>
+ </function>
+ <function name="BlendEquation">
+ <param name="mode" type="GLenum" enum="BlendEquation"/>
+ </function>
+ <function name="BlendEquationSeparate">
+ <param name="modeRGB" type="GLenum" enum="BlendEquation"/>
+ <param name="modeA" type="GLenum" enum="BlendEquation"/>
+ </function>
+ <function name="BlendFunc">
+ <param name="sfactor" type="GLenum" enum="BlendingFactorSrc"/>
+ <param name="dfactor" type="GLenum" enum="BlendingFactorDest"/>
+ </function>
+ <function name="BlendFuncSeparate">
+ <param name="sfactorRGB" type="GLenum" enum="BlendingFactorSrc"/>
+ <param name="dfactorRGB" type="GLenum" enum="BlendingFactorDest"/>
+ <param name="sfactorAlpha" type="GLenum" enum="BlendingFactorSrc"/>
+ <param name="dfactorAlpha" type="GLenum" enum="BlendingFactorDest"/>
+ </function>
+ <function name="BufferData">
+ <param name="target" type="GLenum" enum="BufferTarget"/>
+ <param name="size" type="GLsizeiptr" counter="true"/>
+ <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
+ <param name="usage" type="GLenum" enum="BufferUsage"/>
+ </function>
+ <function name="BufferSubData">
+ <param name="target" type="GLenum" enum="BufferTarget"/>
+ <param name="offset" type="GLintptr"/>
+ <param name="size" type="GLsizeiptr" counter="true"/>
+ <param name="data" type="const GLvoid *" count="size"/>
+ </function>
+ <function name="CheckFramebufferStatus">
+ <param name="target" type="GLenum" enum="FramebufferTarget"/>
+ <return type="GLenum" enum="FramebufferStatus"/>
+ </function>
+ <function name="Clear">
+ <param name="mask" type="GLbitfield" bitfield="ClearBufferMask"/>
+ </function>
+ <function name="ClearColor">
+ <param name="red" type="GLclampf"/>
+ <param name="green" type="GLclampf"/>
+ <param name="blue" type="GLclampf"/>
+ <param name="alpha" type="GLclampf"/>
+ </function>
+ <function name="ClearDepthf">
+ <param name="depth" type="GLclampf"/>
+ </function>
+ <function name="ClearStencil">
+ <param name="s" type="GLint"/>
+ </function>
+ <function name="ColorMask">
+ <param name="red" type="GLboolean"/>
+ <param name="green" type="GLboolean"/>
+ <param name="blue" type="GLboolean"/>
+ <param name="alpha" type="GLboolean"/>
+ </function>
+ <function name="CompileShader">
+ <param name="shader" type="GLuint"/>
+ </function>
+ <function name="CompressedTexImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="internalformat" type="GLenum" enum="CompressedTextureFormat"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="border" type="GLint"/>
+ <param name="imageSize" type="GLsizei" counter="true"/>
+ <param name="data" type="const GLvoid *" count="imageSize"/>
+ </function>
+ <function name="CompressedTexSubImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="xoffset" type="GLint"/>
+ <param name="yoffset" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="format" type="GLenum" enum="CompressedTextureFormat"/>
+ <param name="imageSize" type="GLsizei" counter="true"/>
+ <param name="data" type="const GLvoid *" count="imageSize"/>
+ </function>
+ <function name="CopyTexImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="internalformat" type="GLenum" enum="TextureInternalFormat"/>
+ <param name="x" type="GLint"/>
+ <param name="y" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="border" type="GLint"/>
+ </function>
+ <function name="CopyTexSubImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="xoffset" type="GLint"/>
+ <param name="yoffset" type="GLint"/>
+ <param name="x" type="GLint"/>
+ <param name="y" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ </function>
+ <function name="CreateProgram">
+ <return type="GLuint"/>
+ </function>
+ <function name="CreateShader">
+ <param name="type" type="GLenum" enum="ShaderType"/>
+ <return type="GLuint"/>
+ </function>
+ <function name="CullFace">
+ <param name="mode" type="GLenum" enum="CullFaceMode"/>
+ </function>
+ <function name="DeleteBuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="buffer" type="const GLuint *" count="n"/>
+ </function>
+ <function name="DeleteFramebuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="framebuffers" type="const GLuint *" count="n"/>
+ </function>
+ <function name="DeleteProgram">
+ <param name="program" type="GLuint"/>
+ </function>
+ <function name="DeleteRenderbuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="renderbuffers" type="const GLuint *" count="n"/>
+ </function>
+ <function name="DeleteShader">
+ <param name="program" type="GLuint"/>
+ </function>
+ <function name="DeleteTextures">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="textures" type="const GLuint *" count="n"/>
+ </function>
+ <function name="DepthFunc">
+ <param name="func" type="GLenum" enum="DepthFunction"/>
+ </function>
+ <function name="DepthMask">
+ <param name="flag" type="GLboolean"/>
+ </function>
+ <function name="DepthRangef">
+ <param name="zNear" type="GLclampf"/>
+ <param name="zFar" type="GLclampf"/>
+ </function>
+ <function name="DetachShader">
+ <param name="program" type="GLuint"/>
+ <param name="shader" type="GLuint"/>
+ </function>
+ <function name="Disable">
+ <param name="cap" type="GLenum" enum="EnableCap"/>
+ </function>
+ <function name="DisableVertexAttribArray">
+ <param name="index" type="GLuint"/>
+ </function>
+ <function name="DrawArrays">
+ <param name="mode" type="GLenum" enum="BeginMode"/>
+ <param name="first" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ </function>
+ <function name="DrawElements">
+ <param name="mode" type="GLenum" enum="BeginMode"/>
+ <param name="count" type="GLsizei"/>
+ <param name="type" type="GLenum" enum="IndexType"/>
+ <param name="indices" type="const GLvoid *"/>
+ </function>
+ <function name="Enable">
+ <param name="cap" type="GLenum" enum="EnableCap"/>
+ </function>
+ <function name="EnableVertexAttribArray">
+ <param name="index" type="GLuint"/>
+ </function>
+ <function name="Finish">
+ </function>
+ <function name="Flush">
+ </function>
+ <function name="FramebufferRenderbuffer">
+ <param name="target" type="GLenum" enum="FramebufferTarget"/>
+ <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
+ <param name="renderbuffertarget" type="GLenum" enum="RenderbufferTarget"/>
+ <param name="renderbuffer" type="GLuint"/>
+ </function>
+ <function name="FramebufferTexture2D">
+ <param name="target" type="GLenum" enum="FramebufferTarget"/>
+ <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
+ <param name="textarget" type="GLenum" enum="TextureTargetFace"/>
+ <param name="texture" type="GLuint"/>
+ <param name="level" type="GLint"/>
+ </function>
+ <function name="FrontFace">
+ <param name="mode" type="GLenum" enum="FrontFaceDirection"/>
+ </function>
+ <function name="GenBuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="buffer" type="GLuint *" output="true" count="n"/>
+ </function>
+ <function name="GenerateMipmap">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ </function>
+ <function name="GenFramebuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="framebuffers" type="GLuint *" count="n" output="true"/>
+ </function>
+ <function name="GenRenderbuffers">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
+ </function>
+ <function name="GenTextures">
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="textures" type="GLuint *" output="true" count="n"/>
+ </function>
+ <function name="GetActiveAttrib">
+ <param name="program" type="GLuint"/>
+ <param name="index" type="GLuint"/>
+ <param name="bufSize" type="GLsizei"/>
+ <param name="length" type="GLsizei *" output="true"/>
+ <param name="size" type="GLint *" output="true"/>
+ <param name="type" type="GLenum *" output="true" enum="UniformType"/>
+ <param name="name" type="GLchar *" output="true"/>
+ </function>
+ <function name="GetActiveUniform">
+ <param name="program" type="GLuint"/>
+ <param name="index" type="GLuint"/>
+ <param name="bufSize" type="GLsizei"/>
+ <param name="length" type="GLsizei *" output="true"/>
+ <param name="size" type="GLint *" output="true"/>
+ <param name="type" type="GLenum *" output="true" enum="UniformType"/>
+ <param name="name" type="GLchar *" output="true"/>
+ </function>
+ <function name="GetAttachedShaders">
+ <param name="program" type="GLuint"/>
+ <param name="maxCount" type="GLsizei"/>
+ <param name="count" type="GLsizei *" output="true"/>
+ <param name="obj" type="GLuint *" output="true"/>
+ </function>
+ <function name="GetAttribLocation">
+ <param name="program" type="GLuint"/>
+ <param name="name" type="const GLchar *"/>
+ <return type="GLint"/>
+ </function>
+ <function name="GetBooleanv">
+ <param name="pname" type="GLenum" enum="GetPName"/>
+ <param name="params" type="GLboolean *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetBufferParameteriv">
+ <param name="target" type="GLenum" enum="BufferTarget"/>
+ <param name="pname" type="GLenum" enum="GetBufferParameterPName"/>
+ <param name="params" type="GLint *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetError">
+ <return type="GLenum" enum="ErrorCode"/>
+ </function>
+ <function name="GetFloatv">
+ <param name="pname" type="GLenum" enum="GetPName"/>
+ <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetFramebufferAttachmentParameteriv">
+ <param name="target" type="GLenum" enum="FramebufferTarget"/>
+ <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
+ <param name="pname" type="GLenum" enum="GetFramebufferAttachmentParameterPName"/>
+ <param name="params" type="GLint *" output="true"/>
+ </function>
+ <function name="GetIntegerv">
+ <param name="pname" type="GLenum" enum="GetPName"/>
+ <param name="params" type="GLint *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetProgramiv">
+ <param name="program" type="GLuint"/>
+ <param name="pname" type="GLenum" enum="GetProgramPName"/>
+ <param name="params" type="GLint *"/>
+ </function>
+ <function name="GetProgramInfoLog">
+ <param name="program" type="GLuint"/>
+ <param name="bufSize" type="GLsizei"/>
+ <param name="length" type="GLsizei *"/>
+ <param name="infoLog" type="GLchar *"/>
+ </function>
+ <function name="GetRenderbufferParameteriv">
+ <param name="target" type="GLenum" enum="RenderbufferTarget"/>
+ <param name="pname" type="GLenum" enum="GetRenderbufferParameterPName"/>
+ <param name="params" type="GLint *" output="true"/>
+ </function>
+ <function name="GetShaderiv">
+ <param name="shader" type="GLuint"/>
+ <param name="pname" type="GLenum" enum="GetShaderPName"/>
+ <param name="params" type="GLint *"/>
+ </function>
+ <function name="GetShaderInfoLog">
+ <param name="shader" type="GLuint"/>
+ <param name="bufSize" type="GLsizei"/>
+ <param name="length" type="GLsizei *"/>
+ <param name="infoLog" type="GLchar *"/>
+ </function>
+ <function name="GetShaderPrecisionFormat">
+ <param name="shadertype" type="GLenum" enum="ShaderType"/>
+ <param name="precisiontype" type="GLenum" enum="PrecisionType"/>
+ <param name="range" type="GLint *"/>
+ <param name="precision" type="GLint *"/>
+ </function>
+ <function name="GetShaderSource">
+ <param name="shader" type="GLuint"/>
+ <param name="bufSize" type="GLsizei"/>
+ <param name="length" type="GLsizei *" output="true"/>
+ <param name="source" type="GLchar *" output="true"/>
+ </function>
+ <function name="GetString">
+ <param name="name" type="GLenum" enum="StringName"/>
+ <return type="const GLubyte *"/>
+ </function>
+ <function name="GetTexParameterfv">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetTexParameteriv">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="params" type="GLint *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetUniformfv">
+ <param name="program" type="GLuint"/>
+ <param name="location" type="GLint"/>
+ <param name="params" type="GLfloat *" output="true"/>
+ </function>
+ <function name="GetUniformiv">
+ <param name="program" type="GLuint"/>
+ <param name="location" type="GLint"/>
+ <param name="params" type="GLint *" output="true"/>
+ </function>
+ <function name="GetUniformLocation">
+ <param name="program" type="GLuint"/>
+ <param name="name" type="const GLchar *"/>
+ <return type="GLint"/>
+ </function>
+ <function name="GetVertexAttribfv">
+ <param name="index" type="GLuint"/>
+ <param name="pname" type="GLenum" enum="GetVertexAttribParameterPName"/>
+ <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetVertexAttribiv">
+ <param name="index" type="GLuint"/>
+ <param name="pname" type="GLenum" enum="GetVertexAttribParameterPName"/>
+ <param name="params" type="GLint *" output="true" variable_param="pname"/>
+ </function>
+ <function name="GetVertexAttribPointerv">
+ <param name="index" type="GLuint"/>
+ <param name="pname" type="GLenum" enum="GetVertexAttribPointerPName"/>
+ <param name="pointer" type="GLvoid **" output="true"/>
+ </function>
+ <function name="Hint">
+ <param name="target" type="GLenum" enum="HintTarget"/>
+ <param name="mode" type="GLenum" enum="HintMode"/>
+ </function>
+ <function name="IsBuffer">
+ <param name="buffer" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsEnabled">
+ <param name="cap" type="GLenum" enum="EnableCap"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsFramebuffer">
+ <param name="framebuffer" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsProgram">
+ <param name="program" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsRenderbuffer">
+ <param name="renderbuffer" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsShader">
+ <param name="shader" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="IsTexture">
+ <param name="texture" type="GLuint"/>
+ <return type="GLboolean"/>
+ </function>
+ <function name="LineWidth">
+ <param name="width" type="GLfloat"/>
+ </function>
+ <function name="LinkProgram">
+ <param name="program" type="GLuint"/>
+ </function>
+ <function name="PixelStorei">
+ <param name="pname" type="GLenum" enum="PixelStorePName"/>
+ <param name="param" type="GLint"/>
+ </function>
+ <function name="PolygonOffset">
+ <param name="factor" type="GLfloat"/>
+ <param name="units" type="GLfloat"/>
+ </function>
+ <function name="ReadPixels">
+ <param name="x" type="GLint"/>
+ <param name="y" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="format" type="GLenum" enum="PixelFormat"/>
+ <param name="type" type="GLenum" enum="PixelType"/>
+ <param name="pixels" type="GLvoid *" output="true" img_width="width" img_height="height" img_format="format" img_type="type" img_target="0"/>
+ </function>
+ <function name="ReleaseShaderCompiler">
+ </function>
+ <function name="RenderbufferStorage">
+ <param name="target" type="GLenum" enum="RenderbufferTarget"/>
+ <param name="internalformat" type="GLenum" enum="RenderbufferInternalFormat"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ </function>
+ <function name="SampleCoverage">
+ <param name="value" type="GLclampf"/>
+ <param name="invert" type="GLboolean"/>
+ </function>
+ <function name="Scissor">
+ <param name="x" type="GLint"/>
+ <param name="y" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ </function>
+ <function name="ShaderBinary">
+ <param name="n" type="GLsizei"/>
+ <param name="shaders" type="const GLuint *"/>
+ <param name="binaryformat" type="GLenum" enum="ShaderBinaryFormat"/>
+ <param name="binary" type="const GLvoid *"/>
+ <param name="length" type="GLsizei"/>
+ </function>
+ <function name="ShaderSource">
+ <param name="shader" type="GLuint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="string" type="const GLchar * const *"/>
+ <param name="length" type="const GLint *"/>
+ </function>
+ <function name="StencilFunc">
+ <param name="func" type="GLenum" enum="StencilFunction"/>
+ <param name="ref" type="GLint"/>
+ <param name="mask" type="GLuint"/>
+ </function>
+ <function name="StencilFuncSeparate">
+ <param name="face" type="GLenum" enum="CullFaceMode"/>
+ <param name="func" type="GLenum" enum="StencilFunction"/>
+ <param name="ref" type="GLint"/>
+ <param name="mask" type="GLuint"/>
+ </function>
+ <function name="StencilMask">
+ <param name="mask" type="GLuint"/>
+ </function>
+ <function name="StencilMaskSeparate">
+ <param name="face" type="GLenum" enum="CullFaceMode"/>
+ <param name="mask" type="GLuint"/>
+ </function>
+ <function name="StencilOp">
+ <param name="fail" type="GLenum" enum="StencilOp"/>
+ <param name="zfail" type="GLenum" enum="StencilOp"/>
+ <param name="zpass" type="GLenum" enum="StencilOp"/>
+ </function>
+ <function name="StencilOpSeparate">
+ <param name="face" type="GLenum" enum="CullFaceMode"/>
+ <param name="sfail" type="GLenum" enum="StencilOp"/>
+ <param name="zfail" type="GLenum" enum="StencilOp"/>
+ <param name="zpass" type="GLenum" enum="StencilOp"/>
+ </function>
+ <function name="TexImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="internalformat" type="GLint" enum="TextureInternalFormat"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="border" type="GLint"/>
+ <param name="format" type="GLenum" enum="PixelFormat"/>
+ <param name="type" type="GLenum" enum="PixelType"/>
+ <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
+ </function>
+ <function name="TexParameterf">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="param" type="GLfloat"/>
+ </function>
+ <function name="TexParameterfv">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="params" type="const GLfloat *" variable_param="pname"/>
+ </function>
+ <function name="TexParameteri">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="param" type="GLint"/>
+ </function>
+ <function name="TexParameteriv">
+ <param name="target" type="GLenum" enum="TextureTarget"/>
+ <param name="pname" type="GLenum" enum="TextureParameterName"/>
+ <param name="params" type="const GLint *" variable_param="pname"/>
+ </function>
+ <function name="TexSubImage2D">
+ <param name="target" type="GLenum" enum="TextureTargetFace"/>
+ <param name="level" type="GLint"/>
+ <param name="xoffset" type="GLint"/>
+ <param name="yoffset" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ <param name="format" type="GLenum" enum="PixelFormat"/>
+ <param name="type" type="GLenum" enum="PixelType"/>
+ <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
+ </function>
+ <function name="Uniform1f">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLfloat"/>
+ </function>
+ <function name="Uniform1fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="Uniform1i">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLint"/>
+ </function>
+ <function name="Uniform1iv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLint *"/>
+ </function>
+ <function name="Uniform2f">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLfloat"/>
+ <param name="v1" type="GLfloat"/>
+ </function>
+ <function name="Uniform2fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="Uniform2i">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLint"/>
+ <param name="v1" type="GLint"/>
+ </function>
+ <function name="Uniform2iv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLint *"/>
+ </function>
+ <function name="Uniform3f">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLfloat"/>
+ <param name="v1" type="GLfloat"/>
+ <param name="v2" type="GLfloat"/>
+ </function>
+ <function name="Uniform3fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="Uniform3i">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLint"/>
+ <param name="v1" type="GLint"/>
+ <param name="v2" type="GLint"/>
+ </function>
+ <function name="Uniform3iv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLint *"/>
+ </function>
+ <function name="Uniform4f">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLfloat"/>
+ <param name="v1" type="GLfloat"/>
+ <param name="v2" type="GLfloat"/>
+ <param name="v3" type="GLfloat"/>
+ </function>
+ <function name="Uniform4fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="Uniform4i">
+ <param name="location" type="GLint"/>
+ <param name="v0" type="GLint"/>
+ <param name="v1" type="GLint"/>
+ <param name="v2" type="GLint"/>
+ <param name="v3" type="GLint"/>
+ </function>
+ <function name="Uniform4iv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="value" type="const GLint *"/>
+ </function>
+ <function name="UniformMatrix2fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="transpose" type="GLboolean"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="UniformMatrix3fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="transpose" type="GLboolean"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="UniformMatrix4fv">
+ <param name="location" type="GLint"/>
+ <param name="count" type="GLsizei"/>
+ <param name="transpose" type="GLboolean"/>
+ <param name="value" type="const GLfloat *"/>
+ </function>
+ <function name="UseProgram">
+ <param name="program" type="GLuint"/>
+ </function>
+ <function name="ValidateProgram">
+ <param name="program" type="GLuint"/>
+ </function>
+ <function name="VertexAttrib1f">
+ <param name="index" type="GLuint"/>
+ <param name="x" type="GLfloat"/>
+ </function>
+ <function name="VertexAttrib1fv">
+ <param name="index" type="GLuint"/>
+ <param name="v" type="const GLfloat *"/>
+ </function>
+ <function name="VertexAttrib2f">
+ <param name="index" type="GLuint"/>
+ <param name="x" type="GLfloat"/>
+ <param name="y" type="GLfloat"/>
+ </function>
+ <function name="VertexAttrib2fv">
+ <param name="index" type="GLuint"/>
+ <param name="v" type="const GLfloat *"/>
+ </function>
+ <function name="VertexAttrib3f">
+ <param name="index" type="GLuint"/>
+ <param name="x" type="GLfloat"/>
+ <param name="y" type="GLfloat"/>
+ <param name="z" type="GLfloat"/>
+ </function>
+ <function name="VertexAttrib3fv">
+ <param name="index" type="GLuint"/>
+ <param name="v" type="const GLfloat *"/>
+ </function>
+ <function name="VertexAttrib4f">
+ <param name="index" type="GLuint"/>
+ <param name="x" type="GLfloat"/>
+ <param name="y" type="GLfloat"/>
+ <param name="z" type="GLfloat"/>
+ <param name="w" type="GLfloat"/>
+ </function>
+ <function name="VertexAttrib4fv">
+ <param name="index" type="GLuint"/>
+ <param name="v" type="const GLfloat *"/>
+ </function>
+ <function name="VertexAttribPointer">
+ <param name="index" type="GLuint"/>
+ <param name="size" type="GLint"/>
+ <param name="type" type="GLenum" enum="VertexAttribType"/>
+ <param name="normalized" type="GLboolean"/>
+ <param name="stride" type="GLsizei"/>
+ <param name="pointer" type="const GLvoid *"/>
+ </function>
+ <function name="Viewport">
+ <param name="x" type="GLint"/>
+ <param name="y" type="GLint"/>
+ <param name="width" type="GLsizei"/>
+ <param name="height" type="GLsizei"/>
+ </function>
+</functions>
+
+</root>
+
diff --git a/tools/data/viv_gallium_state.txt b/tools/data/viv_gallium_state.txt
new file mode 100644
index 0000000..cdc5a50
--- /dev/null
+++ b/tools/data/viv_gallium_state.txt
@@ -0,0 +1,96 @@
+# group and sort these by address
+# <struct_name> <source_spec> <dirtybit>
+rasterizer_state rasterizer-> ETNA_STATE_RASTERIZER
+ PA.CONFIG
+ PA.LINE_WIDTH
+ PA.POINT_SIZE
+ SE.DEPTH_SCALE
+ SE.DEPTH_BIAS
+ SE.CONFIG
+ SE.SCISSOR_LEFT
+ SE.SCISSOR_TOP
+ SE.SCISSOR_RIGHT
+ SE.SCISSOR_BOTTOM
+
+depth_stencil_alpha_state depth_stencil_alpha-> ETNA_STATE_DSA
+ PE.DEPTH_CONFIG
+ PE.ALPHA_OP
+ PE.STENCIL_OP
+ PE.STENCIL_CONFIG
+
+blend_state blend-> ETNA_STATE_BLEND
+ PE.ALPHA_CONFIG
+ PE.COLOR_FORMAT
+ PE.LOGIC_OP
+ PE.DITHER
+
+blend_color blend_color. ETNA_STATE_BLEND_COLOR
+ PE.ALPHA_BLEND_COLOR
+
+stencil_ref stencil_ref. ETNA_STATE_STENCIL_REF
+ PE.STENCIL_CONFIG
+ PE.STENCIL_CONFIG_EXT
+
+scissor_state scissor. ETNA_STATE_SCISSOR
+ SE.SCISSOR_LEFT
+ SE.SCISSOR_TOP
+ SE.SCISSOR_RIGHT
+ SE.SCISSOR_BOTTOM
+
+viewport_state viewport. ETNA_STATE_VIEWPORT
+ PA.VIEWPORT_SCALE_X
+ PA.VIEWPORT_SCALE_Y
+ PA.VIEWPORT_SCALE_Z
+ PA.VIEWPORT_OFFSET_X
+ PA.VIEWPORT_OFFSET_Y
+ PA.VIEWPORT_OFFSET_Z
+ PE.DEPTH_NEAR
+ PE.DEPTH_FAR
+
+sample_mask sample_mask. ETNA_STATE_SAMPLE_MASK
+ GL.MULTI_SAMPLE_CONFIG
+
+sampler_state sampler[{0}]-> ETNA_STATE_SAMPLERS
+ TE.SAMPLER.CONFIG0
+ TE.SAMPLER.LOD_CONFIG
+
+sampler_view sampler_view[{0}]. ETNA_STATE_SAMPLER_VIEWS
+ TE.SAMPLER.CONFIG0
+ TE.SAMPLER.LOD_CONFIG
+ TE.SAMPLER.SIZE
+ TE.SAMPLER.LOG_SIZE
+ TE.SAMPLER.LOD_ADDR
+
+framebuffer_state framebuffer. ETNA_STATE_FRAMEBUFFER
+ GL.MULTI_SAMPLE_CONFIG
+ PE.COLOR_FORMAT
+ PE.DEPTH_CONFIG
+ PE.DEPTH_ADDR
+ PE.DEPTH_STRIDE
+ PE.HDEPTH_CONTROL
+ PE.DEPTH_NORMALIZE
+ PE.COLOR_ADDR
+ PE.COLOR_STRIDE
+ SE.SCISSOR_LEFT
+ SE.SCISSOR_TOP
+ SE.SCISSOR_RIGHT
+ SE.SCISSOR_BOTTOM
+ TS.MEM_CONFIG
+ TS.DEPTH_CLEAR_VALUE
+ TS.DEPTH_STATUS_BASE
+ TS.DEPTH_SURFACE_BASE
+ TS.COLOR_CLEAR_VALUE
+ TS.COLOR_STATUS_BASE
+ TS.COLOR_SURFACE_BASE
+
+vertex_elements_state vertex_elements-> ETNA_STATE_VERTEX_ELEMENTS
+ FE.VERTEX_ELEMENT_CONFIG
+
+set_vertex_buffer vertex_buffer. ETNA_STATE_VERTEX_BUFFERS
+ FE.VERTEX_STREAM_CONTROL
+ FE.VERTEX_STREAM_BASE_ADDR
+
+set_index_buffer index_buffer. ETNA_STATE_INDEX_BUFFER
+ FE.INDEX_STREAM_CONTROL
+ FE.INDEX_STREAM_BASE_ADDR
+
diff --git a/tools/etnaviv/parse_rng.py b/tools/etnaviv/parse_rng.py
index 90eafdd..1ba7083 100644
--- a/tools/etnaviv/parse_rng.py
+++ b/tools/etnaviv/parse_rng.py
@@ -118,6 +118,7 @@ class Range(object):
contents = None # arrays, stripes and registers
def __init__(self, **attr):
self.contents = []
+ self.contents_by_name = {}
def lookup_address(self, addr, variants=None):
'''Look up the specified address in this range. Return None if not found.'''
@@ -126,6 +127,7 @@ class Range(object):
def add_child(self, child):
if isinstance(child, (Array, Stripe, Register)):
self.contents.append(child)
+ self.contents_by_name[child.name] = child
return True
return False
@@ -472,7 +474,6 @@ class Register(RNNObject, Range, TypedValue):
class Domain(RNNObject, Range, Type):
'''Rules-ng domain description'''
- contents = None # arrays, stripes and registers
def __init__(self, parent, **attr):
RNNObject.__init__(self, parent, **attr)
Range.__init__(self, **attr)
diff --git a/tools/gen_weave_state.py b/tools/gen_weave_state.py
new file mode 100755
index 0000000..0935e0e
--- /dev/null
+++ b/tools/gen_weave_state.py
@@ -0,0 +1,189 @@
+#!/usr/bin/python
+'''
+Generate code to weave various CSOs into GPU state.
+'''
+# Copyright (c) 2012-2013 Wladimir J. van der Laan
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sub license,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the
+# next paragraph) shall be included in all copies or substantial portions
+# of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+from __future__ import print_function, division, unicode_literals
+import argparse
+from collections import defaultdict
+import sys
+# Parse rules-ng-ng format for state space
+from etnaviv.parse_rng import parse_rng_file, format_path, BitSet, Domain, Stripe, Register, Array, BaseType
+
+SRC_SPEC = 'e->'
+VARNAMES = ['x','y','z','w']
+
+def parse_args():
+ parser = argparse.ArgumentParser(description='Generate state merge function')
+ parser.add_argument('--input', metavar='INFILE', type=str,
+ help='State definition file',
+ default='data/viv_gallium_state.txt')
+ parser.add_argument('--rules-file', metavar='RULESFILE', type=str,
+ help='State map definition file (rules-ng-ng)',
+ default='../rnndb/state.xml')
+
+ return parser.parse_args()
+
+def rnn_lookup(state_map, field):
+ '''
+ Look up dot-separated path to register in rnn domain.
+ Return every step along the path.
+ '''
+ field = field.split('.')
+ base = state_map
+ path = []
+ for comp in field:
+ path.append(base)
+ base = base.contents_by_name[comp]
+ path.append(base)
+ return path
+
+def rnn_strides(path):
+ '''
+ Go along path, find stripes / registers with length >1, do cartesian product and compute state offsets for each
+ member. Returns a tuple (offset,strides) where strides is a list of (stride,length) tuples.
+ '''
+ strides = []
+ offset = 0
+ for comp in path:
+ if isinstance(comp, Domain):
+ pass
+ elif isinstance(comp, (Stripe, Array, Register)):
+ if comp.length != 1:
+ strides.append((comp.stride, comp.length))
+ offset += comp.offset
+ else:
+ raise ValueError
+ return offset, strides
+
+def main():
+ args = parse_args()
+ state_xml = parse_rng_file(args.rules_file)
+ state_map = state_xml.lookup_domain('VIVS')
+ out = sys.stdout
+ # Read input file
+ with open(args.input, 'r') as f:
+ fields = None
+ recordname = None
+ data = []
+ for line in f:
+ line = line.rstrip()
+ if not line or line.startswith('#'):
+ continue
+ if line.startswith(' '):
+ fields.append(line.strip())
+ else:
+ if recordname is not None:
+ data.append([recordname, fields])
+ fields = []
+ recordname = line.strip()
+ if recordname is not None:
+ data.append([recordname, fields])
+ # Preprocess input file, look up field names and sort by offset
+ recs_by_offset = defaultdict(list)
+ field_by_offset = {}
+ for rec in data:
+ rec_info = rec[0].split()
+ for field in rec[1]:
+ path = rnn_lookup(state_map, field)
+ offset, strides = rnn_strides(path)
+ #print(field, '%05x' % offset, strides)
+ field_by_offset[offset] = (field, path, strides)
+ recs_by_offset[offset].append(rec_info)
+ # Emit output
+ offsets = sorted(field_by_offset.keys())
+ last_dirty_bits = None
+ indent = 1
+ for offset in offsets:
+ (name, path, strides) = field_by_offset[offset]
+ # strides is a list of (stride,length) tuples
+ name = name.replace('.', '_')
+ recs = recs_by_offset[offset]
+
+ # build target state
+ target_state = name
+ target_state_sub = ', '.join(('{%i}' % (src_idx)) for src_idx,_ in enumerate(strides))
+ if target_state_sub:
+ target_state += '('+target_state_sub+')'
+
+ # build target field reference
+ target_field = name
+ # to sort destination state addresses in order, sort array indices by decreasing stride
+ dest_strides = sorted([(idx,stride,length) for idx,(stride,length) in enumerate(strides)], key=lambda x:-x[1])
+ for src_idx,stride,length in dest_strides:
+ target_field += '[{%i}]' % (src_idx)
+
+ fieldrefs = []
+ dirty_bits = set()
+ for rec in recs:
+ source_field = name
+ for idx,(stride,length) in enumerate(strides):
+ iname = '{%i}' % idx
+ if not iname in rec[1]: # if quantifier not already used in record name itself
+ source_field += '[' + iname + ']'
+ fieldrefs.append('%s%s%s' % (SRC_SPEC,rec[1],source_field))
+ dirty_bits.add(rec[2])
+
+ if last_dirty_bits != dirty_bits:
+ if last_dirty_bits is not None:
+ indent -= 1
+ out.write(' ' * indent)
+ out.write('}\n')
+ out.write(' ' * indent)
+ out.write('if(dirty & (%s))\n' % (' | '.join(dirty_bits)))
+ out.write(' ' * indent)
+ out.write('{\n')
+ indent += 1
+ for src_idx,stride,length in dest_strides:
+ out.write(' ' * indent)
+ out.write('for(int {0}=0; {0}<{1}; ++{0})\n'.format(VARNAMES[src_idx], length))
+ out.write(' ' * indent)
+ out.write('{\n')
+ indent += 1
+
+ macro = 'EMIT_STATE'
+ if isinstance(path[-1].type, BaseType) and path[-1].type.kind == 'fixedp':
+ macro += '_FIXP'
+
+ out.write(' ' * indent)
+ out.write('/*%05X*/ %s(%s, %s, %s);\n' % (
+ offset,
+ macro,
+ target_state.format(*VARNAMES),
+ target_field.format(*VARNAMES),
+ (' | '.join(fieldrefs)).format(*VARNAMES)))
+
+ for src_idx,stride,length in dest_strides:
+ indent -= 1
+ out.write(' ' * indent)
+ out.write('}\n')
+
+ last_dirty_bits = dirty_bits
+ if last_dirty_bits is not None:
+ indent -= 1
+ out.write(' ' * indent)
+ out.write('}\n')
+
+
+if __name__ == '__main__':
+ main()
+