p_defines.h 22.7 KB
Newer Older
1 2
/**************************************************************************
 * 
Jose Fonseca's avatar
Jose Fonseca committed
3
 * Copyright 2007 VMware, Inc.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 * 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, sub license, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
Jose Fonseca's avatar
Jose Fonseca committed
21
 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22 23 24 25 26 27
 * 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.
 * 
 **************************************************************************/

Keith Whitwell's avatar
Keith Whitwell committed
28 29
#ifndef PIPE_DEFINES_H
#define PIPE_DEFINES_H
30

31
#include "p_compiler.h"
32

33 34 35 36
#ifdef __cplusplus
extern "C" {
#endif

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/**
 * Gallium error codes.
 *
 * - A zero value always means success.
 * - A negative value always means failure.
 * - The meaning of a positive value is function dependent.
 */
enum pipe_error {
   PIPE_OK = 0,
   PIPE_ERROR = -1,    /**< Generic error */
   PIPE_ERROR_BAD_INPUT = -2,
   PIPE_ERROR_OUT_OF_MEMORY = -3,
   PIPE_ERROR_RETRY = -4
   /* TODO */
};


Keith Whitwell's avatar
Keith Whitwell committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#define PIPE_BLENDFACTOR_ONE                 0x1
#define PIPE_BLENDFACTOR_SRC_COLOR           0x2
#define PIPE_BLENDFACTOR_SRC_ALPHA           0x3
#define PIPE_BLENDFACTOR_DST_ALPHA           0x4
#define PIPE_BLENDFACTOR_DST_COLOR           0x5
#define PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
#define PIPE_BLENDFACTOR_CONST_COLOR         0x7
#define PIPE_BLENDFACTOR_CONST_ALPHA         0x8
#define PIPE_BLENDFACTOR_SRC1_COLOR          0x9
#define PIPE_BLENDFACTOR_SRC1_ALPHA          0x0A
#define PIPE_BLENDFACTOR_ZERO                0x11
#define PIPE_BLENDFACTOR_INV_SRC_COLOR       0x12
#define PIPE_BLENDFACTOR_INV_SRC_ALPHA       0x13
#define PIPE_BLENDFACTOR_INV_DST_ALPHA       0x14
#define PIPE_BLENDFACTOR_INV_DST_COLOR       0x15
#define PIPE_BLENDFACTOR_INV_CONST_COLOR     0x17
#define PIPE_BLENDFACTOR_INV_CONST_ALPHA     0x18
#define PIPE_BLENDFACTOR_INV_SRC1_COLOR      0x19
#define PIPE_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
73

Keith Whitwell's avatar
Keith Whitwell committed
74 75 76 77 78
#define PIPE_BLEND_ADD               0
#define PIPE_BLEND_SUBTRACT          1
#define PIPE_BLEND_REVERSE_SUBTRACT  2
#define PIPE_BLEND_MIN               3
#define PIPE_BLEND_MAX               4
79

Keith Whitwell's avatar
Keith Whitwell committed
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
#define PIPE_LOGICOP_CLEAR            0
#define PIPE_LOGICOP_NOR              1
#define PIPE_LOGICOP_AND_INVERTED     2
#define PIPE_LOGICOP_COPY_INVERTED    3
#define PIPE_LOGICOP_AND_REVERSE      4
#define PIPE_LOGICOP_INVERT           5
#define PIPE_LOGICOP_XOR              6
#define PIPE_LOGICOP_NAND             7
#define PIPE_LOGICOP_AND              8
#define PIPE_LOGICOP_EQUIV            9
#define PIPE_LOGICOP_NOOP             10
#define PIPE_LOGICOP_OR_INVERTED      11
#define PIPE_LOGICOP_COPY             12
#define PIPE_LOGICOP_OR_REVERSE       13
#define PIPE_LOGICOP_OR               14
#define PIPE_LOGICOP_SET              15  
96

97 98 99 100
#define PIPE_MASK_R  0x1
#define PIPE_MASK_G  0x2
#define PIPE_MASK_B  0x4
#define PIPE_MASK_A  0x8
Brian's avatar
Brian committed
101
#define PIPE_MASK_RGBA 0xf
102 103 104
#define PIPE_MASK_Z  0x10
#define PIPE_MASK_S  0x20
#define PIPE_MASK_ZS 0x30
105
#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS)
Brian's avatar
Brian committed
106

107

108 109 110 111 112 113 114 115 116 117 118 119
/**
 * Inequality functions.  Used for depth test, stencil compare, alpha
 * test, shadow compare, etc.
 */
#define PIPE_FUNC_NEVER    0
#define PIPE_FUNC_LESS     1
#define PIPE_FUNC_EQUAL    2
#define PIPE_FUNC_LEQUAL   3
#define PIPE_FUNC_GREATER  4
#define PIPE_FUNC_NOTEQUAL 5
#define PIPE_FUNC_GEQUAL   6
#define PIPE_FUNC_ALWAYS   7
Brian's avatar
Brian committed
120

Brian's avatar
Brian committed
121 122 123 124 125
/** Polygon fill mode */
#define PIPE_POLYGON_MODE_FILL  0
#define PIPE_POLYGON_MODE_LINE  1
#define PIPE_POLYGON_MODE_POINT 2

126 127 128 129 130
/** Polygon face specification, eg for culling */
#define PIPE_FACE_NONE           0
#define PIPE_FACE_FRONT          1
#define PIPE_FACE_BACK           2
#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK)
Brian's avatar
Brian committed
131

132
/** Stencil ops */
Keith Whitwell's avatar
Keith Whitwell committed
133 134 135 136 137 138 139 140
#define PIPE_STENCIL_OP_KEEP       0
#define PIPE_STENCIL_OP_ZERO       1
#define PIPE_STENCIL_OP_REPLACE    2
#define PIPE_STENCIL_OP_INCR       3
#define PIPE_STENCIL_OP_DECR       4
#define PIPE_STENCIL_OP_INCR_WRAP  5
#define PIPE_STENCIL_OP_DECR_WRAP  6
#define PIPE_STENCIL_OP_INVERT     7
Brian's avatar
Brian committed
141

142 143
/** Texture types.
 * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D */
144
enum pipe_texture_target {
145 146 147 148 149 150 151 152
   PIPE_BUFFER           = 0,
   PIPE_TEXTURE_1D       = 1,
   PIPE_TEXTURE_2D       = 2,
   PIPE_TEXTURE_3D       = 3,
   PIPE_TEXTURE_CUBE     = 4,
   PIPE_TEXTURE_RECT     = 5,
   PIPE_TEXTURE_1D_ARRAY = 6,
   PIPE_TEXTURE_2D_ARRAY = 7,
153
   PIPE_TEXTURE_CUBE_ARRAY = 8,
154
   PIPE_MAX_TEXTURE_TYPES
155
};
Brian's avatar
Brian committed
156 157 158 159 160 161 162

#define PIPE_TEX_FACE_POS_X 0
#define PIPE_TEX_FACE_NEG_X 1
#define PIPE_TEX_FACE_POS_Y 2
#define PIPE_TEX_FACE_NEG_Y 3
#define PIPE_TEX_FACE_POS_Z 4
#define PIPE_TEX_FACE_NEG_Z 5
163
#define PIPE_TEX_FACE_MAX   6
Brian's avatar
Brian committed
164

Keith Whitwell's avatar
Keith Whitwell committed
165 166 167 168 169 170 171 172
#define PIPE_TEX_WRAP_REPEAT                   0
#define PIPE_TEX_WRAP_CLAMP                    1
#define PIPE_TEX_WRAP_CLAMP_TO_EDGE            2
#define PIPE_TEX_WRAP_CLAMP_TO_BORDER          3
#define PIPE_TEX_WRAP_MIRROR_REPEAT            4
#define PIPE_TEX_WRAP_MIRROR_CLAMP             5
#define PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE     6
#define PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER   7
Brian's avatar
Brian committed
173

174 175 176 177 178 179 180 181 182 183
/* Between mipmaps, ie mipfilter
 */
#define PIPE_TEX_MIPFILTER_NEAREST  0
#define PIPE_TEX_MIPFILTER_LINEAR   1
#define PIPE_TEX_MIPFILTER_NONE     2

/* Within a mipmap, ie min/mag filter 
 */
#define PIPE_TEX_FILTER_NEAREST      0
#define PIPE_TEX_FILTER_LINEAR       1
Brian's avatar
Brian committed
184

Keith Whitwell's avatar
Keith Whitwell committed
185 186
#define PIPE_TEX_COMPARE_NONE          0
#define PIPE_TEX_COMPARE_R_TO_TEXTURE  1
Brian's avatar
Brian committed
187

188 189 190
/**
 * Clear buffer bits
 */
191 192 193 194 195 196 197 198 199 200 201
#define PIPE_CLEAR_DEPTH        (1 << 0)
#define PIPE_CLEAR_STENCIL      (1 << 1)
#define PIPE_CLEAR_COLOR0       (1 << 2)
#define PIPE_CLEAR_COLOR1       (1 << 3)
#define PIPE_CLEAR_COLOR2       (1 << 4)
#define PIPE_CLEAR_COLOR3       (1 << 5)
#define PIPE_CLEAR_COLOR4       (1 << 6)
#define PIPE_CLEAR_COLOR5       (1 << 7)
#define PIPE_CLEAR_COLOR6       (1 << 8)
#define PIPE_CLEAR_COLOR7       (1 << 9)
/** Combined flags */
202
/** All color buffers currently bound */
203 204 205 206
#define PIPE_CLEAR_COLOR        (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \
                                 PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \
                                 PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \
                                 PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7)
