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