blob: 69d454a980839ea4b5b3d8b7299c7bf96258b71a [file] [log] [blame]
Chia-I Wu09142132014-08-11 15:42:55 +08001/*
2 * XGL
3 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#ifndef CMD_H
26#define CMD_H
27
28#include "intel.h"
29#include "obj.h"
30
Chia-I Wu343b1372014-08-20 16:39:20 +080031struct intel_cmd_reloc {
32 XGL_UINT pos;
33
34 uint32_t val;
35 struct intel_mem *mem;
36
37 /*
38 * With application state tracking promised by XGL, we should be able to
39 * set
40 *
41 * I915_EXEC_NO_RELOC
42 * I915_EXEC_HANDLE_LUT
43 * I915_EXEC_IS_PINNED
44 *
45 * once we figure them out.
46 */
47 uint16_t read_domains;
48 uint16_t write_domain;
49};
50
Chia-I Wu730e5362014-08-19 12:15:09 +080051struct intel_cmd {
52 struct intel_obj obj;
53
54 struct intel_dev *dev;
55
Chia-I Wu343b1372014-08-20 16:39:20 +080056 struct intel_cmd_reloc *relocs;
57 XGL_UINT reloc_count;
58
Chia-I Wu730e5362014-08-19 12:15:09 +080059 XGL_FLAGS flags;
60
61 XGL_SIZE bo_size;
62 struct intel_bo *bo;
Chia-I Wu32710d72014-08-20 16:05:22 +080063 void *ptr_opaque;
Chia-I Wu730e5362014-08-19 12:15:09 +080064
65 XGL_UINT used, size;
Chia-I Wu343b1372014-08-20 16:39:20 +080066 XGL_UINT reloc_used;
Chia-I Wu04966702014-08-20 15:05:03 +080067 XGL_RESULT result;
Chia-I Wu730e5362014-08-19 12:15:09 +080068};
69
70static inline struct intel_cmd *intel_cmd(XGL_CMD_BUFFER cmd)
71{
72 return (struct intel_cmd *) cmd;
73}
74
75static inline struct intel_cmd *intel_cmd_from_obj(struct intel_obj *obj)
76{
77 return (struct intel_cmd *) obj;
78}
79
80XGL_RESULT intel_cmd_create(struct intel_dev *dev,
81 const XGL_CMD_BUFFER_CREATE_INFO *info,
82 struct intel_cmd **cmd_ret);
83void intel_cmd_destroy(struct intel_cmd *cmd);
84
85XGL_RESULT intel_cmd_begin(struct intel_cmd *cmd, XGL_FLAGS flags);
86XGL_RESULT intel_cmd_end(struct intel_cmd *cmd);
87
Chia-I Wu09142132014-08-11 15:42:55 +080088XGL_RESULT XGLAPI intelCreateCommandBuffer(
89 XGL_DEVICE device,
90 const XGL_CMD_BUFFER_CREATE_INFO* pCreateInfo,
91 XGL_CMD_BUFFER* pCmdBuffer);
92
93XGL_RESULT XGLAPI intelBeginCommandBuffer(
94 XGL_CMD_BUFFER cmdBuffer,
95 XGL_FLAGS flags);
96
97XGL_RESULT XGLAPI intelEndCommandBuffer(
98 XGL_CMD_BUFFER cmdBuffer);
99
100XGL_RESULT XGLAPI intelResetCommandBuffer(
101 XGL_CMD_BUFFER cmdBuffer);
102
103XGL_VOID XGLAPI intelCmdBindPipeline(
104 XGL_CMD_BUFFER cmdBuffer,
105 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
106 XGL_PIPELINE pipeline);
107
108XGL_VOID XGLAPI intelCmdBindPipelineDelta(
109 XGL_CMD_BUFFER cmdBuffer,
110 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
111 XGL_PIPELINE_DELTA delta);
112
113XGL_VOID XGLAPI intelCmdBindStateObject(
114 XGL_CMD_BUFFER cmdBuffer,
115 XGL_STATE_BIND_POINT stateBindPoint,
116 XGL_STATE_OBJECT state);
117
118XGL_VOID XGLAPI intelCmdBindDescriptorSet(
119 XGL_CMD_BUFFER cmdBuffer,
120 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
121 XGL_UINT index,
122 XGL_DESCRIPTOR_SET descriptorSet,
123 XGL_UINT slotOffset);
124
125XGL_VOID XGLAPI intelCmdBindDynamicMemoryView(
126 XGL_CMD_BUFFER cmdBuffer,
127 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
128 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
129
130XGL_VOID XGLAPI intelCmdBindIndexData(
131 XGL_CMD_BUFFER cmdBuffer,
132 XGL_GPU_MEMORY mem,
133 XGL_GPU_SIZE offset,
134 XGL_INDEX_TYPE indexType);
135
136XGL_VOID XGLAPI intelCmdBindAttachments(
137 XGL_CMD_BUFFER cmdBuffer,
138 XGL_UINT colorAttachmentCount,
139 const XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments,
140 const XGL_DEPTH_STENCIL_BIND_INFO* pDepthStencilAttachment);
141
142XGL_VOID XGLAPI intelCmdPrepareMemoryRegions(
143 XGL_CMD_BUFFER cmdBuffer,
144 XGL_UINT transitionCount,
145 const XGL_MEMORY_STATE_TRANSITION* pStateTransitions);
146
147XGL_VOID XGLAPI intelCmdPrepareImages(
148 XGL_CMD_BUFFER cmdBuffer,
149 XGL_UINT transitionCount,
150 const XGL_IMAGE_STATE_TRANSITION* pStateTransitions);
151
152XGL_VOID XGLAPI intelCmdDraw(
153 XGL_CMD_BUFFER cmdBuffer,
154 XGL_UINT firstVertex,
155 XGL_UINT vertexCount,
156 XGL_UINT firstInstance,
157 XGL_UINT instanceCount);
158
159XGL_VOID XGLAPI intelCmdDrawIndexed(
160 XGL_CMD_BUFFER cmdBuffer,
161 XGL_UINT firstIndex,
162 XGL_UINT indexCount,
163 XGL_INT vertexOffset,
164 XGL_UINT firstInstance,
165 XGL_UINT instanceCount);
166
167XGL_VOID XGLAPI intelCmdDrawIndirect(
168 XGL_CMD_BUFFER cmdBuffer,
169 XGL_GPU_MEMORY mem,
170 XGL_GPU_SIZE offset,
171 XGL_UINT32 count,
172 XGL_UINT32 stride);
173
174XGL_VOID XGLAPI intelCmdDrawIndexedIndirect(
175 XGL_CMD_BUFFER cmdBuffer,
176 XGL_GPU_MEMORY mem,
177 XGL_GPU_SIZE offset,
178 XGL_UINT32 count,
179 XGL_UINT32 stride);
180
181XGL_VOID XGLAPI intelCmdDispatch(
182 XGL_CMD_BUFFER cmdBuffer,
183 XGL_UINT x,
184 XGL_UINT y,
185 XGL_UINT z);
186
187XGL_VOID XGLAPI intelCmdDispatchIndirect(
188 XGL_CMD_BUFFER cmdBuffer,
189 XGL_GPU_MEMORY mem,
190 XGL_GPU_SIZE offset);
191
192XGL_VOID XGLAPI intelCmdCopyMemory(
193 XGL_CMD_BUFFER cmdBuffer,
194 XGL_GPU_MEMORY srcMem,
195 XGL_GPU_MEMORY destMem,
196 XGL_UINT regionCount,
197 const XGL_MEMORY_COPY* pRegions);
198
199XGL_VOID XGLAPI intelCmdCopyImage(
200 XGL_CMD_BUFFER cmdBuffer,
201 XGL_IMAGE srcImage,
202 XGL_IMAGE destImage,
203 XGL_UINT regionCount,
204 const XGL_IMAGE_COPY* pRegions);
205
206XGL_VOID XGLAPI intelCmdCopyMemoryToImage(
207 XGL_CMD_BUFFER cmdBuffer,
208 XGL_GPU_MEMORY srcMem,
209 XGL_IMAGE destImage,
210 XGL_UINT regionCount,
211 const XGL_MEMORY_IMAGE_COPY* pRegions);
212
213XGL_VOID XGLAPI intelCmdCopyImageToMemory(
214 XGL_CMD_BUFFER cmdBuffer,
215 XGL_IMAGE srcImage,
216 XGL_GPU_MEMORY destMem,
217 XGL_UINT regionCount,
218 const XGL_MEMORY_IMAGE_COPY* pRegions);
219
220XGL_VOID XGLAPI intelCmdCloneImageData(
221 XGL_CMD_BUFFER cmdBuffer,
222 XGL_IMAGE srcImage,
223 XGL_IMAGE_STATE srcImageState,
224 XGL_IMAGE destImage,
225 XGL_IMAGE_STATE destImageState);
226
227XGL_VOID XGLAPI intelCmdUpdateMemory(
228 XGL_CMD_BUFFER cmdBuffer,
229 XGL_GPU_MEMORY destMem,
230 XGL_GPU_SIZE destOffset,
231 XGL_GPU_SIZE dataSize,
232 const XGL_UINT32* pData);
233
234XGL_VOID XGLAPI intelCmdFillMemory(
235 XGL_CMD_BUFFER cmdBuffer,
236 XGL_GPU_MEMORY destMem,
237 XGL_GPU_SIZE destOffset,
238 XGL_GPU_SIZE fillSize,
239 XGL_UINT32 data);
240
241XGL_VOID XGLAPI intelCmdClearColorImage(
242 XGL_CMD_BUFFER cmdBuffer,
243 XGL_IMAGE image,
244 const XGL_FLOAT color[4],
245 XGL_UINT rangeCount,
246 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
247
248XGL_VOID XGLAPI intelCmdClearColorImageRaw(
249 XGL_CMD_BUFFER cmdBuffer,
250 XGL_IMAGE image,
251 const XGL_UINT32 color[4],
252 XGL_UINT rangeCount,
253 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
254
255XGL_VOID XGLAPI intelCmdClearDepthStencil(
256 XGL_CMD_BUFFER cmdBuffer,
257 XGL_IMAGE image,
258 XGL_FLOAT depth,
259 XGL_UINT32 stencil,
260 XGL_UINT rangeCount,
261 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
262
263XGL_VOID XGLAPI intelCmdResolveImage(
264 XGL_CMD_BUFFER cmdBuffer,
265 XGL_IMAGE srcImage,
266 XGL_IMAGE destImage,
267 XGL_UINT rectCount,
268 const XGL_IMAGE_RESOLVE* pRects);
269
270XGL_VOID XGLAPI intelCmdSetEvent(
271 XGL_CMD_BUFFER cmdBuffer,
272 XGL_EVENT event);
273
274XGL_VOID XGLAPI intelCmdResetEvent(
275 XGL_CMD_BUFFER cmdBuffer,
276 XGL_EVENT event);
277
278XGL_VOID XGLAPI intelCmdMemoryAtomic(
279 XGL_CMD_BUFFER cmdBuffer,
280 XGL_GPU_MEMORY destMem,
281 XGL_GPU_SIZE destOffset,
282 XGL_UINT64 srcData,
283 XGL_ATOMIC_OP atomicOp);
284
285XGL_VOID XGLAPI intelCmdBeginQuery(
286 XGL_CMD_BUFFER cmdBuffer,
287 XGL_QUERY_POOL queryPool,
288 XGL_UINT slot,
289 XGL_FLAGS flags);
290
291XGL_VOID XGLAPI intelCmdEndQuery(
292 XGL_CMD_BUFFER cmdBuffer,
293 XGL_QUERY_POOL queryPool,
294 XGL_UINT slot);
295
296XGL_VOID XGLAPI intelCmdResetQueryPool(
297 XGL_CMD_BUFFER cmdBuffer,
298 XGL_QUERY_POOL queryPool,
299 XGL_UINT startQuery,
300 XGL_UINT queryCount);
301
302XGL_VOID XGLAPI intelCmdWriteTimestamp(
303 XGL_CMD_BUFFER cmdBuffer,
304 XGL_TIMESTAMP_TYPE timestampType,
305 XGL_GPU_MEMORY destMem,
306 XGL_GPU_SIZE destOffset);
307
308XGL_VOID XGLAPI intelCmdInitAtomicCounters(
309 XGL_CMD_BUFFER cmdBuffer,
310 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
311 XGL_UINT startCounter,
312 XGL_UINT counterCount,
313 const XGL_UINT32* pData);
314
315XGL_VOID XGLAPI intelCmdLoadAtomicCounters(
316 XGL_CMD_BUFFER cmdBuffer,
317 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
318 XGL_UINT startCounter,
319 XGL_UINT counterCount,
320 XGL_GPU_MEMORY srcMem,
321 XGL_GPU_SIZE srcOffset);
322
323XGL_VOID XGLAPI intelCmdSaveAtomicCounters(
324 XGL_CMD_BUFFER cmdBuffer,
325 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
326 XGL_UINT startCounter,
327 XGL_UINT counterCount,
328 XGL_GPU_MEMORY destMem,
329 XGL_GPU_SIZE destOffset);
330
331XGL_VOID XGLAPI intelCmdDbgMarkerBegin(
332 XGL_CMD_BUFFER cmdBuffer,
333 const XGL_CHAR* pMarker);
334
335XGL_VOID XGLAPI intelCmdDbgMarkerEnd(
336 XGL_CMD_BUFFER cmdBuffer);
337
338#endif /* CMD_H */