207
#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)
208

209 210 211 212
/**
 * Transfer object usage flags
 */
enum pipe_transfer_usage {
213 214 215 216
   /**
    * Resource contents read back (or accessed directly) at transfer
    * create time.
    */
217
   PIPE_TRANSFER_READ = (1 << 0),
218 219
   
   /**
220
    * Resource contents will be written back at transfer_unmap
221 222
    * time (or modified as a result of being accessed directly).
    */
223
   PIPE_TRANSFER_WRITE = (1 << 1),
224 225 226 227

   /**
    * Read/modify/write
    */
228
   PIPE_TRANSFER_READ_WRITE = PIPE_TRANSFER_READ | PIPE_TRANSFER_WRITE,
229

230 231 232 233 234 235 236 237 238
   /** 
    * The transfer should map the texture storage directly. The driver may
    * return NULL if that isn't possible, and the state tracker needs to cope
    * with that and use an alternative path without this flag.
    *
    * E.g. the state tracker could have a simpler path which maps textures and
    * does read/modify/write cycles on them directly, and a more complicated
    * path which uses minimal read and write transfers.
    */
239
   PIPE_TRANSFER_MAP_DIRECTLY = (1 << 2),
240

241 242 243
   /**
    * Discards the memory within the mapped region.
    *
244
    * It should not be used with PIPE_TRANSFER_READ.
245 246 247 248
    *
    * See also:
    * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag.
    */
249
   PIPE_TRANSFER_DISCARD_RANGE = (1 << 8),
250

251 252 253 254 255 256 257 258 259
   /**
    * Fail if the resource cannot be mapped immediately.
    *
    * See also:
    * - Direct3D's D3DLOCK_DONOTWAIT flag.
    * - Mesa3D's MESA_MAP_NOWAIT_BIT flag.
    * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag.
    */
   PIPE_TRANSFER_DONTBLOCK = (1 << 9),
260

261 262 263
   /**
    * Do not attempt to synchronize pending operations on the resource when mapping.
    *
264
    * It should not be used with PIPE_TRANSFER_READ.
265 266 267 268 269 270 271 272 273 274 275 276
    *
    * See also:
    * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag.
    * - Direct3D's D3DLOCK_NOOVERWRITE flag.
    * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag.
    */
   PIPE_TRANSFER_UNSYNCHRONIZED = (1 << 10),

