summaryrefslogtreecommitdiff
path: root/src/mesa/main/mfeatures.h
blob: 1b39f5fdd36475088e03868979ca1e6c904aaab4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Mesa 3-D graphics library
 * Version:  7.1
 *
 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
 *
 * 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 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
 * BRIAN PAUL 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.
 */


/**
 * \file mfeatures.h
 * Flags to enable/disable specific parts of the API.
 */

#ifndef FEATURES_H
#define FEATURES_H


#ifndef _HAVE_FULL_GL
#define _HAVE_FULL_GL 1
#endif

/* assert that a feature is disabled and should never be used */
#define ASSERT_NO_FEATURE() ASSERT(0)

/**
 * A feature can be anything.  But most of them share certain characteristics.
 *
 * When a feature defines vtxfmt entries, they can be initialized and
 * installed by
 *   _MESA_INIT_<FEATURE>_VTXFMT
 *   _mesa_install_<feature>_vtxfmt
 *
 * When a feature defines dispatch entries, they are initialized by
 *   _mesa_init_<feature>_dispatch
 *
 * When a feature has states, they are initialized and freed by
 *   _mesa_init_<feature>
 *   _mesa_free_<feature>_data
 *
 * Except for states, the others compile to no-op when a feature is disabled.
 *
 * The GLAPIENTRYs and helper functions defined by a feature should also
 * compile to no-op when it is disabled.  But to save typings and to catch
 * bugs, some of them may be unavailable, or compile to ASSERT_NO_FEATURE()
 * when the feature is disabled.
 *
 * A feature following the conventions may be used without knowing if it is
 * enabled or not.
 */

#ifndef FEATURE_ES1
#define FEATURE_ES1 0
#endif
#ifndef FEATURE_ES2
#define FEATURE_ES2 0
#endif

#define FEATURE_ES (FEATURE_ES1 || FEATURE_ES2)

#ifndef FEATURE_GL
#define FEATURE_GL !FEATURE_ES
#endif

#if defined(IN_DRI_DRIVER) || (FEATURE_GL + FEATURE_ES1 + FEATURE_ES2 > 1)
#define FEATURE_remap_table               1
#else
#define FEATURE_remap_table               0
#endif

#define FEATURE_dispatch                  1
#define FEATURE_texgen                    1
#define FEATURE_userclip                  1

#define FEATURE_accum                     FEATURE_GL
#define FEATURE_arrayelt                  FEATURE_GL
#define FEATURE_attrib_stack              FEATURE_GL
/* this disables vtxfmt, api_loopback, and api_noop completely */
#define FEATURE_beginend                  FEATURE_GL
#define FEATURE_colortable                FEATURE_GL
#define FEATURE_convolve                  FEATURE_GL
#define FEATURE_dlist                     (FEATURE_GL && FEATURE_arrayelt && FEATURE_beginend)
#define FEATURE_draw_read_buffer          FEATURE_GL
#define FEATURE_drawpix                   FEATURE_GL
#define FEATURE_evaluators                FEATURE_GL
#define FEATURE_feedback                  FEATURE_GL
#define FEATURE_pixel_transfer            FEATURE_GL
#define FEATURE_queryobj                  FEATURE_GL
#define FEATURE_rastpos                   FEATURE_GL
#define FEATURE_texture_fxt1              FEATURE_GL
#define FEATURE_texture_s3tc              FEATURE_GL

#define FEATURE_extra_context_init        FEATURE_ES
#define FEATURE_point_size_array          FEATURE_ES

#define FEATURE_es2_glsl                  FEATURE_ES2

#define FEATURE_ARB_fragment_program      1
#define FEATURE_ARB_vertex_program        1
#define FEATURE_ARB_vertex_shader         1
#define FEATURE_ARB_fragment_shader       1
#define FEATURE_ARB_shader_objects        (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader)
#define FEATURE_ARB_shading_language_100  FEATURE_ARB_shader_objects
#define FEATURE_ARB_geometry_shader4      FEATURE_ARB_shader_objects

#define FEATURE_ARB_framebuffer_object    (FEATURE_GL && FEATURE_EXT_framebuffer_object)
#define FEATURE_ARB_map_buffer_range      FEATURE_GL
#define FEATURE_ARB_pixel_buffer_object   (FEATURE_GL && FEATURE_EXT_pixel_buffer_object)
#define FEATURE_ARB_sync                  FEATURE_GL
#define FEATURE_ARB_vertex_buffer_object  1

#define FEATURE_EXT_framebuffer_blit      FEATURE_GL
#define FEATURE_EXT_framebuffer_object    1
#define FEATURE_EXT_pixel_buffer_object   1
#define FEATURE_EXT_texture_sRGB          FEATURE_GL
#define FEATURE_EXT_transform_feedback    FEATURE_GL

#define FEATURE_APPLE_object_purgeable    FEATURE_GL
#define FEATURE_ATI_fragment_shader       FEATURE_GL
#define FEATURE_NV_fence                  FEATURE_GL
#define FEATURE_NV_fragment_program       FEATURE_GL
#define FEATURE_NV_vertex_program         FEATURE_GL

#define FEATURE_OES_EGL_image             1
#define FEATURE_OES_draw_texture          FEATURE_ES1
#define FEATURE_OES_framebuffer_object    FEATURE_ES
#define FEATURE_OES_mapbuffer             FEATURE_ES

#endif /* FEATURES_H */