1/**********************************************************
2 * Copyright 2008-2009 VMware, Inc.  All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person
5 * obtaining a copy of this software and associated documentation
6 * files (the "Software"), to deal in the Software without
7 * restriction, including without limitation the rights to use, copy,
8 * modify, merge, publish, distribute, sublicense, and/or sell copies
9 * of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be
13 * included in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 *
24 **********************************************************/
25
26/*
27 * svga_cmd.h --
28 *
29 *      Command construction utility for the SVGA3D protocol used by
30 *      the VMware SVGA device, based on the svgautil library.
31 */
32
33#ifndef __SVGA3D_H__
34#define __SVGA3D_H__
35
36
37#include "svga_types.h"
38#include "svga_reg.h"
39#include "svga3d_reg.h"
40
41#include "pipe/p_defines.h"
42
43
44struct pipe_surface;
45struct svga_transfer;
46struct svga_winsys_context;
47struct svga_winsys_buffer;
48struct svga_winsys_surface;
49
50
51/*
52 * SVGA Device Interoperability
53 */
54
55void *
56SVGA3D_FIFOReserve(struct svga_winsys_context *swc, uint32 cmd, uint32 cmdSize, uint32 nr_relocs);
57
58void
59SVGA_FIFOCommitAll(struct svga_winsys_context *swc);
60
61
62/*
63 * Context Management
64 */
65
66enum pipe_error
67SVGA3D_DefineContext(struct svga_winsys_context *swc);
68
69enum pipe_error
70SVGA3D_DestroyContext(struct svga_winsys_context *swc);
71
72
73/*
74 * Surface Management
75 */
76
77enum pipe_error
78SVGA3D_BeginDefineSurface(struct svga_winsys_context *swc,
79                          struct svga_winsys_surface *sid,
80                          SVGA3dSurfaceFlags flags,
81                          SVGA3dSurfaceFormat format,
82                          SVGA3dSurfaceFace **faces,
83                          SVGA3dSize **mipSizes,
84                          uint32 numMipSizes);
85enum pipe_error
86SVGA3D_DefineSurface2D(struct svga_winsys_context *swc,
87                       struct svga_winsys_surface *sid,
88                       uint32 width,
89                       uint32 height,
90                       SVGA3dSurfaceFormat format);
91enum pipe_error
92SVGA3D_DestroySurface(struct svga_winsys_context *swc,
93                      struct svga_winsys_surface *sid);
94
95
96/*
97 * Surface Operations
98 */
99
100enum pipe_error
101SVGA3D_SurfaceDMA(struct svga_winsys_context *swc,
102                  struct svga_transfer *st,
103                  SVGA3dTransferType transfer,
104                  const SVGA3dCopyBox *boxes,
105                  uint32 numBoxes,
106                  SVGA3dSurfaceDMAFlags flags);
107
108enum pipe_error
109SVGA3D_BufferDMA(struct svga_winsys_context *swc,
110                 struct svga_winsys_buffer *guest,
111                 struct svga_winsys_surface *host,
112                 SVGA3dTransferType transfer,
113                 uint32 size,
114                 uint32 guest_offset,
115                 uint32 host_offset,
116                 SVGA3dSurfaceDMAFlags flags);
117
118/*
119 * Drawing Operations
120 */
121
122
123enum pipe_error
124SVGA3D_BeginClear(struct svga_winsys_context *swc,
125                  SVGA3dClearFlag flags,
126                  uint32 color, float depth, uint32 stencil,
127                  SVGA3dRect **rects, uint32 numRects);
128
129enum pipe_error
130SVGA3D_ClearRect(struct svga_winsys_context *swc,
131                 SVGA3dClearFlag flags, uint32 color, float depth,
132                 uint32 stencil, uint32 x, uint32 y, uint32 w, uint32 h);
133
134enum pipe_error
135SVGA3D_BeginDrawPrimitives(struct svga_winsys_context *swc,
136                           SVGA3dVertexDecl **decls,
137                           uint32 numVertexDecls,
138                           SVGA3dPrimitiveRange **ranges,
139                           uint32 numRanges);
140
141/*
142 * Blits
143 */
144
145enum pipe_error
146SVGA3D_BeginSurfaceCopy(struct svga_winsys_context *swc,
147                        struct pipe_surface *src,
148                        struct pipe_surface *dest,
149                        SVGA3dCopyBox **boxes, uint32 numBoxes);
150
151
152enum pipe_error
153SVGA3D_SurfaceStretchBlt(struct svga_winsys_context *swc,
154                         struct pipe_surface *src,
155                         struct pipe_surface *dest,
156                         SVGA3dBox *boxSrc, SVGA3dBox *boxDest,
157                         SVGA3dStretchBltMode mode);
158
159/*
160 * Shared FFP/Shader Render State
161 */
162
163enum pipe_error
164SVGA3D_SetRenderTarget(struct svga_winsys_context *swc,
165                       SVGA3dRenderTargetType type,
166                       struct pipe_surface *surface);
167
168enum pipe_error
169SVGA3D_SetZRange(struct svga_winsys_context *swc,
170                 float zMin, float zMax);
171
172enum pipe_error
173SVGA3D_SetViewport(struct svga_winsys_context *swc,
174                   SVGA3dRect *rect);
175
176enum pipe_error
177SVGA3D_SetScissorRect(struct svga_winsys_context *swc,
178                      SVGA3dRect *rect);
179
180enum pipe_error
181SVGA3D_SetClipPlane(struct svga_winsys_context *swc,
182                    uint32 index, const float *plane);
183
184enum pipe_error
185SVGA3D_BeginSetTextureState(struct svga_winsys_context *swc,
186                            SVGA3dTextureState **states,
187                            uint32 numStates);
188
189enum pipe_error
190SVGA3D_BeginSetRenderState(struct svga_winsys_context *swc,
191                           SVGA3dRenderState **states,
192                           uint32 numStates);
193
194
195/*
196 * Shaders
197 */
198
199enum pipe_error
200SVGA3D_DefineShader(struct svga_winsys_context *swc,
201                    uint32 shid, SVGA3dShaderType type,
202                    const uint32 *bytecode, uint32 bytecodeLen);
203
204enum pipe_error
205SVGA3D_DestroyShader(struct svga_winsys_context *swc,
206                     uint32 shid, SVGA3dShaderType type);
207
208enum pipe_error
209SVGA3D_SetShaderConst(struct svga_winsys_context *swc,
210                      uint32 reg, SVGA3dShaderType type,
211                      SVGA3dShaderConstType ctype, const void *value);
212
213enum pipe_error
214SVGA3D_SetShaderConsts(struct svga_winsys_context *swc,
215                       uint32 reg,
216                       uint32 numRegs,
217                       SVGA3dShaderType type,
218                       SVGA3dShaderConstType ctype,
219                       const void *values);
220
221enum pipe_error
222SVGA3D_SetShader(struct svga_winsys_context *swc,
223                 SVGA3dShaderType type, uint32 shid);
224
225
226/*
227 * Queries
228 */
229
230enum pipe_error
231SVGA3D_BeginQuery(struct svga_winsys_context *swc,
232                  SVGA3dQueryType type);
233
234enum pipe_error
235SVGA3D_EndQuery(struct svga_winsys_context *swc,
236                SVGA3dQueryType type,
237                struct svga_winsys_buffer *buffer);
238
239enum pipe_error
240SVGA3D_WaitForQuery(struct svga_winsys_context *swc,
241                    SVGA3dQueryType type,
242                    struct svga_winsys_buffer *buffer);
243
244#endif /* __SVGA3D_H__ */
245