   /**
    * Written ranges will be notified later with
    * pipe_context::transfer_flush_region.
    *
277
    * It should not be used with PIPE_TRANSFER_READ.
278 279 280 281 282
    *
    * See also:
    * - pipe_context::transfer_flush_region
    * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag.
    */
283 284 285 286 287
   PIPE_TRANSFER_FLUSH_EXPLICIT = (1 << 11),

   /**
    * Discards all memory backing the resource.
    *
288
    * It should not be used with PIPE_TRANSFER_READ.
289 290 291 292 293 294 295 296 297 298
    *
    * This is equivalent to:
    * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT
    * - BufferData(NULL) on a GL buffer
    * - Direct3D's D3DLOCK_DISCARD flag.
    * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag.
    * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag
    * - D3D10's D3D10_MAP_WRITE_DISCARD flag.
    */
   PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE = (1 << 12)
299 300

};
301

302 303 304 305 306 307
/**
 * Flags for the flush function.
 */
enum pipe_flush_flags {
   PIPE_FLUSH_END_OF_FRAME = (1 << 0)
};
308 309

/*
310 311
 * Resource binding flags -- state tracker must specify in advance all
 * the ways a resource might be used.
312
 */
313 314
#define PIPE_BIND_DEPTH_STENCIL        (1 << 0) /* create_surface */
#define PIPE_BIND_RENDER_TARGET        (1 << 1) /* create_surface */
315 316 317 318 319
#define PIPE_BIND_BLENDABLE            (1 << 2) /* create_surface */
#define PIPE_BIND_SAMPLER_VIEW         (1 << 3) /* create_sampler_view */
#define PIPE_BIND_VERTEX_BUFFER        (1 << 4) /* set_vertex_buffers */
#define PIPE_BIND_INDEX_BUFFER         (1 << 5) /* draw_elements */
#define PIPE_BIND_CONSTANT_BUFFER      (1 << 6) /* set_constant_buffer */
320
#define PIPE_BIND_DISPLAY_TARGET       (1 << 8) /* flush_front_buffer */
321 322
#define PIPE_BIND_TRANSFER_WRITE       (1 << 9) /* transfer_map */
#define PIPE_BIND_TRANSFER_READ        (1 << 10) /* transfer_map */
323
#define PIPE_BIND_STREAM_OUTPUT        (1 << 11) /* set_stream_output_buffers */
324 325
#define PIPE_BIND_CURSOR               (1 << 16) /* mouse cursor */
#define PIPE_BIND_CUSTOM               (1 << 17) /* state-tracker/winsys usages */
326
#define PIPE_BIND_GLOBAL               (1 << 18) /* set_global_binding */
327 328
#define PIPE_BIND_SHADER_RESOURCE      (1 << 19) /* set_shader_resources */
#define PIPE_BIND_COMPUTE_RESOURCE     (1 << 20) /* set_compute_resources */
329

