Brian | 7234550 | 2007-05-24 16:49:27 -0600 | [diff] [blame] | 1 | /************************************************************************** |
| 2 | * |
| 3 | * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. |
| 4 | * All Rights Reserved. |
| 5 | * |
| 6 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 7 | * copy of this software and associated documentation files (the |
| 8 | * "Software"), to deal in the Software without restriction, including |
| 9 | * without limitation the rights to use, copy, modify, merge, publish, |
| 10 | * distribute, sub license, and/or sell copies of the Software, and to |
| 11 | * permit persons to whom the Software is furnished to do so, subject to |
| 12 | * the following conditions: |
| 13 | * |
| 14 | * The above copyright notice and this permission notice (including the |
| 15 | * next paragraph) shall be included in all copies or substantial portions |
| 16 | * of the Software. |
| 17 | * |
| 18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| 19 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| 20 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| 21 | * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR |
| 22 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| 23 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| 24 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| 25 | * |
| 26 | **************************************************************************/ |
| 27 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 28 | #ifndef PIPE_DEFINES_H |
| 29 | #define PIPE_DEFINES_H |
Keith Whitwell | 8e4a95a | 2007-05-24 10:41:34 +0100 | [diff] [blame] | 30 | |
Vinson Lee | 121b6d6 | 2010-08-26 01:30:07 -0700 | [diff] [blame] | 31 | #include "p_compiler.h" |
michal | 26df9d1 | 2007-10-26 17:17:52 +0100 | [diff] [blame] | 32 | |
José Fonseca | e4e3008 | 2008-02-25 20:05:41 +0900 | [diff] [blame] | 33 | #ifdef __cplusplus |
| 34 | extern "C" { |
| 35 | #endif |
| 36 | |
José Fonseca | 3a49497 | 2009-10-25 21:11:54 +0000 | [diff] [blame] | 37 | /** |
| 38 | * Gallium error codes. |
| 39 | * |
| 40 | * - A zero value always means success. |
| 41 | * - A negative value always means failure. |
| 42 | * - The meaning of a positive value is function dependent. |
| 43 | */ |
| 44 | enum pipe_error { |
| 45 | PIPE_OK = 0, |
| 46 | PIPE_ERROR = -1, /**< Generic error */ |
| 47 | PIPE_ERROR_BAD_INPUT = -2, |
| 48 | PIPE_ERROR_OUT_OF_MEMORY = -3, |
| 49 | PIPE_ERROR_RETRY = -4 |
| 50 | /* TODO */ |
| 51 | }; |
| 52 | |
| 53 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 54 | #define PIPE_BLENDFACTOR_ONE 0x1 |
| 55 | #define PIPE_BLENDFACTOR_SRC_COLOR 0x2 |
| 56 | #define PIPE_BLENDFACTOR_SRC_ALPHA 0x3 |
| 57 | #define PIPE_BLENDFACTOR_DST_ALPHA 0x4 |
| 58 | #define PIPE_BLENDFACTOR_DST_COLOR 0x5 |
| 59 | #define PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE 0x6 |
| 60 | #define PIPE_BLENDFACTOR_CONST_COLOR 0x7 |
| 61 | #define PIPE_BLENDFACTOR_CONST_ALPHA 0x8 |
| 62 | #define PIPE_BLENDFACTOR_SRC1_COLOR 0x9 |
| 63 | #define PIPE_BLENDFACTOR_SRC1_ALPHA 0x0A |
| 64 | #define PIPE_BLENDFACTOR_ZERO 0x11 |
| 65 | #define PIPE_BLENDFACTOR_INV_SRC_COLOR 0x12 |
| 66 | #define PIPE_BLENDFACTOR_INV_SRC_ALPHA 0x13 |
| 67 | #define PIPE_BLENDFACTOR_INV_DST_ALPHA 0x14 |
| 68 | #define PIPE_BLENDFACTOR_INV_DST_COLOR 0x15 |
| 69 | #define PIPE_BLENDFACTOR_INV_CONST_COLOR 0x17 |
| 70 | #define PIPE_BLENDFACTOR_INV_CONST_ALPHA 0x18 |
| 71 | #define PIPE_BLENDFACTOR_INV_SRC1_COLOR 0x19 |
| 72 | #define PIPE_BLENDFACTOR_INV_SRC1_ALPHA 0x1A |
Keith Whitwell | 8e4a95a | 2007-05-24 10:41:34 +0100 | [diff] [blame] | 73 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 74 | #define PIPE_BLEND_ADD 0 |
| 75 | #define PIPE_BLEND_SUBTRACT 1 |
| 76 | #define PIPE_BLEND_REVERSE_SUBTRACT 2 |
| 77 | #define PIPE_BLEND_MIN 3 |
| 78 | #define PIPE_BLEND_MAX 4 |
Keith Whitwell | 8e4a95a | 2007-05-24 10:41:34 +0100 | [diff] [blame] | 79 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 80 | #define PIPE_LOGICOP_CLEAR 0 |
| 81 | #define PIPE_LOGICOP_NOR 1 |
| 82 | #define PIPE_LOGICOP_AND_INVERTED 2 |
| 83 | #define PIPE_LOGICOP_COPY_INVERTED 3 |
| 84 | #define PIPE_LOGICOP_AND_REVERSE 4 |
| 85 | #define PIPE_LOGICOP_INVERT 5 |
| 86 | #define PIPE_LOGICOP_XOR 6 |
| 87 | #define PIPE_LOGICOP_NAND 7 |
| 88 | #define PIPE_LOGICOP_AND 8 |
| 89 | #define PIPE_LOGICOP_EQUIV 9 |
| 90 | #define PIPE_LOGICOP_NOOP 10 |
| 91 | #define PIPE_LOGICOP_OR_INVERTED 11 |
| 92 | #define PIPE_LOGICOP_COPY 12 |
| 93 | #define PIPE_LOGICOP_OR_REVERSE 13 |
| 94 | #define PIPE_LOGICOP_OR 14 |
| 95 | #define PIPE_LOGICOP_SET 15 |
Keith Whitwell | 8e4a95a | 2007-05-24 10:41:34 +0100 | [diff] [blame] | 96 | |
Brian | 86352ff | 2007-07-12 12:20:14 -0600 | [diff] [blame] | 97 | #define PIPE_MASK_R 0x1 |
| 98 | #define PIPE_MASK_G 0x2 |
| 99 | #define PIPE_MASK_B 0x4 |
| 100 | #define PIPE_MASK_A 0x8 |
Brian | 5936b439 | 2007-08-02 10:29:04 -0600 | [diff] [blame] | 101 | #define PIPE_MASK_RGBA 0xf |
| 102 | |
Brian | 86352ff | 2007-07-12 12:20:14 -0600 | [diff] [blame] | 103 | |
Brian | efe6c50 | 2007-06-18 17:53:09 -0600 | [diff] [blame] | 104 | /** |
| 105 | * Inequality functions. Used for depth test, stencil compare, alpha |
| 106 | * test, shadow compare, etc. |
| 107 | */ |
| 108 | #define PIPE_FUNC_NEVER 0 |
| 109 | #define PIPE_FUNC_LESS 1 |
| 110 | #define PIPE_FUNC_EQUAL 2 |
| 111 | #define PIPE_FUNC_LEQUAL 3 |
| 112 | #define PIPE_FUNC_GREATER 4 |
| 113 | #define PIPE_FUNC_NOTEQUAL 5 |
| 114 | #define PIPE_FUNC_GEQUAL 6 |
| 115 | #define PIPE_FUNC_ALWAYS 7 |
Brian | 008fb50 | 2007-05-24 17:37:36 -0600 | [diff] [blame] | 116 | |
Brian | 2137e30 | 2007-06-19 08:43:05 -0600 | [diff] [blame] | 117 | /** Polygon fill mode */ |
| 118 | #define PIPE_POLYGON_MODE_FILL 0 |
| 119 | #define PIPE_POLYGON_MODE_LINE 1 |
| 120 | #define PIPE_POLYGON_MODE_POINT 2 |
| 121 | |
Keith Whitwell | 0bd1cbc | 2010-05-14 13:04:42 +0100 | [diff] [blame] | 122 | /** Polygon face specification, eg for culling */ |
| 123 | #define PIPE_FACE_NONE 0 |
| 124 | #define PIPE_FACE_FRONT 1 |
| 125 | #define PIPE_FACE_BACK 2 |
| 126 | #define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK) |
Brian | 2137e30 | 2007-06-19 08:43:05 -0600 | [diff] [blame] | 127 | |
Brian | f79c225 | 2007-06-22 12:47:04 -0600 | [diff] [blame] | 128 | /** Stencil ops */ |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 129 | #define PIPE_STENCIL_OP_KEEP 0 |
| 130 | #define PIPE_STENCIL_OP_ZERO 1 |
| 131 | #define PIPE_STENCIL_OP_REPLACE 2 |
| 132 | #define PIPE_STENCIL_OP_INCR 3 |
| 133 | #define PIPE_STENCIL_OP_DECR 4 |
| 134 | #define PIPE_STENCIL_OP_INCR_WRAP 5 |
| 135 | #define PIPE_STENCIL_OP_DECR_WRAP 6 |
| 136 | #define PIPE_STENCIL_OP_INVERT 7 |
Brian | 008fb50 | 2007-05-24 17:37:36 -0600 | [diff] [blame] | 137 | |
Luca Barbieri | 72b3e3f | 2010-04-15 09:02:29 +0200 | [diff] [blame] | 138 | /** Texture types. |
| 139 | * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D */ |
Michel Dänzer | 1c5f27a | 2008-01-04 17:06:55 +0100 | [diff] [blame] | 140 | enum pipe_texture_target { |
Roland Scheidegger | 4c70014 | 2010-12-02 04:33:43 +0100 | [diff] [blame] | 141 | PIPE_BUFFER = 0, |
| 142 | PIPE_TEXTURE_1D = 1, |
| 143 | PIPE_TEXTURE_2D = 2, |
| 144 | PIPE_TEXTURE_3D = 3, |
| 145 | PIPE_TEXTURE_CUBE = 4, |
| 146 | PIPE_TEXTURE_RECT = 5, |
| 147 | PIPE_TEXTURE_1D_ARRAY = 6, |
| 148 | PIPE_TEXTURE_2D_ARRAY = 7, |
Marek Olšák | e1d0f47 | 2009-12-14 19:05:15 +0100 | [diff] [blame] | 149 | PIPE_MAX_TEXTURE_TYPES |
Michel Dänzer | 1c5f27a | 2008-01-04 17:06:55 +0100 | [diff] [blame] | 150 | }; |
Brian | eb147ed | 2007-08-08 10:26:16 -0600 | [diff] [blame] | 151 | |
| 152 | #define PIPE_TEX_FACE_POS_X 0 |
| 153 | #define PIPE_TEX_FACE_NEG_X 1 |
| 154 | #define PIPE_TEX_FACE_POS_Y 2 |
| 155 | #define PIPE_TEX_FACE_NEG_Y 3 |
| 156 | #define PIPE_TEX_FACE_POS_Z 4 |
| 157 | #define PIPE_TEX_FACE_NEG_Z 5 |
Brian Paul | 95b7771 | 2009-05-05 09:39:39 -0600 | [diff] [blame] | 158 | #define PIPE_TEX_FACE_MAX 6 |
Brian | eb147ed | 2007-08-08 10:26:16 -0600 | [diff] [blame] | 159 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 160 | #define PIPE_TEX_WRAP_REPEAT 0 |
| 161 | #define PIPE_TEX_WRAP_CLAMP 1 |
| 162 | #define PIPE_TEX_WRAP_CLAMP_TO_EDGE 2 |
| 163 | #define PIPE_TEX_WRAP_CLAMP_TO_BORDER 3 |
| 164 | #define PIPE_TEX_WRAP_MIRROR_REPEAT 4 |
| 165 | #define PIPE_TEX_WRAP_MIRROR_CLAMP 5 |
| 166 | #define PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE 6 |
| 167 | #define PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER 7 |
Brian | 02a4754 | 2007-05-30 16:26:55 -0600 | [diff] [blame] | 168 | |
Keith Whitwell | 78b1a29 | 2007-08-09 19:09:19 +0100 | [diff] [blame] | 169 | /* Between mipmaps, ie mipfilter |
| 170 | */ |
| 171 | #define PIPE_TEX_MIPFILTER_NEAREST 0 |
| 172 | #define PIPE_TEX_MIPFILTER_LINEAR 1 |
| 173 | #define PIPE_TEX_MIPFILTER_NONE 2 |
| 174 | |
| 175 | /* Within a mipmap, ie min/mag filter |
| 176 | */ |
| 177 | #define PIPE_TEX_FILTER_NEAREST 0 |
| 178 | #define PIPE_TEX_FILTER_LINEAR 1 |
Brian | 02a4754 | 2007-05-30 16:26:55 -0600 | [diff] [blame] | 179 | |
Keith Whitwell | 943964a | 2007-06-14 18:23:43 +0100 | [diff] [blame] | 180 | #define PIPE_TEX_COMPARE_NONE 0 |
| 181 | #define PIPE_TEX_COMPARE_R_TO_TEXTURE 1 |
Brian | 8f28887 | 2007-05-30 16:07:39 -0600 | [diff] [blame] | 182 | |
Keith Whitwell | 8e6a380 | 2008-05-03 15:41:05 +0100 | [diff] [blame] | 183 | /** |
Michel Dänzer | eb168e2 | 2009-04-04 19:01:51 +0200 | [diff] [blame] | 184 | * Clear buffer bits |
| 185 | */ |
| 186 | /** All color buffers currently bound */ |
| 187 | #define PIPE_CLEAR_COLOR (1 << 0) |
Roland Scheidegger | 0cd70b5 | 2010-05-28 23:57:47 +0200 | [diff] [blame] | 188 | #define PIPE_CLEAR_DEPTH (1 << 1) |
| 189 | #define PIPE_CLEAR_STENCIL (1 << 2) |
Michel Dänzer | eb168e2 | 2009-04-04 19:01:51 +0200 | [diff] [blame] | 190 | /** Depth/stencil combined */ |
Roland Scheidegger | 0cd70b5 | 2010-05-28 23:57:47 +0200 | [diff] [blame] | 191 | #define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) |
Michel Dänzer | eb168e2 | 2009-04-04 19:01:51 +0200 | [diff] [blame] | 192 | |
| 193 | /** |
Michel Dänzer | 4617981 | 2009-02-05 19:41:18 +0100 | [diff] [blame] | 194 | * Transfer object usage flags |
| 195 | */ |
| 196 | enum pipe_transfer_usage { |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 197 | /** |
| 198 | * Resource contents read back (or accessed directly) at transfer |
| 199 | * create time. |
| 200 | */ |
Maarten Maathuis | f199dbd | 2009-08-16 03:20:09 +0200 | [diff] [blame] | 201 | PIPE_TRANSFER_READ = (1 << 0), |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 202 | |
| 203 | /** |
| 204 | * Resource contents will be written back at transfer_destroy |
| 205 | * time (or modified as a result of being accessed directly). |
| 206 | */ |
Maarten Maathuis | f199dbd | 2009-08-16 03:20:09 +0200 | [diff] [blame] | 207 | PIPE_TRANSFER_WRITE = (1 << 1), |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 208 | |
| 209 | /** |
| 210 | * Read/modify/write |
| 211 | */ |
Michel Dänzer | 9db647b | 2009-10-02 18:13:26 +0200 | [diff] [blame] | 212 | PIPE_TRANSFER_READ_WRITE = PIPE_TRANSFER_READ | PIPE_TRANSFER_WRITE, |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 213 | |
Michel Dänzer | 9db647b | 2009-10-02 18:13:26 +0200 | [diff] [blame] | 214 | /** |
| 215 | * The transfer should map the texture storage directly. The driver may |
| 216 | * return NULL if that isn't possible, and the state tracker needs to cope |
| 217 | * with that and use an alternative path without this flag. |
| 218 | * |
| 219 | * E.g. the state tracker could have a simpler path which maps textures and |
| 220 | * does read/modify/write cycles on them directly, and a more complicated |
| 221 | * path which uses minimal read and write transfers. |
| 222 | */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 223 | PIPE_TRANSFER_MAP_DIRECTLY = (1 << 2), |
| 224 | |
| 225 | /** |
| 226 | * Discards the memory within the mapped region. |
| 227 | * |
José Fonseca | 7aeb610 | 2011-02-22 14:14:45 +0000 | [diff] [blame^] | 228 | * It should not be used with PIPE_TRANSFER_READ. |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 229 | * |
| 230 | * See also: |
| 231 | * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag. |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 232 | */ |
Keith Whitwell | fad8497 | 2011-01-05 17:33:43 +0000 | [diff] [blame] | 233 | PIPE_TRANSFER_DISCARD = (1 << 8), /* DEPRECATED */ |
| 234 | PIPE_TRANSFER_DISCARD_RANGE = (1 << 8), |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 235 | |
| 236 | /** |
| 237 | * Fail if the resource cannot be mapped immediately. |
| 238 | * |
| 239 | * See also: |
| 240 | * - Direct3D's D3DLOCK_DONOTWAIT flag. |
| 241 | * - Mesa3D's MESA_MAP_NOWAIT_BIT flag. |
| 242 | * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag. |
| 243 | */ |
| 244 | PIPE_TRANSFER_DONTBLOCK = (1 << 9), |
| 245 | |
| 246 | /** |
| 247 | * Do not attempt to synchronize pending operations on the resource when mapping. |
| 248 | * |
José Fonseca | 7aeb610 | 2011-02-22 14:14:45 +0000 | [diff] [blame^] | 249 | * It should not be used with PIPE_TRANSFER_READ. |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 250 | * |
| 251 | * See also: |
| 252 | * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag. |
| 253 | * - Direct3D's D3DLOCK_NOOVERWRITE flag. |
| 254 | * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag. |
| 255 | */ |
| 256 | PIPE_TRANSFER_UNSYNCHRONIZED = (1 << 10), |
| 257 | PIPE_TRANSFER_NOOVERWRITE = (1 << 10), /* are these really the same?? */ |
| 258 | |
| 259 | /** |
| 260 | * Written ranges will be notified later with |
| 261 | * pipe_context::transfer_flush_region. |
| 262 | * |
José Fonseca | 7aeb610 | 2011-02-22 14:14:45 +0000 | [diff] [blame^] | 263 | * It should not be used with PIPE_TRANSFER_READ. |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 264 | * |
| 265 | * See also: |
| 266 | * - pipe_context::transfer_flush_region |
| 267 | * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag. |
| 268 | */ |
Keith Whitwell | fad8497 | 2011-01-05 17:33:43 +0000 | [diff] [blame] | 269 | PIPE_TRANSFER_FLUSH_EXPLICIT = (1 << 11), |
| 270 | |
| 271 | /** |
| 272 | * Discards all memory backing the resource. |
| 273 | * |
José Fonseca | 7aeb610 | 2011-02-22 14:14:45 +0000 | [diff] [blame^] | 274 | * It should not be used with PIPE_TRANSFER_READ. |
Keith Whitwell | fad8497 | 2011-01-05 17:33:43 +0000 | [diff] [blame] | 275 | * |
| 276 | * This is equivalent to: |
| 277 | * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT |
| 278 | * - BufferData(NULL) on a GL buffer |
| 279 | * - Direct3D's D3DLOCK_DISCARD flag. |
| 280 | * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag. |
| 281 | * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag |
| 282 | * - D3D10's D3D10_MAP_WRITE_DISCARD flag. |
| 283 | */ |
| 284 | PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE = (1 << 12) |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 285 | |
Michel Dänzer | 4617981 | 2009-02-05 19:41:18 +0100 | [diff] [blame] | 286 | }; |
| 287 | |
| 288 | |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 289 | /* |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 290 | * Resource binding flags -- state tracker must specify in advance all |
| 291 | * the ways a resource might be used. |
José Fonseca | fa1a66d | 2007-11-05 18:04:35 +0000 | [diff] [blame] | 292 | */ |
Roland Scheidegger | 4c70014 | 2010-12-02 04:33:43 +0100 | [diff] [blame] | 293 | #define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */ |
| 294 | #define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */ |
| 295 | #define PIPE_BIND_SAMPLER_VIEW (1 << 2) /* create_sampler_view */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 296 | #define PIPE_BIND_VERTEX_BUFFER (1 << 3) /* set_vertex_buffers */ |
| 297 | #define PIPE_BIND_INDEX_BUFFER (1 << 4) /* draw_elements */ |
| 298 | #define PIPE_BIND_CONSTANT_BUFFER (1 << 5) /* set_constant_buffer */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 299 | #define PIPE_BIND_DISPLAY_TARGET (1 << 8) /* flush_front_buffer */ |
| 300 | #define PIPE_BIND_TRANSFER_WRITE (1 << 9) /* get_transfer */ |
| 301 | #define PIPE_BIND_TRANSFER_READ (1 << 10) /* get_transfer */ |
Zack Rusin | a45b7f4 | 2010-05-28 13:14:07 -0400 | [diff] [blame] | 302 | #define PIPE_BIND_STREAM_OUTPUT (1 << 11) /* set_stream_output_buffers */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 303 | #define PIPE_BIND_CUSTOM (1 << 16) /* state-tracker/winsys usages */ |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 304 | |
Brian Paul | 50d77c7 | 2010-04-22 11:33:26 -0600 | [diff] [blame] | 305 | /* The first two flags above were previously part of the amorphous |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 306 | * TEXTURE_USAGE, most of which are now descriptions of the ways a |
Brian Paul | 50d77c7 | 2010-04-22 11:33:26 -0600 | [diff] [blame] | 307 | * particular texture can be bound to the gallium pipeline. The two flags |
| 308 | * below do not fit within that and probably need to be migrated to some |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 309 | * other place. |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 310 | * |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 311 | * It seems like scanout is used by the Xorg state tracker to ask for |
| 312 | * a texture suitable for actual scanout (hence the name), which |
| 313 | * implies extra layout constraints on some hardware. It may also |
| 314 | * have some special meaning regarding mouse cursor images. |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 315 | * |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 316 | * The shared flag is quite underspecified, but certainly isn't a |
| 317 | * binding flag - it seems more like a message to the winsys to create |
Brian Paul | 50d77c7 | 2010-04-22 11:33:26 -0600 | [diff] [blame] | 318 | * a shareable allocation. |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 319 | */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 320 | #define PIPE_BIND_SCANOUT (1 << 14) /* */ |
| 321 | #define PIPE_BIND_SHARED (1 << 15) /* get_texture_handle ??? */ |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 322 | |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 323 | |
| 324 | /* Flags for the driver about resource behaviour: |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 325 | */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 326 | #define PIPE_RESOURCE_FLAG_GEN_MIPS (1 << 0) /* Driver performs autogen mips */ |
| 327 | #define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 16) /* driver/winsys private */ |
| 328 | #define PIPE_RESOURCE_FLAG_ST_PRIV (1 << 24) /* state-tracker/winsys private */ |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 329 | |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 330 | /* Hint about the expected lifecycle of a resource. |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 331 | */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 332 | #define PIPE_USAGE_DEFAULT 0 /* many uploads, draws intermixed */ |
| 333 | #define PIPE_USAGE_DYNAMIC 1 /* many uploads, draws intermixed */ |
| 334 | #define PIPE_USAGE_STATIC 2 /* same as immutable?? */ |
| 335 | #define PIPE_USAGE_IMMUTABLE 3 /* no change after first upload */ |
| 336 | #define PIPE_USAGE_STREAM 4 /* upload, draw, upload, draw */ |
Zack Rusin | a45b7f4 | 2010-05-28 13:14:07 -0400 | [diff] [blame] | 337 | #define PIPE_USAGE_STAGING 5 /* supports data transfers from the GPU to the CPU */ |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 338 | |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 339 | |
| 340 | /* These are intended to be used in calls to is_format_supported, but |
| 341 | * no driver actually uses these flags, and only the glx/xlib state |
| 342 | * tracker issues them. |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 343 | * |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 344 | * Deprecate? |
José Fonseca | 244591a | 2009-11-06 12:04:20 +0000 | [diff] [blame] | 345 | */ |
Keith Whitwell | 287c94e | 2010-04-10 16:05:54 +0100 | [diff] [blame] | 346 | #define PIPE_TEXTURE_GEOM_NON_SQUARE 0x1 |
| 347 | #define PIPE_TEXTURE_GEOM_NON_POWER_OF_TWO 0x2 |
José Fonseca | d600c80 | 2008-11-24 13:45:19 +0900 | [diff] [blame] | 348 | |
Keith Whitwell | 93d5cfd | 2007-08-08 16:42:01 +0100 | [diff] [blame] | 349 | |
| 350 | /** |
| 351 | * Flush types: |
| 352 | */ |
Brian | ae44a81 | 2007-11-07 16:59:37 -0700 | [diff] [blame] | 353 | #define PIPE_FLUSH_RENDER_CACHE 0x1 |
Keith Whitwell | 93d5cfd | 2007-08-08 16:42:01 +0100 | [diff] [blame] | 354 | #define PIPE_FLUSH_TEXTURE_CACHE 0x2 |
Michel Dänzer | 4abe1eb | 2008-03-26 09:36:40 +0000 | [diff] [blame] | 355 | #define PIPE_FLUSH_SWAPBUFFERS 0x4 |
José Fonseca | daa481a | 2008-08-14 11:39:41 +0100 | [diff] [blame] | 356 | #define PIPE_FLUSH_FRAME 0x8 /**< Mark the end of a frame */ |
Keith Whitwell | 93d5cfd | 2007-08-08 16:42:01 +0100 | [diff] [blame] | 357 | |
Keith Whitwell | 40a86b2 | 2007-08-13 16:07:11 +0100 | [diff] [blame] | 358 | |
Brian | 94a4910 | 2007-08-15 19:13:03 -0600 | [diff] [blame] | 359 | /** |
Brian | c0bb4ba | 2007-08-22 12:24:51 -0600 | [diff] [blame] | 360 | * Shaders |
| 361 | */ |
| 362 | #define PIPE_SHADER_VERTEX 0 |
| 363 | #define PIPE_SHADER_FRAGMENT 1 |
Zack Rusin | 89d8577 | 2009-12-14 17:11:46 -0500 | [diff] [blame] | 364 | #define PIPE_SHADER_GEOMETRY 2 |
| 365 | #define PIPE_SHADER_TYPES 3 |
Brian | c0bb4ba | 2007-08-22 12:24:51 -0600 | [diff] [blame] | 366 | |
| 367 | |
| 368 | /** |
Brian | 94a4910 | 2007-08-15 19:13:03 -0600 | [diff] [blame] | 369 | * Primitive types: |
| 370 | */ |
Zack Rusin | 89d8577 | 2009-12-14 17:11:46 -0500 | [diff] [blame] | 371 | #define PIPE_PRIM_POINTS 0 |
| 372 | #define PIPE_PRIM_LINES 1 |
| 373 | #define PIPE_PRIM_LINE_LOOP 2 |
| 374 | #define PIPE_PRIM_LINE_STRIP 3 |
| 375 | #define PIPE_PRIM_TRIANGLES 4 |
| 376 | #define PIPE_PRIM_TRIANGLE_STRIP 5 |
| 377 | #define PIPE_PRIM_TRIANGLE_FAN 6 |
| 378 | #define PIPE_PRIM_QUADS 7 |
| 379 | #define PIPE_PRIM_QUAD_STRIP 8 |
| 380 | #define PIPE_PRIM_POLYGON 9 |
| 381 | #define PIPE_PRIM_LINES_ADJACENCY 10 |
| 382 | #define PIPE_PRIM_LINE_STRIP_ADJACENCY 11 |
| 383 | #define PIPE_PRIM_TRIANGLES_ADJACENCY 12 |
| 384 | #define PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY 13 |
| 385 | #define PIPE_PRIM_MAX 14 |
Brian | 94a4910 | 2007-08-15 19:13:03 -0600 | [diff] [blame] | 386 | |
Keith Whitwell | 40a86b2 | 2007-08-13 16:07:11 +0100 | [diff] [blame] | 387 | |
Brian | 09fbb38 | 2007-09-11 16:01:17 -0600 | [diff] [blame] | 388 | /** |
| 389 | * Query object types |
| 390 | */ |
| 391 | #define PIPE_QUERY_OCCLUSION_COUNTER 0 |
| 392 | #define PIPE_QUERY_PRIMITIVES_GENERATED 1 |
| 393 | #define PIPE_QUERY_PRIMITIVES_EMITTED 2 |
Mathias Fröhlich | cdbd5f4 | 2010-05-17 11:48:56 -0700 | [diff] [blame] | 394 | #define PIPE_QUERY_TIME_ELAPSED 3 |
Zack Rusin | be7d8dd | 2010-06-07 12:14:56 -0400 | [diff] [blame] | 395 | #define PIPE_QUERY_SO_STATISTICS 5 |
Zack Rusin | b6c360b | 2010-06-21 22:11:07 -0400 | [diff] [blame] | 396 | #define PIPE_QUERY_GPU_FINISHED 6 |
Zack Rusin | e433b73 | 2010-06-22 12:14:29 -0400 | [diff] [blame] | 397 | #define PIPE_QUERY_TIMESTAMP_DISJOINT 7 |
Zack Rusin | 0657fc0 | 2011-01-26 00:01:51 -0500 | [diff] [blame] | 398 | #define PIPE_QUERY_OCCLUSION_PREDICATE 8 |
| 399 | #define PIPE_QUERY_TYPES 9 |
Brian | 09fbb38 | 2007-09-11 16:01:17 -0600 | [diff] [blame] | 400 | |
Brian | 37cf13e | 2007-09-19 18:53:36 -0600 | [diff] [blame] | 401 | |
Brian | 1b48523 | 2007-10-22 12:10:30 -0600 | [diff] [blame] | 402 | /** |
Brian Paul | c0b4fb0 | 2009-12-31 14:44:40 -0700 | [diff] [blame] | 403 | * Conditional rendering modes |
| 404 | */ |
| 405 | #define PIPE_RENDER_COND_WAIT 0 |
| 406 | #define PIPE_RENDER_COND_NO_WAIT 1 |
| 407 | #define PIPE_RENDER_COND_BY_REGION_WAIT 2 |
| 408 | #define PIPE_RENDER_COND_BY_REGION_NO_WAIT 3 |
| 409 | |
| 410 | |
| 411 | /** |
Brian | 1b48523 | 2007-10-22 12:10:30 -0600 | [diff] [blame] | 412 | * Point sprite coord modes |
| 413 | */ |
Roland Scheidegger | 4a4daa7 | 2010-02-03 17:25:14 +0100 | [diff] [blame] | 414 | #define PIPE_SPRITE_COORD_UPPER_LEFT 0 |
| 415 | #define PIPE_SPRITE_COORD_LOWER_LEFT 1 |
Brian | 1b48523 | 2007-10-22 12:10:30 -0600 | [diff] [blame] | 416 | |
Brian | c6499a7 | 2007-11-05 18:04:30 -0700 | [diff] [blame] | 417 | |
| 418 | /** |
Michal Krol | f610656 | 2010-02-19 19:00:26 +0100 | [diff] [blame] | 419 | * Texture swizzles |
| 420 | */ |
| 421 | #define PIPE_SWIZZLE_RED 0 |
| 422 | #define PIPE_SWIZZLE_GREEN 1 |
| 423 | #define PIPE_SWIZZLE_BLUE 2 |
| 424 | #define PIPE_SWIZZLE_ALPHA 3 |
| 425 | #define PIPE_SWIZZLE_ZERO 4 |
| 426 | #define PIPE_SWIZZLE_ONE 5 |
| 427 | |
| 428 | |
| 429 | /** |
Brian Paul | aebc08b | 2009-06-09 11:10:09 -0600 | [diff] [blame] | 430 | * Implementation capabilities/limits which are queried through |
| 431 | * pipe_screen::get_param() and pipe_screen::get_paramf(). |
Brian | c6499a7 | 2007-11-05 18:04:30 -0700 | [diff] [blame] | 432 | */ |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 433 | enum pipe_cap { |
| 434 | PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS, |
| 435 | PIPE_CAP_NPOT_TEXTURES, |
| 436 | PIPE_CAP_TWO_SIDED_STENCIL, |
| 437 | PIPE_CAP_GLSL, /* XXX need something better */ |
| 438 | PIPE_CAP_DUAL_SOURCE_BLEND, |
| 439 | PIPE_CAP_ANISOTROPIC_FILTER, |
| 440 | PIPE_CAP_POINT_SPRITE, |
| 441 | PIPE_CAP_MAX_RENDER_TARGETS, |
| 442 | PIPE_CAP_OCCLUSION_QUERY, |
Mathias Fröhlich | cdbd5f4 | 2010-05-17 11:48:56 -0700 | [diff] [blame] | 443 | PIPE_CAP_TIMER_QUERY, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 444 | PIPE_CAP_TEXTURE_SHADOW_MAP, |
Dave Airlie | 42ebe3d | 2010-04-27 21:06:44 +1000 | [diff] [blame] | 445 | PIPE_CAP_TEXTURE_SWIZZLE, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 446 | PIPE_CAP_MAX_TEXTURE_2D_LEVELS, |
| 447 | PIPE_CAP_MAX_TEXTURE_3D_LEVELS, |
| 448 | PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS, |
| 449 | PIPE_CAP_MAX_LINE_WIDTH, |
| 450 | PIPE_CAP_MAX_LINE_WIDTH_AA, |
| 451 | PIPE_CAP_MAX_POINT_WIDTH, |
| 452 | PIPE_CAP_MAX_POINT_WIDTH_AA, |
| 453 | PIPE_CAP_MAX_TEXTURE_ANISOTROPY, |
| 454 | PIPE_CAP_MAX_TEXTURE_LOD_BIAS, |
| 455 | PIPE_CAP_GUARD_BAND_LEFT, /*< float */ |
| 456 | PIPE_CAP_GUARD_BAND_TOP, /*< float */ |
| 457 | PIPE_CAP_GUARD_BAND_RIGHT, /*< float */ |
| 458 | PIPE_CAP_GUARD_BAND_BOTTOM, /*< float */ |
| 459 | PIPE_CAP_TEXTURE_MIRROR_CLAMP, |
| 460 | PIPE_CAP_TEXTURE_MIRROR_REPEAT, |
| 461 | PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 462 | PIPE_CAP_BLEND_EQUATION_SEPARATE, |
| 463 | PIPE_CAP_SM3, /*< Shader Model, supported */ |
Zack Rusin | 2c22b8e | 2010-06-01 12:47:23 -0400 | [diff] [blame] | 464 | PIPE_CAP_STREAM_OUTPUT, |
Brian Paul | adf35e8 | 2010-10-21 19:03:38 -0600 | [diff] [blame] | 465 | PIPE_CAP_PRIMITIVE_RESTART, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 466 | /** Maximum texture image units accessible from vertex and fragment shaders |
| 467 | * combined */ |
| 468 | PIPE_CAP_MAX_COMBINED_SAMPLERS, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 469 | /** blend enables and write masks per rendertarget */ |
| 470 | PIPE_CAP_INDEP_BLEND_ENABLE, |
| 471 | /** different blend funcs per rendertarget */ |
| 472 | PIPE_CAP_INDEP_BLEND_FUNC, |
Roland Scheidegger | 0cd70b5 | 2010-05-28 23:57:47 +0200 | [diff] [blame] | 473 | PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE, |
Roland Scheidegger | 4c70014 | 2010-12-02 04:33:43 +0100 | [diff] [blame] | 474 | PIPE_CAP_ARRAY_TEXTURES, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 475 | PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT, |
| 476 | PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT, |
| 477 | PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER, |
| 478 | PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER, |
Dave Airlie | 4ecb2c1 | 2010-10-06 09:28:46 +1000 | [diff] [blame] | 479 | PIPE_CAP_DEPTH_CLAMP, |
| 480 | PIPE_CAP_SHADER_STENCIL_EXPORT, |
Brian Paul | d87bc01 | 2010-12-05 13:32:59 -0700 | [diff] [blame] | 481 | PIPE_CAP_INSTANCED_DRAWING, |
José Fonseca | e1238b5 | 2010-05-11 11:11:03 +0100 | [diff] [blame] | 482 | }; |
Brian Paul | be66a8f | 2008-08-06 17:22:29 -0600 | [diff] [blame] | 483 | |
Luca Barbieri | a508d2d | 2010-09-05 20:50:50 +0200 | [diff] [blame] | 484 | /* Shader caps not specific to any single stage */ |
| 485 | enum pipe_shader_cap |
| 486 | { |
| 487 | PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */ |
| 488 | PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS, |
| 489 | PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS, |
| 490 | PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS, |
| 491 | PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH, |
| 492 | PIPE_SHADER_CAP_MAX_INPUTS, |
| 493 | PIPE_SHADER_CAP_MAX_CONSTS, |
| 494 | PIPE_SHADER_CAP_MAX_CONST_BUFFERS, |
| 495 | PIPE_SHADER_CAP_MAX_TEMPS, |
| 496 | PIPE_SHADER_CAP_MAX_ADDRS, |
| 497 | PIPE_SHADER_CAP_MAX_PREDS, |
Marek Olšák | cbfdf26 | 2010-11-10 20:41:55 +0100 | [diff] [blame] | 498 | /* boolean caps */ |
Luca Barbieri | a508d2d | 2010-09-05 20:50:50 +0200 | [diff] [blame] | 499 | PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED, |
Marek Olšák | cbfdf26 | 2010-11-10 20:41:55 +0100 | [diff] [blame] | 500 | PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR, |
| 501 | PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR, |
| 502 | PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR, |
| 503 | PIPE_SHADER_CAP_INDIRECT_CONST_ADDR, |
Marek Olšák | 9aa089e | 2010-11-14 15:34:59 +0100 | [diff] [blame] | 504 | PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */ |
Luca Barbieri | a508d2d | 2010-09-05 20:50:50 +0200 | [diff] [blame] | 505 | }; |
Brian Paul | 07aaf3a | 2008-05-02 14:00:08 -0600 | [diff] [blame] | 506 | |
Thomas Hellstrom | 9b75627 | 2009-04-15 15:53:34 +0200 | [diff] [blame] | 507 | /** |
| 508 | * Referenced query flags. |
| 509 | */ |
| 510 | |
| 511 | #define PIPE_UNREFERENCED 0 |
| 512 | #define PIPE_REFERENCED_FOR_READ (1 << 0) |
| 513 | #define PIPE_REFERENCED_FOR_WRITE (1 << 1) |
Brian | c6499a7 | 2007-11-05 18:04:30 -0700 | [diff] [blame] | 514 | |
Zack Rusin | be7d8dd | 2010-06-07 12:14:56 -0400 | [diff] [blame] | 515 | /** |
| 516 | * Composite query types |
| 517 | */ |
| 518 | struct pipe_query_data_so_statistics |
| 519 | { |
| 520 | uint64_t num_primitives_written; |
| 521 | uint64_t primitives_storage_needed; |
| 522 | }; |
Zack Rusin | e433b73 | 2010-06-22 12:14:29 -0400 | [diff] [blame] | 523 | struct pipe_query_data_timestamp_disjoint |
| 524 | { |
| 525 | uint64_t frequency; |
| 526 | boolean disjoint; |
| 527 | }; |
Younes Manton | f547472 | 2009-09-27 19:49:06 -0400 | [diff] [blame] | 528 | |
José Fonseca | e4e3008 | 2008-02-25 20:05:41 +0900 | [diff] [blame] | 529 | #ifdef __cplusplus |
| 530 | } |
| 531 | #endif |
| 532 | |
Brian | 7234550 | 2007-05-24 16:49:27 -0600 | [diff] [blame] | 533 | #endif |