2009-02-09 21:15:56 +00:00
|
|
|
// stdafx.h : include file for standard system include files,
|
|
|
|
// or project specific include files that are used frequently, but
|
|
|
|
// are changed infrequently
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
#pragma warning(disable: 4996 4995 4324 4100)
|
2009-02-09 21:15:56 +00:00
|
|
|
|
|
|
|
#ifndef VC_EXTRALEAN
|
|
|
|
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Modify the following defines if you have to target a platform prior to the ones specified below.
|
|
|
|
// Refer to MSDN for the latest info on corresponding values for different platforms.
|
|
|
|
#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
|
|
|
|
#define WINVER 0x0510 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
|
|
|
|
#define _WIN32_WINNT 0x0400 // Change this to the appropriate value to target Windows 2000 or later.
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
|
|
|
|
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
|
|
|
|
#define _WIN32_IE 0x0400 // Change this to the appropriate value to target IE 5.0 or later.
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
|
|
|
|
|
|
|
|
#include <afxwin.h> // MFC core and standard components
|
|
|
|
//#include <afxext.h> // MFC extensions
|
|
|
|
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
|
|
|
#include <afxcmn.h> // MFC support for Windows Common Controls
|
|
|
|
#endif // _AFX_NO_AFXCMN_SUPPORT
|
|
|
|
//#include <afxmt.h>
|
2009-05-14 16:41:52 +00:00
|
|
|
|
|
|
|
// stdc
|
|
|
|
|
2009-02-09 21:15:56 +00:00
|
|
|
#include <math.h>
|
|
|
|
|
2009-05-11 08:18:00 +00:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <list>
|
|
|
|
#include <map>
|
|
|
|
#include <hash_map>
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
using namespace stdext;
|
|
|
|
|
|
|
|
extern string format(const char* fmt, ...);
|
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
// syntactic sugar
|
2009-02-09 21:15:56 +00:00
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
// put these into vc9/common7/ide/usertype.dat to have them highlighted
|
2009-02-09 21:15:56 +00:00
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
typedef unsigned char uint8;
|
|
|
|
typedef signed char int8;
|
|
|
|
typedef unsigned short uint16;
|
|
|
|
typedef signed short int16;
|
|
|
|
typedef unsigned int uint32;
|
|
|
|
typedef signed int int32;
|
|
|
|
typedef unsigned long long uint64;
|
|
|
|
typedef signed long long int64;
|
|
|
|
|
|
|
|
#define countof(a) (sizeof(a) / sizeof(a[0]))
|
2009-02-09 21:15:56 +00:00
|
|
|
|
|
|
|
#define EXPORT_C extern "C" __declspec(dllexport) void __stdcall
|
|
|
|
#define EXPORT_C_(type) extern "C" __declspec(dllexport) type __stdcall
|
|
|
|
|
|
|
|
#ifndef RESTRICT
|
|
|
|
#ifdef __INTEL_COMPILER
|
|
|
|
#define RESTRICT restrict
|
2009-05-14 16:41:52 +00:00
|
|
|
#elif _MSC_VER >= 1400 // TODO: gcc
|
2009-02-09 21:15:56 +00:00
|
|
|
#define RESTRICT __restrict
|
|
|
|
#else
|
|
|
|
#define RESTRICT
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
// directx
|
|
|
|
|
|
|
|
#include <ddraw.h>
|
|
|
|
#include <d3d9.h>
|
|
|
|
#include <d3dx9.h>
|
|
|
|
#include <d3d10.h>
|
|
|
|
#include <d3dx10.h>
|
|
|
|
|
|
|
|
#define D3DCOLORWRITEENABLE_RGBA (D3DCOLORWRITEENABLE_RED | D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_BLUE | D3DCOLORWRITEENABLE_ALPHA)
|
|
|
|
|
|
|
|
// sse
|
|
|
|
|
|
|
|
#if !defined(_M_SSE) && (defined(_M_AMD64) || defined(_M_IX86_FP) && _M_IX86_FP >= 2)
|
|
|
|
|
|
|
|
#define _M_SSE 0x200
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if _M_SSE >= 0x200
|
|
|
|
|
|
|
|
#include <xmmintrin.h>
|
|
|
|
#include <emmintrin.h>
|
|
|
|
|
|
|
|
#ifndef _MM_DENORMALS_ARE_ZERO
|
|
|
|
#define _MM_DENORMALS_ARE_ZERO 0x0040
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define MXCSR (_MM_DENORMALS_ARE_ZERO | _MM_MASK_MASK | _MM_ROUND_NEAREST | _MM_FLUSH_ZERO_ON)
|
|
|
|
|
|
|
|
#if _MSC_VER < 1500
|
|
|
|
|
|
|
|
__forceinline __m128i _mm_castps_si128(__m128 a) {return *(__m128i*)&a;}
|
|
|
|
__forceinline __m128 _mm_castsi128_ps(__m128i a) {return *(__m128*)&a;}
|
|
|
|
__forceinline __m128i _mm_castpd_si128(__m128d a) {return *(__m128i*)&a;}
|
|
|
|
__forceinline __m128d _mm_castsi128_pd(__m128i a) {return *(__m128d*)&a;}
|
|
|
|
__forceinline __m128d _mm_castps_pd(__m128 a) {return *(__m128d*)&a;}
|
|
|
|
__forceinline __m128 _mm_castpd_ps(__m128d a) {return *(__m128*)&a;}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define _MM_TRANSPOSE4_SI128(row0, row1, row2, row3) \
|
|
|
|
{ \
|
|
|
|
__m128 tmp0 = _mm_shuffle_ps(_mm_castsi128_ps(row0), _mm_castsi128_ps(row1), 0x44); \
|
|
|
|
__m128 tmp2 = _mm_shuffle_ps(_mm_castsi128_ps(row0), _mm_castsi128_ps(row1), 0xEE); \
|
|
|
|
__m128 tmp1 = _mm_shuffle_ps(_mm_castsi128_ps(row2), _mm_castsi128_ps(row3), 0x44); \
|
|
|
|
__m128 tmp3 = _mm_shuffle_ps(_mm_castsi128_ps(row2), _mm_castsi128_ps(row3), 0xEE); \
|
|
|
|
(row0) = _mm_castps_si128(_mm_shuffle_ps(tmp0, tmp1, 0x88)); \
|
|
|
|
(row1) = _mm_castps_si128(_mm_shuffle_ps(tmp0, tmp1, 0xDD)); \
|
|
|
|
(row2) = _mm_castps_si128(_mm_shuffle_ps(tmp2, tmp3, 0x88)); \
|
|
|
|
(row3) = _mm_castps_si128(_mm_shuffle_ps(tmp2, tmp3, 0xDD)); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#error TODO: GSVector4 and GSRasterizer needs SSE2
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if _M_SSE >= 0x301
|
|
|
|
|
|
|
|
#include <tmmintrin.h>
|
2009-02-09 21:15:56 +00:00
|
|
|
|
2009-05-14 16:41:52 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if _M_SSE >= 0x401
|
|
|
|
|
|
|
|
#include <smmintrin.h>
|
|
|
|
|
|
|
|
#endif
|
2009-02-09 21:15:56 +00:00
|
|
|
|