330
/* The first two flags above were previously part of the amorphous
331
 * TEXTURE_USAGE, most of which are now descriptions of the ways a
332 333
 * particular texture can be bound to the gallium pipeline.  The two flags
 * below do not fit within that and probably need to be migrated to some
334
 * other place.
335
 *
336 337 338 339
 * It seems like scanout is used by the Xorg state tracker to ask for
 * a texture suitable for actual scanout (hence the name), which
 * implies extra layout constraints on some hardware.  It may also
 * have some special meaning regarding mouse cursor images.
340
 *
341 342
 * The shared flag is quite underspecified, but certainly isn't a
 * binding flag - it seems more like a message to the winsys to create
343
 * a shareable allocation.
344 345 346
 * 
 * The third flag has been added to be able to force textures to be created
 * in linear mode (no tiling).
347
 */
348 349
#define PIPE_BIND_SCANOUT     (1 << 14) /*  */
#define PIPE_BIND_SHARED      (1 << 15) /* get_texture_handle ??? */
350
#define PIPE_BIND_LINEAR      (1 << 21)
351 352


353
/* Flags for the driver about resource behaviour:
354
 */
355 356 357
#define PIPE_RESOURCE_FLAG_GEN_MIPS    (1 << 0)  /* Driver performs autogen mips */
#define PIPE_RESOURCE_FLAG_DRV_PRIV    (1 << 16) /* driver/winsys private */
#define PIPE_RESOURCE_FLAG_ST_PRIV     (1 << 24) /* state-tracker/winsys private */
358

