1848b8605Smrg/************************************************************************** 2848b8605Smrg * 3848b8605Smrg * Copyright 2007 VMware, Inc. 4848b8605Smrg * All Rights Reserved. 5848b8605Smrg * 6848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 7848b8605Smrg * copy of this software and associated documentation files (the 8848b8605Smrg * "Software"), to deal in the Software without restriction, including 9848b8605Smrg * without limitation the rights to use, copy, modify, merge, publish, 10848b8605Smrg * distribute, sub license, and/or sell copies of the Software, and to 11848b8605Smrg * permit persons to whom the Software is furnished to do so, subject to 12848b8605Smrg * the following conditions: 13848b8605Smrg * 14848b8605Smrg * The above copyright notice and this permission notice (including the 15848b8605Smrg * next paragraph) shall be included in all copies or substantial portions 16848b8605Smrg * of the Software. 17848b8605Smrg * 18848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20848b8605Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21848b8605Smrg * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22848b8605Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23848b8605Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24848b8605Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25848b8605Smrg * 26848b8605Smrg **************************************************************************/ 27848b8605Smrg 28848b8605Smrg#ifndef PIPE_DEFINES_H 29848b8605Smrg#define PIPE_DEFINES_H 30848b8605Smrg 31848b8605Smrg#include "p_compiler.h" 32848b8605Smrg 33848b8605Smrg#ifdef __cplusplus 34848b8605Smrgextern "C" { 35848b8605Smrg#endif 36848b8605Smrg 37848b8605Smrg/** 38848b8605Smrg * Gallium error codes. 39848b8605Smrg * 40848b8605Smrg * - A zero value always means success. 41848b8605Smrg * - A negative value always means failure. 42848b8605Smrg * - The meaning of a positive value is function dependent. 43848b8605Smrg */ 44b8e80941Smrgenum pipe_error 45b8e80941Smrg{ 46848b8605Smrg PIPE_OK = 0, 47848b8605Smrg PIPE_ERROR = -1, /**< Generic error */ 48848b8605Smrg PIPE_ERROR_BAD_INPUT = -2, 49848b8605Smrg PIPE_ERROR_OUT_OF_MEMORY = -3, 50848b8605Smrg PIPE_ERROR_RETRY = -4 51848b8605Smrg /* TODO */ 52848b8605Smrg}; 53848b8605Smrg 54b8e80941Smrgenum pipe_blendfactor { 55b8e80941Smrg PIPE_BLENDFACTOR_ONE = 1, 56b8e80941Smrg PIPE_BLENDFACTOR_SRC_COLOR, 57b8e80941Smrg PIPE_BLENDFACTOR_SRC_ALPHA, 58b8e80941Smrg PIPE_BLENDFACTOR_DST_ALPHA, 59b8e80941Smrg PIPE_BLENDFACTOR_DST_COLOR, 60b8e80941Smrg PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE, 61b8e80941Smrg PIPE_BLENDFACTOR_CONST_COLOR, 62b8e80941Smrg PIPE_BLENDFACTOR_CONST_ALPHA, 63b8e80941Smrg PIPE_BLENDFACTOR_SRC1_COLOR, 64b8e80941Smrg PIPE_BLENDFACTOR_SRC1_ALPHA, 65b8e80941Smrg 66b8e80941Smrg PIPE_BLENDFACTOR_ZERO = 0x11, 67b8e80941Smrg PIPE_BLENDFACTOR_INV_SRC_COLOR, 68b8e80941Smrg PIPE_BLENDFACTOR_INV_SRC_ALPHA, 69b8e80941Smrg PIPE_BLENDFACTOR_INV_DST_ALPHA, 70b8e80941Smrg PIPE_BLENDFACTOR_INV_DST_COLOR, 71b8e80941Smrg 72b8e80941Smrg PIPE_BLENDFACTOR_INV_CONST_COLOR = 0x17, 73b8e80941Smrg PIPE_BLENDFACTOR_INV_CONST_ALPHA, 74b8e80941Smrg PIPE_BLENDFACTOR_INV_SRC1_COLOR, 75b8e80941Smrg PIPE_BLENDFACTOR_INV_SRC1_ALPHA, 76b8e80941Smrg}; 77848b8605Smrg 78b8e80941Smrgenum pipe_blend_func { 79b8e80941Smrg PIPE_BLEND_ADD, 80b8e80941Smrg PIPE_BLEND_SUBTRACT, 81b8e80941Smrg PIPE_BLEND_REVERSE_SUBTRACT, 82b8e80941Smrg PIPE_BLEND_MIN, 83b8e80941Smrg PIPE_BLEND_MAX, 84b8e80941Smrg}; 85b8e80941Smrg 86b8e80941Smrgenum pipe_logicop { 87b8e80941Smrg PIPE_LOGICOP_CLEAR, 88b8e80941Smrg PIPE_LOGICOP_NOR, 89b8e80941Smrg PIPE_LOGICOP_AND_INVERTED, 90b8e80941Smrg PIPE_LOGICOP_COPY_INVERTED, 91b8e80941Smrg PIPE_LOGICOP_AND_REVERSE, 92b8e80941Smrg PIPE_LOGICOP_INVERT, 93b8e80941Smrg PIPE_LOGICOP_XOR, 94b8e80941Smrg PIPE_LOGICOP_NAND, 95b8e80941Smrg PIPE_LOGICOP_AND, 96b8e80941Smrg PIPE_LOGICOP_EQUIV, 97b8e80941Smrg PIPE_LOGICOP_NOOP, 98b8e80941Smrg PIPE_LOGICOP_OR_INVERTED, 99b8e80941Smrg PIPE_LOGICOP_COPY, 100b8e80941Smrg PIPE_LOGICOP_OR_REVERSE, 101b8e80941Smrg PIPE_LOGICOP_OR, 102b8e80941Smrg PIPE_LOGICOP_SET, 103b8e80941Smrg}; 104848b8605Smrg 105848b8605Smrg#define PIPE_MASK_R 0x1 106848b8605Smrg#define PIPE_MASK_G 0x2 107848b8605Smrg#define PIPE_MASK_B 0x4 108848b8605Smrg#define PIPE_MASK_A 0x8 109848b8605Smrg#define PIPE_MASK_RGBA 0xf 110848b8605Smrg#define PIPE_MASK_Z 0x10 111848b8605Smrg#define PIPE_MASK_S 0x20 112848b8605Smrg#define PIPE_MASK_ZS 0x30 113848b8605Smrg#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS) 114848b8605Smrg 115848b8605Smrg 116848b8605Smrg/** 117848b8605Smrg * Inequality functions. Used for depth test, stencil compare, alpha 118848b8605Smrg * test, shadow compare, etc. 119848b8605Smrg */ 120b8e80941Smrgenum pipe_compare_func { 121b8e80941Smrg PIPE_FUNC_NEVER, 122b8e80941Smrg PIPE_FUNC_LESS, 123b8e80941Smrg PIPE_FUNC_EQUAL, 124b8e80941Smrg PIPE_FUNC_LEQUAL, 125b8e80941Smrg PIPE_FUNC_GREATER, 126b8e80941Smrg PIPE_FUNC_NOTEQUAL, 127b8e80941Smrg PIPE_FUNC_GEQUAL, 128b8e80941Smrg PIPE_FUNC_ALWAYS, 129b8e80941Smrg}; 130848b8605Smrg 131848b8605Smrg/** Polygon fill mode */ 132b8e80941Smrgenum { 133b8e80941Smrg PIPE_POLYGON_MODE_FILL, 134b8e80941Smrg PIPE_POLYGON_MODE_LINE, 135b8e80941Smrg PIPE_POLYGON_MODE_POINT, 136b8e80941Smrg PIPE_POLYGON_MODE_FILL_RECTANGLE, 137b8e80941Smrg}; 138848b8605Smrg 139848b8605Smrg/** Polygon face specification, eg for culling */ 140848b8605Smrg#define PIPE_FACE_NONE 0 141848b8605Smrg#define PIPE_FACE_FRONT 1 142848b8605Smrg#define PIPE_FACE_BACK 2 143848b8605Smrg#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK) 144848b8605Smrg 145848b8605Smrg/** Stencil ops */ 146b8e80941Smrgenum pipe_stencil_op { 147b8e80941Smrg PIPE_STENCIL_OP_KEEP, 148b8e80941Smrg PIPE_STENCIL_OP_ZERO, 149b8e80941Smrg PIPE_STENCIL_OP_REPLACE, 150b8e80941Smrg PIPE_STENCIL_OP_INCR, 151b8e80941Smrg PIPE_STENCIL_OP_DECR, 152b8e80941Smrg PIPE_STENCIL_OP_INCR_WRAP, 153b8e80941Smrg PIPE_STENCIL_OP_DECR_WRAP, 154b8e80941Smrg PIPE_STENCIL_OP_INVERT, 155b8e80941Smrg}; 156848b8605Smrg 157848b8605Smrg/** Texture types. 158b8e80941Smrg * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D 159b8e80941Smrg */ 160b8e80941Smrgenum pipe_texture_target 161b8e80941Smrg{ 162b8e80941Smrg PIPE_BUFFER, 163b8e80941Smrg PIPE_TEXTURE_1D, 164b8e80941Smrg PIPE_TEXTURE_2D, 165b8e80941Smrg PIPE_TEXTURE_3D, 166b8e80941Smrg PIPE_TEXTURE_CUBE, 167b8e80941Smrg PIPE_TEXTURE_RECT, 168b8e80941Smrg PIPE_TEXTURE_1D_ARRAY, 169b8e80941Smrg PIPE_TEXTURE_2D_ARRAY, 170b8e80941Smrg PIPE_TEXTURE_CUBE_ARRAY, 171b8e80941Smrg PIPE_MAX_TEXTURE_TYPES, 172b8e80941Smrg}; 173b8e80941Smrg 174b8e80941Smrgenum pipe_tex_face { 175b8e80941Smrg PIPE_TEX_FACE_POS_X, 176b8e80941Smrg PIPE_TEX_FACE_NEG_X, 177b8e80941Smrg PIPE_TEX_FACE_POS_Y, 178b8e80941Smrg PIPE_TEX_FACE_NEG_Y, 179b8e80941Smrg PIPE_TEX_FACE_POS_Z, 180b8e80941Smrg PIPE_TEX_FACE_NEG_Z, 181b8e80941Smrg PIPE_TEX_FACE_MAX, 182b8e80941Smrg}; 183b8e80941Smrg 184b8e80941Smrgenum pipe_tex_wrap { 185b8e80941Smrg PIPE_TEX_WRAP_REPEAT, 186b8e80941Smrg PIPE_TEX_WRAP_CLAMP, 187b8e80941Smrg PIPE_TEX_WRAP_CLAMP_TO_EDGE, 188b8e80941Smrg PIPE_TEX_WRAP_CLAMP_TO_BORDER, 189b8e80941Smrg PIPE_TEX_WRAP_MIRROR_REPEAT, 190b8e80941Smrg PIPE_TEX_WRAP_MIRROR_CLAMP, 191b8e80941Smrg PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE, 192b8e80941Smrg PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER, 193b8e80941Smrg}; 194b8e80941Smrg 195b8e80941Smrg/** Between mipmaps, ie mipfilter */ 196b8e80941Smrgenum pipe_tex_mipfilter { 197b8e80941Smrg PIPE_TEX_MIPFILTER_NEAREST, 198b8e80941Smrg PIPE_TEX_MIPFILTER_LINEAR, 199b8e80941Smrg PIPE_TEX_MIPFILTER_NONE, 200b8e80941Smrg}; 201b8e80941Smrg 202b8e80941Smrg/** Within a mipmap, ie min/mag filter */ 203b8e80941Smrgenum pipe_tex_filter { 204b8e80941Smrg PIPE_TEX_FILTER_NEAREST, 205b8e80941Smrg PIPE_TEX_FILTER_LINEAR, 206b8e80941Smrg}; 207b8e80941Smrg 208b8e80941Smrgenum pipe_tex_compare { 209b8e80941Smrg PIPE_TEX_COMPARE_NONE, 210b8e80941Smrg PIPE_TEX_COMPARE_R_TO_TEXTURE, 211b8e80941Smrg}; 212848b8605Smrg 213848b8605Smrg/** 214848b8605Smrg * Clear buffer bits 215848b8605Smrg */ 216848b8605Smrg#define PIPE_CLEAR_DEPTH (1 << 0) 217848b8605Smrg#define PIPE_CLEAR_STENCIL (1 << 1) 218848b8605Smrg#define PIPE_CLEAR_COLOR0 (1 << 2) 219848b8605Smrg#define PIPE_CLEAR_COLOR1 (1 << 3) 220848b8605Smrg#define PIPE_CLEAR_COLOR2 (1 << 4) 221848b8605Smrg#define PIPE_CLEAR_COLOR3 (1 << 5) 222848b8605Smrg#define PIPE_CLEAR_COLOR4 (1 << 6) 223848b8605Smrg#define PIPE_CLEAR_COLOR5 (1 << 7) 224848b8605Smrg#define PIPE_CLEAR_COLOR6 (1 << 8) 225848b8605Smrg#define PIPE_CLEAR_COLOR7 (1 << 9) 226848b8605Smrg/** Combined flags */ 227848b8605Smrg/** All color buffers currently bound */ 228848b8605Smrg#define PIPE_CLEAR_COLOR (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \ 229848b8605Smrg PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \ 230848b8605Smrg PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \ 231848b8605Smrg PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7) 232848b8605Smrg#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) 233848b8605Smrg 234848b8605Smrg/** 235848b8605Smrg * Transfer object usage flags 236848b8605Smrg */ 237b8e80941Smrgenum pipe_transfer_usage 238b8e80941Smrg{ 239848b8605Smrg /** 240848b8605Smrg * Resource contents read back (or accessed directly) at transfer 241848b8605Smrg * create time. 242848b8605Smrg */ 243848b8605Smrg PIPE_TRANSFER_READ = (1 << 0), 244848b8605Smrg 245848b8605Smrg /** 246848b8605Smrg * Resource contents will be written back at transfer_unmap 247848b8605Smrg * time (or modified as a result of being accessed directly). 248848b8605Smrg */ 249848b8605Smrg PIPE_TRANSFER_WRITE = (1 << 1), 250848b8605Smrg 251848b8605Smrg /** 252848b8605Smrg * Read/modify/write 253848b8605Smrg */ 254848b8605Smrg PIPE_TRANSFER_READ_WRITE = PIPE_TRANSFER_READ | PIPE_TRANSFER_WRITE, 255848b8605Smrg 256848b8605Smrg /** 257848b8605Smrg * The transfer should map the texture storage directly. The driver may 258848b8605Smrg * return NULL if that isn't possible, and the state tracker needs to cope 259848b8605Smrg * with that and use an alternative path without this flag. 260848b8605Smrg * 261848b8605Smrg * E.g. the state tracker could have a simpler path which maps textures and 262848b8605Smrg * does read/modify/write cycles on them directly, and a more complicated 263848b8605Smrg * path which uses minimal read and write transfers. 264848b8605Smrg */ 265848b8605Smrg PIPE_TRANSFER_MAP_DIRECTLY = (1 << 2), 266848b8605Smrg 267848b8605Smrg /** 268848b8605Smrg * Discards the memory within the mapped region. 269848b8605Smrg * 270848b8605Smrg * It should not be used with PIPE_TRANSFER_READ. 271848b8605Smrg * 272848b8605Smrg * See also: 273848b8605Smrg * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag. 274848b8605Smrg */ 275848b8605Smrg PIPE_TRANSFER_DISCARD_RANGE = (1 << 8), 276848b8605Smrg 277848b8605Smrg /** 278848b8605Smrg * Fail if the resource cannot be mapped immediately. 279848b8605Smrg * 280848b8605Smrg * See also: 281848b8605Smrg * - Direct3D's D3DLOCK_DONOTWAIT flag. 282b8e80941Smrg * - Mesa's MESA_MAP_NOWAIT_BIT flag. 283848b8605Smrg * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag. 284848b8605Smrg */ 285848b8605Smrg PIPE_TRANSFER_DONTBLOCK = (1 << 9), 286848b8605Smrg 287848b8605Smrg /** 288848b8605Smrg * Do not attempt to synchronize pending operations on the resource when mapping. 289848b8605Smrg * 290848b8605Smrg * It should not be used with PIPE_TRANSFER_READ. 291848b8605Smrg * 292848b8605Smrg * See also: 293848b8605Smrg * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag. 294848b8605Smrg * - Direct3D's D3DLOCK_NOOVERWRITE flag. 295848b8605Smrg * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag. 296848b8605Smrg */ 297848b8605Smrg PIPE_TRANSFER_UNSYNCHRONIZED = (1 << 10), 298848b8605Smrg 299848b8605Smrg /** 300848b8605Smrg * Written ranges will be notified later with 301848b8605Smrg * pipe_context::transfer_flush_region. 302848b8605Smrg * 303848b8605Smrg * It should not be used with PIPE_TRANSFER_READ. 304848b8605Smrg * 305848b8605Smrg * See also: 306848b8605Smrg * - pipe_context::transfer_flush_region 307848b8605Smrg * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag. 308848b8605Smrg */ 309848b8605Smrg PIPE_TRANSFER_FLUSH_EXPLICIT = (1 << 11), 310848b8605Smrg 311848b8605Smrg /** 312848b8605Smrg * Discards all memory backing the resource. 313848b8605Smrg * 314848b8605Smrg * It should not be used with PIPE_TRANSFER_READ. 315848b8605Smrg * 316848b8605Smrg * This is equivalent to: 317848b8605Smrg * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT 318848b8605Smrg * - BufferData(NULL) on a GL buffer 319848b8605Smrg * - Direct3D's D3DLOCK_DISCARD flag. 320848b8605Smrg * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag. 321848b8605Smrg * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag 322848b8605Smrg * - D3D10's D3D10_MAP_WRITE_DISCARD flag. 323848b8605Smrg */ 324848b8605Smrg PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE = (1 << 12), 325848b8605Smrg 326848b8605Smrg /** 327848b8605Smrg * Allows the resource to be used for rendering while mapped. 328848b8605Smrg * 329848b8605Smrg * PIPE_RESOURCE_FLAG_MAP_PERSISTENT must be set when creating 330848b8605Smrg * the resource. 331848b8605Smrg * 332848b8605Smrg * If COHERENT is not set, memory_barrier(PIPE_BARRIER_MAPPED_BUFFER) 333848b8605Smrg * must be called to ensure the device can see what the CPU has written. 334848b8605Smrg */ 335848b8605Smrg PIPE_TRANSFER_PERSISTENT = (1 << 13), 336848b8605Smrg 337848b8605Smrg /** 338848b8605Smrg * If PERSISTENT is set, this ensures any writes done by the device are 339848b8605Smrg * immediately visible to the CPU and vice versa. 340848b8605Smrg * 341848b8605Smrg * PIPE_RESOURCE_FLAG_MAP_COHERENT must be set when creating 342848b8605Smrg * the resource. 343848b8605Smrg */ 344b8e80941Smrg PIPE_TRANSFER_COHERENT = (1 << 14), 345b8e80941Smrg 346b8e80941Smrg /** 347b8e80941Smrg * This and higher bits are reserved for private use by drivers. Drivers 348b8e80941Smrg * should use this as (PIPE_TRANSFER_DRV_PRV << i). 349b8e80941Smrg */ 350b8e80941Smrg PIPE_TRANSFER_DRV_PRV = (1 << 24) 351848b8605Smrg}; 352848b8605Smrg 353848b8605Smrg/** 354848b8605Smrg * Flags for the flush function. 355848b8605Smrg */ 356b8e80941Smrgenum pipe_flush_flags 357b8e80941Smrg{ 358b8e80941Smrg PIPE_FLUSH_END_OF_FRAME = (1 << 0), 359b8e80941Smrg PIPE_FLUSH_DEFERRED = (1 << 1), 360b8e80941Smrg PIPE_FLUSH_FENCE_FD = (1 << 2), 361b8e80941Smrg PIPE_FLUSH_ASYNC = (1 << 3), 362b8e80941Smrg PIPE_FLUSH_HINT_FINISH = (1 << 4), 363b8e80941Smrg PIPE_FLUSH_TOP_OF_PIPE = (1 << 5), 364b8e80941Smrg PIPE_FLUSH_BOTTOM_OF_PIPE = (1 << 6), 365848b8605Smrg}; 366848b8605Smrg 367b8e80941Smrg/** 368b8e80941Smrg * Flags for pipe_context::dump_debug_state. 369b8e80941Smrg */ 370b8e80941Smrg#define PIPE_DUMP_DEVICE_STATUS_REGISTERS (1 << 0) 371b8e80941Smrg 372b8e80941Smrg/** 373b8e80941Smrg * Create a compute-only context. Use in pipe_screen::context_create. 374b8e80941Smrg * This disables draw, blit, and clear*, render_condition, and other graphics 375b8e80941Smrg * functions. Interop with other graphics contexts is still allowed. 376b8e80941Smrg * This allows scheduling jobs on a compute-only hardware command queue that 377b8e80941Smrg * can run in parallel with graphics without stalling it. 378b8e80941Smrg */ 379b8e80941Smrg#define PIPE_CONTEXT_COMPUTE_ONLY (1 << 0) 380b8e80941Smrg 381b8e80941Smrg/** 382b8e80941Smrg * Gather debug information and expect that pipe_context::dump_debug_state 383b8e80941Smrg * will be called. Use in pipe_screen::context_create. 384b8e80941Smrg */ 385b8e80941Smrg#define PIPE_CONTEXT_DEBUG (1 << 1) 386b8e80941Smrg 387b8e80941Smrg/** 388b8e80941Smrg * Whether out-of-bounds shader loads must return zero and out-of-bounds 389b8e80941Smrg * shader stores must be dropped. 390b8e80941Smrg */ 391b8e80941Smrg#define PIPE_CONTEXT_ROBUST_BUFFER_ACCESS (1 << 2) 392b8e80941Smrg 393b8e80941Smrg/** 394b8e80941Smrg * Prefer threaded pipe_context. It also implies that video codec functions 395b8e80941Smrg * will not be used. (they will be either no-ops or NULL when threading is 396b8e80941Smrg * enabled) 397b8e80941Smrg */ 398b8e80941Smrg#define PIPE_CONTEXT_PREFER_THREADED (1 << 3) 399b8e80941Smrg 400b8e80941Smrg/** 401b8e80941Smrg * Create a high priority context. 402b8e80941Smrg */ 403b8e80941Smrg#define PIPE_CONTEXT_HIGH_PRIORITY (1 << 4) 404b8e80941Smrg 405b8e80941Smrg/** 406b8e80941Smrg * Create a low priority context. 407b8e80941Smrg */ 408b8e80941Smrg#define PIPE_CONTEXT_LOW_PRIORITY (1 << 5) 409b8e80941Smrg 410b8e80941Smrg/** Stop execution if the device is reset. */ 411b8e80941Smrg#define PIPE_CONTEXT_LOSE_CONTEXT_ON_RESET (1 << 6) 412b8e80941Smrg 413848b8605Smrg/** 414848b8605Smrg * Flags for pipe_context::memory_barrier. 415848b8605Smrg */ 416848b8605Smrg#define PIPE_BARRIER_MAPPED_BUFFER (1 << 0) 417b8e80941Smrg#define PIPE_BARRIER_SHADER_BUFFER (1 << 1) 418b8e80941Smrg#define PIPE_BARRIER_QUERY_BUFFER (1 << 2) 419b8e80941Smrg#define PIPE_BARRIER_VERTEX_BUFFER (1 << 3) 420b8e80941Smrg#define PIPE_BARRIER_INDEX_BUFFER (1 << 4) 421b8e80941Smrg#define PIPE_BARRIER_CONSTANT_BUFFER (1 << 5) 422b8e80941Smrg#define PIPE_BARRIER_INDIRECT_BUFFER (1 << 6) 423b8e80941Smrg#define PIPE_BARRIER_TEXTURE (1 << 7) 424b8e80941Smrg#define PIPE_BARRIER_IMAGE (1 << 8) 425b8e80941Smrg#define PIPE_BARRIER_FRAMEBUFFER (1 << 9) 426b8e80941Smrg#define PIPE_BARRIER_STREAMOUT_BUFFER (1 << 10) 427b8e80941Smrg#define PIPE_BARRIER_GLOBAL_BUFFER (1 << 11) 428b8e80941Smrg#define PIPE_BARRIER_UPDATE_BUFFER (1 << 12) 429b8e80941Smrg#define PIPE_BARRIER_UPDATE_TEXTURE (1 << 13) 430b8e80941Smrg#define PIPE_BARRIER_ALL ((1 << 14) - 1) 431b8e80941Smrg 432b8e80941Smrg#define PIPE_BARRIER_UPDATE \ 433b8e80941Smrg (PIPE_BARRIER_UPDATE_BUFFER | PIPE_BARRIER_UPDATE_TEXTURE) 434b8e80941Smrg 435b8e80941Smrg/** 436b8e80941Smrg * Flags for pipe_context::texture_barrier. 437b8e80941Smrg */ 438b8e80941Smrg#define PIPE_TEXTURE_BARRIER_SAMPLER (1 << 0) 439b8e80941Smrg#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER (1 << 1) 440848b8605Smrg 441b8e80941Smrg/** 442848b8605Smrg * Resource binding flags -- state tracker must specify in advance all 443848b8605Smrg * the ways a resource might be used. 444848b8605Smrg */ 445848b8605Smrg#define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */ 446848b8605Smrg#define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */ 447848b8605Smrg#define PIPE_BIND_BLENDABLE (1 << 2) /* create_surface */ 448848b8605Smrg#define PIPE_BIND_SAMPLER_VIEW (1 << 3) /* create_sampler_view */ 449848b8605Smrg#define PIPE_BIND_VERTEX_BUFFER (1 << 4) /* set_vertex_buffers */ 450848b8605Smrg#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */ 451848b8605Smrg#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */ 452b8e80941Smrg#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */ 453b8e80941Smrg/* gap */ 454b8e80941Smrg#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */ 455b8e80941Smrg#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */ 456b8e80941Smrg#define PIPE_BIND_CUSTOM (1 << 12) /* state-tracker/winsys usages */ 457b8e80941Smrg#define PIPE_BIND_GLOBAL (1 << 13) /* set_global_binding */ 458b8e80941Smrg#define PIPE_BIND_SHADER_BUFFER (1 << 14) /* set_shader_buffers */ 459b8e80941Smrg#define PIPE_BIND_SHADER_IMAGE (1 << 15) /* set_shader_images */ 460b8e80941Smrg#define PIPE_BIND_COMPUTE_RESOURCE (1 << 16) /* set_compute_resources */ 461b8e80941Smrg#define PIPE_BIND_COMMAND_ARGS_BUFFER (1 << 17) /* pipe_draw_info.indirect */ 462b8e80941Smrg#define PIPE_BIND_QUERY_BUFFER (1 << 18) /* get_query_result_resource */ 463b8e80941Smrg 464b8e80941Smrg/** 465b8e80941Smrg * The first two flags above were previously part of the amorphous 466848b8605Smrg * TEXTURE_USAGE, most of which are now descriptions of the ways a 467848b8605Smrg * particular texture can be bound to the gallium pipeline. The two flags 468848b8605Smrg * below do not fit within that and probably need to be migrated to some 469848b8605Smrg * other place. 470848b8605Smrg * 471848b8605Smrg * It seems like scanout is used by the Xorg state tracker to ask for 472848b8605Smrg * a texture suitable for actual scanout (hence the name), which 473848b8605Smrg * implies extra layout constraints on some hardware. It may also 474848b8605Smrg * have some special meaning regarding mouse cursor images. 475848b8605Smrg * 476848b8605Smrg * The shared flag is quite underspecified, but certainly isn't a 477848b8605Smrg * binding flag - it seems more like a message to the winsys to create 478848b8605Smrg * a shareable allocation. 479848b8605Smrg * 480848b8605Smrg * The third flag has been added to be able to force textures to be created 481848b8605Smrg * in linear mode (no tiling). 482848b8605Smrg */ 483b8e80941Smrg#define PIPE_BIND_SCANOUT (1 << 19) /* */ 484b8e80941Smrg#define PIPE_BIND_SHARED (1 << 20) /* get_texture_handle ??? */ 485848b8605Smrg#define PIPE_BIND_LINEAR (1 << 21) 486848b8605Smrg 487848b8605Smrg 488b8e80941Smrg/** 489b8e80941Smrg * Flags for the driver about resource behaviour: 490848b8605Smrg */ 491848b8605Smrg#define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0) 492848b8605Smrg#define PIPE_RESOURCE_FLAG_MAP_COHERENT (1 << 1) 493b8e80941Smrg#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2) 494b8e80941Smrg#define PIPE_RESOURCE_FLAG_SPARSE (1 << 3) 495b8e80941Smrg#define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 8) /* driver/winsys private */ 496848b8605Smrg#define PIPE_RESOURCE_FLAG_ST_PRIV (1 << 24) /* state-tracker/winsys private */ 497848b8605Smrg 498b8e80941Smrg/** 499b8e80941Smrg * Hint about the expected lifecycle of a resource. 500848b8605Smrg * Sorted according to GPU vs CPU access. 501848b8605Smrg */ 502b8e80941Smrgenum pipe_resource_usage { 503b8e80941Smrg PIPE_USAGE_DEFAULT, /* fast GPU access */ 504b8e80941Smrg PIPE_USAGE_IMMUTABLE, /* fast GPU access, immutable */ 505b8e80941Smrg PIPE_USAGE_DYNAMIC, /* uploaded data is used multiple times */ 506b8e80941Smrg PIPE_USAGE_STREAM, /* uploaded data is used once */ 507b8e80941Smrg PIPE_USAGE_STAGING, /* fast CPU access */ 508b8e80941Smrg}; 509848b8605Smrg 510848b8605Smrg/** 511848b8605Smrg * Shaders 512848b8605Smrg */ 513b8e80941Smrgenum pipe_shader_type { 514b8e80941Smrg PIPE_SHADER_VERTEX, 515b8e80941Smrg PIPE_SHADER_FRAGMENT, 516b8e80941Smrg PIPE_SHADER_GEOMETRY, 517b8e80941Smrg PIPE_SHADER_TESS_CTRL, 518b8e80941Smrg PIPE_SHADER_TESS_EVAL, 519b8e80941Smrg PIPE_SHADER_COMPUTE, 520b8e80941Smrg PIPE_SHADER_TYPES, 521b8e80941Smrg}; 522848b8605Smrg 523848b8605Smrg/** 524848b8605Smrg * Primitive types: 525848b8605Smrg */ 526b8e80941Smrgenum pipe_prim_type { 527b8e80941Smrg PIPE_PRIM_POINTS, 528b8e80941Smrg PIPE_PRIM_LINES, 529b8e80941Smrg PIPE_PRIM_LINE_LOOP, 530b8e80941Smrg PIPE_PRIM_LINE_STRIP, 531b8e80941Smrg PIPE_PRIM_TRIANGLES, 532b8e80941Smrg PIPE_PRIM_TRIANGLE_STRIP, 533b8e80941Smrg PIPE_PRIM_TRIANGLE_FAN, 534b8e80941Smrg PIPE_PRIM_QUADS, 535b8e80941Smrg PIPE_PRIM_QUAD_STRIP, 536b8e80941Smrg PIPE_PRIM_POLYGON, 537b8e80941Smrg PIPE_PRIM_LINES_ADJACENCY, 538b8e80941Smrg PIPE_PRIM_LINE_STRIP_ADJACENCY, 539b8e80941Smrg PIPE_PRIM_TRIANGLES_ADJACENCY, 540b8e80941Smrg PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY, 541b8e80941Smrg PIPE_PRIM_PATCHES, 542b8e80941Smrg PIPE_PRIM_MAX, 543b8e80941Smrg}; 544848b8605Smrg 545b8e80941Smrg/** 546b8e80941Smrg * Tessellator spacing types 547b8e80941Smrg */ 548b8e80941Smrgenum pipe_tess_spacing { 549b8e80941Smrg PIPE_TESS_SPACING_FRACTIONAL_ODD, 550b8e80941Smrg PIPE_TESS_SPACING_FRACTIONAL_EVEN, 551b8e80941Smrg PIPE_TESS_SPACING_EQUAL, 552b8e80941Smrg}; 553848b8605Smrg 554848b8605Smrg/** 555848b8605Smrg * Query object types 556848b8605Smrg */ 557b8e80941Smrgenum pipe_query_type { 558b8e80941Smrg PIPE_QUERY_OCCLUSION_COUNTER, 559b8e80941Smrg PIPE_QUERY_OCCLUSION_PREDICATE, 560b8e80941Smrg PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE, 561b8e80941Smrg PIPE_QUERY_TIMESTAMP, 562b8e80941Smrg PIPE_QUERY_TIMESTAMP_DISJOINT, 563b8e80941Smrg PIPE_QUERY_TIME_ELAPSED, 564b8e80941Smrg PIPE_QUERY_PRIMITIVES_GENERATED, 565b8e80941Smrg PIPE_QUERY_PRIMITIVES_EMITTED, 566b8e80941Smrg PIPE_QUERY_SO_STATISTICS, 567b8e80941Smrg PIPE_QUERY_SO_OVERFLOW_PREDICATE, 568b8e80941Smrg PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE, 569b8e80941Smrg PIPE_QUERY_GPU_FINISHED, 570b8e80941Smrg PIPE_QUERY_PIPELINE_STATISTICS, 571b8e80941Smrg PIPE_QUERY_PIPELINE_STATISTICS_SINGLE, 572b8e80941Smrg PIPE_QUERY_TYPES, 573b8e80941Smrg /* start of driver queries, see pipe_screen::get_driver_query_info */ 574b8e80941Smrg PIPE_QUERY_DRIVER_SPECIFIC = 256, 575b8e80941Smrg}; 576848b8605Smrg 577b8e80941Smrg/** 578b8e80941Smrg * Index for PIPE_QUERY_PIPELINE_STATISTICS subqueries. 579b8e80941Smrg */ 580b8e80941Smrgenum pipe_statistics_query_index { 581b8e80941Smrg PIPE_STAT_QUERY_IA_VERTICES, 582b8e80941Smrg PIPE_STAT_QUERY_IA_PRIMITIVES, 583b8e80941Smrg PIPE_STAT_QUERY_VS_INVOCATIONS, 584b8e80941Smrg PIPE_STAT_QUERY_GS_INVOCATIONS, 585b8e80941Smrg PIPE_STAT_QUERY_GS_PRIMITIVES, 586b8e80941Smrg PIPE_STAT_QUERY_C_INVOCATIONS, 587b8e80941Smrg PIPE_STAT_QUERY_C_PRIMITIVES, 588b8e80941Smrg PIPE_STAT_QUERY_PS_INVOCATIONS, 589b8e80941Smrg PIPE_STAT_QUERY_HS_INVOCATIONS, 590b8e80941Smrg PIPE_STAT_QUERY_DS_INVOCATIONS, 591b8e80941Smrg PIPE_STAT_QUERY_CS_INVOCATIONS, 592b8e80941Smrg}; 593848b8605Smrg 594848b8605Smrg/** 595848b8605Smrg * Conditional rendering modes 596848b8605Smrg */ 597b8e80941Smrgenum pipe_render_cond_flag { 598b8e80941Smrg PIPE_RENDER_COND_WAIT, 599b8e80941Smrg PIPE_RENDER_COND_NO_WAIT, 600b8e80941Smrg PIPE_RENDER_COND_BY_REGION_WAIT, 601b8e80941Smrg PIPE_RENDER_COND_BY_REGION_NO_WAIT, 602b8e80941Smrg}; 603848b8605Smrg 604848b8605Smrg/** 605848b8605Smrg * Point sprite coord modes 606848b8605Smrg */ 607b8e80941Smrgenum pipe_sprite_coord_mode { 608b8e80941Smrg PIPE_SPRITE_COORD_UPPER_LEFT, 609b8e80941Smrg PIPE_SPRITE_COORD_LOWER_LEFT, 610b8e80941Smrg}; 611b8e80941Smrg 612b8e80941Smrg/** 613b8e80941Smrg * Texture & format swizzles 614b8e80941Smrg */ 615b8e80941Smrgenum pipe_swizzle { 616b8e80941Smrg PIPE_SWIZZLE_X, 617b8e80941Smrg PIPE_SWIZZLE_Y, 618b8e80941Smrg PIPE_SWIZZLE_Z, 619b8e80941Smrg PIPE_SWIZZLE_W, 620b8e80941Smrg PIPE_SWIZZLE_0, 621b8e80941Smrg PIPE_SWIZZLE_1, 622b8e80941Smrg PIPE_SWIZZLE_NONE, 623b8e80941Smrg PIPE_SWIZZLE_MAX, /**< Number of enums counter (must be last) */ 624b8e80941Smrg}; 625b8e80941Smrg 626b8e80941Smrg#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull 627848b8605Smrg 628848b8605Smrg 629848b8605Smrg/** 630b8e80941Smrg * Device reset status. 631848b8605Smrg */ 632b8e80941Smrgenum pipe_reset_status 633b8e80941Smrg{ 634b8e80941Smrg PIPE_NO_RESET, 635b8e80941Smrg PIPE_GUILTY_CONTEXT_RESET, 636b8e80941Smrg PIPE_INNOCENT_CONTEXT_RESET, 637b8e80941Smrg PIPE_UNKNOWN_CONTEXT_RESET, 638b8e80941Smrg}; 639848b8605Smrg 640848b8605Smrg 641b8e80941Smrg/** 642b8e80941Smrg * Conservative rasterization modes. 643b8e80941Smrg */ 644b8e80941Smrgenum pipe_conservative_raster_mode 645b8e80941Smrg{ 646b8e80941Smrg PIPE_CONSERVATIVE_RASTER_OFF, 647b8e80941Smrg 648b8e80941Smrg /** 649b8e80941Smrg * The post-snap mode means the conservative rasterization occurs after 650b8e80941Smrg * the conversion from floating-point to fixed-point coordinates 651b8e80941Smrg * on the subpixel grid. 652b8e80941Smrg */ 653b8e80941Smrg PIPE_CONSERVATIVE_RASTER_POST_SNAP, 654b8e80941Smrg 655b8e80941Smrg /** 656b8e80941Smrg * The pre-snap mode means the conservative rasterization occurs before 657b8e80941Smrg * the conversion from floating-point to fixed-point coordinates. 658b8e80941Smrg */ 659b8e80941Smrg PIPE_CONSERVATIVE_RASTER_PRE_SNAP, 660b8e80941Smrg}; 661b8e80941Smrg 662b8e80941Smrg 663b8e80941Smrg/** 664b8e80941Smrg * resource_get_handle flags. 665b8e80941Smrg */ 666b8e80941Smrg/* Requires pipe_context::flush_resource before external use. */ 667b8e80941Smrg#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0) 668b8e80941Smrg/* Expected external use of the resource: */ 669b8e80941Smrg#define PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE (1 << 1) 670b8e80941Smrg#define PIPE_HANDLE_USAGE_SHADER_WRITE (1 << 2) 671b8e80941Smrg 672b8e80941Smrg/** 673b8e80941Smrg * pipe_image_view access flags. 674b8e80941Smrg */ 675b8e80941Smrg#define PIPE_IMAGE_ACCESS_READ (1 << 0) 676b8e80941Smrg#define PIPE_IMAGE_ACCESS_WRITE (1 << 1) 677b8e80941Smrg#define PIPE_IMAGE_ACCESS_READ_WRITE (PIPE_IMAGE_ACCESS_READ | \ 678b8e80941Smrg PIPE_IMAGE_ACCESS_WRITE) 679848b8605Smrg 680848b8605Smrg/** 681848b8605Smrg * Implementation capabilities/limits which are queried through 682848b8605Smrg * pipe_screen::get_param() 683848b8605Smrg */ 684b8e80941Smrgenum pipe_cap 685b8e80941Smrg{ 686b8e80941Smrg PIPE_CAP_NPOT_TEXTURES, 687b8e80941Smrg PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS, 688b8e80941Smrg PIPE_CAP_ANISOTROPIC_FILTER, 689b8e80941Smrg PIPE_CAP_POINT_SPRITE, 690b8e80941Smrg PIPE_CAP_MAX_RENDER_TARGETS, 691b8e80941Smrg PIPE_CAP_OCCLUSION_QUERY, 692b8e80941Smrg PIPE_CAP_QUERY_TIME_ELAPSED, 693b8e80941Smrg PIPE_CAP_TEXTURE_SWIZZLE, 694b8e80941Smrg PIPE_CAP_MAX_TEXTURE_2D_LEVELS, 695b8e80941Smrg PIPE_CAP_MAX_TEXTURE_3D_LEVELS, 696b8e80941Smrg PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS, 697b8e80941Smrg PIPE_CAP_TEXTURE_MIRROR_CLAMP, 698b8e80941Smrg PIPE_CAP_BLEND_EQUATION_SEPARATE, 699b8e80941Smrg PIPE_CAP_SM3, 700b8e80941Smrg PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS, 701b8e80941Smrg PIPE_CAP_PRIMITIVE_RESTART, 702848b8605Smrg /** blend enables and write masks per rendertarget */ 703b8e80941Smrg PIPE_CAP_INDEP_BLEND_ENABLE, 704848b8605Smrg /** different blend funcs per rendertarget */ 705b8e80941Smrg PIPE_CAP_INDEP_BLEND_FUNC, 706b8e80941Smrg PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS, 707b8e80941Smrg PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT, 708b8e80941Smrg PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT, 709b8e80941Smrg PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER, 710b8e80941Smrg PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER, 711b8e80941Smrg PIPE_CAP_DEPTH_CLIP_DISABLE, 712b8e80941Smrg PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE, 713b8e80941Smrg PIPE_CAP_SHADER_STENCIL_EXPORT, 714b8e80941Smrg PIPE_CAP_TGSI_INSTANCEID, 715b8e80941Smrg PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, 716b8e80941Smrg PIPE_CAP_FRAGMENT_COLOR_CLAMPED, 717b8e80941Smrg PIPE_CAP_MIXED_COLORBUFFER_FORMATS, 718b8e80941Smrg PIPE_CAP_SEAMLESS_CUBE_MAP, 719b8e80941Smrg PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE, 720b8e80941Smrg PIPE_CAP_MIN_TEXEL_OFFSET, 721b8e80941Smrg PIPE_CAP_MAX_TEXEL_OFFSET, 722b8e80941Smrg PIPE_CAP_CONDITIONAL_RENDER, 723b8e80941Smrg PIPE_CAP_TEXTURE_BARRIER, 724b8e80941Smrg PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS, 725b8e80941Smrg PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS, 726b8e80941Smrg PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME, 727b8e80941Smrg PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS, 728b8e80941Smrg PIPE_CAP_VERTEX_COLOR_UNCLAMPED, 729b8e80941Smrg PIPE_CAP_VERTEX_COLOR_CLAMPED, 730b8e80941Smrg PIPE_CAP_GLSL_FEATURE_LEVEL, 731b8e80941Smrg PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY, 732b8e80941Smrg PIPE_CAP_ESSL_FEATURE_LEVEL, 733b8e80941Smrg PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, 734b8e80941Smrg PIPE_CAP_USER_VERTEX_BUFFERS, 735b8e80941Smrg PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, 736b8e80941Smrg PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY, 737b8e80941Smrg PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, 738b8e80941Smrg PIPE_CAP_COMPUTE, 739b8e80941Smrg PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT, 740b8e80941Smrg PIPE_CAP_START_INSTANCE, 741b8e80941Smrg PIPE_CAP_QUERY_TIMESTAMP, 742b8e80941Smrg PIPE_CAP_TEXTURE_MULTISAMPLE, 743b8e80941Smrg PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT, 744b8e80941Smrg PIPE_CAP_CUBE_MAP_ARRAY, 745b8e80941Smrg PIPE_CAP_TEXTURE_BUFFER_OBJECTS, 746b8e80941Smrg PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 747b8e80941Smrg PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY, 748b8e80941Smrg PIPE_CAP_TGSI_TEXCOORD, 749b8e80941Smrg PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER, 750b8e80941Smrg PIPE_CAP_QUERY_PIPELINE_STATISTICS, 751b8e80941Smrg PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK, 752b8e80941Smrg PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE, 753b8e80941Smrg PIPE_CAP_MAX_VIEWPORTS, 754b8e80941Smrg PIPE_CAP_ENDIANNESS, 755b8e80941Smrg PIPE_CAP_MIXED_FRAMEBUFFER_SIZES, 756b8e80941Smrg PIPE_CAP_TGSI_VS_LAYER_VIEWPORT, 757b8e80941Smrg PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES, 758b8e80941Smrg PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 759b8e80941Smrg PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS, 760b8e80941Smrg PIPE_CAP_TEXTURE_GATHER_SM5, 761b8e80941Smrg PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT, 762b8e80941Smrg PIPE_CAP_FAKE_SW_MSAA, 763b8e80941Smrg PIPE_CAP_TEXTURE_QUERY_LOD, 764b8e80941Smrg PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET, 765b8e80941Smrg PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET, 766b8e80941Smrg PIPE_CAP_SAMPLE_SHADING, 767b8e80941Smrg PIPE_CAP_TEXTURE_GATHER_OFFSETS, 768b8e80941Smrg PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION, 769b8e80941Smrg PIPE_CAP_MAX_VERTEX_STREAMS, 770b8e80941Smrg PIPE_CAP_DRAW_INDIRECT, 771b8e80941Smrg PIPE_CAP_TGSI_FS_FINE_DERIVATIVE, 772b8e80941Smrg PIPE_CAP_VENDOR_ID, 773b8e80941Smrg PIPE_CAP_DEVICE_ID, 774b8e80941Smrg PIPE_CAP_ACCELERATED, 775b8e80941Smrg PIPE_CAP_VIDEO_MEMORY, 776b8e80941Smrg PIPE_CAP_UMA, 777b8e80941Smrg PIPE_CAP_CONDITIONAL_RENDER_INVERTED, 778b8e80941Smrg PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE, 779b8e80941Smrg PIPE_CAP_SAMPLER_VIEW_TARGET, 780b8e80941Smrg PIPE_CAP_CLIP_HALFZ, 781b8e80941Smrg PIPE_CAP_VERTEXID_NOBASE, 782b8e80941Smrg PIPE_CAP_POLYGON_OFFSET_CLAMP, 783b8e80941Smrg PIPE_CAP_MULTISAMPLE_Z_RESOLVE, 784b8e80941Smrg PIPE_CAP_RESOURCE_FROM_USER_MEMORY, 785b8e80941Smrg PIPE_CAP_DEVICE_RESET_STATUS_QUERY, 786b8e80941Smrg PIPE_CAP_MAX_SHADER_PATCH_VARYINGS, 787b8e80941Smrg PIPE_CAP_TEXTURE_FLOAT_LINEAR, 788b8e80941Smrg PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR, 789b8e80941Smrg PIPE_CAP_DEPTH_BOUNDS_TEST, 790b8e80941Smrg PIPE_CAP_TGSI_TXQS, 791b8e80941Smrg PIPE_CAP_FORCE_PERSAMPLE_INTERP, 792b8e80941Smrg PIPE_CAP_SHAREABLE_SHADERS, 793b8e80941Smrg PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS, 794b8e80941Smrg PIPE_CAP_CLEAR_TEXTURE, 795b8e80941Smrg PIPE_CAP_DRAW_PARAMETERS, 796b8e80941Smrg PIPE_CAP_TGSI_PACK_HALF_FLOAT, 797b8e80941Smrg PIPE_CAP_MULTI_DRAW_INDIRECT, 798b8e80941Smrg PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS, 799b8e80941Smrg PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL, 800b8e80941Smrg PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL, 801b8e80941Smrg PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT, 802b8e80941Smrg PIPE_CAP_INVALIDATE_BUFFER, 803b8e80941Smrg PIPE_CAP_GENERATE_MIPMAP, 804b8e80941Smrg PIPE_CAP_STRING_MARKER, 805b8e80941Smrg PIPE_CAP_SURFACE_REINTERPRET_BLOCKS, 806b8e80941Smrg PIPE_CAP_QUERY_BUFFER_OBJECT, 807b8e80941Smrg PIPE_CAP_QUERY_MEMORY_INFO, 808b8e80941Smrg PIPE_CAP_PCI_GROUP, 809b8e80941Smrg PIPE_CAP_PCI_BUS, 810b8e80941Smrg PIPE_CAP_PCI_DEVICE, 811b8e80941Smrg PIPE_CAP_PCI_FUNCTION, 812b8e80941Smrg PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT, 813b8e80941Smrg PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR, 814b8e80941Smrg PIPE_CAP_CULL_DISTANCE, 815b8e80941Smrg PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES, 816b8e80941Smrg PIPE_CAP_TGSI_VOTE, 817b8e80941Smrg PIPE_CAP_MAX_WINDOW_RECTANGLES, 818b8e80941Smrg PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED, 819b8e80941Smrg PIPE_CAP_VIEWPORT_SUBPIXEL_BITS, 820b8e80941Smrg PIPE_CAP_RASTERIZER_SUBPIXEL_BITS, 821b8e80941Smrg PIPE_CAP_MIXED_COLOR_DEPTH_BITS, 822b8e80941Smrg PIPE_CAP_TGSI_ARRAY_COMPONENTS, 823b8e80941Smrg PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS, 824b8e80941Smrg PIPE_CAP_TGSI_CAN_READ_OUTPUTS, 825b8e80941Smrg PIPE_CAP_NATIVE_FENCE_FD, 826b8e80941Smrg PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY, 827b8e80941Smrg PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS, 828b8e80941Smrg PIPE_CAP_TGSI_FS_FBFETCH, 829b8e80941Smrg PIPE_CAP_TGSI_MUL_ZERO_WINS, 830b8e80941Smrg PIPE_CAP_DOUBLES, 831b8e80941Smrg PIPE_CAP_INT64, 832b8e80941Smrg PIPE_CAP_INT64_DIVMOD, 833b8e80941Smrg PIPE_CAP_TGSI_TEX_TXF_LZ, 834b8e80941Smrg PIPE_CAP_TGSI_CLOCK, 835b8e80941Smrg PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE, 836b8e80941Smrg PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE, 837b8e80941Smrg PIPE_CAP_TGSI_BALLOT, 838b8e80941Smrg PIPE_CAP_TGSI_TES_LAYER_VIEWPORT, 839b8e80941Smrg PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX, 840b8e80941Smrg PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION, 841b8e80941Smrg PIPE_CAP_POST_DEPTH_COVERAGE, 842b8e80941Smrg PIPE_CAP_BINDLESS_TEXTURE, 843b8e80941Smrg PIPE_CAP_NIR_SAMPLERS_AS_DEREF, 844b8e80941Smrg PIPE_CAP_QUERY_SO_OVERFLOW, 845b8e80941Smrg PIPE_CAP_MEMOBJ, 846b8e80941Smrg PIPE_CAP_LOAD_CONSTBUF, 847b8e80941Smrg PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS, 848b8e80941Smrg PIPE_CAP_TILE_RASTER_ORDER, 849b8e80941Smrg PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, 850b8e80941Smrg PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS, 851b8e80941Smrg PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET, 852b8e80941Smrg PIPE_CAP_CONTEXT_PRIORITY_MASK, 853b8e80941Smrg PIPE_CAP_FENCE_SIGNAL, 854b8e80941Smrg PIPE_CAP_CONSTBUF0_FLAGS, 855b8e80941Smrg PIPE_CAP_PACKED_UNIFORMS, 856b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES, 857b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES, 858b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES, 859b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES, 860b8e80941Smrg PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS, 861b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE, 862b8e80941Smrg PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE, 863b8e80941Smrg PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS, 864b8e80941Smrg PIPE_CAP_MAX_GS_INVOCATIONS, 865b8e80941Smrg PIPE_CAP_MAX_SHADER_BUFFER_SIZE, 866b8e80941Smrg PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE, 867b8e80941Smrg PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS, 868b8e80941Smrg PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS, 869b8e80941Smrg PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS, 870b8e80941Smrg PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET, 871b8e80941Smrg PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET, 872b8e80941Smrg PIPE_CAP_SURFACE_SAMPLE_COUNT, 873b8e80941Smrg PIPE_CAP_TGSI_ATOMFADD, 874b8e80941Smrg PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE, 875b8e80941Smrg PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND, 876b8e80941Smrg PIPE_CAP_DEST_SURFACE_SRGB_CONTROL, 877b8e80941Smrg PIPE_CAP_NIR_COMPACT_ARRAYS, 878b8e80941Smrg PIPE_CAP_MAX_VARYINGS, 879b8e80941Smrg PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK, 880b8e80941Smrg PIPE_CAP_COMPUTE_SHADER_DERIVATIVES, 881b8e80941Smrg PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS, 882b8e80941Smrg PIPE_CAP_IMAGE_LOAD_FORMATTED, 883b8e80941Smrg PIPE_CAP_MAX_FRAMES_IN_FLIGHT, 884b8e80941Smrg PIPE_CAP_DMABUF, 885b8e80941Smrg PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA, 886b8e80941Smrg PIPE_CAP_TGSI_DIV, 887848b8605Smrg}; 888848b8605Smrg 889b8e80941Smrg/** 890b8e80941Smrg * Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should 891b8e80941Smrg * return a bitmask of the supported priorities. If the driver does not 892b8e80941Smrg * support prioritized contexts, it can return 0. 893b8e80941Smrg * 894b8e80941Smrg * Note that these match __DRI2_RENDER_HAS_CONTEXT_PRIORITY_* 895b8e80941Smrg */ 896b8e80941Smrg#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0) 897b8e80941Smrg#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1) 898b8e80941Smrg#define PIPE_CONTEXT_PRIORITY_HIGH (1 << 2) 899b8e80941Smrg 900848b8605Smrg#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0) 901848b8605Smrg#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1) 902848b8605Smrg 903b8e80941Smrgenum pipe_endian 904b8e80941Smrg{ 905848b8605Smrg PIPE_ENDIAN_LITTLE = 0, 906848b8605Smrg PIPE_ENDIAN_BIG = 1, 907848b8605Smrg#if defined(PIPE_ARCH_LITTLE_ENDIAN) 908848b8605Smrg PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE 909848b8605Smrg#elif defined(PIPE_ARCH_BIG_ENDIAN) 910848b8605Smrg PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG 911848b8605Smrg#endif 912848b8605Smrg}; 913848b8605Smrg 914848b8605Smrg/** 915848b8605Smrg * Implementation limits which are queried through 916848b8605Smrg * pipe_screen::get_paramf() 917848b8605Smrg */ 918848b8605Smrgenum pipe_capf 919848b8605Smrg{ 920848b8605Smrg PIPE_CAPF_MAX_LINE_WIDTH, 921848b8605Smrg PIPE_CAPF_MAX_LINE_WIDTH_AA, 922848b8605Smrg PIPE_CAPF_MAX_POINT_WIDTH, 923848b8605Smrg PIPE_CAPF_MAX_POINT_WIDTH_AA, 924848b8605Smrg PIPE_CAPF_MAX_TEXTURE_ANISOTROPY, 925848b8605Smrg PIPE_CAPF_MAX_TEXTURE_LOD_BIAS, 926b8e80941Smrg PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE, 927b8e80941Smrg PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE, 928b8e80941Smrg PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY, 929848b8605Smrg}; 930848b8605Smrg 931b8e80941Smrg/** Shader caps not specific to any single stage */ 932848b8605Smrgenum pipe_shader_cap 933848b8605Smrg{ 934848b8605Smrg PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */ 935848b8605Smrg PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS, 936848b8605Smrg PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS, 937848b8605Smrg PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS, 938848b8605Smrg PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH, 939848b8605Smrg PIPE_SHADER_CAP_MAX_INPUTS, 940b8e80941Smrg PIPE_SHADER_CAP_MAX_OUTPUTS, 941848b8605Smrg PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE, 942848b8605Smrg PIPE_SHADER_CAP_MAX_CONST_BUFFERS, 943848b8605Smrg PIPE_SHADER_CAP_MAX_TEMPS, 944848b8605Smrg /* boolean caps */ 945848b8605Smrg PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED, 946848b8605Smrg PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR, 947848b8605Smrg PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR, 948848b8605Smrg PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR, 949848b8605Smrg PIPE_SHADER_CAP_INDIRECT_CONST_ADDR, 950848b8605Smrg PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */ 951848b8605Smrg PIPE_SHADER_CAP_INTEGERS, 952b8e80941Smrg PIPE_SHADER_CAP_INT64_ATOMICS, 953b8e80941Smrg PIPE_SHADER_CAP_FP16, 954848b8605Smrg PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS, 955848b8605Smrg PIPE_SHADER_CAP_PREFERRED_IR, 956848b8605Smrg PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED, 957848b8605Smrg PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS, 958b8e80941Smrg PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED, /* all rounding modes */ 959b8e80941Smrg PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED, 960b8e80941Smrg PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED, 961b8e80941Smrg PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE, 962b8e80941Smrg PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT, 963b8e80941Smrg PIPE_SHADER_CAP_MAX_SHADER_BUFFERS, 964b8e80941Smrg PIPE_SHADER_CAP_SUPPORTED_IRS, 965b8e80941Smrg PIPE_SHADER_CAP_MAX_SHADER_IMAGES, 966b8e80941Smrg PIPE_SHADER_CAP_LOWER_IF_THRESHOLD, 967b8e80941Smrg PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS, 968b8e80941Smrg PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED, 969b8e80941Smrg PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS, 970b8e80941Smrg PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS, 971b8e80941Smrg PIPE_SHADER_CAP_SCALAR_ISA, 972848b8605Smrg}; 973848b8605Smrg 974848b8605Smrg/** 975848b8605Smrg * Shader intermediate representation. 976b8e80941Smrg * 977b8e80941Smrg * Note that if the driver requests something other than TGSI, it must 978b8e80941Smrg * always be prepared to receive TGSI in addition to its preferred IR. 979b8e80941Smrg * If the driver requests TGSI as its preferred IR, it will *always* 980b8e80941Smrg * get TGSI. 981b8e80941Smrg * 982b8e80941Smrg * Note that PIPE_SHADER_IR_TGSI should be zero for backwards compat with 983b8e80941Smrg * state trackers that only understand TGSI. 984848b8605Smrg */ 985848b8605Smrgenum pipe_shader_ir 986848b8605Smrg{ 987b8e80941Smrg PIPE_SHADER_IR_TGSI = 0, 988b8e80941Smrg PIPE_SHADER_IR_NATIVE, 989b8e80941Smrg PIPE_SHADER_IR_NIR, 990848b8605Smrg}; 991848b8605Smrg 992848b8605Smrg/** 993848b8605Smrg * Compute-specific implementation capability. They can be queried 994848b8605Smrg * using pipe_screen::get_compute_param. 995848b8605Smrg */ 996848b8605Smrgenum pipe_compute_cap 997848b8605Smrg{ 998b8e80941Smrg PIPE_COMPUTE_CAP_ADDRESS_BITS, 999848b8605Smrg PIPE_COMPUTE_CAP_IR_TARGET, 1000848b8605Smrg PIPE_COMPUTE_CAP_GRID_DIMENSION, 1001848b8605Smrg PIPE_COMPUTE_CAP_MAX_GRID_SIZE, 1002848b8605Smrg PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, 1003848b8605Smrg PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, 1004848b8605Smrg PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE, 1005848b8605Smrg PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, 1006848b8605Smrg PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE, 1007848b8605Smrg PIPE_COMPUTE_CAP_MAX_INPUT_SIZE, 1008848b8605Smrg PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE, 1009848b8605Smrg PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY, 1010848b8605Smrg PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS, 1011b8e80941Smrg PIPE_COMPUTE_CAP_IMAGES_SUPPORTED, 1012b8e80941Smrg PIPE_COMPUTE_CAP_SUBGROUP_SIZE, 1013b8e80941Smrg PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK, 1014b8e80941Smrg}; 1015b8e80941Smrg 1016b8e80941Smrg/** 1017b8e80941Smrg * Types of parameters for pipe_context::set_context_param. 1018b8e80941Smrg */ 1019b8e80941Smrgenum pipe_context_param 1020b8e80941Smrg{ 1021b8e80941Smrg /* A hint for the driver that it should pin its execution threads to 1022b8e80941Smrg * a group of cores sharing a specific L3 cache if the CPU has multiple 1023b8e80941Smrg * L3 caches. This is needed for good multithreading performance on 1024b8e80941Smrg * AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have 1025b8e80941Smrg * any internal threads or don't run on affected CPUs can ignore this. 1026b8e80941Smrg */ 1027b8e80941Smrg PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE, 1028848b8605Smrg}; 1029848b8605Smrg 1030848b8605Smrg/** 1031848b8605Smrg * Composite query types 1032848b8605Smrg */ 1033848b8605Smrg 1034848b8605Smrg/** 1035848b8605Smrg * Query result for PIPE_QUERY_SO_STATISTICS. 1036848b8605Smrg */ 1037848b8605Smrgstruct pipe_query_data_so_statistics 1038848b8605Smrg{ 1039848b8605Smrg uint64_t num_primitives_written; 1040848b8605Smrg uint64_t primitives_storage_needed; 1041848b8605Smrg}; 1042848b8605Smrg 1043848b8605Smrg/** 1044848b8605Smrg * Query result for PIPE_QUERY_TIMESTAMP_DISJOINT. 1045848b8605Smrg */ 1046848b8605Smrgstruct pipe_query_data_timestamp_disjoint 1047848b8605Smrg{ 1048848b8605Smrg uint64_t frequency; 1049848b8605Smrg boolean disjoint; 1050848b8605Smrg}; 1051848b8605Smrg 1052848b8605Smrg/** 1053848b8605Smrg * Query result for PIPE_QUERY_PIPELINE_STATISTICS. 1054848b8605Smrg */ 1055848b8605Smrgstruct pipe_query_data_pipeline_statistics 1056848b8605Smrg{ 1057848b8605Smrg uint64_t ia_vertices; /**< Num vertices read by the vertex fetcher. */ 1058848b8605Smrg uint64_t ia_primitives; /**< Num primitives read by the vertex fetcher. */ 1059848b8605Smrg uint64_t vs_invocations; /**< Num vertex shader invocations. */ 1060848b8605Smrg uint64_t gs_invocations; /**< Num geometry shader invocations. */ 1061848b8605Smrg uint64_t gs_primitives; /**< Num primitives output by a geometry shader. */ 1062848b8605Smrg uint64_t c_invocations; /**< Num primitives sent to the rasterizer. */ 1063848b8605Smrg uint64_t c_primitives; /**< Num primitives that were rendered. */ 1064848b8605Smrg uint64_t ps_invocations; /**< Num pixel shader invocations. */ 1065848b8605Smrg uint64_t hs_invocations; /**< Num hull shader invocations. */ 1066848b8605Smrg uint64_t ds_invocations; /**< Num domain shader invocations. */ 1067848b8605Smrg uint64_t cs_invocations; /**< Num compute shader invocations. */ 1068848b8605Smrg}; 1069848b8605Smrg 1070b8e80941Smrg/** 1071b8e80941Smrg * For batch queries. 1072b8e80941Smrg */ 1073b8e80941Smrgunion pipe_numeric_type_union 1074b8e80941Smrg{ 1075b8e80941Smrg uint64_t u64; 1076b8e80941Smrg uint32_t u32; 1077b8e80941Smrg float f; 1078b8e80941Smrg}; 1079b8e80941Smrg 1080848b8605Smrg/** 1081848b8605Smrg * Query result (returned by pipe_context::get_query_result). 1082848b8605Smrg */ 1083848b8605Smrgunion pipe_query_result 1084848b8605Smrg{ 1085848b8605Smrg /* PIPE_QUERY_OCCLUSION_PREDICATE */ 1086b8e80941Smrg /* PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE */ 1087848b8605Smrg /* PIPE_QUERY_SO_OVERFLOW_PREDICATE */ 1088b8e80941Smrg /* PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE */ 1089848b8605Smrg /* PIPE_QUERY_GPU_FINISHED */ 1090848b8605Smrg boolean b; 1091848b8605Smrg 1092848b8605Smrg /* PIPE_QUERY_OCCLUSION_COUNTER */ 1093848b8605Smrg /* PIPE_QUERY_TIMESTAMP */ 1094848b8605Smrg /* PIPE_QUERY_TIME_ELAPSED */ 1095848b8605Smrg /* PIPE_QUERY_PRIMITIVES_GENERATED */ 1096848b8605Smrg /* PIPE_QUERY_PRIMITIVES_EMITTED */ 1097b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_UINT64 */ 1098b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_BYTES */ 1099b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_MICROSECONDS */ 1100b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_HZ */ 1101848b8605Smrg uint64_t u64; 1102848b8605Smrg 1103b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_UINT */ 1104b8e80941Smrg uint32_t u32; 1105b8e80941Smrg 1106b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_FLOAT */ 1107b8e80941Smrg /* PIPE_DRIVER_QUERY_TYPE_PERCENTAGE */ 1108b8e80941Smrg float f; 1109b8e80941Smrg 1110848b8605Smrg /* PIPE_QUERY_SO_STATISTICS */ 1111848b8605Smrg struct pipe_query_data_so_statistics so_statistics; 1112848b8605Smrg 1113848b8605Smrg /* PIPE_QUERY_TIMESTAMP_DISJOINT */ 1114848b8605Smrg struct pipe_query_data_timestamp_disjoint timestamp_disjoint; 1115848b8605Smrg 1116848b8605Smrg /* PIPE_QUERY_PIPELINE_STATISTICS */ 1117848b8605Smrg struct pipe_query_data_pipeline_statistics pipeline_statistics; 1118b8e80941Smrg 1119b8e80941Smrg /* batch queries (variable length) */ 1120b8e80941Smrg union pipe_numeric_type_union batch[1]; 1121b8e80941Smrg}; 1122b8e80941Smrg 1123b8e80941Smrgenum pipe_query_value_type 1124b8e80941Smrg{ 1125b8e80941Smrg PIPE_QUERY_TYPE_I32, 1126b8e80941Smrg PIPE_QUERY_TYPE_U32, 1127b8e80941Smrg PIPE_QUERY_TYPE_I64, 1128b8e80941Smrg PIPE_QUERY_TYPE_U64, 1129848b8605Smrg}; 1130848b8605Smrg 1131848b8605Smrgunion pipe_color_union 1132848b8605Smrg{ 1133848b8605Smrg float f[4]; 1134848b8605Smrg int i[4]; 1135848b8605Smrg unsigned int ui[4]; 1136848b8605Smrg}; 1137848b8605Smrg 1138b8e80941Smrgenum pipe_driver_query_type 1139b8e80941Smrg{ 1140b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_UINT64, 1141b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_UINT, 1142b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_FLOAT, 1143b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_PERCENTAGE, 1144b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_BYTES, 1145b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_MICROSECONDS, 1146b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_HZ, 1147b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_DBM, 1148b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_TEMPERATURE, 1149b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_VOLTS, 1150b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_AMPS, 1151b8e80941Smrg PIPE_DRIVER_QUERY_TYPE_WATTS, 1152b8e80941Smrg}; 1153b8e80941Smrg 1154b8e80941Smrg/* Whether an average value per frame or a cumulative value should be 1155b8e80941Smrg * displayed. 1156b8e80941Smrg */ 1157b8e80941Smrgenum pipe_driver_query_result_type 1158b8e80941Smrg{ 1159b8e80941Smrg PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE, 1160b8e80941Smrg PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE, 1161b8e80941Smrg}; 1162b8e80941Smrg 1163b8e80941Smrg/** 1164b8e80941Smrg * Some hardware requires some hardware-specific queries to be submitted 1165b8e80941Smrg * as batched queries. The corresponding query objects are created using 1166b8e80941Smrg * create_batch_query, and at most one such query may be active at 1167b8e80941Smrg * any time. 1168b8e80941Smrg */ 1169b8e80941Smrg#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0) 1170b8e80941Smrg 1171b8e80941Smrg/* Do not list this query in the HUD. */ 1172b8e80941Smrg#define PIPE_DRIVER_QUERY_FLAG_DONT_LIST (1 << 1) 1173b8e80941Smrg 1174848b8605Smrgstruct pipe_driver_query_info 1175848b8605Smrg{ 1176848b8605Smrg const char *name; 1177848b8605Smrg unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */ 1178b8e80941Smrg union pipe_numeric_type_union max_value; /* max value that can be returned */ 1179b8e80941Smrg enum pipe_driver_query_type type; 1180b8e80941Smrg enum pipe_driver_query_result_type result_type; 1181b8e80941Smrg unsigned group_id; 1182b8e80941Smrg unsigned flags; 1183b8e80941Smrg}; 1184b8e80941Smrg 1185b8e80941Smrgstruct pipe_driver_query_group_info 1186b8e80941Smrg{ 1187b8e80941Smrg const char *name; 1188b8e80941Smrg unsigned max_active_queries; 1189b8e80941Smrg unsigned num_queries; 1190b8e80941Smrg}; 1191b8e80941Smrg 1192b8e80941Smrgenum pipe_fd_type 1193b8e80941Smrg{ 1194b8e80941Smrg PIPE_FD_TYPE_NATIVE_SYNC, 1195b8e80941Smrg PIPE_FD_TYPE_SYNCOBJ, 1196848b8605Smrg}; 1197848b8605Smrg 1198b8e80941Smrgenum pipe_debug_type 1199b8e80941Smrg{ 1200b8e80941Smrg PIPE_DEBUG_TYPE_OUT_OF_MEMORY = 1, 1201b8e80941Smrg PIPE_DEBUG_TYPE_ERROR, 1202b8e80941Smrg PIPE_DEBUG_TYPE_SHADER_INFO, 1203b8e80941Smrg PIPE_DEBUG_TYPE_PERF_INFO, 1204b8e80941Smrg PIPE_DEBUG_TYPE_INFO, 1205b8e80941Smrg PIPE_DEBUG_TYPE_FALLBACK, 1206b8e80941Smrg PIPE_DEBUG_TYPE_CONFORMANCE, 1207b8e80941Smrg}; 1208b8e80941Smrg 1209b8e80941Smrg#define PIPE_UUID_SIZE 16 1210b8e80941Smrg 1211848b8605Smrg#ifdef __cplusplus 1212848b8605Smrg} 1213848b8605Smrg#endif 1214848b8605Smrg 1215848b8605Smrg#endif 1216