mesa/src/mapi/glapi/gen/gl_genexec.py

274 lines
8.8 KiB
Python
Raw Normal View History

glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
# Copyright (C) 2012 Intel Corporation
#
# 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, sublicense,
# 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 NONINFRINGEMENT. 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.
# This script generates the file api_exec.c, which contains
# _mesa_initialize_exec_table(). It is responsible for populating all
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
# entries in the "exec" dispatch table that aren't dynamic.
import argparse
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
import collections
import license
import gl_XML
import sys
import apiexec
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
exec_flavor_map = {
'dynamic': None,
'mesa': '_mesa_',
'skip': None,
}
header = """/**
* \\file api_exec.c
* Initialize dispatch table.
*/
#include "main/accum.h"
#include "main/api_exec.h"
#include "main/arbprogram.h"
#include "main/atifragshader.h"
#include "main/attrib.h"
#include "main/blend.h"
#include "main/blit.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/bufferobj.h"
#include "main/arrayobj.h"
#include "main/bbox.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/buffers.h"
#include "main/clear.h"
#include "main/clip.h"
#include "main/colortab.h"
#include "main/compute.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/condrender.h"
#include "main/conservativeraster.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/context.h"
#include "main/convolve.h"
#include "main/copyimage.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/depth.h"
#include "main/debug_output.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/dlist.h"
#include "main/draw.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/drawpix.h"
#include "main/drawtex.h"
#include "main/rastpos.h"
#include "main/enable.h"
#include "main/errors.h"
#include "main/es1_conversion.h"
#include "main/eval.h"
#include "main/externalobjects.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/get.h"
#include "main/glspirv.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/feedback.h"
#include "main/fog.h"
#include "main/fbobject.h"
#include "main/framebuffer.h"
#include "main/genmipmap.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/hint.h"
#include "main/histogram.h"
#include "main/light.h"
#include "main/lines.h"
#include "main/matrix.h"
#include "main/multisample.h"
#include "main/objectlabel.h"
#include "main/objectpurge.h"
mesa: Add core support for the GL_AMD_performance_monitor extension. This provides an interface for applications (and OpenGL-based tools) to access GPU performance counters. Since the exact performance counters available vary between vendors and hardware generations, the extension provides an API the application can use to get the names, types, and minimum/maximum values of all available counters. Counters are also organized into groups. Applications create "performance monitor" objects, select the counters they want to track, and Begin/End monitoring, much like OpenGL's query API. Multiple monitors can be in flight simultaneously. v2: Pass ctx to all driver hooks (suggested by Christoph), and attempt to fix overallocation of bitsets (caught by Christoph). Incomplete. v3: Significantly rework core data structures. Store counters in groups rather than in a global list. Use their array index in the group's counter list as the ID rather than trying to store a globally unique counter ID. Use bitsets for active counters within a group, and also track which groups are active so that's easy to query. v4: Remove _mesa_ prefix on static functions; detect out of memory conditions in new_performance_monitor(); make BeginPerfMonitor hook return a boolean rather than setting m->Active or raising an error. Switch to GLuint/unsigned for NumGroups, NumCounters, and MaxActiveCounters (which also means switching a bunch of temporary variable types). All suggested by Brian Paul. Also, remove commented out code at the bottom of the block. Finally, fix the dispatch sanity test (noticed by Ian Romanick). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Brian Paul <brianp@vmware.com> [v3] Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
2013-04-11 21:22:00 +01:00
#include "main/performance_monitor.h"
#include "main/performance_query.h"
#include "main/pipelineobj.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/pixel.h"
#include "main/pixelstore.h"
#include "main/points.h"
#include "main/polygon.h"
#include "main/program_resource.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/querymatrix.h"
#include "main/queryobj.h"
#include "main/readpix.h"
#include "main/samplerobj.h"
#include "main/scissor.h"
#include "main/stencil.h"
#include "main/texenv.h"
#include "main/texgetimage.h"
#include "main/teximage.h"
#include "main/texgen.h"
#include "main/texobj.h"
#include "main/texparam.h"
#include "main/texstate.h"
#include "main/texstorage.h"
#include "main/barrier.h"
#include "main/texturebindless.h"
#include "main/textureview.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/transformfeedback.h"
#include "main/mtypes.h"
#include "main/varray.h"
#include "main/viewport.h"
#include "main/shaderapi.h"
#include "main/shaderimage.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/uniforms.h"
#include "main/syncobj.h"
#include "main/formatquery.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
#include "main/dispatch.h"
#include "main/vdpau.h"
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
/**
* Initialize a context's exec table with pointers to Mesa's supported
* GL functions.
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
*
* This function depends on ctx->Version.
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
*
* \param ctx GL context to which \c exec belongs.
*/
void
_mesa_initialize_exec_table(struct gl_context *ctx)
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
{
struct _glapi_table *exec;
exec = ctx->Exec;
assert(exec != NULL);
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
assert(ctx->Version > 0);
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
"""
footer = """
}
"""
class PrintCode(gl_XML.gl_print_base):
def __init__(self):
gl_XML.gl_print_base.__init__(self)
self.name = 'gl_genexec.py'
self.license = license.bsd_license_template % (
'Copyright (C) 2012 Intel Corporation',
'Intel Corporation')
def printRealHeader(self):
print(header)
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
def printRealFooter(self):
print(footer)
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
def printBody(self, api):
# Collect SET_* calls by the condition under which they should
# be called.
settings_by_condition = collections.defaultdict(lambda: [])
for f in api.functionIterateAll():
if f.exec_flavor not in exec_flavor_map:
raise Exception(
'Unrecognized exec flavor {0!r}'.format(f.exec_flavor))
condition_parts = []
if f.name in apiexec.functions:
ex = apiexec.functions[f.name]
unconditional_count = 0
if ex.compatibility is not None:
condition_parts.append('ctx->API == API_OPENGL_COMPAT')
unconditional_count += 1
if ex.core is not None:
condition_parts.append('ctx->API == API_OPENGL_CORE')
unconditional_count += 1
if ex.es1 is not None:
condition_parts.append('ctx->API == API_OPENGLES')
unconditional_count += 1
if ex.es2 is not None:
if ex.es2 > 20:
condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(ex.es2))
else:
condition_parts.append('ctx->API == API_OPENGLES2')
unconditional_count += 1
# If the function is unconditionally available in all four
# APIs, then it is always available. Replace the complex
# tautology condition with "true" and let GCC do the right
# thing.
if unconditional_count == 4:
condition_parts = ['true']
else:
if f.desktop:
if f.deprecated:
condition_parts.append('ctx->API == API_OPENGL_COMPAT')
else:
condition_parts.append('_mesa_is_desktop_gl(ctx)')
if 'es1' in f.api_map:
condition_parts.append('ctx->API == API_OPENGLES')
if 'es2' in f.api_map:
if f.api_map['es2'] > 2.0:
condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
else:
condition_parts.append('ctx->API == API_OPENGLES2')
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
if not condition_parts:
# This function does not exist in any API.
continue
condition = ' || '.join(condition_parts)
prefix = exec_flavor_map[f.exec_flavor]
if prefix is None:
# This function is not implemented, or is dispatched
# dynamically.
continue
if f.has_no_error_variant:
no_error_condition = '_mesa_is_no_error_enabled(ctx) && ({0})'.format(condition)
error_condition = '!_mesa_is_no_error_enabled(ctx) && ({0})'.format(condition)
settings_by_condition[no_error_condition].append(
'SET_{0}(exec, {1}{0}_no_error);'.format(f.name, prefix, f.name))
settings_by_condition[error_condition].append(
'SET_{0}(exec, {1}{0});'.format(f.name, prefix, f.name))
else:
settings_by_condition[condition].append(
'SET_{0}(exec, {1}{0});'.format(f.name, prefix, f.name))
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
# Print out an if statement for each unique condition, with
# the SET_* calls nested inside it.
for condition in sorted(settings_by_condition.keys()):
print(' if ({0}) {{'.format(condition))
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
for setting in sorted(settings_by_condition[condition]):
print(' {0}'.format(setting))
print(' }')
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
def _parser():
"""Parse arguments and return namespace."""
parser = argparse.ArgumentParser()
parser.add_argument('-f',
dest='filename',
default='gl_and_es_API.xml',
help='an xml file describing an API')
return parser.parse_args()
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
def main():
"""Main function."""
args = _parser()
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
printer = PrintCode()
api = gl_XML.parse_GL_API(args.filename)
glapi/gen: Add code generation script for _mesa_create_exec_table(). This script generates the file api_exec.c, which contains just the function _mesa_create_exec_table(), based on the XML files in src/mapi/glapi/gen. The following XML attributes, in particular, are used: - "es1" indicates functions that should be available in ES1 contexts. - "es2" indicates functions that should be available in ES2/ES3 contexts. - "exec" indicates which Mesa function should be dispatched to. E.g. if the GL function is glFoo(), then: - exec="mesa" (the default) dispatches to _mesa_Foo(). - exec="check" dispatches to _check_Foo(). - exec="es" dispatches to _es_Foo(). - exec="loopback" dispatches to loopback_Foo(). - exec="skip" or exec="dynamic" causes this function to be skipped; either it is not yet supported ("skip"), or its dispatch table entry will be dynamically populated based on GL state ("dynamic"). - "desktop" indicates functions that should be available in desktop GL (non-ES) contexts. - "deprecated" indicates functions that should not be available in core contexts. - "mesa_name" indicates functions whose implementation in Mesa has a different suffix than the corresponding GL function name. The generated code looks roughly like this (showing just a single statement in each block for brevity): struct _glapi_table * _mesa_create_exec_table(struct gl_context *ctx) { struct _glapi_table *exec; exec = _mesa_alloc_dispatch_table(_gloffset_COUNT); if (exec == NULL) return NULL; if (_mesa_is_desktop_gl(ctx)) { SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_BeginQueryARB(exec, _mesa_BeginQueryARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES) { SET_GetPointerv(exec, _mesa_GetPointerv); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2) { SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); /* other functions not shown */ } if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2) { SET_AttachShader(exec, _mesa_AttachShader); /* other functions not shown */ } if (ctx->API == API_OPENGL) { SET_Accum(exec, _mesa_Accum); /* other functions not shown */ } if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { SET_AlphaFunc(exec, _mesa_AlphaFunc); /* other functions not shown */ } if (ctx->API == API_OPENGLES) { SET_AlphaFuncxOES(exec, _es_AlphaFuncx); /* other functions not shown */ } return exec; } Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
2012-10-30 23:21:18 +00:00
printer.Print(api)
if __name__ == '__main__':
main()