Path: blob/21.2-virgl/src/gallium/include/pipe/p_defines.h
4565 views
/**************************************************************************1*2* Copyright 2007 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/2627#ifndef PIPE_DEFINES_H28#define PIPE_DEFINES_H2930#include "p_compiler.h"3132#ifdef __cplusplus33extern "C" {34#endif3536/**37* Gallium error codes.38*39* - A zero value always means success.40* - A negative value always means failure.41* - The meaning of a positive value is function dependent.42*/43enum pipe_error44{45PIPE_OK = 0,46PIPE_ERROR = -1, /**< Generic error */47PIPE_ERROR_BAD_INPUT = -2,48PIPE_ERROR_OUT_OF_MEMORY = -3,49PIPE_ERROR_RETRY = -450/* TODO */51};5253enum pipe_blendfactor {54PIPE_BLENDFACTOR_ONE = 1,55PIPE_BLENDFACTOR_SRC_COLOR,56PIPE_BLENDFACTOR_SRC_ALPHA,57PIPE_BLENDFACTOR_DST_ALPHA,58PIPE_BLENDFACTOR_DST_COLOR,59PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE,60PIPE_BLENDFACTOR_CONST_COLOR,61PIPE_BLENDFACTOR_CONST_ALPHA,62PIPE_BLENDFACTOR_SRC1_COLOR,63PIPE_BLENDFACTOR_SRC1_ALPHA,6465PIPE_BLENDFACTOR_ZERO = 0x11,66PIPE_BLENDFACTOR_INV_SRC_COLOR,67PIPE_BLENDFACTOR_INV_SRC_ALPHA,68PIPE_BLENDFACTOR_INV_DST_ALPHA,69PIPE_BLENDFACTOR_INV_DST_COLOR,7071PIPE_BLENDFACTOR_INV_CONST_COLOR = 0x17,72PIPE_BLENDFACTOR_INV_CONST_ALPHA,73PIPE_BLENDFACTOR_INV_SRC1_COLOR,74PIPE_BLENDFACTOR_INV_SRC1_ALPHA,75};7677enum pipe_blend_func {78PIPE_BLEND_ADD,79PIPE_BLEND_SUBTRACT,80PIPE_BLEND_REVERSE_SUBTRACT,81PIPE_BLEND_MIN,82PIPE_BLEND_MAX,83};8485enum pipe_logicop {86PIPE_LOGICOP_CLEAR,87PIPE_LOGICOP_NOR,88PIPE_LOGICOP_AND_INVERTED,89PIPE_LOGICOP_COPY_INVERTED,90PIPE_LOGICOP_AND_REVERSE,91PIPE_LOGICOP_INVERT,92PIPE_LOGICOP_XOR,93PIPE_LOGICOP_NAND,94PIPE_LOGICOP_AND,95PIPE_LOGICOP_EQUIV,96PIPE_LOGICOP_NOOP,97PIPE_LOGICOP_OR_INVERTED,98PIPE_LOGICOP_COPY,99PIPE_LOGICOP_OR_REVERSE,100PIPE_LOGICOP_OR,101PIPE_LOGICOP_SET,102};103104#define PIPE_MASK_R 0x1105#define PIPE_MASK_G 0x2106#define PIPE_MASK_B 0x4107#define PIPE_MASK_A 0x8108#define PIPE_MASK_RGBA 0xf109#define PIPE_MASK_Z 0x10110#define PIPE_MASK_S 0x20111#define PIPE_MASK_ZS 0x30112#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS)113114115/**116* Inequality functions. Used for depth test, stencil compare, alpha117* test, shadow compare, etc.118*/119enum pipe_compare_func {120PIPE_FUNC_NEVER,121PIPE_FUNC_LESS,122PIPE_FUNC_EQUAL,123PIPE_FUNC_LEQUAL,124PIPE_FUNC_GREATER,125PIPE_FUNC_NOTEQUAL,126PIPE_FUNC_GEQUAL,127PIPE_FUNC_ALWAYS,128};129130/** Polygon fill mode */131enum {132PIPE_POLYGON_MODE_FILL,133PIPE_POLYGON_MODE_LINE,134PIPE_POLYGON_MODE_POINT,135PIPE_POLYGON_MODE_FILL_RECTANGLE,136};137138/** Polygon face specification, eg for culling */139#define PIPE_FACE_NONE 0140#define PIPE_FACE_FRONT 1141#define PIPE_FACE_BACK 2142#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK)143144/** Stencil ops */145enum pipe_stencil_op {146PIPE_STENCIL_OP_KEEP,147PIPE_STENCIL_OP_ZERO,148PIPE_STENCIL_OP_REPLACE,149PIPE_STENCIL_OP_INCR,150PIPE_STENCIL_OP_DECR,151PIPE_STENCIL_OP_INCR_WRAP,152PIPE_STENCIL_OP_DECR_WRAP,153PIPE_STENCIL_OP_INVERT,154};155156/** Texture types.157* See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D158*/159enum pipe_texture_target160{161PIPE_BUFFER,162PIPE_TEXTURE_1D,163PIPE_TEXTURE_2D,164PIPE_TEXTURE_3D,165PIPE_TEXTURE_CUBE,166PIPE_TEXTURE_RECT,167PIPE_TEXTURE_1D_ARRAY,168PIPE_TEXTURE_2D_ARRAY,169PIPE_TEXTURE_CUBE_ARRAY,170PIPE_MAX_TEXTURE_TYPES,171};172173enum pipe_tex_face {174PIPE_TEX_FACE_POS_X,175PIPE_TEX_FACE_NEG_X,176PIPE_TEX_FACE_POS_Y,177PIPE_TEX_FACE_NEG_Y,178PIPE_TEX_FACE_POS_Z,179PIPE_TEX_FACE_NEG_Z,180PIPE_TEX_FACE_MAX,181};182183enum pipe_tex_wrap {184PIPE_TEX_WRAP_REPEAT,185PIPE_TEX_WRAP_CLAMP,186PIPE_TEX_WRAP_CLAMP_TO_EDGE,187PIPE_TEX_WRAP_CLAMP_TO_BORDER,188PIPE_TEX_WRAP_MIRROR_REPEAT,189PIPE_TEX_WRAP_MIRROR_CLAMP,190PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE,191PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER,192};193194/** Between mipmaps, ie mipfilter */195enum pipe_tex_mipfilter {196PIPE_TEX_MIPFILTER_NEAREST,197PIPE_TEX_MIPFILTER_LINEAR,198PIPE_TEX_MIPFILTER_NONE,199};200201/** Within a mipmap, ie min/mag filter */202enum pipe_tex_filter {203PIPE_TEX_FILTER_NEAREST,204PIPE_TEX_FILTER_LINEAR,205};206207enum pipe_tex_compare {208PIPE_TEX_COMPARE_NONE,209PIPE_TEX_COMPARE_R_TO_TEXTURE,210};211212enum pipe_tex_reduction_mode {213PIPE_TEX_REDUCTION_WEIGHTED_AVERAGE,214PIPE_TEX_REDUCTION_MIN,215PIPE_TEX_REDUCTION_MAX,216};217218/**219* Clear buffer bits220*/221#define PIPE_CLEAR_DEPTH (1 << 0)222#define PIPE_CLEAR_STENCIL (1 << 1)223#define PIPE_CLEAR_COLOR0 (1 << 2)224#define PIPE_CLEAR_COLOR1 (1 << 3)225#define PIPE_CLEAR_COLOR2 (1 << 4)226#define PIPE_CLEAR_COLOR3 (1 << 5)227#define PIPE_CLEAR_COLOR4 (1 << 6)228#define PIPE_CLEAR_COLOR5 (1 << 7)229#define PIPE_CLEAR_COLOR6 (1 << 8)230#define PIPE_CLEAR_COLOR7 (1 << 9)231/** Combined flags */232/** All color buffers currently bound */233#define PIPE_CLEAR_COLOR (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \234PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \235PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \236PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7)237#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)238239/**240* CPU access map flags241*/242enum pipe_map_flags243{244/**245* Resource contents read back (or accessed directly) at transfer246* create time.247*/248PIPE_MAP_READ = 1 << 0,249250/**251* Resource contents will be written back at buffer/texture_unmap252* time (or modified as a result of being accessed directly).253*/254PIPE_MAP_WRITE = 1 << 1,255256/**257* Read/modify/write258*/259PIPE_MAP_READ_WRITE = PIPE_MAP_READ | PIPE_MAP_WRITE,260261/**262* The transfer should map the texture storage directly. The driver may263* return NULL if that isn't possible, and the gallium frontend needs to cope264* with that and use an alternative path without this flag.265*266* E.g. the gallium frontend could have a simpler path which maps textures and267* does read/modify/write cycles on them directly, and a more complicated268* path which uses minimal read and write transfers.269*270* This flag supresses implicit "DISCARD" for buffer_subdata.271*/272PIPE_MAP_DIRECTLY = 1 << 2,273274/**275* Discards the memory within the mapped region.276*277* It should not be used with PIPE_MAP_READ.278*279* See also:280* - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag.281*/282PIPE_MAP_DISCARD_RANGE = 1 << 3,283284/**285* Fail if the resource cannot be mapped immediately.286*287* See also:288* - Direct3D's D3DLOCK_DONOTWAIT flag.289* - Mesa's MESA_MAP_NOWAIT_BIT flag.290* - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag.291*/292PIPE_MAP_DONTBLOCK = 1 << 4,293294/**295* Do not attempt to synchronize pending operations on the resource when mapping.296*297* It should not be used with PIPE_MAP_READ.298*299* See also:300* - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag.301* - Direct3D's D3DLOCK_NOOVERWRITE flag.302* - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag.303*/304PIPE_MAP_UNSYNCHRONIZED = 1 << 5,305306/**307* Written ranges will be notified later with308* pipe_context::transfer_flush_region.309*310* It should not be used with PIPE_MAP_READ.311*312* See also:313* - pipe_context::transfer_flush_region314* - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag.315*/316PIPE_MAP_FLUSH_EXPLICIT = 1 << 6,317318/**319* Discards all memory backing the resource.320*321* It should not be used with PIPE_MAP_READ.322*323* This is equivalent to:324* - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT325* - BufferData(NULL) on a GL buffer326* - Direct3D's D3DLOCK_DISCARD flag.327* - WDDM's D3DDDICB_LOCKFLAGS.Discard flag.328* - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag329* - D3D10's D3D10_MAP_WRITE_DISCARD flag.330*/331PIPE_MAP_DISCARD_WHOLE_RESOURCE = 1 << 7,332333/**334* Allows the resource to be used for rendering while mapped.335*336* PIPE_RESOURCE_FLAG_MAP_PERSISTENT must be set when creating337* the resource.338*339* If COHERENT is not set, memory_barrier(PIPE_BARRIER_MAPPED_BUFFER)340* must be called to ensure the device can see what the CPU has written.341*/342PIPE_MAP_PERSISTENT = 1 << 8,343344/**345* If PERSISTENT is set, this ensures any writes done by the device are346* immediately visible to the CPU and vice versa.347*348* PIPE_RESOURCE_FLAG_MAP_COHERENT must be set when creating349* the resource.350*/351PIPE_MAP_COHERENT = 1 << 9,352353/**354* Map a resource in a thread-safe manner, because the calling thread can355* be any thread. It can only be used if both WRITE and UNSYNCHRONIZED are356* set.357*/358PIPE_MAP_THREAD_SAFE = 1 << 10,359360/**361* Map only the depth aspect of a resource362*/363PIPE_MAP_DEPTH_ONLY = 1 << 11,364365/**366* Map only the stencil aspect of a resource367*/368PIPE_MAP_STENCIL_ONLY = 1 << 12,369370/**371* Mapping will be used only once (never remapped).372*/373PIPE_MAP_ONCE = 1 << 13,374375/**376* This and higher bits are reserved for private use by drivers. Drivers377* should use this as (PIPE_MAP_DRV_PRV << i).378*/379PIPE_MAP_DRV_PRV = 1 << 14,380};381382/**383* Flags for the flush function.384*/385enum pipe_flush_flags386{387PIPE_FLUSH_END_OF_FRAME = (1 << 0),388PIPE_FLUSH_DEFERRED = (1 << 1),389PIPE_FLUSH_FENCE_FD = (1 << 2),390PIPE_FLUSH_ASYNC = (1 << 3),391PIPE_FLUSH_HINT_FINISH = (1 << 4),392PIPE_FLUSH_TOP_OF_PIPE = (1 << 5),393PIPE_FLUSH_BOTTOM_OF_PIPE = (1 << 6),394};395396/**397* Flags for pipe_context::dump_debug_state.398*/399#define PIPE_DUMP_DEVICE_STATUS_REGISTERS (1 << 0)400401/**402* Create a compute-only context. Use in pipe_screen::context_create.403* This disables draw, blit, and clear*, render_condition, and other graphics404* functions. Interop with other graphics contexts is still allowed.405* This allows scheduling jobs on a compute-only hardware command queue that406* can run in parallel with graphics without stalling it.407*/408#define PIPE_CONTEXT_COMPUTE_ONLY (1 << 0)409410/**411* Gather debug information and expect that pipe_context::dump_debug_state412* will be called. Use in pipe_screen::context_create.413*/414#define PIPE_CONTEXT_DEBUG (1 << 1)415416/**417* Whether out-of-bounds shader loads must return zero and out-of-bounds418* shader stores must be dropped.419*/420#define PIPE_CONTEXT_ROBUST_BUFFER_ACCESS (1 << 2)421422/**423* Prefer threaded pipe_context. It also implies that video codec functions424* will not be used. (they will be either no-ops or NULL when threading is425* enabled)426*/427#define PIPE_CONTEXT_PREFER_THREADED (1 << 3)428429/**430* Create a high priority context.431*/432#define PIPE_CONTEXT_HIGH_PRIORITY (1 << 4)433434/**435* Create a low priority context.436*/437#define PIPE_CONTEXT_LOW_PRIORITY (1 << 5)438439/** Stop execution if the device is reset. */440#define PIPE_CONTEXT_LOSE_CONTEXT_ON_RESET (1 << 6)441442/**443* Flags for pipe_context::memory_barrier.444*/445#define PIPE_BARRIER_MAPPED_BUFFER (1 << 0)446#define PIPE_BARRIER_SHADER_BUFFER (1 << 1)447#define PIPE_BARRIER_QUERY_BUFFER (1 << 2)448#define PIPE_BARRIER_VERTEX_BUFFER (1 << 3)449#define PIPE_BARRIER_INDEX_BUFFER (1 << 4)450#define PIPE_BARRIER_CONSTANT_BUFFER (1 << 5)451#define PIPE_BARRIER_INDIRECT_BUFFER (1 << 6)452#define PIPE_BARRIER_TEXTURE (1 << 7)453#define PIPE_BARRIER_IMAGE (1 << 8)454#define PIPE_BARRIER_FRAMEBUFFER (1 << 9)455#define PIPE_BARRIER_STREAMOUT_BUFFER (1 << 10)456#define PIPE_BARRIER_GLOBAL_BUFFER (1 << 11)457#define PIPE_BARRIER_UPDATE_BUFFER (1 << 12)458#define PIPE_BARRIER_UPDATE_TEXTURE (1 << 13)459#define PIPE_BARRIER_ALL ((1 << 14) - 1)460461#define PIPE_BARRIER_UPDATE \462(PIPE_BARRIER_UPDATE_BUFFER | PIPE_BARRIER_UPDATE_TEXTURE)463464/**465* Flags for pipe_context::texture_barrier.466*/467#define PIPE_TEXTURE_BARRIER_SAMPLER (1 << 0)468#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER (1 << 1)469470/**471* Resource binding flags -- gallium frontends must specify in advance all472* the ways a resource might be used.473*/474#define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */475#define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */476#define PIPE_BIND_BLENDABLE (1 << 2) /* create_surface */477#define PIPE_BIND_SAMPLER_VIEW (1 << 3) /* create_sampler_view */478#define PIPE_BIND_VERTEX_BUFFER (1 << 4) /* set_vertex_buffers */479#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */480#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */481#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */482/* gap */483#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */484#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */485#define PIPE_BIND_CUSTOM (1 << 12) /* gallium frontend/winsys usages */486#define PIPE_BIND_GLOBAL (1 << 13) /* set_global_binding */487#define PIPE_BIND_SHADER_BUFFER (1 << 14) /* set_shader_buffers */488#define PIPE_BIND_SHADER_IMAGE (1 << 15) /* set_shader_images */489#define PIPE_BIND_COMPUTE_RESOURCE (1 << 16) /* set_compute_resources */490#define PIPE_BIND_COMMAND_ARGS_BUFFER (1 << 17) /* pipe_draw_info.indirect */491#define PIPE_BIND_QUERY_BUFFER (1 << 18) /* get_query_result_resource */492493/**494* The first two flags above were previously part of the amorphous495* TEXTURE_USAGE, most of which are now descriptions of the ways a496* particular texture can be bound to the gallium pipeline. The two flags497* below do not fit within that and probably need to be migrated to some498* other place.499*500* Scanout is used to ask for a texture suitable for actual scanout (hence501* the name), which implies extra layout constraints on some hardware.502* It may also have some special meaning regarding mouse cursor images.503*504* The shared flag is quite underspecified, but certainly isn't a505* binding flag - it seems more like a message to the winsys to create506* a shareable allocation.507*508* The third flag has been added to be able to force textures to be created509* in linear mode (no tiling).510*/511#define PIPE_BIND_SCANOUT (1 << 19) /* */512#define PIPE_BIND_SHARED (1 << 20) /* get_texture_handle ??? */513#define PIPE_BIND_LINEAR (1 << 21)514#define PIPE_BIND_PROTECTED (1 << 22) /* Resource will be protected/encrypted */515#define PIPE_BIND_SAMPLER_REDUCTION_MINMAX (1 << 23) /* PIPE_CAP_SAMPLER_REDUCTION_MINMAX */516517518/**519* Flags for the driver about resource behaviour:520*/521#define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0)522#define PIPE_RESOURCE_FLAG_MAP_COHERENT (1 << 1)523#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2)524#define PIPE_RESOURCE_FLAG_SPARSE (1 << 3)525#define PIPE_RESOURCE_FLAG_SINGLE_THREAD_USE (1 << 4)526#define PIPE_RESOURCE_FLAG_ENCRYPTED (1 << 5)527#define PIPE_RESOURCE_FLAG_DONT_OVER_ALLOCATE (1 << 6)528#define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 8) /* driver/winsys private */529#define PIPE_RESOURCE_FLAG_FRONTEND_PRIV (1 << 24) /* gallium frontend private */530531/**532* Hint about the expected lifecycle of a resource.533* Sorted according to GPU vs CPU access.534*/535enum pipe_resource_usage {536PIPE_USAGE_DEFAULT, /* fast GPU access */537PIPE_USAGE_IMMUTABLE, /* fast GPU access, immutable */538PIPE_USAGE_DYNAMIC, /* uploaded data is used multiple times */539PIPE_USAGE_STREAM, /* uploaded data is used once */540PIPE_USAGE_STAGING, /* fast CPU access */541};542543/**544* Shaders545*/546enum pipe_shader_type {547PIPE_SHADER_VERTEX,548PIPE_SHADER_FRAGMENT,549PIPE_SHADER_GEOMETRY,550PIPE_SHADER_TESS_CTRL,551PIPE_SHADER_TESS_EVAL,552PIPE_SHADER_COMPUTE,553PIPE_SHADER_TYPES,554};555556/**557* Primitive types:558*/559enum pipe_prim_type {560PIPE_PRIM_POINTS,561PIPE_PRIM_LINES,562PIPE_PRIM_LINE_LOOP,563PIPE_PRIM_LINE_STRIP,564PIPE_PRIM_TRIANGLES,565PIPE_PRIM_TRIANGLE_STRIP,566PIPE_PRIM_TRIANGLE_FAN,567PIPE_PRIM_QUADS,568PIPE_PRIM_QUAD_STRIP,569PIPE_PRIM_POLYGON,570PIPE_PRIM_LINES_ADJACENCY,571PIPE_PRIM_LINE_STRIP_ADJACENCY,572PIPE_PRIM_TRIANGLES_ADJACENCY,573PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY,574PIPE_PRIM_PATCHES,575PIPE_PRIM_MAX,576};577578/**579* Tessellator spacing types580*/581enum pipe_tess_spacing {582PIPE_TESS_SPACING_FRACTIONAL_ODD,583PIPE_TESS_SPACING_FRACTIONAL_EVEN,584PIPE_TESS_SPACING_EQUAL,585};586587/**588* Query object types589*/590enum pipe_query_type {591PIPE_QUERY_OCCLUSION_COUNTER,592PIPE_QUERY_OCCLUSION_PREDICATE,593PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE,594PIPE_QUERY_TIMESTAMP,595PIPE_QUERY_TIMESTAMP_DISJOINT,596PIPE_QUERY_TIME_ELAPSED,597PIPE_QUERY_PRIMITIVES_GENERATED,598PIPE_QUERY_PRIMITIVES_EMITTED,599PIPE_QUERY_SO_STATISTICS,600PIPE_QUERY_SO_OVERFLOW_PREDICATE,601PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE,602PIPE_QUERY_GPU_FINISHED,603PIPE_QUERY_PIPELINE_STATISTICS,604PIPE_QUERY_PIPELINE_STATISTICS_SINGLE,605PIPE_QUERY_TYPES,606/* start of driver queries, see pipe_screen::get_driver_query_info */607PIPE_QUERY_DRIVER_SPECIFIC = 256,608};609610/**611* Index for PIPE_QUERY_PIPELINE_STATISTICS subqueries.612*/613enum pipe_statistics_query_index {614PIPE_STAT_QUERY_IA_VERTICES,615PIPE_STAT_QUERY_IA_PRIMITIVES,616PIPE_STAT_QUERY_VS_INVOCATIONS,617PIPE_STAT_QUERY_GS_INVOCATIONS,618PIPE_STAT_QUERY_GS_PRIMITIVES,619PIPE_STAT_QUERY_C_INVOCATIONS,620PIPE_STAT_QUERY_C_PRIMITIVES,621PIPE_STAT_QUERY_PS_INVOCATIONS,622PIPE_STAT_QUERY_HS_INVOCATIONS,623PIPE_STAT_QUERY_DS_INVOCATIONS,624PIPE_STAT_QUERY_CS_INVOCATIONS,625};626627/**628* Conditional rendering modes629*/630enum pipe_render_cond_flag {631PIPE_RENDER_COND_WAIT,632PIPE_RENDER_COND_NO_WAIT,633PIPE_RENDER_COND_BY_REGION_WAIT,634PIPE_RENDER_COND_BY_REGION_NO_WAIT,635};636637/**638* Point sprite coord modes639*/640enum pipe_sprite_coord_mode {641PIPE_SPRITE_COORD_UPPER_LEFT,642PIPE_SPRITE_COORD_LOWER_LEFT,643};644645/**646* Texture & format swizzles647*/648enum pipe_swizzle {649PIPE_SWIZZLE_X,650PIPE_SWIZZLE_Y,651PIPE_SWIZZLE_Z,652PIPE_SWIZZLE_W,653PIPE_SWIZZLE_0,654PIPE_SWIZZLE_1,655PIPE_SWIZZLE_NONE,656PIPE_SWIZZLE_MAX, /**< Number of enums counter (must be last) */657};658659/**660* Viewport swizzles661*/662enum pipe_viewport_swizzle {663PIPE_VIEWPORT_SWIZZLE_POSITIVE_X,664PIPE_VIEWPORT_SWIZZLE_NEGATIVE_X,665PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y,666PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Y,667PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z,668PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Z,669PIPE_VIEWPORT_SWIZZLE_POSITIVE_W,670PIPE_VIEWPORT_SWIZZLE_NEGATIVE_W,671};672673#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull674675676/**677* Device reset status.678*/679enum pipe_reset_status680{681PIPE_NO_RESET,682PIPE_GUILTY_CONTEXT_RESET,683PIPE_INNOCENT_CONTEXT_RESET,684PIPE_UNKNOWN_CONTEXT_RESET,685};686687688/**689* Conservative rasterization modes.690*/691enum pipe_conservative_raster_mode692{693PIPE_CONSERVATIVE_RASTER_OFF,694695/**696* The post-snap mode means the conservative rasterization occurs after697* the conversion from floating-point to fixed-point coordinates698* on the subpixel grid.699*/700PIPE_CONSERVATIVE_RASTER_POST_SNAP,701702/**703* The pre-snap mode means the conservative rasterization occurs before704* the conversion from floating-point to fixed-point coordinates.705*/706PIPE_CONSERVATIVE_RASTER_PRE_SNAP,707};708709710/**711* resource_get_handle flags.712*/713/* Requires pipe_context::flush_resource before external use. */714#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0)715/* Expected external use of the resource: */716#define PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE (1 << 1)717#define PIPE_HANDLE_USAGE_SHADER_WRITE (1 << 2)718719/**720* pipe_image_view access flags.721*/722#define PIPE_IMAGE_ACCESS_READ (1 << 0)723#define PIPE_IMAGE_ACCESS_WRITE (1 << 1)724#define PIPE_IMAGE_ACCESS_READ_WRITE (PIPE_IMAGE_ACCESS_READ | \725PIPE_IMAGE_ACCESS_WRITE)726727/**728* Implementation capabilities/limits which are queried through729* pipe_screen::get_param()730*/731enum pipe_cap732{733PIPE_CAP_GRAPHICS,734PIPE_CAP_NPOT_TEXTURES,735PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS,736PIPE_CAP_ANISOTROPIC_FILTER,737PIPE_CAP_POINT_SPRITE,738PIPE_CAP_MAX_RENDER_TARGETS,739PIPE_CAP_OCCLUSION_QUERY,740PIPE_CAP_QUERY_TIME_ELAPSED,741PIPE_CAP_TEXTURE_SHADOW_MAP,742PIPE_CAP_TEXTURE_SWIZZLE,743PIPE_CAP_MAX_TEXTURE_2D_SIZE,744PIPE_CAP_MAX_TEXTURE_3D_LEVELS,745PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS,746PIPE_CAP_TEXTURE_MIRROR_CLAMP,747PIPE_CAP_BLEND_EQUATION_SEPARATE,748PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS,749PIPE_CAP_PRIMITIVE_RESTART,750/** subset of PRIMITIVE_RESTART where the restart index is always the fixed751* maximum value for the index type752*/753PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX,754/** blend enables and write masks per rendertarget */755PIPE_CAP_INDEP_BLEND_ENABLE,756/** different blend funcs per rendertarget */757PIPE_CAP_INDEP_BLEND_FUNC,758PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS,759PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT,760PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT,761PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER,762PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER,763PIPE_CAP_DEPTH_CLIP_DISABLE,764PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE,765PIPE_CAP_SHADER_STENCIL_EXPORT,766PIPE_CAP_TGSI_INSTANCEID,767PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR,768PIPE_CAP_FRAGMENT_COLOR_CLAMPED,769PIPE_CAP_MIXED_COLORBUFFER_FORMATS,770PIPE_CAP_SEAMLESS_CUBE_MAP,771PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE,772PIPE_CAP_MIN_TEXEL_OFFSET,773PIPE_CAP_MAX_TEXEL_OFFSET,774PIPE_CAP_CONDITIONAL_RENDER,775PIPE_CAP_TEXTURE_BARRIER,776PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS,777PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS,778PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME,779PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS,780PIPE_CAP_VERTEX_COLOR_UNCLAMPED,781PIPE_CAP_VERTEX_COLOR_CLAMPED,782PIPE_CAP_GLSL_FEATURE_LEVEL,783PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY,784PIPE_CAP_ESSL_FEATURE_LEVEL,785PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION,786PIPE_CAP_USER_VERTEX_BUFFERS,787PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY,788PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY,789PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY,790PIPE_CAP_COMPUTE,791PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT,792PIPE_CAP_START_INSTANCE,793PIPE_CAP_QUERY_TIMESTAMP,794PIPE_CAP_TEXTURE_MULTISAMPLE,795PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT,796PIPE_CAP_CUBE_MAP_ARRAY,797PIPE_CAP_TEXTURE_BUFFER_OBJECTS,798PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT,799PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY,800PIPE_CAP_TGSI_TEXCOORD,801PIPE_CAP_TEXTURE_BUFFER_SAMPLER,802PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER,803PIPE_CAP_QUERY_PIPELINE_STATISTICS,804PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK,805PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE,806PIPE_CAP_MAX_VIEWPORTS,807PIPE_CAP_ENDIANNESS,808PIPE_CAP_MIXED_FRAMEBUFFER_SIZES,809PIPE_CAP_TGSI_VS_LAYER_VIEWPORT,810PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES,811PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS,812PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS,813PIPE_CAP_TEXTURE_GATHER_SM5,814PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT,815PIPE_CAP_FAKE_SW_MSAA,816PIPE_CAP_TEXTURE_QUERY_LOD,817PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET,818PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET,819PIPE_CAP_SAMPLE_SHADING,820PIPE_CAP_TEXTURE_GATHER_OFFSETS,821PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION,822PIPE_CAP_MAX_VERTEX_STREAMS,823PIPE_CAP_DRAW_INDIRECT,824PIPE_CAP_TGSI_FS_FINE_DERIVATIVE,825PIPE_CAP_VENDOR_ID,826PIPE_CAP_DEVICE_ID,827PIPE_CAP_ACCELERATED,828PIPE_CAP_VIDEO_MEMORY,829PIPE_CAP_UMA,830PIPE_CAP_CONDITIONAL_RENDER_INVERTED,831PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE,832PIPE_CAP_SAMPLER_VIEW_TARGET,833PIPE_CAP_CLIP_HALFZ,834PIPE_CAP_VERTEXID_NOBASE,835PIPE_CAP_POLYGON_OFFSET_CLAMP,836PIPE_CAP_MULTISAMPLE_Z_RESOLVE,837PIPE_CAP_RESOURCE_FROM_USER_MEMORY,838PIPE_CAP_RESOURCE_FROM_USER_MEMORY_COMPUTE_ONLY,839PIPE_CAP_DEVICE_RESET_STATUS_QUERY,840PIPE_CAP_MAX_SHADER_PATCH_VARYINGS,841PIPE_CAP_TEXTURE_FLOAT_LINEAR,842PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR,843PIPE_CAP_DEPTH_BOUNDS_TEST,844PIPE_CAP_TGSI_TXQS,845PIPE_CAP_FORCE_PERSAMPLE_INTERP,846PIPE_CAP_SHAREABLE_SHADERS,847PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS,848PIPE_CAP_CLEAR_TEXTURE,849PIPE_CAP_CLEAR_SCISSORED,850PIPE_CAP_DRAW_PARAMETERS,851PIPE_CAP_TGSI_PACK_HALF_FLOAT,852PIPE_CAP_MULTI_DRAW_INDIRECT,853PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS,854PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL,855PIPE_CAP_TGSI_FS_POINT_IS_SYSVAL,856PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL,857PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT,858PIPE_CAP_INVALIDATE_BUFFER,859PIPE_CAP_GENERATE_MIPMAP,860PIPE_CAP_STRING_MARKER,861PIPE_CAP_SURFACE_REINTERPRET_BLOCKS,862PIPE_CAP_QUERY_BUFFER_OBJECT,863PIPE_CAP_QUERY_MEMORY_INFO,864PIPE_CAP_PCI_GROUP,865PIPE_CAP_PCI_BUS,866PIPE_CAP_PCI_DEVICE,867PIPE_CAP_PCI_FUNCTION,868PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT,869PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR,870PIPE_CAP_CULL_DISTANCE,871PIPE_CAP_TGSI_VOTE,872PIPE_CAP_MAX_WINDOW_RECTANGLES,873PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED,874PIPE_CAP_VIEWPORT_SUBPIXEL_BITS,875PIPE_CAP_RASTERIZER_SUBPIXEL_BITS,876PIPE_CAP_MIXED_COLOR_DEPTH_BITS,877PIPE_CAP_TGSI_ARRAY_COMPONENTS,878PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS,879PIPE_CAP_TGSI_CAN_READ_OUTPUTS,880PIPE_CAP_NATIVE_FENCE_FD,881PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY,882PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS,883PIPE_CAP_FBFETCH,884PIPE_CAP_TGSI_MUL_ZERO_WINS,885PIPE_CAP_DOUBLES,886PIPE_CAP_INT64,887PIPE_CAP_INT64_DIVMOD,888PIPE_CAP_TGSI_TEX_TXF_LZ,889PIPE_CAP_TGSI_CLOCK,890PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE,891PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE,892PIPE_CAP_TGSI_BALLOT,893PIPE_CAP_TGSI_TES_LAYER_VIEWPORT,894PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX,895PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION,896PIPE_CAP_POST_DEPTH_COVERAGE,897PIPE_CAP_BINDLESS_TEXTURE,898PIPE_CAP_NIR_SAMPLERS_AS_DEREF,899PIPE_CAP_QUERY_SO_OVERFLOW,900PIPE_CAP_MEMOBJ,901PIPE_CAP_LOAD_CONSTBUF,902PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS,903PIPE_CAP_TILE_RASTER_ORDER,904PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES,905PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS,906PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET,907PIPE_CAP_CONTEXT_PRIORITY_MASK,908PIPE_CAP_FENCE_SIGNAL,909PIPE_CAP_CONSTBUF0_FLAGS,910PIPE_CAP_PACKED_UNIFORMS,911PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES,912PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES,913PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES,914PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES,915PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS,916PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE,917PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE,918PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS,919PIPE_CAP_MAX_GS_INVOCATIONS,920PIPE_CAP_MAX_SHADER_BUFFER_SIZE,921PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE,922PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS,923PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS,924PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS,925PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET,926PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET,927PIPE_CAP_SURFACE_SAMPLE_COUNT,928PIPE_CAP_TGSI_ATOMFADD,929PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE,930PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND,931PIPE_CAP_DEST_SURFACE_SRGB_CONTROL,932PIPE_CAP_NIR_COMPACT_ARRAYS,933PIPE_CAP_MAX_VARYINGS,934PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK,935PIPE_CAP_COMPUTE_SHADER_DERIVATIVES,936PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,937PIPE_CAP_IMAGE_LOAD_FORMATTED,938PIPE_CAP_THROTTLE,939PIPE_CAP_DMABUF,940PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA,941PIPE_CAP_FRAGMENT_SHADER_INTERLOCK,942PIPE_CAP_FBFETCH_COHERENT,943PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED,944PIPE_CAP_ATOMIC_FLOAT_MINMAX,945PIPE_CAP_TGSI_DIV,946PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD,947PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES,948PIPE_CAP_VERTEX_SHADER_SATURATE,949PIPE_CAP_TEXTURE_SHADOW_LOD,950PIPE_CAP_SHADER_SAMPLES_IDENTICAL,951PIPE_CAP_TGSI_ATOMINC_WRAP,952PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF,953PIPE_CAP_GL_SPIRV,954PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS,955PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION,956PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE,957PIPE_CAP_FLATSHADE,958PIPE_CAP_ALPHA_TEST,959PIPE_CAP_POINT_SIZE_FIXED,960PIPE_CAP_TWO_SIDED_COLOR,961PIPE_CAP_CLIP_PLANES,962PIPE_CAP_MAX_VERTEX_BUFFERS,963PIPE_CAP_OPENCL_INTEGER_FUNCTIONS,964PIPE_CAP_INTEGER_MULTIPLY_32X16,965/* Turn draw, dispatch, blit into NOOP */966PIPE_CAP_FRONTEND_NOOP,967PIPE_CAP_NIR_IMAGES_AS_DEREF,968PIPE_CAP_PACKED_STREAM_OUTPUT,969PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED,970PIPE_CAP_PSIZ_CLAMPED,971PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE,972PIPE_CAP_VIEWPORT_SWIZZLE,973PIPE_CAP_SYSTEM_SVM,974PIPE_CAP_VIEWPORT_MASK,975PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL,976PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE,977PIPE_CAP_GLSL_ZERO_INIT,978PIPE_CAP_BLEND_EQUATION_ADVANCED,979PIPE_CAP_NIR_ATOMICS_AS_DEREF,980PIPE_CAP_NO_CLIP_ON_COPY_TEX,981PIPE_CAP_MAX_TEXTURE_MB,982PIPE_CAP_SHADER_ATOMIC_INT64,983PIPE_CAP_DEVICE_PROTECTED_CONTENT,984PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0,985PIPE_CAP_GL_CLAMP,986PIPE_CAP_TEXRECT,987PIPE_CAP_SAMPLER_REDUCTION_MINMAX,988PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB,989PIPE_CAP_ALLOW_DYNAMIC_VAO_FASTPATH,990PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART,991PIPE_CAP_SUPPORTED_PRIM_MODES,992PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART,993994PIPE_CAP_LAST,995/* XXX do not add caps after PIPE_CAP_LAST! */996};997998/**999* Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should1000* return a bitmask of the supported priorities. If the driver does not1001* support prioritized contexts, it can return 0.1002*1003* Note that these match __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_*1004*/1005#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0)1006#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1)1007#define PIPE_CONTEXT_PRIORITY_HIGH (1 << 2)10081009#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)1010#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1)10111012enum pipe_endian1013{1014PIPE_ENDIAN_LITTLE = 0,1015PIPE_ENDIAN_BIG = 1,1016#if UTIL_ARCH_LITTLE_ENDIAN1017PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE1018#elif UTIL_ARCH_BIG_ENDIAN1019PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG1020#endif1021};10221023/**1024* Implementation limits which are queried through1025* pipe_screen::get_paramf()1026*/1027enum pipe_capf1028{1029PIPE_CAPF_MAX_LINE_WIDTH,1030PIPE_CAPF_MAX_LINE_WIDTH_AA,1031PIPE_CAPF_MAX_POINT_WIDTH,1032PIPE_CAPF_MAX_POINT_WIDTH_AA,1033PIPE_CAPF_MAX_TEXTURE_ANISOTROPY,1034PIPE_CAPF_MAX_TEXTURE_LOD_BIAS,1035PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE,1036PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE,1037PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY,1038};10391040/** Shader caps not specific to any single stage */1041enum pipe_shader_cap1042{1043PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */1044PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS,1045PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS,1046PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS,1047PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH,1048PIPE_SHADER_CAP_MAX_INPUTS,1049PIPE_SHADER_CAP_MAX_OUTPUTS,1050PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE,1051PIPE_SHADER_CAP_MAX_CONST_BUFFERS,1052PIPE_SHADER_CAP_MAX_TEMPS,1053/* boolean caps */1054PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,1055PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,1056PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,1057PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,1058PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,1059PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */1060PIPE_SHADER_CAP_INTEGERS,1061PIPE_SHADER_CAP_INT64_ATOMICS,1062PIPE_SHADER_CAP_FP16,1063PIPE_SHADER_CAP_FP16_DERIVATIVES,1064PIPE_SHADER_CAP_FP16_CONST_BUFFERS,1065PIPE_SHADER_CAP_INT16,1066PIPE_SHADER_CAP_GLSL_16BIT_CONSTS,1067PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS,1068PIPE_SHADER_CAP_PREFERRED_IR,1069PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED,1070PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS,1071PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED, /* all rounding modes */1072PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED,1073PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED,1074PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE,1075PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT,1076PIPE_SHADER_CAP_MAX_SHADER_BUFFERS,1077PIPE_SHADER_CAP_SUPPORTED_IRS,1078PIPE_SHADER_CAP_MAX_SHADER_IMAGES,1079PIPE_SHADER_CAP_LOWER_IF_THRESHOLD,1080PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS,1081PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED,1082PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS,1083PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS,1084};10851086/**1087* Shader intermediate representation.1088*1089* Note that if the driver requests something other than TGSI, it must1090* always be prepared to receive TGSI in addition to its preferred IR.1091* If the driver requests TGSI as its preferred IR, it will *always*1092* get TGSI.1093*1094* Note that PIPE_SHADER_IR_TGSI should be zero for backwards compat with1095* gallium frontends that only understand TGSI.1096*/1097enum pipe_shader_ir1098{1099PIPE_SHADER_IR_TGSI = 0,1100PIPE_SHADER_IR_NATIVE,1101PIPE_SHADER_IR_NIR,1102PIPE_SHADER_IR_NIR_SERIALIZED,1103};11041105/**1106* Compute-specific implementation capability. They can be queried1107* using pipe_screen::get_compute_param.1108*/1109enum pipe_compute_cap1110{1111PIPE_COMPUTE_CAP_ADDRESS_BITS,1112PIPE_COMPUTE_CAP_IR_TARGET,1113PIPE_COMPUTE_CAP_GRID_DIMENSION,1114PIPE_COMPUTE_CAP_MAX_GRID_SIZE,1115PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE,1116PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK,1117PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE,1118PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE,1119PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE,1120PIPE_COMPUTE_CAP_MAX_INPUT_SIZE,1121PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE,1122PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY,1123PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS,1124PIPE_COMPUTE_CAP_IMAGES_SUPPORTED,1125PIPE_COMPUTE_CAP_SUBGROUP_SIZE,1126PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,1127};11281129/**1130* Resource parameters. They can be queried using1131* pipe_screen::get_resource_param.1132*/1133enum pipe_resource_param1134{1135PIPE_RESOURCE_PARAM_NPLANES,1136PIPE_RESOURCE_PARAM_STRIDE,1137PIPE_RESOURCE_PARAM_OFFSET,1138PIPE_RESOURCE_PARAM_MODIFIER,1139PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED,1140PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS,1141PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD,1142PIPE_RESOURCE_PARAM_LAYER_STRIDE,1143};11441145/**1146* Types of parameters for pipe_context::set_context_param.1147*/1148enum pipe_context_param1149{1150/* A hint for the driver that it should pin its execution threads to1151* a group of cores sharing a specific L3 cache if the CPU has multiple1152* L3 caches. This is needed for good multithreading performance on1153* AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have1154* any internal threads or don't run on affected CPUs can ignore this.1155*/1156PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE,1157};11581159/**1160* Composite query types1161*/11621163/**1164* Query result for PIPE_QUERY_SO_STATISTICS.1165*/1166struct pipe_query_data_so_statistics1167{1168uint64_t num_primitives_written;1169uint64_t primitives_storage_needed;1170};11711172/**1173* Query result for PIPE_QUERY_TIMESTAMP_DISJOINT.1174*/1175struct pipe_query_data_timestamp_disjoint1176{1177uint64_t frequency;1178bool disjoint;1179};11801181/**1182* Query result for PIPE_QUERY_PIPELINE_STATISTICS.1183*/1184struct pipe_query_data_pipeline_statistics1185{1186uint64_t ia_vertices; /**< Num vertices read by the vertex fetcher. */1187uint64_t ia_primitives; /**< Num primitives read by the vertex fetcher. */1188uint64_t vs_invocations; /**< Num vertex shader invocations. */1189uint64_t gs_invocations; /**< Num geometry shader invocations. */1190uint64_t gs_primitives; /**< Num primitives output by a geometry shader. */1191uint64_t c_invocations; /**< Num primitives sent to the rasterizer. */1192uint64_t c_primitives; /**< Num primitives that were rendered. */1193uint64_t ps_invocations; /**< Num pixel shader invocations. */1194uint64_t hs_invocations; /**< Num hull shader invocations. */1195uint64_t ds_invocations; /**< Num domain shader invocations. */1196uint64_t cs_invocations; /**< Num compute shader invocations. */1197};11981199/**1200* For batch queries.1201*/1202union pipe_numeric_type_union1203{1204uint64_t u64;1205uint32_t u32;1206float f;1207};12081209/**1210* Query result (returned by pipe_context::get_query_result).1211*/1212union pipe_query_result1213{1214/* PIPE_QUERY_OCCLUSION_PREDICATE */1215/* PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE */1216/* PIPE_QUERY_SO_OVERFLOW_PREDICATE */1217/* PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE */1218/* PIPE_QUERY_GPU_FINISHED */1219bool b;12201221/* PIPE_QUERY_OCCLUSION_COUNTER */1222/* PIPE_QUERY_TIMESTAMP */1223/* PIPE_QUERY_TIME_ELAPSED */1224/* PIPE_QUERY_PRIMITIVES_GENERATED */1225/* PIPE_QUERY_PRIMITIVES_EMITTED */1226/* PIPE_DRIVER_QUERY_TYPE_UINT64 */1227/* PIPE_DRIVER_QUERY_TYPE_BYTES */1228/* PIPE_DRIVER_QUERY_TYPE_MICROSECONDS */1229/* PIPE_DRIVER_QUERY_TYPE_HZ */1230uint64_t u64;12311232/* PIPE_DRIVER_QUERY_TYPE_UINT */1233uint32_t u32;12341235/* PIPE_DRIVER_QUERY_TYPE_FLOAT */1236/* PIPE_DRIVER_QUERY_TYPE_PERCENTAGE */1237float f;12381239/* PIPE_QUERY_SO_STATISTICS */1240struct pipe_query_data_so_statistics so_statistics;12411242/* PIPE_QUERY_TIMESTAMP_DISJOINT */1243struct pipe_query_data_timestamp_disjoint timestamp_disjoint;12441245/* PIPE_QUERY_PIPELINE_STATISTICS */1246struct pipe_query_data_pipeline_statistics pipeline_statistics;12471248/* batch queries (variable length) */1249union pipe_numeric_type_union batch[1];1250};12511252enum pipe_query_value_type1253{1254PIPE_QUERY_TYPE_I32,1255PIPE_QUERY_TYPE_U32,1256PIPE_QUERY_TYPE_I64,1257PIPE_QUERY_TYPE_U64,1258};12591260union pipe_color_union1261{1262float f[4];1263int i[4];1264unsigned int ui[4];1265};12661267enum pipe_driver_query_type1268{1269PIPE_DRIVER_QUERY_TYPE_UINT64,1270PIPE_DRIVER_QUERY_TYPE_UINT,1271PIPE_DRIVER_QUERY_TYPE_FLOAT,1272PIPE_DRIVER_QUERY_TYPE_PERCENTAGE,1273PIPE_DRIVER_QUERY_TYPE_BYTES,1274PIPE_DRIVER_QUERY_TYPE_MICROSECONDS,1275PIPE_DRIVER_QUERY_TYPE_HZ,1276PIPE_DRIVER_QUERY_TYPE_DBM,1277PIPE_DRIVER_QUERY_TYPE_TEMPERATURE,1278PIPE_DRIVER_QUERY_TYPE_VOLTS,1279PIPE_DRIVER_QUERY_TYPE_AMPS,1280PIPE_DRIVER_QUERY_TYPE_WATTS,1281};12821283/* Whether an average value per frame or a cumulative value should be1284* displayed.1285*/1286enum pipe_driver_query_result_type1287{1288PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE,1289PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE,1290};12911292/**1293* Some hardware requires some hardware-specific queries to be submitted1294* as batched queries. The corresponding query objects are created using1295* create_batch_query, and at most one such query may be active at1296* any time.1297*/1298#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0)12991300/* Do not list this query in the HUD. */1301#define PIPE_DRIVER_QUERY_FLAG_DONT_LIST (1 << 1)13021303struct pipe_driver_query_info1304{1305const char *name;1306unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */1307union pipe_numeric_type_union max_value; /* max value that can be returned */1308enum pipe_driver_query_type type;1309enum pipe_driver_query_result_type result_type;1310unsigned group_id;1311unsigned flags;1312};13131314struct pipe_driver_query_group_info1315{1316const char *name;1317unsigned max_active_queries;1318unsigned num_queries;1319};13201321enum pipe_fd_type1322{1323PIPE_FD_TYPE_NATIVE_SYNC,1324PIPE_FD_TYPE_SYNCOBJ,1325};13261327/**1328* counter type and counter data type enums used by INTEL_performance_query1329* APIs in gallium drivers.1330*/1331enum pipe_perf_counter_type1332{1333PIPE_PERF_COUNTER_TYPE_EVENT,1334PIPE_PERF_COUNTER_TYPE_DURATION_NORM,1335PIPE_PERF_COUNTER_TYPE_DURATION_RAW,1336PIPE_PERF_COUNTER_TYPE_THROUGHPUT,1337PIPE_PERF_COUNTER_TYPE_RAW,1338PIPE_PERF_COUNTER_TYPE_TIMESTAMP,1339};13401341enum pipe_perf_counter_data_type1342{1343PIPE_PERF_COUNTER_DATA_TYPE_BOOL32,1344PIPE_PERF_COUNTER_DATA_TYPE_UINT32,1345PIPE_PERF_COUNTER_DATA_TYPE_UINT64,1346PIPE_PERF_COUNTER_DATA_TYPE_FLOAT,1347PIPE_PERF_COUNTER_DATA_TYPE_DOUBLE,1348};13491350#define PIPE_UUID_SIZE 1613511352#ifdef __cplusplus1353}1354#endif13551356#endif135713581359