p_defines.h revision 01e04c3f
1/************************************************************************** 2 * 3 * Copyright 2007 VMware, Inc. 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 VMWARE 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 28#ifndef PIPE_DEFINES_H 29#define PIPE_DEFINES_H 30 31#include "p_compiler.h" 32 33#ifdef __cplusplus 34extern "C" { 35#endif 36 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 */ 44enum pipe_error 45{ 46 PIPE_OK = 0, 47 PIPE_ERROR = -1, /**< Generic error */ 48 PIPE_ERROR_BAD_INPUT = -2, 49 PIPE_ERROR_OUT_OF_MEMORY = -3, 50 PIPE_ERROR_RETRY = -4 51 /* TODO */ 52}; 53 54enum pipe_blendfactor { 55 PIPE_BLENDFACTOR_ONE = 1, 56 PIPE_BLENDFACTOR_SRC_COLOR, 57 PIPE_BLENDFACTOR_SRC_ALPHA, 58 PIPE_BLENDFACTOR_DST_ALPHA, 59 PIPE_BLENDFACTOR_DST_COLOR, 60 PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE, 61 PIPE_BLENDFACTOR_CONST_COLOR, 62 PIPE_BLENDFACTOR_CONST_ALPHA, 63 PIPE_BLENDFACTOR_SRC1_COLOR, 64 PIPE_BLENDFACTOR_SRC1_ALPHA, 65 66 PIPE_BLENDFACTOR_ZERO = 0x11, 67 PIPE_BLENDFACTOR_INV_SRC_COLOR, 68 PIPE_BLENDFACTOR_INV_SRC_ALPHA, 69 PIPE_BLENDFACTOR_INV_DST_ALPHA, 70 PIPE_BLENDFACTOR_INV_DST_COLOR, 71 72 PIPE_BLENDFACTOR_INV_CONST_COLOR = 0x17, 73 PIPE_BLENDFACTOR_INV_CONST_ALPHA, 74 PIPE_BLENDFACTOR_INV_SRC1_COLOR, 75 PIPE_BLENDFACTOR_INV_SRC1_ALPHA, 76}; 77 78enum pipe_blend_func { 79 PIPE_BLEND_ADD, 80 PIPE_BLEND_SUBTRACT, 81 PIPE_BLEND_REVERSE_SUBTRACT, 82 PIPE_BLEND_MIN, 83 PIPE_BLEND_MAX, 84}; 85 86enum pipe_logicop { 87 PIPE_LOGICOP_CLEAR, 88 PIPE_LOGICOP_NOR, 89 PIPE_LOGICOP_AND_INVERTED, 90 PIPE_LOGICOP_COPY_INVERTED, 91 PIPE_LOGICOP_AND_REVERSE, 92 PIPE_LOGICOP_INVERT, 93 PIPE_LOGICOP_XOR, 94 PIPE_LOGICOP_NAND, 95 PIPE_LOGICOP_AND, 96 PIPE_LOGICOP_EQUIV, 97 PIPE_LOGICOP_NOOP, 98 PIPE_LOGICOP_OR_INVERTED, 99 PIPE_LOGICOP_COPY, 100 PIPE_LOGICOP_OR_REVERSE, 101 PIPE_LOGICOP_OR, 102 PIPE_LOGICOP_SET, 103}; 104 105#define PIPE_MASK_R 0x1 106#define PIPE_MASK_G 0x2 107#define PIPE_MASK_B 0x4 108#define PIPE_MASK_A 0x8 109#define PIPE_MASK_RGBA 0xf 110#define PIPE_MASK_Z 0x10 111#define PIPE_MASK_S 0x20 112#define PIPE_MASK_ZS 0x30 113#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS) 114 115 116/** 117 * Inequality functions. Used for depth test, stencil compare, alpha 118 * test, shadow compare, etc. 119 */ 120enum pipe_compare_func { 121 PIPE_FUNC_NEVER, 122 PIPE_FUNC_LESS, 123 PIPE_FUNC_EQUAL, 124 PIPE_FUNC_LEQUAL, 125 PIPE_FUNC_GREATER, 126 PIPE_FUNC_NOTEQUAL, 127 PIPE_FUNC_GEQUAL, 128 PIPE_FUNC_ALWAYS, 129}; 130 131/** Polygon fill mode */ 132enum { 133 PIPE_POLYGON_MODE_FILL, 134 PIPE_POLYGON_MODE_LINE, 135 PIPE_POLYGON_MODE_POINT, 136 PIPE_POLYGON_MODE_FILL_RECTANGLE, 137}; 138 139/** Polygon face specification, eg for culling */ 140#define PIPE_FACE_NONE 0 141#define PIPE_FACE_FRONT 1 142#define PIPE_FACE_BACK 2 143#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK) 144 145/** Stencil ops */ 146enum pipe_stencil_op { 147 PIPE_STENCIL_OP_KEEP, 148 PIPE_STENCIL_OP_ZERO, 149 PIPE_STENCIL_OP_REPLACE, 150 PIPE_STENCIL_OP_INCR, 151 PIPE_STENCIL_OP_DECR, 152 PIPE_STENCIL_OP_INCR_WRAP, 153 PIPE_STENCIL_OP_DECR_WRAP, 154 PIPE_STENCIL_OP_INVERT, 155}; 156 157/** Texture types. 158 * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D 159 */ 160enum pipe_texture_target 161{ 162 PIPE_BUFFER, 163 PIPE_TEXTURE_1D, 164 PIPE_TEXTURE_2D, 165 PIPE_TEXTURE_3D, 166 PIPE_TEXTURE_CUBE, 167 PIPE_TEXTURE_RECT, 168 PIPE_TEXTURE_1D_ARRAY, 169 PIPE_TEXTURE_2D_ARRAY, 170 PIPE_TEXTURE_CUBE_ARRAY, 171 PIPE_MAX_TEXTURE_TYPES, 172}; 173 174enum pipe_tex_face { 175 PIPE_TEX_FACE_POS_X, 176 PIPE_TEX_FACE_NEG_X, 177 PIPE_TEX_FACE_POS_Y, 178 PIPE_TEX_FACE_NEG_Y, 179 PIPE_TEX_FACE_POS_Z, 180 PIPE_TEX_FACE_NEG_Z, 181 PIPE_TEX_FACE_MAX, 182}; 183 184enum pipe_tex_wrap { 185 PIPE_TEX_WRAP_REPEAT, 186 PIPE_TEX_WRAP_CLAMP, 187 PIPE_TEX_WRAP_CLAMP_TO_EDGE, 188 PIPE_TEX_WRAP_CLAMP_TO_BORDER, 189 PIPE_TEX_WRAP_MIRROR_REPEAT, 190 PIPE_TEX_WRAP_MIRROR_CLAMP, 191 PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE, 192 PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER, 193}; 194 195/** Between mipmaps, ie mipfilter */ 196enum pipe_tex_mipfilter { 197 PIPE_TEX_MIPFILTER_NEAREST, 198 PIPE_TEX_MIPFILTER_LINEAR, 199 PIPE_TEX_MIPFILTER_NONE, 200}; 201 202/** Within a mipmap, ie min/mag filter */ 203enum pipe_tex_filter { 204 PIPE_TEX_FILTER_NEAREST, 205 PIPE_TEX_FILTER_LINEAR, 206}; 207 208enum pipe_tex_compare { 209 PIPE_TEX_COMPARE_NONE, 210 PIPE_TEX_COMPARE_R_TO_TEXTURE, 211}; 212 213/** 214 * Clear buffer bits 215 */ 216#define PIPE_CLEAR_DEPTH (1 << 0) 217#define PIPE_CLEAR_STENCIL (1 << 1) 218#define PIPE_CLEAR_COLOR0 (1 << 2) 219#define PIPE_CLEAR_COLOR1 (1 << 3) 220#define PIPE_CLEAR_COLOR2 (1 << 4) 221#define PIPE_CLEAR_COLOR3 (1 << 5) 222#define PIPE_CLEAR_COLOR4 (1 << 6) 223#define PIPE_CLEAR_COLOR5 (1 << 7) 224#define PIPE_CLEAR_COLOR6 (1 << 8) 225#define PIPE_CLEAR_COLOR7 (1 << 9) 226/** Combined flags */ 227/** All color buffers currently bound */ 228#define PIPE_CLEAR_COLOR (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \ 229 PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \ 230 PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \ 231 PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7) 232#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) 233 234/** 235 * Transfer object usage flags 236 */ 237enum pipe_transfer_usage 238{ 239 /** 240 * Resource contents read back (or accessed directly) at transfer 241 * create time. 242 */ 243 PIPE_TRANSFER_READ = (1 << 0), 244 245 /** 246 * Resource contents will be written back at transfer_unmap 247 * time (or modified as a result of being accessed directly). 248 */ 249 PIPE_TRANSFER_WRITE = (1 << 1), 250 251 /** 252 * Read/modify/write 253 */ 254 PIPE_TRANSFER_READ_WRITE = PIPE_TRANSFER_READ | PIPE_TRANSFER_WRITE, 255 256 /** 257 * The transfer should map the texture storage directly. The driver may 258 * return NULL if that isn't possible, and the state tracker needs to cope 259 * with that and use an alternative path without this flag. 260 * 261 * E.g. the state tracker could have a simpler path which maps textures and 262 * does read/modify/write cycles on them directly, and a more complicated 263 * path which uses minimal read and write transfers. 264 */ 265 PIPE_TRANSFER_MAP_DIRECTLY = (1 << 2), 266 267 /** 268 * Discards the memory within the mapped region. 269 * 270 * It should not be used with PIPE_TRANSFER_READ. 271 * 272 * See also: 273 * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag. 274 */ 275 PIPE_TRANSFER_DISCARD_RANGE = (1 << 8), 276 277 /** 278 * Fail if the resource cannot be mapped immediately. 279 * 280 * See also: 281 * - Direct3D's D3DLOCK_DONOTWAIT flag. 282 * - Mesa's MESA_MAP_NOWAIT_BIT flag. 283 * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag. 284 */ 285 PIPE_TRANSFER_DONTBLOCK = (1 << 9), 286 287 /** 288 * Do not attempt to synchronize pending operations on the resource when mapping. 289 * 290 * It should not be used with PIPE_TRANSFER_READ. 291 * 292 * See also: 293 * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag. 294 * - Direct3D's D3DLOCK_NOOVERWRITE flag. 295 * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag. 296 */ 297 PIPE_TRANSFER_UNSYNCHRONIZED = (1 << 10), 298 299 /** 300 * Written ranges will be notified later with 301 * pipe_context::transfer_flush_region. 302 * 303 * It should not be used with PIPE_TRANSFER_READ. 304 * 305 * See also: 306 * - pipe_context::transfer_flush_region 307 * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag. 308 */ 309 PIPE_TRANSFER_FLUSH_EXPLICIT = (1 << 11), 310 311 /** 312 * Discards all memory backing the resource. 313 * 314 * It should not be used with PIPE_TRANSFER_READ. 315 * 316 * This is equivalent to: 317 * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT 318 * - BufferData(NULL) on a GL buffer 319 * - Direct3D's D3DLOCK_DISCARD flag. 320 * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag. 321 * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag 322 * - D3D10's D3D10_MAP_WRITE_DISCARD flag. 323 */ 324 PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE = (1 << 12), 325 326 /** 327 * Allows the resource to be used for rendering while mapped. 328 * 329 * PIPE_RESOURCE_FLAG_MAP_PERSISTENT must be set when creating 330 * the resource. 331 * 332 * If COHERENT is not set, memory_barrier(PIPE_BARRIER_MAPPED_BUFFER) 333 * must be called to ensure the device can see what the CPU has written. 334 */ 335 PIPE_TRANSFER_PERSISTENT = (1 << 13), 336 337 /** 338 * If PERSISTENT is set, this ensures any writes done by the device are 339 * immediately visible to the CPU and vice versa. 340 * 341 * PIPE_RESOURCE_FLAG_MAP_COHERENT must be set when creating 342 * the resource. 343 */ 344 PIPE_TRANSFER_COHERENT = (1 << 14) 345}; 346 347/** 348 * Flags for the flush function. 349 */ 350enum pipe_flush_flags 351{ 352 PIPE_FLUSH_END_OF_FRAME = (1 << 0), 353 PIPE_FLUSH_DEFERRED = (1 << 1), 354 PIPE_FLUSH_FENCE_FD = (1 << 2), 355 PIPE_FLUSH_ASYNC = (1 << 3), 356 PIPE_FLUSH_HINT_FINISH = (1 << 4), 357 PIPE_FLUSH_TOP_OF_PIPE = (1 << 5), 358 PIPE_FLUSH_BOTTOM_OF_PIPE = (1 << 6), 359}; 360 361/** 362 * Flags for pipe_context::dump_debug_state. 363 */ 364#define PIPE_DUMP_DEVICE_STATUS_REGISTERS (1 << 0) 365 366/** 367 * Create a compute-only context. Use in pipe_screen::context_create. 368 * This disables draw, blit, and clear*, render_condition, and other graphics 369 * functions. Interop with other graphics contexts is still allowed. 370 * This allows scheduling jobs on a compute-only hardware command queue that 371 * can run in parallel with graphics without stalling it. 372 */ 373#define PIPE_CONTEXT_COMPUTE_ONLY (1 << 0) 374 375/** 376 * Gather debug information and expect that pipe_context::dump_debug_state 377 * will be called. Use in pipe_screen::context_create. 378 */ 379#define PIPE_CONTEXT_DEBUG (1 << 1) 380 381/** 382 * Whether out-of-bounds shader loads must return zero and out-of-bounds 383 * shader stores must be dropped. 384 */ 385#define PIPE_CONTEXT_ROBUST_BUFFER_ACCESS (1 << 2) 386 387/** 388 * Prefer threaded pipe_context. It also implies that video codec functions 389 * will not be used. (they will be either no-ops or NULL when threading is 390 * enabled) 391 */ 392#define PIPE_CONTEXT_PREFER_THREADED (1 << 3) 393 394/** 395 * Create a high priority context. 396 */ 397#define PIPE_CONTEXT_HIGH_PRIORITY (1 << 4) 398 399/** 400 * Create a low priority context. 401 */ 402#define PIPE_CONTEXT_LOW_PRIORITY (1 << 5) 403 404/** 405 * Flags for pipe_context::memory_barrier. 406 */ 407#define PIPE_BARRIER_MAPPED_BUFFER (1 << 0) 408#define PIPE_BARRIER_SHADER_BUFFER (1 << 1) 409#define PIPE_BARRIER_QUERY_BUFFER (1 << 2) 410#define PIPE_BARRIER_VERTEX_BUFFER (1 << 3) 411#define PIPE_BARRIER_INDEX_BUFFER (1 << 4) 412#define PIPE_BARRIER_CONSTANT_BUFFER (1 << 5) 413#define PIPE_BARRIER_INDIRECT_BUFFER (1 << 6) 414#define PIPE_BARRIER_TEXTURE (1 << 7) 415#define PIPE_BARRIER_IMAGE (1 << 8) 416#define PIPE_BARRIER_FRAMEBUFFER (1 << 9) 417#define PIPE_BARRIER_STREAMOUT_BUFFER (1 << 10) 418#define PIPE_BARRIER_GLOBAL_BUFFER (1 << 11) 419#define PIPE_BARRIER_ALL ((1 << 12) - 1) 420 421/** 422 * Flags for pipe_context::texture_barrier. 423 */ 424#define PIPE_TEXTURE_BARRIER_SAMPLER (1 << 0) 425#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER (1 << 1) 426 427/** 428 * Resource binding flags -- state tracker must specify in advance all 429 * the ways a resource might be used. 430 */ 431#define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */ 432#define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */ 433#define PIPE_BIND_BLENDABLE (1 << 2) /* create_surface */ 434#define PIPE_BIND_SAMPLER_VIEW (1 << 3) /* create_sampler_view */ 435#define PIPE_BIND_VERTEX_BUFFER (1 << 4) /* set_vertex_buffers */ 436#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */ 437#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */ 438#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */ 439/* gap */ 440#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */ 441#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */ 442#define PIPE_BIND_CUSTOM (1 << 12) /* state-tracker/winsys usages */ 443#define PIPE_BIND_GLOBAL (1 << 13) /* set_global_binding */ 444#define PIPE_BIND_SHADER_BUFFER (1 << 14) /* set_shader_buffers */ 445#define PIPE_BIND_SHADER_IMAGE (1 << 15) /* set_shader_images */ 446#define PIPE_BIND_COMPUTE_RESOURCE (1 << 16) /* set_compute_resources */ 447#define PIPE_BIND_COMMAND_ARGS_BUFFER (1 << 17) /* pipe_draw_info.indirect */ 448#define PIPE_BIND_QUERY_BUFFER (1 << 18) /* get_query_result_resource */ 449 450/** 451 * The first two flags above were previously part of the amorphous 452 * TEXTURE_USAGE, most of which are now descriptions of the ways a 453 * particular texture can be bound to the gallium pipeline. The two flags 454 * below do not fit within that and probably need to be migrated to some 455 * other place. 456 * 457 * It seems like scanout is used by the Xorg state tracker to ask for 458 * a texture suitable for actual scanout (hence the name), which 459 * implies extra layout constraints on some hardware. It may also 460 * have some special meaning regarding mouse cursor images. 461 * 462 * The shared flag is quite underspecified, but certainly isn't a 463 * binding flag - it seems more like a message to the winsys to create 464 * a shareable allocation. 465 * 466 * The third flag has been added to be able to force textures to be created 467 * in linear mode (no tiling). 468 */ 469#define PIPE_BIND_SCANOUT (1 << 19) /* */ 470#define PIPE_BIND_SHARED (1 << 20) /* get_texture_handle ??? */ 471#define PIPE_BIND_LINEAR (1 << 21) 472 473 474/** 475 * Flags for the driver about resource behaviour: 476 */ 477#define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0) 478#define PIPE_RESOURCE_FLAG_MAP_COHERENT (1 << 1) 479#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2) 480#define PIPE_RESOURCE_FLAG_SPARSE (1 << 3) 481#define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 16) /* driver/winsys private */ 482#define PIPE_RESOURCE_FLAG_ST_PRIV (1 << 24) /* state-tracker/winsys private */ 483 484/** 485 * Hint about the expected lifecycle of a resource. 486 * Sorted according to GPU vs CPU access. 487 */ 488enum pipe_resource_usage { 489 PIPE_USAGE_DEFAULT, /* fast GPU access */ 490 PIPE_USAGE_IMMUTABLE, /* fast GPU access, immutable */ 491 PIPE_USAGE_DYNAMIC, /* uploaded data is used multiple times */ 492 PIPE_USAGE_STREAM, /* uploaded data is used once */ 493 PIPE_USAGE_STAGING, /* fast CPU access */ 494}; 495 496/** 497 * Shaders 498 */ 499enum pipe_shader_type { 500 PIPE_SHADER_VERTEX, 501 PIPE_SHADER_FRAGMENT, 502 PIPE_SHADER_GEOMETRY, 503 PIPE_SHADER_TESS_CTRL, 504 PIPE_SHADER_TESS_EVAL, 505 PIPE_SHADER_COMPUTE, 506 PIPE_SHADER_TYPES, 507}; 508 509/** 510 * Primitive types: 511 */ 512enum pipe_prim_type { 513 PIPE_PRIM_POINTS, 514 PIPE_PRIM_LINES, 515 PIPE_PRIM_LINE_LOOP, 516 PIPE_PRIM_LINE_STRIP, 517 PIPE_PRIM_TRIANGLES, 518 PIPE_PRIM_TRIANGLE_STRIP, 519 PIPE_PRIM_TRIANGLE_FAN, 520 PIPE_PRIM_QUADS, 521 PIPE_PRIM_QUAD_STRIP, 522 PIPE_PRIM_POLYGON, 523 PIPE_PRIM_LINES_ADJACENCY, 524 PIPE_PRIM_LINE_STRIP_ADJACENCY, 525 PIPE_PRIM_TRIANGLES_ADJACENCY, 526 PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY, 527 PIPE_PRIM_PATCHES, 528 PIPE_PRIM_MAX, 529}; 530 531/** 532 * Tessellator spacing types 533 */ 534enum pipe_tess_spacing { 535 PIPE_TESS_SPACING_FRACTIONAL_ODD, 536 PIPE_TESS_SPACING_FRACTIONAL_EVEN, 537 PIPE_TESS_SPACING_EQUAL, 538}; 539 540/** 541 * Query object types 542 */ 543enum pipe_query_type { 544 PIPE_QUERY_OCCLUSION_COUNTER, 545 PIPE_QUERY_OCCLUSION_PREDICATE, 546 PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE, 547 PIPE_QUERY_TIMESTAMP, 548 PIPE_QUERY_TIMESTAMP_DISJOINT, 549 PIPE_QUERY_TIME_ELAPSED, 550 PIPE_QUERY_PRIMITIVES_GENERATED, 551 PIPE_QUERY_PRIMITIVES_EMITTED, 552 PIPE_QUERY_SO_STATISTICS, 553 PIPE_QUERY_SO_OVERFLOW_PREDICATE, 554 PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE, 555 PIPE_QUERY_GPU_FINISHED, 556 PIPE_QUERY_PIPELINE_STATISTICS, 557 PIPE_QUERY_TYPES, 558 /* start of driver queries, see pipe_screen::get_driver_query_info */ 559 PIPE_QUERY_DRIVER_SPECIFIC = 256, 560}; 561 562/** 563 * Conditional rendering modes 564 */ 565enum pipe_render_cond_flag { 566 PIPE_RENDER_COND_WAIT, 567 PIPE_RENDER_COND_NO_WAIT, 568 PIPE_RENDER_COND_BY_REGION_WAIT, 569 PIPE_RENDER_COND_BY_REGION_NO_WAIT, 570}; 571 572/** 573 * Point sprite coord modes 574 */ 575enum pipe_sprite_coord_mode { 576 PIPE_SPRITE_COORD_UPPER_LEFT, 577 PIPE_SPRITE_COORD_LOWER_LEFT, 578}; 579 580/** 581 * Texture & format swizzles 582 */ 583enum pipe_swizzle { 584 PIPE_SWIZZLE_X, 585 PIPE_SWIZZLE_Y, 586 PIPE_SWIZZLE_Z, 587 PIPE_SWIZZLE_W, 588 PIPE_SWIZZLE_0, 589 PIPE_SWIZZLE_1, 590 PIPE_SWIZZLE_NONE, 591 PIPE_SWIZZLE_MAX, /**< Number of enums counter (must be last) */ 592}; 593 594#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull 595 596 597/** 598 * Device reset status. 599 */ 600enum pipe_reset_status 601{ 602 PIPE_NO_RESET, 603 PIPE_GUILTY_CONTEXT_RESET, 604 PIPE_INNOCENT_CONTEXT_RESET, 605 PIPE_UNKNOWN_CONTEXT_RESET, 606}; 607 608 609/** 610 * Conservative rasterization modes. 611 */ 612enum pipe_conservative_raster_mode 613{ 614 PIPE_CONSERVATIVE_RASTER_OFF, 615 PIPE_CONSERVATIVE_RASTER_POST_SNAP, 616 PIPE_CONSERVATIVE_RASTER_PRE_SNAP, 617}; 618 619 620/** 621 * resource_get_handle flags. 622 */ 623/* Requires pipe_context::flush_resource before external use. */ 624#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0) 625/* Expected external use of the resource: */ 626#define PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE (1 << 1) 627#define PIPE_HANDLE_USAGE_SHADER_WRITE (1 << 2) 628 629/** 630 * pipe_image_view access flags. 631 */ 632#define PIPE_IMAGE_ACCESS_READ (1 << 0) 633#define PIPE_IMAGE_ACCESS_WRITE (1 << 1) 634#define PIPE_IMAGE_ACCESS_READ_WRITE (PIPE_IMAGE_ACCESS_READ | \ 635 PIPE_IMAGE_ACCESS_WRITE) 636 637/** 638 * Implementation capabilities/limits which are queried through 639 * pipe_screen::get_param() 640 */ 641enum pipe_cap 642{ 643 PIPE_CAP_NPOT_TEXTURES, 644 PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS, 645 PIPE_CAP_ANISOTROPIC_FILTER, 646 PIPE_CAP_POINT_SPRITE, 647 PIPE_CAP_MAX_RENDER_TARGETS, 648 PIPE_CAP_OCCLUSION_QUERY, 649 PIPE_CAP_QUERY_TIME_ELAPSED, 650 PIPE_CAP_TEXTURE_SWIZZLE, 651 PIPE_CAP_MAX_TEXTURE_2D_LEVELS, 652 PIPE_CAP_MAX_TEXTURE_3D_LEVELS, 653 PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS, 654 PIPE_CAP_TEXTURE_MIRROR_CLAMP, 655 PIPE_CAP_BLEND_EQUATION_SEPARATE, 656 PIPE_CAP_SM3, 657 PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS, 658 PIPE_CAP_PRIMITIVE_RESTART, 659 /** blend enables and write masks per rendertarget */ 660 PIPE_CAP_INDEP_BLEND_ENABLE, 661 /** different blend funcs per rendertarget */ 662 PIPE_CAP_INDEP_BLEND_FUNC, 663 PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS, 664 PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT, 665 PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT, 666 PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER, 667 PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER, 668 PIPE_CAP_DEPTH_CLIP_DISABLE, 669 PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE, 670 PIPE_CAP_SHADER_STENCIL_EXPORT, 671 PIPE_CAP_TGSI_INSTANCEID, 672 PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, 673 PIPE_CAP_FRAGMENT_COLOR_CLAMPED, 674 PIPE_CAP_MIXED_COLORBUFFER_FORMATS, 675 PIPE_CAP_SEAMLESS_CUBE_MAP, 676 PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE, 677 PIPE_CAP_MIN_TEXEL_OFFSET, 678 PIPE_CAP_MAX_TEXEL_OFFSET, 679 PIPE_CAP_CONDITIONAL_RENDER, 680 PIPE_CAP_TEXTURE_BARRIER, 681 PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS, 682 PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS, 683 PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME, 684 PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS, 685 PIPE_CAP_VERTEX_COLOR_UNCLAMPED, 686 PIPE_CAP_VERTEX_COLOR_CLAMPED, 687 PIPE_CAP_GLSL_FEATURE_LEVEL, 688 PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY, 689 PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, 690 PIPE_CAP_USER_VERTEX_BUFFERS, 691 PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, 692 PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY, 693 PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, 694 PIPE_CAP_COMPUTE, 695 PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT, 696 PIPE_CAP_START_INSTANCE, 697 PIPE_CAP_QUERY_TIMESTAMP, 698 PIPE_CAP_TEXTURE_MULTISAMPLE, 699 PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT, 700 PIPE_CAP_CUBE_MAP_ARRAY, 701 PIPE_CAP_TEXTURE_BUFFER_OBJECTS, 702 PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 703 PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY, 704 PIPE_CAP_TGSI_TEXCOORD, 705 PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER, 706 PIPE_CAP_QUERY_PIPELINE_STATISTICS, 707 PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK, 708 PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE, 709 PIPE_CAP_MAX_VIEWPORTS, 710 PIPE_CAP_ENDIANNESS, 711 PIPE_CAP_MIXED_FRAMEBUFFER_SIZES, 712 PIPE_CAP_TGSI_VS_LAYER_VIEWPORT, 713 PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES, 714 PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 715 PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS, 716 PIPE_CAP_TEXTURE_GATHER_SM5, 717 PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT, 718 PIPE_CAP_FAKE_SW_MSAA, 719 PIPE_CAP_TEXTURE_QUERY_LOD, 720 PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET, 721 PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET, 722 PIPE_CAP_SAMPLE_SHADING, 723 PIPE_CAP_TEXTURE_GATHER_OFFSETS, 724 PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION, 725 PIPE_CAP_MAX_VERTEX_STREAMS, 726 PIPE_CAP_DRAW_INDIRECT, 727 PIPE_CAP_TGSI_FS_FINE_DERIVATIVE, 728 PIPE_CAP_VENDOR_ID, 729 PIPE_CAP_DEVICE_ID, 730 PIPE_CAP_ACCELERATED, 731 PIPE_CAP_VIDEO_MEMORY, 732 PIPE_CAP_UMA, 733 PIPE_CAP_CONDITIONAL_RENDER_INVERTED, 734 PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE, 735 PIPE_CAP_SAMPLER_VIEW_TARGET, 736 PIPE_CAP_CLIP_HALFZ, 737 PIPE_CAP_VERTEXID_NOBASE, 738 PIPE_CAP_POLYGON_OFFSET_CLAMP, 739 PIPE_CAP_MULTISAMPLE_Z_RESOLVE, 740 PIPE_CAP_RESOURCE_FROM_USER_MEMORY, 741 PIPE_CAP_DEVICE_RESET_STATUS_QUERY, 742 PIPE_CAP_MAX_SHADER_PATCH_VARYINGS, 743 PIPE_CAP_TEXTURE_FLOAT_LINEAR, 744 PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR, 745 PIPE_CAP_DEPTH_BOUNDS_TEST, 746 PIPE_CAP_TGSI_TXQS, 747 PIPE_CAP_FORCE_PERSAMPLE_INTERP, 748 PIPE_CAP_SHAREABLE_SHADERS, 749 PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS, 750 PIPE_CAP_CLEAR_TEXTURE, 751 PIPE_CAP_DRAW_PARAMETERS, 752 PIPE_CAP_TGSI_PACK_HALF_FLOAT, 753 PIPE_CAP_MULTI_DRAW_INDIRECT, 754 PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS, 755 PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL, 756 PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL, 757 PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT, 758 PIPE_CAP_INVALIDATE_BUFFER, 759 PIPE_CAP_GENERATE_MIPMAP, 760 PIPE_CAP_STRING_MARKER, 761 PIPE_CAP_SURFACE_REINTERPRET_BLOCKS, 762 PIPE_CAP_QUERY_BUFFER_OBJECT, 763 PIPE_CAP_QUERY_MEMORY_INFO, 764 PIPE_CAP_PCI_GROUP, 765 PIPE_CAP_PCI_BUS, 766 PIPE_CAP_PCI_DEVICE, 767 PIPE_CAP_PCI_FUNCTION, 768 PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT, 769 PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR, 770 PIPE_CAP_CULL_DISTANCE, 771 PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES, 772 PIPE_CAP_TGSI_VOTE, 773 PIPE_CAP_MAX_WINDOW_RECTANGLES, 774 PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED, 775 PIPE_CAP_VIEWPORT_SUBPIXEL_BITS, 776 PIPE_CAP_RASTERIZER_SUBPIXEL_BITS, 777 PIPE_CAP_MIXED_COLOR_DEPTH_BITS, 778 PIPE_CAP_TGSI_ARRAY_COMPONENTS, 779 PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS, 780 PIPE_CAP_TGSI_CAN_READ_OUTPUTS, 781 PIPE_CAP_NATIVE_FENCE_FD, 782 PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY, 783 PIPE_CAP_TGSI_FS_FBFETCH, 784 PIPE_CAP_TGSI_MUL_ZERO_WINS, 785 PIPE_CAP_DOUBLES, 786 PIPE_CAP_INT64, 787 PIPE_CAP_INT64_DIVMOD, 788 PIPE_CAP_TGSI_TEX_TXF_LZ, 789 PIPE_CAP_TGSI_CLOCK, 790 PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE, 791 PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE, 792 PIPE_CAP_TGSI_BALLOT, 793 PIPE_CAP_TGSI_TES_LAYER_VIEWPORT, 794 PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX, 795 PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION, 796 PIPE_CAP_POST_DEPTH_COVERAGE, 797 PIPE_CAP_BINDLESS_TEXTURE, 798 PIPE_CAP_NIR_SAMPLERS_AS_DEREF, 799 PIPE_CAP_QUERY_SO_OVERFLOW, 800 PIPE_CAP_MEMOBJ, 801 PIPE_CAP_LOAD_CONSTBUF, 802 PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS, 803 PIPE_CAP_TILE_RASTER_ORDER, 804 PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, 805 PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS, 806 PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET, 807 PIPE_CAP_CONTEXT_PRIORITY_MASK, 808 PIPE_CAP_FENCE_SIGNAL, 809 PIPE_CAP_CONSTBUF0_FLAGS, 810 PIPE_CAP_PACKED_UNIFORMS, 811 PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES, 812 PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES, 813 PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES, 814 PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES, 815 PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS, 816 PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE, 817 PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS, 818 PIPE_CAP_MAX_GS_INVOCATIONS, 819 PIPE_CAP_MAX_SHADER_BUFFER_SIZE, 820 PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE, 821 PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS, 822 PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS, 823 PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS, 824 PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET, 825 PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET, 826}; 827 828/** 829 * Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should 830 * return a bitmask of the supported priorities. If the driver does not 831 * support prioritized contexts, it can return 0. 832 * 833 * Note that these match __DRI2_RENDER_HAS_CONTEXT_PRIORITY_* 834 */ 835#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0) 836#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1) 837#define PIPE_CONTEXT_PRIORITY_HIGH (1 << 2) 838 839#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0) 840#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1) 841 842enum pipe_endian 843{ 844 PIPE_ENDIAN_LITTLE = 0, 845 PIPE_ENDIAN_BIG = 1, 846#if defined(PIPE_ARCH_LITTLE_ENDIAN) 847 PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE 848#elif defined(PIPE_ARCH_BIG_ENDIAN) 849 PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG 850#endif 851}; 852 853/** 854 * Implementation limits which are queried through 855 * pipe_screen::get_paramf() 856 */ 857enum pipe_capf 858{ 859 PIPE_CAPF_MAX_LINE_WIDTH, 860 PIPE_CAPF_MAX_LINE_WIDTH_AA, 861 PIPE_CAPF_MAX_POINT_WIDTH, 862 PIPE_CAPF_MAX_POINT_WIDTH_AA, 863 PIPE_CAPF_MAX_TEXTURE_ANISOTROPY, 864 PIPE_CAPF_MAX_TEXTURE_LOD_BIAS, 865 PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE, 866 PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE, 867 PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY, 868}; 869 870/** Shader caps not specific to any single stage */ 871enum pipe_shader_cap 872{ 873 PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */ 874 PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS, 875 PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS, 876 PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS, 877 PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH, 878 PIPE_SHADER_CAP_MAX_INPUTS, 879 PIPE_SHADER_CAP_MAX_OUTPUTS, 880 PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE, 881 PIPE_SHADER_CAP_MAX_CONST_BUFFERS, 882 PIPE_SHADER_CAP_MAX_TEMPS, 883 /* boolean caps */ 884 PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED, 885 PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR, 886 PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR, 887 PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR, 888 PIPE_SHADER_CAP_INDIRECT_CONST_ADDR, 889 PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */ 890 PIPE_SHADER_CAP_INTEGERS, 891 PIPE_SHADER_CAP_INT64_ATOMICS, 892 PIPE_SHADER_CAP_FP16, 893 PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS, 894 PIPE_SHADER_CAP_PREFERRED_IR, 895 PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED, 896 PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS, 897 PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED, /* all rounding modes */ 898 PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED, 899 PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED, 900 PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE, 901 PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT, 902 PIPE_SHADER_CAP_MAX_SHADER_BUFFERS, 903 PIPE_SHADER_CAP_SUPPORTED_IRS, 904 PIPE_SHADER_CAP_MAX_SHADER_IMAGES, 905 PIPE_SHADER_CAP_LOWER_IF_THRESHOLD, 906 PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS, 907 PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED, 908 PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS, 909 PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS, 910 PIPE_SHADER_CAP_SCALAR_ISA, 911}; 912 913/** 914 * Shader intermediate representation. 915 * 916 * Note that if the driver requests something other than TGSI, it must 917 * always be prepared to receive TGSI in addition to its preferred IR. 918 * If the driver requests TGSI as its preferred IR, it will *always* 919 * get TGSI. 920 * 921 * Note that PIPE_SHADER_IR_TGSI should be zero for backwards compat with 922 * state trackers that only understand TGSI. 923 */ 924enum pipe_shader_ir 925{ 926 PIPE_SHADER_IR_TGSI = 0, 927 PIPE_SHADER_IR_NATIVE, 928 PIPE_SHADER_IR_NIR, 929}; 930 931/** 932 * Compute-specific implementation capability. They can be queried 933 * using pipe_screen::get_compute_param. 934 */ 935enum pipe_compute_cap 936{ 937 PIPE_COMPUTE_CAP_ADDRESS_BITS, 938 PIPE_COMPUTE_CAP_IR_TARGET, 939 PIPE_COMPUTE_CAP_GRID_DIMENSION, 940 PIPE_COMPUTE_CAP_MAX_GRID_SIZE, 941 PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, 942 PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, 943 PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE, 944 PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, 945 PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE, 946 PIPE_COMPUTE_CAP_MAX_INPUT_SIZE, 947 PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE, 948 PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY, 949 PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS, 950 PIPE_COMPUTE_CAP_IMAGES_SUPPORTED, 951 PIPE_COMPUTE_CAP_SUBGROUP_SIZE, 952 PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK, 953}; 954 955/** 956 * Types of parameters for pipe_context::set_context_param. 957 */ 958enum pipe_context_param 959{ 960 /* A hint for the driver that it should pin its execution threads to 961 * a group of cores sharing a specific L3 cache if the CPU has multiple 962 * L3 caches. This is needed for good multithreading performance on 963 * AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have 964 * any internal threads or don't run on affected CPUs can ignore this. 965 */ 966 PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE, 967}; 968 969/** 970 * Composite query types 971 */ 972 973/** 974 * Query result for PIPE_QUERY_SO_STATISTICS. 975 */ 976struct pipe_query_data_so_statistics 977{ 978 uint64_t num_primitives_written; 979 uint64_t primitives_storage_needed; 980}; 981 982/** 983 * Query result for PIPE_QUERY_TIMESTAMP_DISJOINT. 984 */ 985struct pipe_query_data_timestamp_disjoint 986{ 987 uint64_t frequency; 988 boolean disjoint; 989}; 990 991/** 992 * Query result for PIPE_QUERY_PIPELINE_STATISTICS. 993 */ 994struct pipe_query_data_pipeline_statistics 995{ 996 uint64_t ia_vertices; /**< Num vertices read by the vertex fetcher. */ 997 uint64_t ia_primitives; /**< Num primitives read by the vertex fetcher. */ 998 uint64_t vs_invocations; /**< Num vertex shader invocations. */ 999 uint64_t gs_invocations; /**< Num geometry shader invocations. */ 1000 uint64_t gs_primitives; /**< Num primitives output by a geometry shader. */ 1001 uint64_t c_invocations; /**< Num primitives sent to the rasterizer. */ 1002 uint64_t c_primitives; /**< Num primitives that were rendered. */ 1003 uint64_t ps_invocations; /**< Num pixel shader invocations. */ 1004 uint64_t hs_invocations; /**< Num hull shader invocations. */ 1005 uint64_t ds_invocations; /**< Num domain shader invocations. */ 1006 uint64_t cs_invocations; /**< Num compute shader invocations. */ 1007}; 1008 1009/** 1010 * For batch queries. 1011 */ 1012union pipe_numeric_type_union 1013{ 1014 uint64_t u64; 1015 uint32_t u32; 1016 float f; 1017}; 1018 1019/** 1020 * Query result (returned by pipe_context::get_query_result). 1021 */ 1022union pipe_query_result 1023{ 1024 /* PIPE_QUERY_OCCLUSION_PREDICATE */ 1025 /* PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE */ 1026 /* PIPE_QUERY_SO_OVERFLOW_PREDICATE */ 1027 /* PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE */ 1028 /* PIPE_QUERY_GPU_FINISHED */ 1029 boolean b; 1030 1031 /* PIPE_QUERY_OCCLUSION_COUNTER */ 1032 /* PIPE_QUERY_TIMESTAMP */ 1033 /* PIPE_QUERY_TIME_ELAPSED */ 1034 /* PIPE_QUERY_PRIMITIVES_GENERATED */ 1035 /* PIPE_QUERY_PRIMITIVES_EMITTED */ 1036 /* PIPE_DRIVER_QUERY_TYPE_UINT64 */ 1037 /* PIPE_DRIVER_QUERY_TYPE_BYTES */ 1038 /* PIPE_DRIVER_QUERY_TYPE_MICROSECONDS */ 1039 /* PIPE_DRIVER_QUERY_TYPE_HZ */ 1040 uint64_t u64; 1041 1042 /* PIPE_DRIVER_QUERY_TYPE_UINT */ 1043 uint32_t u32; 1044 1045 /* PIPE_DRIVER_QUERY_TYPE_FLOAT */ 1046 /* PIPE_DRIVER_QUERY_TYPE_PERCENTAGE */ 1047 float f; 1048 1049 /* PIPE_QUERY_SO_STATISTICS */ 1050 struct pipe_query_data_so_statistics so_statistics; 1051 1052 /* PIPE_QUERY_TIMESTAMP_DISJOINT */ 1053 struct pipe_query_data_timestamp_disjoint timestamp_disjoint; 1054 1055 /* PIPE_QUERY_PIPELINE_STATISTICS */ 1056 struct pipe_query_data_pipeline_statistics pipeline_statistics; 1057 1058 /* batch queries (variable length) */ 1059 union pipe_numeric_type_union batch[1]; 1060}; 1061 1062enum pipe_query_value_type 1063{ 1064 PIPE_QUERY_TYPE_I32, 1065 PIPE_QUERY_TYPE_U32, 1066 PIPE_QUERY_TYPE_I64, 1067 PIPE_QUERY_TYPE_U64, 1068}; 1069 1070union pipe_color_union 1071{ 1072 float f[4]; 1073 int i[4]; 1074 unsigned int ui[4]; 1075}; 1076 1077enum pipe_driver_query_type 1078{ 1079 PIPE_DRIVER_QUERY_TYPE_UINT64, 1080 PIPE_DRIVER_QUERY_TYPE_UINT, 1081 PIPE_DRIVER_QUERY_TYPE_FLOAT, 1082 PIPE_DRIVER_QUERY_TYPE_PERCENTAGE, 1083 PIPE_DRIVER_QUERY_TYPE_BYTES, 1084 PIPE_DRIVER_QUERY_TYPE_MICROSECONDS, 1085 PIPE_DRIVER_QUERY_TYPE_HZ, 1086 PIPE_DRIVER_QUERY_TYPE_DBM, 1087 PIPE_DRIVER_QUERY_TYPE_TEMPERATURE, 1088 PIPE_DRIVER_QUERY_TYPE_VOLTS, 1089 PIPE_DRIVER_QUERY_TYPE_AMPS, 1090 PIPE_DRIVER_QUERY_TYPE_WATTS, 1091}; 1092 1093/* Whether an average value per frame or a cumulative value should be 1094 * displayed. 1095 */ 1096enum pipe_driver_query_result_type 1097{ 1098 PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE, 1099 PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE, 1100}; 1101 1102/** 1103 * Some hardware requires some hardware-specific queries to be submitted 1104 * as batched queries. The corresponding query objects are created using 1105 * create_batch_query, and at most one such query may be active at 1106 * any time. 1107 */ 1108#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0) 1109 1110/* Do not list this query in the HUD. */ 1111#define PIPE_DRIVER_QUERY_FLAG_DONT_LIST (1 << 1) 1112 1113struct pipe_driver_query_info 1114{ 1115 const char *name; 1116 unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */ 1117 union pipe_numeric_type_union max_value; /* max value that can be returned */ 1118 enum pipe_driver_query_type type; 1119 enum pipe_driver_query_result_type result_type; 1120 unsigned group_id; 1121 unsigned flags; 1122}; 1123 1124struct pipe_driver_query_group_info 1125{ 1126 const char *name; 1127 unsigned max_active_queries; 1128 unsigned num_queries; 1129}; 1130 1131enum pipe_fd_type 1132{ 1133 PIPE_FD_TYPE_NATIVE_SYNC, 1134 PIPE_FD_TYPE_SYNCOBJ, 1135}; 1136 1137enum pipe_debug_type 1138{ 1139 PIPE_DEBUG_TYPE_OUT_OF_MEMORY = 1, 1140 PIPE_DEBUG_TYPE_ERROR, 1141 PIPE_DEBUG_TYPE_SHADER_INFO, 1142 PIPE_DEBUG_TYPE_PERF_INFO, 1143 PIPE_DEBUG_TYPE_INFO, 1144 PIPE_DEBUG_TYPE_FALLBACK, 1145 PIPE_DEBUG_TYPE_CONFORMANCE, 1146}; 1147 1148#define PIPE_UUID_SIZE 16 1149 1150#ifdef __cplusplus 1151} 1152#endif 1153 1154#endif 1155