115 lines
3.7 KiB
C++
115 lines
3.7 KiB
C++
/*==========================================================================;
|
|
*
|
|
* Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: d3d9xps.h
|
|
* Content: Xbox 360 include file for using Xbox Procedural Synthesis
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef _D3D9D3DXPS_H_
|
|
#define _D3D9D3DXPS_H_
|
|
|
|
// Prototype for the D3D-maintained, thread-specific XPS context given to
|
|
// an XPS routine:
|
|
|
|
typedef struct D3DXpsThread D3DXpsThread;
|
|
|
|
// Prototype for XPS routines:
|
|
|
|
typedef void (WINAPI *D3DXpsCallback)(__in D3DXpsThread* pThreadContext, __inout_opt void* pCallbackContext, __in CONST void* pSubmitData, DWORD InstanceIndex);
|
|
|
|
// Size, in bytes, of the ring-buffer space consumed by various
|
|
// 'D3DXps' calls:
|
|
|
|
#define D3DXPS_DRAWVERTICES_SIZE 132
|
|
#define D3DXPS_DRAWINDEXEDVERTICES_SIZE 140
|
|
|
|
// Default command size:
|
|
|
|
#define D3DXPS_COMMAND_SIZE D3DXPS_DRAWINDEXEDVERTICES_SIZE
|
|
|
|
// Maximum number of threads that can be enabled for XPS:
|
|
|
|
#define D3DXPS_MAX_THREADS 6
|
|
|
|
// Hardware fetch constant used for XPS:
|
|
|
|
#define D3DXPS_FETCH_CONSTANT (GPU_CONVERT_D3D_TO_HARDWARE_VERTEXFETCHCONSTANT(0) / 3)
|
|
|
|
//------------------------------------------------------------------------------
|
|
// The D3DXps class is only available with C++.
|
|
|
|
#ifdef __cplusplus
|
|
|
|
class D3DXps;
|
|
|
|
// Builder function prototypes:
|
|
|
|
void D3DXps_Initialize(__in D3DXps* pD3DXps, __in D3DXpsThread* pThreadContext);
|
|
void D3DXps_Uninitialize(__in D3DXps* pD3DXps);
|
|
void* D3DXps_Allocate(__in D3DXps* pD3DXps, DWORD DataSize, DWORD CommandSize);
|
|
void D3DXps_DrawVertices(__in D3DXps* pD3DXps, D3DPRIMITIVETYPE PrimitiveType, DWORD VertexCount, __in CONST void* pVertexData);
|
|
void D3DXps_DrawIndexedVertices(__in D3DXps* pD3DXps, D3DPRIMITIVETYPE PrimitiveType, DWORD IndexCount, __in CONST void* pIndexData, D3DFORMAT IndexDataFormat, __in CONST void* pVertexData);
|
|
void D3DXps_KickOff(__in D3DXps* pD3DXps);
|
|
BOOL D3DXps_KickOffAndGet(__in D3DXps* pD3DXps, __out DWORD* pInstanceIndex);
|
|
BOOL D3DXps_Get(__in D3DXps* pD3DXps, __out DWORD* pInstanceIndex);
|
|
|
|
// 'D3DXps' is the class used by XPS routines to synchronize with the
|
|
// other XPS threads, to write to the L2 buffer, and to kick-off commands
|
|
// to the GPU.
|
|
//
|
|
// NOTE: This object is intended to be instantiated on the stack at the
|
|
// entry of every XPS data generation routine.
|
|
//
|
|
// NOTE: Once final hardware arrives, all of the member functions will become
|
|
// '__forceinline' and so will always be inlined in the calling routine.
|
|
|
|
class D3DXps
|
|
{
|
|
private:
|
|
|
|
DWORD m_Reserved[100];
|
|
|
|
public:
|
|
|
|
D3DXps(__in D3DXpsThread* pThreadContext)
|
|
{
|
|
D3DXps_Initialize(this, pThreadContext);
|
|
}
|
|
|
|
~D3DXps()
|
|
{
|
|
D3DXps_Uninitialize(this);
|
|
}
|
|
|
|
void* WINAPI Allocate(DWORD DataSize, DWORD CommandSize = D3DXPS_COMMAND_SIZE)
|
|
{
|
|
return D3DXps_Allocate(this, DataSize, CommandSize);
|
|
}
|
|
|
|
void WINAPI DrawVertices(D3DPRIMITIVETYPE PrimitiveType, DWORD VertexCount, __in CONST void* pVertexData)
|
|
{
|
|
D3DXps_DrawVertices(this, PrimitiveType, VertexCount, pVertexData);
|
|
}
|
|
|
|
void WINAPI DrawIndexedVertices(D3DPRIMITIVETYPE PrimitiveType, DWORD IndexCount, __in CONST void* pIndexData, D3DFORMAT IndexDataFormat, __in CONST void* pVertexData)
|
|
{
|
|
D3DXps_DrawIndexedVertices(this, PrimitiveType, IndexCount, pIndexData, IndexDataFormat, pVertexData);
|
|
}
|
|
|
|
void WINAPI KickOff()
|
|
{
|
|
D3DXps_KickOff(this);
|
|
}
|
|
|
|
BOOL WINAPI KickOffAndGet(__out DWORD* pInstanceIndex)
|
|
{
|
|
return D3DXps_KickOffAndGet(this, pInstanceIndex);
|
|
}
|
|
};
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* _D3D9D3DXPS_H_ */
|