/**********************************************************
* Copyright 2008-2009 VMware, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
**********************************************************/
/*
* svga_cmd.h --
*
* Command construction utility for the SVGA3D protocol used by
* the VMware SVGA device, based on the svgautil library.
*/
#ifndef __SVGA3D_H__
#define __SVGA3D_H__
#include "svga_types.h"
#include "svga_reg.h"
#include "svga3d_reg.h"
#include "pipe/p_defines.h"
struct pipe_surface;
struct svga_transfer;
struct svga_winsys_context;
struct svga_winsys_buffer;
struct svga_winsys_surface;
/*
* SVGA Device Interoperability
*/
void *
SVGA3D_FIFOReserve(struct svga_winsys_context *swc, uint32 cmd, uint32 cmdSize, uint32 nr_relocs);
void
SVGA_FIFOCommitAll(struct svga_winsys_context *swc);
/*
* Context Management
*/
enum pipe_error
SVGA3D_DefineContext(struct svga_winsys_context *swc);
enum pipe_error
SVGA3D_DestroyContext(struct svga_winsys_context *swc);
/*
* Surface Management
*/
enum pipe_error
SVGA3D_BeginDefineSurface(struct svga_winsys_context *swc,
struct svga_winsys_surface *sid,
SVGA3dSurfaceFlags flags,
SVGA3dSurfaceFormat format,
SVGA3dSurfaceFace **faces,
SVGA3dSize **mipSizes,
uint32 numMipSizes);
enum pipe_error
SVGA3D_DefineSurface2D(struct svga_winsys_context *swc,
struct svga_winsys_surface *sid,
uint32 width,
uint32 height,
SVGA3dSurfaceFormat format);
enum pipe_error
SVGA3D_DestroySurface(struct svga_winsys_context *swc,
struct svga_winsys_surface *sid);
/*
* Surface Operations
*/
enum pipe_error
SVGA3D_SurfaceDMA(struct svga_winsys_context *swc,
struct svga_transfer *st,
SVGA3dTransferType transfer,
const SVGA3dCopyBox *boxes,
uint32 numBoxes,
SVGA3dSurfaceDMAFlags flags);
enum pipe_error
SVGA3D_BufferDMA(struct svga_winsys_context *swc,
struct svga_winsys_buffer *guest,
struct svga_winsys_surface *host,
SVGA3dTransferType transfer,
uint32 size,
uint32 guest_offset,
uint32 host_offset,
SVGA3dSurfaceDMAFlags flags);
/*
* Drawing Operations
*/
enum pipe_error
SVGA3D_BeginClear(struct svga_winsys_context *swc,
SVGA3dClearFlag flags,
uint32 color, float depth, uint32 stencil,
SVGA3dRect **rects, uint32 numRects);
enum pipe_error
SVGA3D_ClearRect(struct svga_winsys_context *swc,
SVGA3dClearFlag flags, uint32 color, float depth,
uint32 stencil, uint32 x, uint32 y, uint32 w, uint32 h);
enum pipe_error
SVGA3D_BeginDrawPrimitives(struct svga_winsys_context *swc,
SVGA3dVertexDecl **decls,
uint32 numVertexDecls,
SVGA3dPrimitiveRange **ranges,
uint32 numRanges);
/*
* Blits
*/
enum pipe_error
SVGA3D_BeginSurfaceCopy(struct svga_winsys_context *swc,
struct pipe_surface *src,
struct pipe_surface *dest,
SVGA3dCopyBox **boxes, uint32 numBoxes);
enum pipe_error
SVGA3D_SurfaceStretchBlt(struct svga_winsys_context *swc,
struct pipe_surface *src,
struct pipe_surface *dest,
SVGA3dBox *boxSrc, SVGA3dBox *boxDest,
SVGA3dStretchBltMode mode);
/*
* Shared FFP/Shader Render State
*/
enum pipe_error
SVGA3D_SetRenderTarget(struct svga_winsys_context *swc,
SVGA3dRenderTargetType type,
struct pipe_surface *surface);
enum pipe_error
SVGA3D_SetZRange(struct svga_winsys_context *swc,
float zMin, float zMax);
enum pipe_error
SVGA3D_SetViewport(struct svga_winsys_context *swc,
SVGA3dRect *rect);
enum pipe_error
SVGA3D_SetScissorRect(struct svga_winsys_context *swc,
SVGA3dRect *rect);
enum pipe_error
SVGA3D_SetClipPlane(struct svga_winsys_context *swc,
uint32 index, const float *plane);
enum pipe_error
SVGA3D_BeginSetTextureState(struct svga_winsys_context *swc,
SVGA3dTextureState **states,
uint32 numStates);
enum pipe_error
SVGA3D_BeginSetRenderState(struct svga_winsys_context *swc,
SVGA3dRenderState **states,
uint32 numStates);
/*
* Shaders
*/
enum pipe_error
SVGA3D_DefineShader(struct svga_winsys_context *swc,
uint32 shid, SVGA3dShaderType type,
const uint32 *bytecode, uint32 bytecodeLen);
enum pipe_error
SVGA3D_DestroyShader(struct svga_winsys_context *swc,
uint32 shid, SVGA3dShaderType type);
enum pipe_error
SVGA3D_SetShaderConst(struct svga_winsys_context *swc,
uint32 reg, SVGA3dShaderType type,
SVGA3dShaderConstType ctype, const void *value);
enum pipe_error
SVGA3D_SetShaderConsts(struct svga_winsys_context *swc,
uint32 reg,
uint32 numRegs,
SVGA3dShaderType type,
SVGA3dShaderConstType ctype,
const void *values);
enum pipe_error
SVGA3D_SetShader(struct svga_winsys_context *swc,
SVGA3dShaderType type, uint32 shid);
/*
* Queries
*/
enum pipe_error
SVGA3D_BeginQuery(struct svga_winsys_context *swc,
SVGA3dQueryType type);
enum pipe_error
SVGA3D_EndQuery(struct svga_winsys_context *swc,
SVGA3dQueryType type,
struct svga_winsys_buffer *buffer);
enum pipe_error
SVGA3D_WaitForQuery(struct svga_winsys_context *swc,
SVGA3dQueryType type,
struct svga_winsys_buffer *buffer);
#endif /* __SVGA3D_H__ */