359
/* Hint about the expected lifecycle of a resource.
360
 */
361 362 363 364 365
#define PIPE_USAGE_DEFAULT        0 /* many uploads, draws intermixed */
#define PIPE_USAGE_DYNAMIC        1 /* many uploads, draws intermixed */
#define PIPE_USAGE_STATIC         2 /* same as immutable?? */
#define PIPE_USAGE_IMMUTABLE      3 /* no change after first upload */
#define PIPE_USAGE_STREAM         4 /* upload, draw, upload, draw */
366
#define PIPE_USAGE_STAGING        5 /* supports data transfers from the GPU to the CPU */
367

368

Brian's avatar
Brian committed
369 370 371 372 373
/**
 * Shaders
 */
#define PIPE_SHADER_VERTEX   0
#define PIPE_SHADER_FRAGMENT 1
374
#define PIPE_SHADER_GEOMETRY 2
375 376
#define PIPE_SHADER_COMPUTE  3
#define PIPE_SHADER_TYPES    4
Brian's avatar
Brian committed
377 378


379 380 381
/**
 * Primitive types:
 */
382 383 384 385 386 387 388 389 390 391 392 393 394 395 396
#define PIPE_PRIM_POINTS               0
#define PIPE_PRIM_LINES                1
#define PIPE_PRIM_LINE_LOOP            2
#define PIPE_PRIM_LINE_STRIP           3
#define PIPE_PRIM_TRIANGLES            4
#define PIPE_PRIM_TRIANGLE_STRIP       5
#define PIPE_PRIM_TRIANGLE_FAN         6
#define PIPE_PRIM_QUADS                7
#define PIPE_PRIM_QUAD_STRIP           8
#define PIPE_PRIM_POLYGON              9
#define PIPE_PRIM_LINES_ADJACENCY          10
#define PIPE_PRIM_LINE_STRIP_ADJACENCY    11
#define PIPE_PRIM_TRIANGLES_ADJACENCY      12
#define PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY 13
#define PIPE_PRIM_MAX                      14
397

398

Brian's avatar
Brian committed
399 400 401 402
/**
 * Query object types
 */
#define PIPE_QUERY_OCCLUSION_COUNTER     0
403 404 405 406 407 408 409 410 411 412 413
#define PIPE_QUERY_OCCLUSION_PREDICATE   1
#define PIPE_QUERY_TIMESTAMP             2
#define PIPE_QUERY_TIMESTAMP_DISJOINT    3
#define PIPE_QUERY_TIME_ELAPSED          4
#define PIPE_QUERY_PRIMITIVES_GENERATED  5
#define PIPE_QUERY_PRIMITIVES_EMITTED    6
#define PIPE_QUERY_SO_STATISTICS         7
#define PIPE_QUERY_SO_OVERFLOW_PREDICATE 8
#define PIPE_QUERY_GPU_FINISHED          9
#define PIPE_QUERY_PIPELINE_STATISTICS  10
#define PIPE_QUERY_TYPES                11
Brian's avatar
Brian committed
414

415 416 417 418
/* start of driver queries,
 * see pipe_screen::get_driver_query_info */
#define PIPE_QUERY_DRIVER_SPECIFIC     256

419

420 421 422 423 424 425 426 427 428
/**
 * Conditional rendering modes
 */
#define PIPE_RENDER_COND_WAIT              0
#define PIPE_RENDER_COND_NO_WAIT           1
#define PIPE_RENDER_COND_BY_REGION_WAIT    2
#define PIPE_RENDER_COND_BY_REGION_NO_WAIT 3


