/********************************************************** * Copyright 2012-2015 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. * **********************************************************/ /* * svga3d_dx.h -- * * SVGA 3d hardware definitions for DX10 support. */ #ifndef _SVGA3D_DX_H_ #define _SVGA3D_DX_H_ #define INCLUDE_ALLOW_MODULE #define INCLUDE_ALLOW_USERLEVEL #define INCLUDE_ALLOW_VMCORE #include "includeCheck.h" #include "svga3d_limits.h" #define SVGA3D_INPUT_MIN 0 #define SVGA3D_INPUT_PER_VERTEX_DATA 0 #define SVGA3D_INPUT_PER_INSTANCE_DATA 1 #define SVGA3D_INPUT_MAX 2 typedef uint32 SVGA3dInputClassification; #define SVGA3D_RESOURCE_TYPE_MIN 1 #define SVGA3D_RESOURCE_BUFFER 1 #define SVGA3D_RESOURCE_TEXTURE1D 2 #define SVGA3D_RESOURCE_TEXTURE2D 3 #define SVGA3D_RESOURCE_TEXTURE3D 4 #define SVGA3D_RESOURCE_TEXTURECUBE 5 #define SVGA3D_RESOURCE_TYPE_DX10_MAX 6 #define SVGA3D_RESOURCE_BUFFEREX 6 #define SVGA3D_RESOURCE_TYPE_MAX 7 typedef uint32 SVGA3dResourceType; #define SVGA3D_DEPTH_WRITE_MASK_ZERO 0 #define SVGA3D_DEPTH_WRITE_MASK_ALL 1 typedef uint8 SVGA3dDepthWriteMask; #define SVGA3D_FILTER_MIP_LINEAR (1 << 0) #define SVGA3D_FILTER_MAG_LINEAR (1 << 2) #define SVGA3D_FILTER_MIN_LINEAR (1 << 4) #define SVGA3D_FILTER_ANISOTROPIC (1 << 6) #define SVGA3D_FILTER_COMPARE (1 << 7) typedef uint32 SVGA3dFilter; #define SVGA3D_CULL_INVALID 0 #define SVGA3D_CULL_MIN 1 #define SVGA3D_CULL_NONE 1 #define SVGA3D_CULL_FRONT 2 #define SVGA3D_CULL_BACK 3 #define SVGA3D_CULL_MAX 4 typedef uint8 SVGA3dCullMode; #define SVGA3D_COMPARISON_INVALID 0 #define SVGA3D_COMPARISON_MIN 1 #define SVGA3D_COMPARISON_NEVER 1 #define SVGA3D_COMPARISON_LESS 2 #define SVGA3D_COMPARISON_EQUAL 3 #define SVGA3D_COMPARISON_LESS_EQUAL 4 #define SVGA3D_COMPARISON_GREATER 5 #define SVGA3D_COMPARISON_NOT_EQUAL 6 #define SVGA3D_COMPARISON_GREATER_EQUAL 7 #define SVGA3D_COMPARISON_ALWAYS 8 #define SVGA3D_COMPARISON_MAX 9 typedef uint8 SVGA3dComparisonFunc; #define SVGA3D_DX_MAX_VERTEXBUFFERS 32 #define SVGA3D_DX_MAX_SOTARGETS 4 #define SVGA3D_DX_MAX_SRVIEWS 128 #define SVGA3D_DX_MAX_CONSTBUFFERS 16 #define SVGA3D_DX_MAX_SAMPLERS 16 /* Id limits */ static const uint32 SVGA3dBlendObjectCountPerContext = 4096; static const uint32 SVGA3dDepthStencilObjectCountPerContext = 4096; typedef uint32 SVGA3dSurfaceId; typedef uint32 SVGA3dShaderResourceViewId; typedef uint32 SVGA3dRenderTargetViewId; typedef uint32 SVGA3dDepthStencilViewId; typedef uint32 SVGA3dShaderId; typedef uint32 SVGA3dElementLayoutId; typedef uint32 SVGA3dSamplerId; typedef uint32 SVGA3dBlendStateId; typedef uint32 SVGA3dDepthStencilStateId; typedef uint32 SVGA3dRasterizerStateId; typedef uint32 SVGA3dQueryId; typedef uint32 SVGA3dStreamOutputId; typedef union { struct { float r; float g; float b; float a; }; float value[4]; } SVGA3dRGBAFloat; typedef #include "vmware_pack_begin.h" struct { uint32 cid; SVGAMobId mobid; } #include "vmware_pack_end.h" SVGAOTableDXContextEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineContext { uint32 cid; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineContext; /* SVGA_3D_CMD_DX_DEFINE_CONTEXT */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyContext { uint32 cid; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyContext; /* SVGA_3D_CMD_DX_DESTROY_CONTEXT */ /* * Bind a DX context. * * validContents should be set to 0 for new contexts, * and 1 if this is an old context which is getting paged * back on to the device. * * For new contexts, it is recommended that the driver * issue commands to initialize all interesting state * prior to rendering. */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBindContext { uint32 cid; SVGAMobId mobid; uint32 validContents; } #include "vmware_pack_end.h" SVGA3dCmdDXBindContext; /* SVGA_3D_CMD_DX_BIND_CONTEXT */ /* * Readback a DX context. * (Request that the device flush the contents back into guest memory.) */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXReadbackContext { uint32 cid; } #include "vmware_pack_end.h" SVGA3dCmdDXReadbackContext; /* SVGA_3D_CMD_DX_READBACK_CONTEXT */ /* * Invalidate a guest-backed context. */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXInvalidateContext { uint32 cid; } #include "vmware_pack_end.h" SVGA3dCmdDXInvalidateContext; /* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT */ typedef #include "vmware_pack_begin.h" struct SVGA3dReplyFormatData { uint32 formatSupport; uint32 msaa2xQualityLevels:5; uint32 msaa4xQualityLevels:5; uint32 msaa8xQualityLevels:5; uint32 msaa16xQualityLevels:5; uint32 msaa32xQualityLevels:5; uint32 pad:7; } #include "vmware_pack_end.h" SVGA3dReplyFormatData; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetSingleConstantBuffer { uint32 slot; SVGA3dShaderType type; SVGA3dSurfaceId sid; uint32 offsetInBytes; uint32 sizeInBytes; } #include "vmware_pack_end.h" SVGA3dCmdDXSetSingleConstantBuffer; /* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetShaderResources { uint32 startView; SVGA3dShaderType type; /* * Followed by a variable number of SVGA3dShaderResourceViewId's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetShaderResources; /* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetShader { SVGA3dShaderId shaderId; SVGA3dShaderType type; } #include "vmware_pack_end.h" SVGA3dCmdDXSetShader; /* SVGA_3D_CMD_DX_SET_SHADER */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetSamplers { uint32 startSampler; SVGA3dShaderType type; /* * Followed by a variable number of SVGA3dSamplerId's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetSamplers; /* SVGA_3D_CMD_DX_SET_SAMPLERS */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDraw { uint32 vertexCount; uint32 startVertexLocation; } #include "vmware_pack_end.h" SVGA3dCmdDXDraw; /* SVGA_3D_CMD_DX_DRAW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDrawIndexed { uint32 indexCount; uint32 startIndexLocation; int32 baseVertexLocation; } #include "vmware_pack_end.h" SVGA3dCmdDXDrawIndexed; /* SVGA_3D_CMD_DX_DRAW_INDEXED */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDrawInstanced { uint32 vertexCountPerInstance; uint32 instanceCount; uint32 startVertexLocation; uint32 startInstanceLocation; } #include "vmware_pack_end.h" SVGA3dCmdDXDrawInstanced; /* SVGA_3D_CMD_DX_DRAW_INSTANCED */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDrawIndexedInstanced { uint32 indexCountPerInstance; uint32 instanceCount; uint32 startIndexLocation; int32 baseVertexLocation; uint32 startInstanceLocation; } #include "vmware_pack_end.h" SVGA3dCmdDXDrawIndexedInstanced; /* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDrawAuto { uint32 pad0; } #include "vmware_pack_end.h" SVGA3dCmdDXDrawAuto; /* SVGA_3D_CMD_DX_DRAW_AUTO */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetInputLayout { SVGA3dElementLayoutId elementLayoutId; } #include "vmware_pack_end.h" SVGA3dCmdDXSetInputLayout; /* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT */ typedef #include "vmware_pack_begin.h" struct SVGA3dVertexBuffer { SVGA3dSurfaceId sid; uint32 stride; uint32 offset; } #include "vmware_pack_end.h" SVGA3dVertexBuffer; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetVertexBuffers { uint32 startBuffer; /* Followed by a variable number of SVGA3dVertexBuffer's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetVertexBuffers; /* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetIndexBuffer { SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; uint32 offset; } #include "vmware_pack_end.h" SVGA3dCmdDXSetIndexBuffer; /* SVGA_3D_CMD_DX_SET_INDEX_BUFFER */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetTopology { SVGA3dPrimitiveType topology; } #include "vmware_pack_end.h" SVGA3dCmdDXSetTopology; /* SVGA_3D_CMD_DX_SET_TOPOLOGY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetRenderTargets { SVGA3dDepthStencilViewId depthStencilViewId; /* Followed by a variable number of SVGA3dRenderTargetViewId's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetRenderTargets; /* SVGA_3D_CMD_DX_SET_RENDERTARGETS */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetBlendState { SVGA3dBlendStateId blendId; float blendFactor[4]; uint32 sampleMask; } #include "vmware_pack_end.h" SVGA3dCmdDXSetBlendState; /* SVGA_3D_CMD_DX_SET_BLEND_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetDepthStencilState { SVGA3dDepthStencilStateId depthStencilId; uint32 stencilRef; } #include "vmware_pack_end.h" SVGA3dCmdDXSetDepthStencilState; /* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetRasterizerState { SVGA3dRasterizerStateId rasterizerId; } #include "vmware_pack_end.h" SVGA3dCmdDXSetRasterizerState; /* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE */ #define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0) typedef uint32 SVGA3dDXQueryFlags; /* * The SVGADXQueryDeviceState and SVGADXQueryDeviceBits are used by the device * to track query state transitions, but are not intended to be used by the * driver. */ #define SVGADX_QDSTATE_INVALID ((uint8)-1) /* Query has no state */ #define SVGADX_QDSTATE_MIN 0 #define SVGADX_QDSTATE_IDLE 0 /* Query hasn't started yet */ #define SVGADX_QDSTATE_ACTIVE 1 /* Query is actively gathering data */ #define SVGADX_QDSTATE_PENDING 2 /* Query is waiting for results */ #define SVGADX_QDSTATE_FINISHED 3 /* Query has completed */ #define SVGADX_QDSTATE_MAX 4 typedef uint8 SVGADXQueryDeviceState; typedef #include "vmware_pack_begin.h" struct { SVGA3dQueryTypeUint8 type; uint16 pad0; SVGADXQueryDeviceState state; SVGA3dDXQueryFlags flags; SVGAMobId mobid; uint32 offset; } #include "vmware_pack_end.h" SVGACOTableDXQueryEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineQuery { SVGA3dQueryId queryId; SVGA3dQueryType type; SVGA3dDXQueryFlags flags; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineQuery; /* SVGA_3D_CMD_DX_DEFINE_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyQuery { SVGA3dQueryId queryId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyQuery; /* SVGA_3D_CMD_DX_DESTROY_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBindQuery { SVGA3dQueryId queryId; SVGAMobId mobid; } #include "vmware_pack_end.h" SVGA3dCmdDXBindQuery; /* SVGA_3D_CMD_DX_BIND_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetQueryOffset { SVGA3dQueryId queryId; uint32 mobOffset; } #include "vmware_pack_end.h" SVGA3dCmdDXSetQueryOffset; /* SVGA_3D_CMD_DX_SET_QUERY_OFFSET */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBeginQuery { SVGA3dQueryId queryId; } #include "vmware_pack_end.h" SVGA3dCmdDXBeginQuery; /* SVGA_3D_CMD_DX_QUERY_BEGIN */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXEndQuery { SVGA3dQueryId queryId; } #include "vmware_pack_end.h" SVGA3dCmdDXEndQuery; /* SVGA_3D_CMD_DX_QUERY_END */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXReadbackQuery { SVGA3dQueryId queryId; } #include "vmware_pack_end.h" SVGA3dCmdDXReadbackQuery; /* SVGA_3D_CMD_DX_READBACK_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXMoveQuery { SVGA3dQueryId queryId; SVGAMobId mobid; uint32 mobOffset; } #include "vmware_pack_end.h" SVGA3dCmdDXMoveQuery; /* SVGA_3D_CMD_DX_MOVE_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBindAllQuery { uint32 cid; SVGAMobId mobid; } #include "vmware_pack_end.h" SVGA3dCmdDXBindAllQuery; /* SVGA_3D_CMD_DX_BIND_ALL_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXReadbackAllQuery { uint32 cid; } #include "vmware_pack_end.h" SVGA3dCmdDXReadbackAllQuery; /* SVGA_3D_CMD_DX_READBACK_ALL_QUERY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetPredication { SVGA3dQueryId queryId; uint32 predicateValue; } #include "vmware_pack_end.h" SVGA3dCmdDXSetPredication; /* SVGA_3D_CMD_DX_SET_PREDICATION */ typedef #include "vmware_pack_begin.h" struct MKS3dDXSOState { uint32 offset; /* Starting offset */ uint32 intOffset; /* Internal offset */ uint32 vertexCount; /* vertices written */ uint32 sizeInBytes; /* max bytes to write */ } #include "vmware_pack_end.h" SVGA3dDXSOState; /* Set the offset field to this value to append SO values to the buffer */ #define SVGA3D_DX_SO_OFFSET_APPEND ((uint32) ~0u) typedef #include "vmware_pack_begin.h" struct SVGA3dSoTarget { SVGA3dSurfaceId sid; uint32 offset; uint32 sizeInBytes; } #include "vmware_pack_end.h" SVGA3dSoTarget; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetSOTargets { uint32 pad0; /* Followed by a variable number of SVGA3dSOTarget's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetSOTargets; /* SVGA_3D_CMD_DX_SET_SOTARGETS */ typedef #include "vmware_pack_begin.h" struct SVGA3dViewport { float x; float y; float width; float height; float minDepth; float maxDepth; } #include "vmware_pack_end.h" SVGA3dViewport; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetViewports { uint32 pad0; /* Followed by a variable number of SVGA3dViewport's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetViewports; /* SVGA_3D_CMD_DX_SET_VIEWPORTS */ #define SVGA3D_DX_MAX_VIEWPORTS 16 typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetScissorRects { uint32 pad0; /* Followed by a variable number of SVGASignedRect's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXSetScissorRects; /* SVGA_3D_CMD_DX_SET_SCISSORRECTS */ #define SVGA3D_DX_MAX_SCISSORRECTS 16 typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXClearRenderTargetView { SVGA3dRenderTargetViewId renderTargetViewId; SVGA3dRGBAFloat rgba; } #include "vmware_pack_end.h" SVGA3dCmdDXClearRenderTargetView; /* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXClearDepthStencilView { uint16 flags; uint16 stencil; SVGA3dDepthStencilViewId depthStencilViewId; float depth; } #include "vmware_pack_end.h" SVGA3dCmdDXClearDepthStencilView; /* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXPredCopyRegion { SVGA3dSurfaceId dstSid; uint32 dstSubResource; SVGA3dSurfaceId srcSid; uint32 srcSubResource; SVGA3dCopyBox box; } #include "vmware_pack_end.h" SVGA3dCmdDXPredCopyRegion; /* SVGA_3D_CMD_DX_PRED_COPY_REGION */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXPredCopy { SVGA3dSurfaceId dstSid; SVGA3dSurfaceId srcSid; } #include "vmware_pack_end.h" SVGA3dCmdDXPredCopy; /* SVGA_3D_CMD_DX_PRED_COPY */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBufferCopy { SVGA3dSurfaceId dest; SVGA3dSurfaceId src; uint32 destX; uint32 srcX; uint32 width; } #include "vmware_pack_end.h" SVGA3dCmdDXBufferCopy; /* SVGA_3D_CMD_DX_BUFFER_COPY */ typedef uint32 SVGA3dDXStretchBltMode; #define SVGADX_STRETCHBLT_LINEAR (1 << 0) #define SVGADX_STRETCHBLT_FORCE_SRC_SRGB (1 << 1) typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXStretchBlt { SVGA3dSurfaceId srcSid; uint32 srcSubResource; SVGA3dSurfaceId dstSid; uint32 destSubResource; SVGA3dBox boxSrc; SVGA3dBox boxDest; SVGA3dDXStretchBltMode mode; } #include "vmware_pack_end.h" SVGA3dCmdDXStretchBlt; /* SVGA_3D_CMD_DX_STRETCHBLT */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXGenMips { SVGA3dShaderResourceViewId shaderResourceViewId; } #include "vmware_pack_end.h" SVGA3dCmdDXGenMips; /* SVGA_3D_CMD_DX_GENMIPS */ /* * Defines a resource/DX surface. Resources share the surfaceId namespace. * */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDefineGBSurface_v2 { uint32 sid; SVGA3dSurfaceFlags surfaceFlags; SVGA3dSurfaceFormat format; uint32 numMipLevels; uint32 multisampleCount; SVGA3dTextureFilter autogenFilter; SVGA3dSize size; uint32 arraySize; uint32 pad; } #include "vmware_pack_end.h" SVGA3dCmdDefineGBSurface_v2; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 */ /* * Update a sub-resource in a guest-backed resource. * (Inform the device that the guest-contents have been updated.) */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXUpdateSubResource { SVGA3dSurfaceId sid; uint32 subResource; SVGA3dBox box; } #include "vmware_pack_end.h" SVGA3dCmdDXUpdateSubResource; /* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE */ /* * Readback a subresource in a guest-backed resource. * (Request the device to flush the dirty contents into the guest.) */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXReadbackSubResource { SVGA3dSurfaceId sid; uint32 subResource; } #include "vmware_pack_end.h" SVGA3dCmdDXReadbackSubResource; /* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE */ /* * Invalidate an image in a guest-backed surface. * (Notify the device that the contents can be lost.) */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXInvalidateSubResource { SVGA3dSurfaceId sid; uint32 subResource; } #include "vmware_pack_end.h" SVGA3dCmdDXInvalidateSubResource; /* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE */ /* * Raw byte wise transfer from a buffer surface into another surface * of the requested box. */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXTransferFromBuffer { SVGA3dSurfaceId srcSid; uint32 srcOffset; uint32 srcPitch; uint32 srcSlicePitch; SVGA3dSurfaceId destSid; uint32 destSubResource; SVGA3dBox destBox; } #include "vmware_pack_end.h" SVGA3dCmdDXTransferFromBuffer; /* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER */ /* * Raw byte wise transfer from a buffer surface into another surface * of the requested box. Supported if SVGA3D_DEVCAP_DXCONTEXT is set. * The context is implied from the command buffer header. */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXPredTransferFromBuffer { SVGA3dSurfaceId srcSid; uint32 srcOffset; uint32 srcPitch; uint32 srcSlicePitch; SVGA3dSurfaceId destSid; uint32 destSubResource; SVGA3dBox destBox; } #include "vmware_pack_end.h" SVGA3dCmdDXPredTransferFromBuffer; /* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSurfaceCopyAndReadback { SVGA3dSurfaceId srcSid; SVGA3dSurfaceId destSid; SVGA3dCopyBox box; } #include "vmware_pack_end.h" SVGA3dCmdDXSurfaceCopyAndReadback; /* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK */ typedef #include "vmware_pack_begin.h" struct { union { struct { uint32 firstElement; uint32 numElements; uint32 pad0; uint32 pad1; } buffer; struct { uint32 mostDetailedMip; uint32 firstArraySlice; uint32 mipLevels; uint32 arraySize; } tex; struct { uint32 firstElement; uint32 numElements; uint32 flags; uint32 pad0; } bufferex; }; } #include "vmware_pack_end.h" SVGA3dShaderResourceViewDesc; typedef #include "vmware_pack_begin.h" struct { SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; SVGA3dShaderResourceViewDesc desc; uint32 pad; } #include "vmware_pack_end.h" SVGACOTableDXSRViewEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineShaderResourceView { SVGA3dShaderResourceViewId shaderResourceViewId; SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; SVGA3dShaderResourceViewDesc desc; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineShaderResourceView; /* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyShaderResourceView { SVGA3dShaderResourceViewId shaderResourceViewId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyShaderResourceView; /* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dRenderTargetViewDesc { union { struct { uint32 firstElement; uint32 numElements; } buffer; struct { uint32 mipSlice; uint32 firstArraySlice; uint32 arraySize; } tex; /* 1d, 2d, cube */ struct { uint32 mipSlice; uint32 firstW; uint32 wSize; } tex3D; }; } #include "vmware_pack_end.h" SVGA3dRenderTargetViewDesc; typedef #include "vmware_pack_begin.h" struct { SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; SVGA3dRenderTargetViewDesc desc; uint32 pad[2]; } #include "vmware_pack_end.h" SVGACOTableDXRTViewEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineRenderTargetView { SVGA3dRenderTargetViewId renderTargetViewId; SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; SVGA3dRenderTargetViewDesc desc; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineRenderTargetView; /* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyRenderTargetView { SVGA3dRenderTargetViewId renderTargetViewId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyRenderTargetView; /* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW */ /* */ #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH 0x01 #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02 #define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK 0x03 typedef uint8 SVGA3DCreateDSViewFlags; typedef #include "vmware_pack_begin.h" struct { SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; uint32 mipSlice; uint32 firstArraySlice; uint32 arraySize; SVGA3DCreateDSViewFlags flags; uint8 pad0; uint16 pad1; uint32 pad2; } #include "vmware_pack_end.h" SVGACOTableDXDSViewEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineDepthStencilView { SVGA3dDepthStencilViewId depthStencilViewId; SVGA3dSurfaceId sid; SVGA3dSurfaceFormat format; SVGA3dResourceType resourceDimension; uint32 mipSlice; uint32 firstArraySlice; uint32 arraySize; SVGA3DCreateDSViewFlags flags; uint8 pad0; uint16 pad1; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineDepthStencilView; /* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyDepthStencilView { SVGA3dDepthStencilViewId depthStencilViewId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyDepthStencilView; /* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW */ typedef #include "vmware_pack_begin.h" struct SVGA3dInputElementDesc { uint32 inputSlot; uint32 alignedByteOffset; SVGA3dSurfaceFormat format; SVGA3dInputClassification inputSlotClass; uint32 instanceDataStepRate; uint32 inputRegister; } #include "vmware_pack_end.h" SVGA3dInputElementDesc; typedef #include "vmware_pack_begin.h" struct { /* * XXX: How many of these can there be? */ uint32 elid; uint32 numDescs; SVGA3dInputElementDesc desc[32]; uint32 pad[62]; } #include "vmware_pack_end.h" SVGACOTableDXElementLayoutEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineElementLayout { SVGA3dElementLayoutId elementLayoutId; /* Followed by a variable number of SVGA3dInputElementDesc's. */ } #include "vmware_pack_end.h" SVGA3dCmdDXDefineElementLayout; /* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyElementLayout { SVGA3dElementLayoutId elementLayoutId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyElementLayout; /* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT */ #define SVGA3D_DX_MAX_RENDER_TARGETS 8 typedef #include "vmware_pack_begin.h" struct SVGA3dDXBlendStatePerRT { uint8 blendEnable; uint8 srcBlend; uint8 destBlend; uint8 blendOp; uint8 srcBlendAlpha; uint8 destBlendAlpha; uint8 blendOpAlpha; uint8 renderTargetWriteMask; uint8 logicOpEnable; uint8 logicOp; uint16 pad0; } #include "vmware_pack_end.h" SVGA3dDXBlendStatePerRT; typedef #include "vmware_pack_begin.h" struct { uint8 alphaToCoverageEnable; uint8 independentBlendEnable; uint16 pad0; SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS]; uint32 pad1[7]; } #include "vmware_pack_end.h" SVGACOTableDXBlendStateEntry; /* */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineBlendState { SVGA3dBlendStateId blendId; uint8 alphaToCoverageEnable; uint8 independentBlendEnable; uint16 pad0; SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS]; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineBlendState; /* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyBlendState { SVGA3dBlendStateId blendId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyBlendState; /* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE */ typedef #include "vmware_pack_begin.h" struct { uint8 depthEnable; SVGA3dDepthWriteMask depthWriteMask; SVGA3dComparisonFunc depthFunc; uint8 stencilEnable; uint8 frontEnable; uint8 backEnable; uint8 stencilReadMask; uint8 stencilWriteMask; uint8 frontStencilFailOp; uint8 frontStencilDepthFailOp; uint8 frontStencilPassOp; SVGA3dComparisonFunc frontStencilFunc; uint8 backStencilFailOp; uint8 backStencilDepthFailOp; uint8 backStencilPassOp; SVGA3dComparisonFunc backStencilFunc; } #include "vmware_pack_end.h" SVGACOTableDXDepthStencilEntry; /* */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineDepthStencilState { SVGA3dDepthStencilStateId depthStencilId; uint8 depthEnable; SVGA3dDepthWriteMask depthWriteMask; SVGA3dComparisonFunc depthFunc; uint8 stencilEnable; uint8 frontEnable; uint8 backEnable; uint8 stencilReadMask; uint8 stencilWriteMask; uint8 frontStencilFailOp; uint8 frontStencilDepthFailOp; uint8 frontStencilPassOp; SVGA3dComparisonFunc frontStencilFunc; uint8 backStencilFailOp; uint8 backStencilDepthFailOp; uint8 backStencilPassOp; SVGA3dComparisonFunc backStencilFunc; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineDepthStencilState; /* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyDepthStencilState { SVGA3dDepthStencilStateId depthStencilId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyDepthStencilState; /* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE */ typedef #include "vmware_pack_begin.h" struct { uint8 fillMode; SVGA3dCullMode cullMode; uint8 frontCounterClockwise; uint8 provokingVertexLast; int32 depthBias; float depthBiasClamp; float slopeScaledDepthBias; uint8 depthClipEnable; uint8 scissorEnable; uint8 multisampleEnable; uint8 antialiasedLineEnable; float lineWidth; uint8 lineStippleEnable; uint8 lineStippleFactor; uint16 lineStipplePattern; uint32 forcedSampleCount; } #include "vmware_pack_end.h" SVGACOTableDXRasterizerStateEntry; /* */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineRasterizerState { SVGA3dRasterizerStateId rasterizerId; uint8 fillMode; SVGA3dCullMode cullMode; uint8 frontCounterClockwise; uint8 provokingVertexLast; int32 depthBias; float depthBiasClamp; float slopeScaledDepthBias; uint8 depthClipEnable; uint8 scissorEnable; uint8 multisampleEnable; uint8 antialiasedLineEnable; float lineWidth; uint8 lineStippleEnable; uint8 lineStippleFactor; uint16 lineStipplePattern; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineRasterizerState; /* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyRasterizerState { SVGA3dRasterizerStateId rasterizerId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyRasterizerState; /* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE */ typedef #include "vmware_pack_begin.h" struct { SVGA3dFilter filter; uint8 addressU; uint8 addressV; uint8 addressW; uint8 pad0; float mipLODBias; uint8 maxAnisotropy; SVGA3dComparisonFunc comparisonFunc; uint16 pad1; SVGA3dRGBAFloat borderColor; float minLOD; float maxLOD; uint32 pad2[6]; } #include "vmware_pack_end.h" SVGACOTableDXSamplerEntry; /* */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineSamplerState { SVGA3dSamplerId samplerId; SVGA3dFilter filter; uint8 addressU; uint8 addressV; uint8 addressW; uint8 pad0; float mipLODBias; uint8 maxAnisotropy; SVGA3dComparisonFunc comparisonFunc; uint16 pad1; SVGA3dRGBAFloat borderColor; float minLOD; float maxLOD; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineSamplerState; /* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroySamplerState { SVGA3dSamplerId samplerId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroySamplerState; /* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE */ /* */ typedef #include "vmware_pack_begin.h" struct SVGA3dSignatureEntry { uint8 systemValue; uint8 reg; /* register is a reserved word */ uint16 mask; uint8 registerComponentType; uint8 minPrecision; uint16 pad0; } #include "vmware_pack_end.h" SVGA3dSignatureEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineShader { SVGA3dShaderId shaderId; SVGA3dShaderType type; uint32 sizeInBytes; /* Number of bytes of shader text. */ } #include "vmware_pack_end.h" SVGA3dCmdDXDefineShader; /* SVGA_3D_CMD_DX_DEFINE_SHADER */ typedef #include "vmware_pack_begin.h" struct SVGACOTableDXShaderEntry { SVGA3dShaderType type; uint32 sizeInBytes; uint32 offsetInBytes; SVGAMobId mobid; uint32 numInputSignatureEntries; uint32 numOutputSignatureEntries; uint32 numPatchConstantSignatureEntries; uint32 pad; } #include "vmware_pack_end.h" SVGACOTableDXShaderEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyShader { SVGA3dShaderId shaderId; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyShader; /* SVGA_3D_CMD_DX_DESTROY_SHADER */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXBindShader { uint32 cid; uint32 shid; SVGAMobId mobid; uint32 offsetInBytes; } #include "vmware_pack_end.h" SVGA3dCmdDXBindShader; /* SVGA_3D_CMD_DX_BIND_SHADER */ /* * The maximum number of streamout decl's in each streamout entry. */ #define SVGA3D_MAX_STREAMOUT_DECLS 64 typedef #include "vmware_pack_begin.h" struct SVGA3dStreamOutputDeclarationEntry { uint32 outputSlot; uint32 registerIndex; uint8 registerMask; uint8 pad0; uint16 pad1; uint32 stream; } #include "vmware_pack_end.h" SVGA3dStreamOutputDeclarationEntry; typedef #include "vmware_pack_begin.h" struct SVGAOTableStreamOutputEntry { uint32 numOutputStreamEntries; SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS]; uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS]; uint32 rasterizedStream; uint32 pad[250]; } #include "vmware_pack_end.h" SVGACOTableDXStreamOutputEntry; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDefineStreamOutput { SVGA3dStreamOutputId soid; uint32 numOutputStreamEntries; SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS]; uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS]; uint32 rasterizedStream; } #include "vmware_pack_end.h" SVGA3dCmdDXDefineStreamOutput; /* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXDestroyStreamOutput { SVGA3dStreamOutputId soid; } #include "vmware_pack_end.h" SVGA3dCmdDXDestroyStreamOutput; /* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetStreamOutput { SVGA3dStreamOutputId soid; } #include "vmware_pack_end.h" SVGA3dCmdDXSetStreamOutput; /* SVGA_3D_CMD_DX_SET_STREAMOUTPUT */ typedef #include "vmware_pack_begin.h" struct { uint64 value; uint32 mobId; uint32 mobOffset; } #include "vmware_pack_end.h" SVGA3dCmdDXMobFence64; /* SVGA_3D_CMD_DX_MOB_FENCE_64 */ /* * SVGA3dCmdSetCOTable -- * * This command allows the guest to bind a mob to a context-object table. */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXSetCOTable { uint32 cid; uint32 mobid; SVGACOTableType type; uint32 validSizeInBytes; } #include "vmware_pack_end.h" SVGA3dCmdDXSetCOTable; /* SVGA_3D_CMD_DX_SET_COTABLE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXReadbackCOTable { uint32 cid; SVGACOTableType type; } #include "vmware_pack_end.h" SVGA3dCmdDXReadbackCOTable; /* SVGA_3D_CMD_DX_READBACK_COTABLE */ typedef #include "vmware_pack_begin.h" struct SVGA3dCOTableData { uint32 mobid; } #include "vmware_pack_end.h" SVGA3dCOTableData; typedef #include "vmware_pack_begin.h" struct SVGA3dBufferBinding { uint32 bufferId; uint32 stride; uint32 offset; } #include "vmware_pack_end.h" SVGA3dBufferBinding; typedef #include "vmware_pack_begin.h" struct SVGA3dConstantBufferBinding { uint32 sid; uint32 offsetInBytes; uint32 sizeInBytes; } #include "vmware_pack_end.h" SVGA3dConstantBufferBinding; typedef #include "vmware_pack_begin.h" struct SVGADXInputAssemblyMobFormat { uint32 layoutId; SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS]; uint32 indexBufferSid; uint32 pad; uint32 indexBufferOffset; uint32 indexBufferFormat; uint32 topology; } #include "vmware_pack_end.h" SVGADXInputAssemblyMobFormat; typedef #include "vmware_pack_begin.h" struct SVGADXContextMobFormat { SVGADXInputAssemblyMobFormat inputAssembly; struct { uint32 blendStateId; uint32 blendFactor[4]; uint32 sampleMask; uint32 depthStencilStateId; uint32 stencilRef; uint32 rasterizerStateId; uint32 depthStencilViewId; uint32 renderTargetViewIds[SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS]; uint32 unorderedAccessViewIds[SVGA3D_MAX_UAVIEWS]; } renderState; struct { uint32 targets[SVGA3D_DX_MAX_SOTARGETS]; uint32 soid; } streamOut; uint32 pad0[11]; uint8 numViewports; uint8 numScissorRects; uint16 pad1[1]; uint32 pad2[3]; SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS]; uint32 pad3[32]; SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS]; uint32 pad4[64]; struct { uint32 queryID; uint32 value; } predication; uint32 pad5[2]; struct { uint32 shaderId; SVGA3dConstantBufferBinding constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS]; uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS]; uint32 samplers[SVGA3D_DX_MAX_SAMPLERS]; } shaderState[SVGA3D_NUM_SHADERTYPE]; uint32 pad6[26]; SVGA3dQueryId queryID[SVGA3D_MAX_QUERY]; SVGA3dCOTableData cotables[SVGA_COTABLE_MAX]; uint32 pad7[381]; } #include "vmware_pack_end.h" SVGADXContextMobFormat; typedef #include "vmware_pack_begin.h" struct SVGA3dCmdDXTempSetContext { uint32 dxcid; } #include "vmware_pack_end.h" SVGA3dCmdDXTempSetContext; /* SVGA_3D_CMD_DX_TEMP_SET_CONTEXT */ #endif /* _SVGA3D_DX_H_ */