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 44 struct pipe_surface; 45 struct svga_transfer; 46 struct svga_winsys_context; 47 struct svga_winsys_buffer; 48 struct svga_winsys_surface; 49 50 51 /* 52 * SVGA Device Interoperability 53 */ 54 55 void * 56 SVGA3D_FIFOReserve(struct svga_winsys_context *swc, uint32 cmd, uint32 cmdSize, uint32 nr_relocs); 57 58 void 59 SVGA_FIFOCommitAll(struct svga_winsys_context *swc); 60 61 62 /* 63 * Context Management 64 */ 65 66 enum pipe_error 67 SVGA3D_DefineContext(struct svga_winsys_context *swc); 68 69 enum pipe_error 70 SVGA3D_DestroyContext(struct svga_winsys_context *swc); 71 72 73 /* 74 * Surface Management 75 */ 76 77 enum pipe_error 78 SVGA3D_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); 85 enum pipe_error 86 SVGA3D_DefineSurface2D(struct svga_winsys_context *swc, 87 struct svga_winsys_surface *sid, 88 uint32 width, 89 uint32 height, 90 SVGA3dSurfaceFormat format); 91 enum pipe_error 92 SVGA3D_DestroySurface(struct svga_winsys_context *swc, 93 struct svga_winsys_surface *sid); 94 95 96 /* 97 * Surface Operations 98 */ 99 100 enum pipe_error 101 SVGA3D_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 108 enum pipe_error 109 SVGA3D_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 123 enum pipe_error 124 SVGA3D_BeginClear(struct svga_winsys_context *swc, 125 SVGA3dClearFlag flags, 126 uint32 color, float depth, uint32 stencil, 127 SVGA3dRect **rects, uint32 numRects); 128 129 enum pipe_error 130 SVGA3D_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 134 enum pipe_error 135 SVGA3D_BeginDrawPrimitives(struct svga_winsys_context *swc, 136 SVGA3dVertexDecl **decls, 137 uint32 numVertexDecls, 138 SVGA3dPrimitiveRange **ranges, 139 uint32 numRanges); 140 141 /* 142 * Blits 143 */ 144 145 enum pipe_error 146 SVGA3D_BeginSurfaceCopy(struct svga_winsys_context *swc, 147 struct pipe_surface *src, 148 struct pipe_surface *dest, 149 SVGA3dCopyBox **boxes, uint32 numBoxes); 150 151 152 enum pipe_error 153 SVGA3D_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 163 enum pipe_error 164 SVGA3D_SetRenderTarget(struct svga_winsys_context *swc, 165 SVGA3dRenderTargetType type, 166 struct pipe_surface *surface); 167 168 enum pipe_error 169 SVGA3D_SetZRange(struct svga_winsys_context *swc, 170 float zMin, float zMax); 171 172 enum pipe_error 173 SVGA3D_SetViewport(struct svga_winsys_context *swc, 174 SVGA3dRect *rect); 175 176 enum pipe_error 177 SVGA3D_SetScissorRect(struct svga_winsys_context *swc, 178 SVGA3dRect *rect); 179 180 enum pipe_error 181 SVGA3D_SetClipPlane(struct svga_winsys_context *swc, 182 uint32 index, const float *plane); 183 184 enum pipe_error 185 SVGA3D_BeginSetTextureState(struct svga_winsys_context *swc, 186 SVGA3dTextureState **states, 187 uint32 numStates); 188 189 enum pipe_error 190 SVGA3D_BeginSetRenderState(struct svga_winsys_context *swc, 191 SVGA3dRenderState **states, 192 uint32 numStates); 193 194 195 /* 196 * Shaders 197 */ 198 199 enum pipe_error 200 SVGA3D_DefineShader(struct svga_winsys_context *swc, 201 uint32 shid, SVGA3dShaderType type, 202 const uint32 *bytecode, uint32 bytecodeLen); 203 204 enum pipe_error 205 SVGA3D_DestroyShader(struct svga_winsys_context *swc, 206 uint32 shid, SVGA3dShaderType type); 207 208 enum pipe_error 209 SVGA3D_SetShaderConst(struct svga_winsys_context *swc, 210 uint32 reg, SVGA3dShaderType type, 211 SVGA3dShaderConstType ctype, const void *value); 212 213 enum pipe_error 214 SVGA3D_SetShaderConsts(struct svga_winsys_context *swc, 215 uint32 reg, 216 uint32 numRegs, 217 SVGA3dShaderType type, 218 SVGA3dShaderConstType ctype, 219 const void *values); 220 221 enum pipe_error 222 SVGA3D_SetShader(struct svga_winsys_context *swc, 223 SVGA3dShaderType type, uint32 shid); 224 225 226 /* 227 * Queries 228 */ 229 230 enum pipe_error 231 SVGA3D_BeginQuery(struct svga_winsys_context *swc, 232 SVGA3dQueryType type); 233 234 enum pipe_error 235 SVGA3D_EndQuery(struct svga_winsys_context *swc, 236 SVGA3dQueryType type, 237 struct svga_winsys_buffer *buffer); 238 239 enum pipe_error 240 SVGA3D_WaitForQuery(struct svga_winsys_context *swc, 241 SVGA3dQueryType type, 242 struct svga_winsys_buffer *buffer); 243 244 #endif /* __SVGA3D_H__ */ 245