Brian's avatar
Brian committed
429 430 431
/**
 * Point sprite coord modes
 */
432 433
#define PIPE_SPRITE_COORD_UPPER_LEFT 0
#define PIPE_SPRITE_COORD_LOWER_LEFT 1
Brian's avatar
Brian committed
434

435

436 437 438 439 440 441 442 443 444 445 446
/**
 * Texture swizzles
 */
#define PIPE_SWIZZLE_RED   0
#define PIPE_SWIZZLE_GREEN 1
#define PIPE_SWIZZLE_BLUE  2
#define PIPE_SWIZZLE_ALPHA 3
#define PIPE_SWIZZLE_ZERO  4
#define PIPE_SWIZZLE_ONE   5


447 448
#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull

449
/**
450
 * Implementation capabilities/limits which are queried through
451
 * pipe_screen::get_param()
452
 */
453
enum pipe_cap {
454 455
   PIPE_CAP_NPOT_TEXTURES = 1,
   PIPE_CAP_TWO_SIDED_STENCIL = 2,
456
   PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS = 4,
457 458 459 460
   PIPE_CAP_ANISOTROPIC_FILTER = 5,
   PIPE_CAP_POINT_SPRITE = 6,
   PIPE_CAP_MAX_RENDER_TARGETS = 7,
   PIPE_CAP_OCCLUSION_QUERY = 8,
461
   PIPE_CAP_QUERY_TIME_ELAPSED = 9,
462 463 464 465 466 467 468 469
   PIPE_CAP_TEXTURE_SHADOW_MAP = 10,
   PIPE_CAP_TEXTURE_SWIZZLE = 11,
   PIPE_CAP_MAX_TEXTURE_2D_LEVELS = 12,
   PIPE_CAP_MAX_TEXTURE_3D_LEVELS = 13,
   PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS = 14,
   PIPE_CAP_TEXTURE_MIRROR_CLAMP = 25,
   PIPE_CAP_BLEND_EQUATION_SEPARATE = 28,
   PIPE_CAP_SM3 = 29,  /*< Shader Model, supported */
470
   PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS = 30,
471
   PIPE_CAP_PRIMITIVE_RESTART = 31,
472
   /** blend enables and write masks per rendertarget */
473
   PIPE_CAP_INDEP_BLEND_ENABLE = 33,
474
   /** different blend funcs per rendertarget */
475
   PIPE_CAP_INDEP_BLEND_FUNC = 34,
476
   PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS = 36,
477 478 479 480
   PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT = 37,
   PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT = 38,
   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER = 39,
   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER = 40,
481
   PIPE_CAP_DEPTH_CLIP_DISABLE = 41,
482 483 484
   PIPE_CAP_SHADER_STENCIL_EXPORT = 42,
   PIPE_CAP_TGSI_INSTANCEID = 43,
   PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44,
485
   PIPE_CAP_FRAGMENT_COLOR_CLAMPED = 45,
486
   PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46,
487 488
   PIPE_CAP_SEAMLESS_CUBE_MAP = 47,
   PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48,
489
   PIPE_CAP_MIN_TEXEL_OFFSET = 50,
490
   PIPE_CAP_MAX_TEXEL_OFFSET = 51,
491
   PIPE_CAP_CONDITIONAL_RENDER = 52,
492
   PIPE_CAP_TEXTURE_BARRIER = 53,
493 494 495
   PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS = 55,
   PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS = 56,
   PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME = 57,
496 497
   PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS = 59, /* temporary */
   PIPE_CAP_VERTEX_COLOR_UNCLAMPED = 60,
498
   PIPE_CAP_VERTEX_COLOR_CLAMPED = 61,
499
   PIPE_CAP_GLSL_FEATURE_LEVEL = 62,
500 501 502 503 504
   PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 63,
   PIPE_CAP_USER_VERTEX_BUFFERS = 64,
   PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY = 65,
   PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY = 66,
   PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY = 67,
Marek Olšák's avatar
Marek Olšák committed
505 506 507
   PIPE_CAP_COMPUTE = 68,
   PIPE_CAP_USER_INDEX_BUFFERS = 69,
   PIPE_CAP_USER_CONSTANT_BUFFERS = 70,
508
   PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT = 71,
509
   PIPE_CAP_START_INSTANCE = 72,
510
   PIPE_CAP_QUERY_TIMESTAMP = 73,
511
   PIPE_CAP_TEXTURE_MULTISAMPLE = 74,
512
   PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT = 75,
513
   PIPE_CAP_CUBE_MAP_ARRAY = 76,
514
   PIPE_CAP_TEXTURE_BUFFER_OBJECTS = 77,
515
   PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT = 78,
516
   PIPE_CAP_TGSI_TEXCOORD = 79,
517
   PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER = 80,
518
   PIPE_CAP_QUERY_PIPELINE_STATISTICS = 81,
519
   PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82,
520
   PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
521
   PIPE_CAP_MAX_VIEWPORTS = 84,
522
   PIPE_CAP_ENDIANNESS = 85,
523 524
   PIPE_CAP_MIXED_FRAMEBUFFER_SIZES = 86,
   PIPE_CAP_TGSI_VS_LAYER = 87
525
};
526

