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