blob: ec9bef1ec56046991fcbe996f143c868dd8262f0 [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 Wu730e5362014-08-19 12:15:09 +080031struct intel_cmd {
32 struct intel_obj obj;
33
34 struct intel_dev *dev;
35
36 XGL_FLAGS flags;
37
38 XGL_SIZE bo_size;
39 struct intel_bo *bo;
Chia-I Wu32710d72014-08-20 16:05:22 +080040 void *ptr_opaque;
Chia-I Wu730e5362014-08-19 12:15:09 +080041
42 XGL_UINT used, size;
Chia-I Wu04966702014-08-20 15:05:03 +080043 XGL_RESULT result;
Chia-I Wu730e5362014-08-19 12:15:09 +080044};
45
46static inline struct intel_cmd *intel_cmd(XGL_CMD_BUFFER cmd)
47{
48 return (struct intel_cmd *) cmd;
49}
50
51static inline struct intel_cmd *intel_cmd_from_obj(struct intel_obj *obj)
52{
53 return (struct intel_cmd *) obj;
54}
55
56XGL_RESULT intel_cmd_create(struct intel_dev *dev,
57 const XGL_CMD_BUFFER_CREATE_INFO *info,
58 struct intel_cmd **cmd_ret);
59void intel_cmd_destroy(struct intel_cmd *cmd);
60
61XGL_RESULT intel_cmd_begin(struct intel_cmd *cmd, XGL_FLAGS flags);
62XGL_RESULT intel_cmd_end(struct intel_cmd *cmd);
63
Chia-I Wu09142132014-08-11 15:42:55 +080064XGL_RESULT XGLAPI intelCreateCommandBuffer(
65 XGL_DEVICE device,
66 const XGL_CMD_BUFFER_CREATE_INFO* pCreateInfo,
67 XGL_CMD_BUFFER* pCmdBuffer);
68
69XGL_RESULT XGLAPI intelBeginCommandBuffer(
70 XGL_CMD_BUFFER cmdBuffer,
71 XGL_FLAGS flags);
72
73XGL_RESULT XGLAPI intelEndCommandBuffer(
74 XGL_CMD_BUFFER cmdBuffer);
75
76XGL_RESULT XGLAPI intelResetCommandBuffer(
77 XGL_CMD_BUFFER cmdBuffer);
78
79XGL_VOID XGLAPI intelCmdBindPipeline(
80 XGL_CMD_BUFFER cmdBuffer,
81 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
82 XGL_PIPELINE pipeline);
83
84XGL_VOID XGLAPI intelCmdBindPipelineDelta(
85 XGL_CMD_BUFFER cmdBuffer,
86 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
87 XGL_PIPELINE_DELTA delta);
88
89XGL_VOID XGLAPI intelCmdBindStateObject(
90 XGL_CMD_BUFFER cmdBuffer,
91 XGL_STATE_BIND_POINT stateBindPoint,
92 XGL_STATE_OBJECT state);
93
94XGL_VOID XGLAPI intelCmdBindDescriptorSet(
95 XGL_CMD_BUFFER cmdBuffer,
96 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
97 XGL_UINT index,
98 XGL_DESCRIPTOR_SET descriptorSet,
99 XGL_UINT slotOffset);
100
101XGL_VOID XGLAPI intelCmdBindDynamicMemoryView(
102 XGL_CMD_BUFFER cmdBuffer,
103 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
104 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
105
106XGL_VOID XGLAPI intelCmdBindIndexData(
107 XGL_CMD_BUFFER cmdBuffer,
108 XGL_GPU_MEMORY mem,
109 XGL_GPU_SIZE offset,
110 XGL_INDEX_TYPE indexType);
111
112XGL_VOID XGLAPI intelCmdBindAttachments(
113 XGL_CMD_BUFFER cmdBuffer,
114 XGL_UINT colorAttachmentCount,
115 const XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments,
116 const XGL_DEPTH_STENCIL_BIND_INFO* pDepthStencilAttachment);
117
118XGL_VOID XGLAPI intelCmdPrepareMemoryRegions(
119 XGL_CMD_BUFFER cmdBuffer,
120 XGL_UINT transitionCount,
121 const XGL_MEMORY_STATE_TRANSITION* pStateTransitions);
122
123XGL_VOID XGLAPI intelCmdPrepareImages(
124 XGL_CMD_BUFFER cmdBuffer,
125 XGL_UINT transitionCount,
126 const XGL_IMAGE_STATE_TRANSITION* pStateTransitions);
127
128XGL_VOID XGLAPI intelCmdDraw(
129 XGL_CMD_BUFFER cmdBuffer,
130 XGL_UINT firstVertex,
131 XGL_UINT vertexCount,
132 XGL_UINT firstInstance,
133 XGL_UINT instanceCount);
134
135XGL_VOID XGLAPI intelCmdDrawIndexed(
136 XGL_CMD_BUFFER cmdBuffer,
137 XGL_UINT firstIndex,
138 XGL_UINT indexCount,
139 XGL_INT vertexOffset,
140 XGL_UINT firstInstance,
141 XGL_UINT instanceCount);
142
143XGL_VOID XGLAPI intelCmdDrawIndirect(
144 XGL_CMD_BUFFER cmdBuffer,
145 XGL_GPU_MEMORY mem,
146 XGL_GPU_SIZE offset,
147 XGL_UINT32 count,
148 XGL_UINT32 stride);
149
150XGL_VOID XGLAPI intelCmdDrawIndexedIndirect(
151 XGL_CMD_BUFFER cmdBuffer,
152 XGL_GPU_MEMORY mem,
153 XGL_GPU_SIZE offset,
154 XGL_UINT32 count,
155 XGL_UINT32 stride);
156
157XGL_VOID XGLAPI intelCmdDispatch(
158 XGL_CMD_BUFFER cmdBuffer,
159 XGL_UINT x,
160 XGL_UINT y,
161 XGL_UINT z);
162
163XGL_VOID XGLAPI intelCmdDispatchIndirect(
164 XGL_CMD_BUFFER cmdBuffer,
165 XGL_GPU_MEMORY mem,
166 XGL_GPU_SIZE offset);
167
168XGL_VOID XGLAPI intelCmdCopyMemory(
169 XGL_CMD_BUFFER cmdBuffer,
170 XGL_GPU_MEMORY srcMem,
171 XGL_GPU_MEMORY destMem,
172 XGL_UINT regionCount,
173 const XGL_MEMORY_COPY* pRegions);
174
175XGL_VOID XGLAPI intelCmdCopyImage(
176 XGL_CMD_BUFFER cmdBuffer,
177 XGL_IMAGE srcImage,
178 XGL_IMAGE destImage,
179 XGL_UINT regionCount,
180 const XGL_IMAGE_COPY* pRegions);
181
182XGL_VOID XGLAPI intelCmdCopyMemoryToImage(
183 XGL_CMD_BUFFER cmdBuffer,
184 XGL_GPU_MEMORY srcMem,
185 XGL_IMAGE destImage,
186 XGL_UINT regionCount,
187 const XGL_MEMORY_IMAGE_COPY* pRegions);
188
189XGL_VOID XGLAPI intelCmdCopyImageToMemory(
190 XGL_CMD_BUFFER cmdBuffer,
191 XGL_IMAGE srcImage,
192 XGL_GPU_MEMORY destMem,
193 XGL_UINT regionCount,
194 const XGL_MEMORY_IMAGE_COPY* pRegions);
195
196XGL_VOID XGLAPI intelCmdCloneImageData(
197 XGL_CMD_BUFFER cmdBuffer,
198 XGL_IMAGE srcImage,
199 XGL_IMAGE_STATE srcImageState,
200 XGL_IMAGE destImage,
201 XGL_IMAGE_STATE destImageState);
202
203XGL_VOID XGLAPI intelCmdUpdateMemory(
204 XGL_CMD_BUFFER cmdBuffer,
205 XGL_GPU_MEMORY destMem,
206 XGL_GPU_SIZE destOffset,
207 XGL_GPU_SIZE dataSize,
208 const XGL_UINT32* pData);
209
210XGL_VOID XGLAPI intelCmdFillMemory(
211 XGL_CMD_BUFFER cmdBuffer,
212 XGL_GPU_MEMORY destMem,
213 XGL_GPU_SIZE destOffset,
214 XGL_GPU_SIZE fillSize,
215 XGL_UINT32 data);
216
217XGL_VOID XGLAPI intelCmdClearColorImage(
218 XGL_CMD_BUFFER cmdBuffer,
219 XGL_IMAGE image,
220 const XGL_FLOAT color[4],
221 XGL_UINT rangeCount,
222 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
223
224XGL_VOID XGLAPI intelCmdClearColorImageRaw(
225 XGL_CMD_BUFFER cmdBuffer,
226 XGL_IMAGE image,
227 const XGL_UINT32 color[4],
228 XGL_UINT rangeCount,
229 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
230
231XGL_VOID XGLAPI intelCmdClearDepthStencil(
232 XGL_CMD_BUFFER cmdBuffer,
233 XGL_IMAGE image,
234 XGL_FLOAT depth,
235 XGL_UINT32 stencil,
236 XGL_UINT rangeCount,
237 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
238
239XGL_VOID XGLAPI intelCmdResolveImage(
240 XGL_CMD_BUFFER cmdBuffer,
241 XGL_IMAGE srcImage,
242 XGL_IMAGE destImage,
243 XGL_UINT rectCount,
244 const XGL_IMAGE_RESOLVE* pRects);
245
246XGL_VOID XGLAPI intelCmdSetEvent(
247 XGL_CMD_BUFFER cmdBuffer,
248 XGL_EVENT event);
249
250XGL_VOID XGLAPI intelCmdResetEvent(
251 XGL_CMD_BUFFER cmdBuffer,
252 XGL_EVENT event);
253
254XGL_VOID XGLAPI intelCmdMemoryAtomic(
255 XGL_CMD_BUFFER cmdBuffer,
256 XGL_GPU_MEMORY destMem,
257 XGL_GPU_SIZE destOffset,
258 XGL_UINT64 srcData,
259 XGL_ATOMIC_OP atomicOp);
260
261XGL_VOID XGLAPI intelCmdBeginQuery(
262 XGL_CMD_BUFFER cmdBuffer,
263 XGL_QUERY_POOL queryPool,
264 XGL_UINT slot,
265 XGL_FLAGS flags);
266
267XGL_VOID XGLAPI intelCmdEndQuery(
268 XGL_CMD_BUFFER cmdBuffer,
269 XGL_QUERY_POOL queryPool,
270 XGL_UINT slot);
271
272XGL_VOID XGLAPI intelCmdResetQueryPool(
273 XGL_CMD_BUFFER cmdBuffer,
274 XGL_QUERY_POOL queryPool,
275 XGL_UINT startQuery,
276 XGL_UINT queryCount);
277
278XGL_VOID XGLAPI intelCmdWriteTimestamp(
279 XGL_CMD_BUFFER cmdBuffer,
280 XGL_TIMESTAMP_TYPE timestampType,
281 XGL_GPU_MEMORY destMem,
282 XGL_GPU_SIZE destOffset);
283
284XGL_VOID XGLAPI intelCmdInitAtomicCounters(
285 XGL_CMD_BUFFER cmdBuffer,
286 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
287 XGL_UINT startCounter,
288 XGL_UINT counterCount,
289 const XGL_UINT32* pData);
290
291XGL_VOID XGLAPI intelCmdLoadAtomicCounters(
292 XGL_CMD_BUFFER cmdBuffer,
293 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
294 XGL_UINT startCounter,
295 XGL_UINT counterCount,
296 XGL_GPU_MEMORY srcMem,
297 XGL_GPU_SIZE srcOffset);
298
299XGL_VOID XGLAPI intelCmdSaveAtomicCounters(
300 XGL_CMD_BUFFER cmdBuffer,
301 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
302 XGL_UINT startCounter,
303 XGL_UINT counterCount,
304 XGL_GPU_MEMORY destMem,
305 XGL_GPU_SIZE destOffset);
306
307XGL_VOID XGLAPI intelCmdDbgMarkerBegin(
308 XGL_CMD_BUFFER cmdBuffer,
309 const XGL_CHAR* pMarker);
310
311XGL_VOID XGLAPI intelCmdDbgMarkerEnd(
312 XGL_CMD_BUFFER cmdBuffer);
313
314#endif /* CMD_H */