527 528 529
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1)

530 531 532 533 534 535 536 537 538
enum pipe_endian {
   PIPE_ENDIAN_LITTLE = 0,
   PIPE_ENDIAN_BIG = 1,
#if defined(PIPE_ARCH_LITTLE_ENDIAN)
   PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE
#elif defined(PIPE_ARCH_BIG_ENDIAN)
   PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG
#endif
};
539

540 541 542 543 544 545 546 547 548 549 550 551
/**
 * Implementation limits which are queried through
 * pipe_screen::get_paramf()
 */
enum pipe_capf
{
   PIPE_CAPF_MAX_LINE_WIDTH = 15,
   PIPE_CAPF_MAX_LINE_WIDTH_AA = 16,
   PIPE_CAPF_MAX_POINT_WIDTH = 17,
   PIPE_CAPF_MAX_POINT_WIDTH_AA = 18,
   PIPE_CAPF_MAX_TEXTURE_ANISOTROPY = 19,
   PIPE_CAPF_MAX_TEXTURE_LOD_BIAS = 20,
552 553 554 555
   PIPE_CAPF_GUARD_BAND_LEFT = 21,
   PIPE_CAPF_GUARD_BAND_TOP = 22,
   PIPE_CAPF_GUARD_BAND_RIGHT = 23,
   PIPE_CAPF_GUARD_BAND_BOTTOM = 24
556 557
};

558 559 560
/* Shader caps not specific to any single stage */
enum pipe_shader_cap
{
561 562 563 564 565 566 567 568 569 570 571
   PIPE_SHADER_CAP_MAX_INSTRUCTIONS = 0, /* if 0, it means the stage is unsupported */
   PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS = 1,
   PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS = 2,
   PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS = 3,
   PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH = 4,
   PIPE_SHADER_CAP_MAX_INPUTS = 5,
   PIPE_SHADER_CAP_MAX_CONSTS = 6,
   PIPE_SHADER_CAP_MAX_CONST_BUFFERS = 7,
   PIPE_SHADER_CAP_MAX_TEMPS = 8,
   PIPE_SHADER_CAP_MAX_ADDRS = 9,
   PIPE_SHADER_CAP_MAX_PREDS = 10,
572
   /* boolean caps */
573 574 575 576 577 578
   PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED = 11,
   PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR = 12,
   PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR = 13,
   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR = 14,
   PIPE_SHADER_CAP_INDIRECT_CONST_ADDR = 15,
   PIPE_SHADER_CAP_SUBROUTINES = 16, /* BGNSUB, ENDSUB, CAL, RET */
579
   PIPE_SHADER_CAP_INTEGERS = 17,
580
   PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS = 18,
Brian Paul's avatar
Brian Paul committed
581
   PIPE_SHADER_CAP_PREFERRED_IR = 19,
582 583
   PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED = 20,
   PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS = 21
584 585 586 587 588 589 590
};

