1/*
2 * Mesa 3-D graphics library
3 * Version:  7.1
4 *
5 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26/**
27 * \file mfeatures.h
28 * Flags to enable/disable specific parts of the API.
29 */
30
31#ifndef FEATURES_H
32#define FEATURES_H
33
34
35#ifndef _HAVE_FULL_GL
36#define _HAVE_FULL_GL 1
37#endif
38
39/* assert that a feature is disabled and should never be used */
40#define ASSERT_NO_FEATURE() ASSERT(0)
41
42/**
43 * A feature can be anything.  But most of them share certain characteristics.
44 *
45 * When a feature defines vtxfmt entries, they can be initialized and
46 * installed by
47 *   _MESA_INIT_<FEATURE>_VTXFMT
48 *   _mesa_install_<feature>_vtxfmt
49 *
50 * When a feature defines dispatch entries, they are initialized by
51 *   _mesa_init_<feature>_dispatch
52 *
53 * When a feature has states, they are initialized and freed by
54 *   _mesa_init_<feature>
55 *   _mesa_free_<feature>_data
56 *
57 * Except for states, the others compile to no-op when a feature is disabled.
58 *
59 * The GLAPIENTRYs and helper functions defined by a feature should also
60 * compile to no-op when it is disabled.  But to save typings and to catch
61 * bugs, some of them may be unavailable, or compile to ASSERT_NO_FEATURE()
62 * when the feature is disabled.
63 *
64 * A feature following the conventions may be used without knowing if it is
65 * enabled or not.
66 */
67
68#ifndef FEATURE_ES1
69#define FEATURE_ES1 0
70#endif
71#ifndef FEATURE_ES2
72#define FEATURE_ES2 0
73#endif
74
75#define FEATURE_ES (FEATURE_ES1 || FEATURE_ES2)
76
77#ifndef FEATURE_GL
78#define FEATURE_GL !FEATURE_ES
79#endif
80
81#if defined(IN_DRI_DRIVER) || (FEATURE_GL + FEATURE_ES1 + FEATURE_ES2 > 1)
82#define FEATURE_remap_table               1
83#else
84#define FEATURE_remap_table               0
85#endif
86
87#define FEATURE_dispatch                  1
88#define FEATURE_texgen                    1
89#define FEATURE_userclip                  1
90
91#define FEATURE_accum                     FEATURE_GL
92#define FEATURE_arrayelt                  FEATURE_GL
93#define FEATURE_attrib_stack              FEATURE_GL
94/* this disables vtxfmt, api_loopback, and api_noop completely */
95#define FEATURE_beginend                  FEATURE_GL
96#define FEATURE_colortable                FEATURE_GL
97#define FEATURE_convolve                  FEATURE_GL
98#define FEATURE_dlist                     (FEATURE_GL && FEATURE_arrayelt && FEATURE_beginend)
99#define FEATURE_draw_read_buffer          FEATURE_GL
100#define FEATURE_drawpix                   FEATURE_GL
101#define FEATURE_evaluators                FEATURE_GL
102#define FEATURE_feedback                  FEATURE_GL
103#define FEATURE_pixel_transfer            FEATURE_GL
104#define FEATURE_queryobj                  FEATURE_GL
105#define FEATURE_rastpos                   FEATURE_GL
106#define FEATURE_texture_fxt1              FEATURE_GL
107#define FEATURE_texture_s3tc              FEATURE_GL
108
109#define FEATURE_extra_context_init        FEATURE_ES
110#define FEATURE_point_size_array          FEATURE_ES
111
112#define FEATURE_es2_glsl                  FEATURE_ES2
113
114#define FEATURE_ARB_fragment_program      1
115#define FEATURE_ARB_vertex_program        1
116#define FEATURE_ARB_vertex_shader         1
117#define FEATURE_ARB_fragment_shader       1
118#define FEATURE_ARB_shader_objects        (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader)
119#define FEATURE_ARB_shading_language_100  FEATURE_ARB_shader_objects
120#define FEATURE_ARB_geometry_shader4      FEATURE_ARB_shader_objects
121
122#define FEATURE_ARB_framebuffer_object    (FEATURE_GL && FEATURE_EXT_framebuffer_object)
123#define FEATURE_ARB_map_buffer_range      FEATURE_GL
124#define FEATURE_ARB_pixel_buffer_object   (FEATURE_GL && FEATURE_EXT_pixel_buffer_object)
125#define FEATURE_ARB_sampler_objects       FEATURE_GL
126#define FEATURE_ARB_sync                  FEATURE_GL
127
128#define FEATURE_EXT_framebuffer_blit      FEATURE_GL
129#define FEATURE_EXT_framebuffer_object    1
130#define FEATURE_EXT_pixel_buffer_object   1
131#define FEATURE_EXT_texture_sRGB          FEATURE_GL
132#define FEATURE_EXT_transform_feedback    FEATURE_GL
133
134#define FEATURE_APPLE_object_purgeable    FEATURE_GL
135#define FEATURE_ATI_fragment_shader       FEATURE_GL
136#define FEATURE_NV_fence                  FEATURE_GL
137#define FEATURE_NV_fragment_program       FEATURE_GL
138#define FEATURE_NV_vertex_program         FEATURE_GL
139
140#define FEATURE_OES_EGL_image             1
141#define FEATURE_OES_draw_texture          FEATURE_ES1
142#define FEATURE_OES_framebuffer_object    FEATURE_ES
143#define FEATURE_OES_mapbuffer             FEATURE_ES
144
145#endif /* FEATURES_H */
146