/**
 * Shader intermediate representation.
 */
enum pipe_shader_ir
{
591 592
   PIPE_SHADER_IR_TGSI,
   PIPE_SHADER_IR_LLVM
593
};
594

595 596 597 598 599 600
/**
 * Compute-specific implementation capability.  They can be queried
 * using pipe_screen::get_compute_param.
 */
enum pipe_compute_cap
{
601
   PIPE_COMPUTE_CAP_IR_TARGET,
602 603 604
   PIPE_COMPUTE_CAP_GRID_DIMENSION,
   PIPE_COMPUTE_CAP_MAX_GRID_SIZE,
   PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE,
605
   PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK,
606 607 608
   PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE,
   PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE,
   PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE,
609 610
   PIPE_COMPUTE_CAP_MAX_INPUT_SIZE,
   PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE
611
};
612

613 614 615
/**
 * Composite query types
 */
616 617 618 619

/**
 * Query result for PIPE_QUERY_SO_STATISTICS.
 */
620 621 622 623 624
struct pipe_query_data_so_statistics
{
   uint64_t num_primitives_written;
   uint64_t primitives_storage_needed;
};
625 626 627 628

/**
 * Query result for PIPE_QUERY_TIMESTAMP_DISJOINT.
 */
629 630 631 632 633
struct pipe_query_data_timestamp_disjoint
{
   uint64_t frequency;
   boolean  disjoint;
};
634

635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
/**
 * Query result for PIPE_QUERY_PIPELINE_STATISTICS.
 */
struct pipe_query_data_pipeline_statistics
{
   uint64_t ia_vertices;    /**< Num vertices read by the vertex fetcher. */
   uint64_t ia_primitives;  /**< Num primitives read by the vertex fetcher. */
   uint64_t vs_invocations; /**< Num vertex shader invocations. */
   uint64_t gs_invocations; /**< Num geometry shader invocations. */
   uint64_t gs_primitives;  /**< Num primitives output by a geometry shader. */
   uint64_t c_invocations;  /**< Num primitives sent to the rasterizer. */
   uint64_t c_primitives;   /**< Num primitives that were rendered. */
   uint64_t ps_invocations; /**< Num pixel shader invocations. */
   uint64_t hs_invocations; /**< Num hull shader invocations. */
   uint64_t ds_invocations; /**< Num domain shader invocations. */
   uint64_t cs_invocations; /**< Num compute shader invocations. */
};

/**
 * Query result (returned by pipe_context::get_query_result).
 */
union pipe_query_result
{
   /* PIPE_QUERY_OCCLUSION_PREDICATE */
   /* PIPE_QUERY_SO_OVERFLOW_PREDICATE */
   /* PIPE_QUERY_GPU_FINISHED */
   boolean b;

   /* PIPE_QUERY_OCCLUSION_COUNTER */
   /* PIPE_QUERY_TIMESTAMP */
   /* PIPE_QUERY_TIME_ELAPSED */
   /* PIPE_QUERY_PRIMITIVES_GENERATED */
   /* PIPE_QUERY_PRIMITIVES_EMITTED */
   uint64_t u64;

   /* PIPE_QUERY_SO_STATISTICS */
   struct pipe_query_data_so_statistics so_statistics;

   /* PIPE_QUERY_TIMESTAMP_DISJOINT */
   struct pipe_query_data_timestamp_disjoint timestamp_disjoint;

   /* PIPE_QUERY_PIPELINE_STATISTICS */
   struct pipe_query_data_pipeline_statistics pipeline_statistics;
};

680 681 682 683 684 685
union pipe_color_union
{
   float f[4];
   int i[4];
   unsigned int ui[4];
};
686

687 688 689 690 691 692 693 694
struct pipe_driver_query_info
{
   const char *name;
   unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */
   uint64_t max_value; /* max value that can be returned */
   boolean uses_byte_units; /* whether the result is in bytes */
};

695 696 697 698
#ifdef __cplusplus
}
#endif

699
#endif