feat(gx): refresh CGxDevice studies

This commit is contained in:
phaneron 2025-04-29 16:26:36 -04:00
parent abcd88b4c1
commit 6a6d154b0a
63 changed files with 2685 additions and 549 deletions

View file

@ -12,13 +12,4 @@ struct CSimpleSortedArray_##T { \
uint32_t m_iterator; \
};
#define COMMON_SIMPLE_SORTED_ARRAY_POINTER_TO(T) STORM_TS_GROWABLE_ARRAY_POINTER_TO(T); \
typedef struct CSimpleSortedArray_pointer_to_##T CSimpleSortedArray_pointer_to_##T; \
struct CSimpleSortedArray_pointer_to_##T { \
TSGrowableArray_pointer_to_##T m_array; \
uint32_t m_count; \
uint32_t m_maxcount; \
uint32_t m_iterator; \
};
#endif

View file

@ -14,8 +14,9 @@ DECLARE_ENUM(CBaseManaged__ManagedFlags);
#include "tempest/vector.h"
typedef HOBJECT HDATAMGR;
typedef CBaseManaged* pointer_to_CBaseManaged;
STORM_TS_FIXED_ARRAY_POINTER_TO(CBaseManaged);
STORM_TS_FIXED_ARRAY(pointer_to_CBaseManaged);
STORM_TS_LIST(CBaseManaged);
enum CBaseManaged__ManagedTypeIds {

View file

@ -20,9 +20,10 @@ struct EvtTimer {
uint64_t guidParam;
void* guidParam2;
};
typedef EvtTimer* pointer_to_EvtTimer;
STORM_TS_PRIORITY_QUEUE(EvtTimer);
STORM_TS_GROWABLE_ARRAY_POINTER_TO(EvtTimer);
STORM_TS_GROWABLE_ARRAY(pointer_to_EvtTimer);
// class EvtTimerQueue : public TSPriorityQueue<EvtTimer>
struct EvtTimerQueue {

View file

@ -2,20 +2,11 @@
#define D3D9_CAPS_H
#include "system/types.h"
#include "external/d3d9/devtype.h"
typedef enum D3DDEVTYPE D3DDEVTYPE;
typedef struct D3DVSHADERCAPS2_0 D3DVSHADERCAPS2_0;
typedef struct D3DPSHADERCAPS2_0 D3DPSHADERCAPS2_0;
typedef struct D3DCAPS9 D3DCAPS9;
enum D3DDEVTYPE {
D3DDEVTYPE_HAL = 1,
D3DDEVTYPE_REF = 2,
D3DDEVTYPE_SW = 3,
D3DDEVTYPE_NULLREF = 4,
D3DDEVTYPE_FORCE_uint32_t = 0xffffffff
};
DECLARE_STRUCT(D3DVSHADERCAPS2_0);
DECLARE_STRUCT(D3DPSHADERCAPS2_0);
DECLARE_STRUCT(D3DCAPS9);
struct D3DVSHADERCAPS2_0 {
uint32_t Caps;

View file

@ -0,0 +1,13 @@
#ifndef D3D9_COLORVALUE_H
#define D3D9_COLORVALUE_H
DECLARE_STRUCT(D3DCOLORVALUE);
struct D3DCOLORVALUE {
float r;
float g;
float b;
float a;
};
#endif

View file

@ -0,0 +1,17 @@
#ifndef D3D9_CUBEMAPFACES_H
#define D3D9_CUBEMAPFACES_H
DECLARE_ENUM(D3DCUBEMAP_FACES);
enum D3DCUBEMAP_FACES {
D3DCUBEMAP_FACE_POSITIVE_X = 0,
D3DCUBEMAP_FACE_NEGATIVE_X = 1,
D3DCUBEMAP_FACE_POSITIVE_Y = 2,
D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
D3DCUBEMAP_FACE_POSITIVE_Z = 4,
D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
};
#endif

View file

@ -0,0 +1,42 @@
#ifndef D3D9_CUBETEXTURE_H
#define D3D9_CUBETEXTURE_H
DECLARE_STRUCT(IDirect3DCubeTexture9__v_table);
DECLARE_STRUCT(IDirect3DCubeTexture9);
struct IDirect3DCubeTexture9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DBaseTexture9 methods ***/
void* v_fn_11_SetLOD;
void* v_fn_12_GetLOD;
void* v_fn_13_GetLevelCount;
void* v_fn_14_SetAutoGenFilterType;
void* v_fn_15_GetAutoGenFilterType;
void* v_fn_16_GenerateMipSubLevels;
/*** IDirect3DCubeTexture9 methods ***/
void* v_fn_17_GetLevelDesc;
void* v_fn_18_GetCubeMapSurface;
void* v_fn_19_LockRect;
void* v_fn_20_UnlockRect;
void* v_fn_21_AddDirtyRect;
};
struct IDirect3DCubeTexture9 {
IDirect3DCubeTexture9__v_table* v_table;
};
typedef IDirect3DCubeTexture9* LPDIRECT3DCUBETEXTURE9;
#endif

View file

@ -0,0 +1,30 @@
#include "external/d3d9/caps.h"
#include "external/d3d9/colorvalue.h"
#include "external/d3d9/cubemapfaces.h"
#include "external/d3d9/cubetexture.h"
#include "external/d3d9/declusage.h"
#include "external/d3d9/device.h"
#include "external/d3d9/devtype.h"
#include "external/d3d9/direct3d.h"
#include "external/d3d9/displaymode.h"
#include "external/d3d9/format.h"
#include "external/d3d9/indexbuffer.h"
#include "external/d3d9/light.h"
#include "external/d3d9/lighttype.h"
#include "external/d3d9/lockedrect.h"
#include "external/d3d9/pixelshader.h"
#include "external/d3d9/pool.h"
#include "external/d3d9/presentparameters.h"
#include "external/d3d9/primitivetype.h"
#include "external/d3d9/query.h"
#include "external/d3d9/renderstatetype.h"
#include "external/d3d9/resourcetype.h"
#include "external/d3d9/surface.h"
#include "external/d3d9/surfacedesc.h"
#include "external/d3d9/swapeffect.h"
#include "external/d3d9/texture.h"
#include "external/d3d9/vector.h"
#include "external/d3d9/vertexbuffer.h"
#include "external/d3d9/vertexdeclaration.h"
#include "external/d3d9/vertexelement.h"
#include "external/d3d9/vertexshader.h"

View file

@ -0,0 +1,23 @@
#ifndef D3D9_DECLUSAGE_H
#define D3D9_DECLUSAGE_H
DECLARE_ENUM(D3DDECLUSAGE);
enum D3DDECLUSAGE {
D3DDECLUSAGE_POSITION = 0,
D3DDECLUSAGE_BLENDWEIGHT = 1,
D3DDECLUSAGE_BLENDINDICES = 2,
D3DDECLUSAGE_NORMAL = 3,
D3DDECLUSAGE_PSIZE = 4,
D3DDECLUSAGE_TEXCOORD = 5,
D3DDECLUSAGE_TANGENT = 6,
D3DDECLUSAGE_BINORMAL = 7,
D3DDECLUSAGE_TESSFACTOR = 8,
D3DDECLUSAGE_POSITIONT = 9,
D3DDECLUSAGE_COLOR = 10,
D3DDECLUSAGE_FOG = 11,
D3DDECLUSAGE_DEPTH = 12,
D3DDECLUSAGE_SAMPLE = 13
};
#endif

View file

@ -3,60 +3,11 @@
#include "system/types.h"
#include "external/d3d9/caps.h"
typedef int32_t D3DFORMAT;
DECLARE_STRUCT(D3DDISPLAYMODE);
DECLARE_STRUCT(IDirect3D9_v_table);
DECLARE_STRUCT(IDirect3D9);
DECLARE_STRUCT(IDirect3DDevice9__v_table);
DECLARE_STRUCT(IDirect3DDevice9);
DECLARE_STRUCT(IDirect3DDevice9_v_table);
DECLARE_STRUCT(IDirect3DVertexDeclaration9);
DECLARE_STRUCT(IDirect3DSurface9__v_table);
DECLARE_STRUCT(IDirect3DSurface9);
DECLARE_STRUCT(IDirect3DIndexBuffer9);
DECLARE_STRUCT(IDirect3DVertexBuffer9);
DECLARE_STRUCT(IDirect3DTexture9);
DECLARE_STRUCT(IDirect3DVertexShader9__v_table);
DECLARE_STRUCT(IDirect3DVertexShader9);
DECLARE_STRUCT(IDirect3DPixelShader9__v_table);
DECLARE_STRUCT(IDirect3DPixelShader9);
DECLARE_STRUCT(D3DLOCKED_RECT);
struct D3DDISPLAYMODE {
uint32_t Width;
uint32_t Height;
uint32_t RefreshRate;
D3DFORMAT Format;
};
struct IDirect3D9_v_table {
void* v_fn_1_QueryInterface;
void* v_fn_2_AddRef;
void* v_fn_3_Release;
void* v_fn_4_RegisterSoftwareDevice;
void* v_fn_5_GetAdapterCount;
void* v_fn_6_GetAdapterIdentifier;
void* v_fn_7_GetAdapterModeCount;
void* v_fn_8_EnumAdapterModes;
void* v_fn_9_GetAdapterDisplayMode;
void* v_fn_10_CheckDeviceType;
void* v_fn_11_CheckDeviceFormat;
void* v_fn_12_CheckDeviceMultiSampleType;
void* v_fn_13_CheckDepthStencilMatch;
void* v_fn_14_CheckDeviceFormatConversion;
void* v_fn_15_GetDeviceCaps;
void* v_fn_16_GetAdapterMonitor;
void* v_fn_17_CreateDevice;
};
struct IDirect3D9 {
IDirect3D9_v_table* v_table;
};
struct IDirect3DDevice9_v_table {
struct IDirect3DDevice9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
@ -180,79 +131,9 @@ struct IDirect3DDevice9_v_table {
};
struct IDirect3DDevice9 {
IDirect3DDevice9_v_table* v_table;
IDirect3DDevice9__v_table* v_table;
};
struct IDirect3DVertexDeclaration9 {
void** v_table;
};
struct IDirect3DSurface9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DSurface9 methods ***/
void* v_fn_11_GetContainer;
void* v_fn_12_GetDesc;
void* v_fn_13_LockRect;
void* v_fn_14_UnlockRect;
void* v_fn_15_GetDC;
void* v_fn_16_ReleaseDC;
};
struct IDirect3DSurface9 {
IDirect3DSurface9__v_table* v_table;
};
struct IDirect3DIndexBuffer9 {
void** v_table;
};
struct IDirect3DVertexBuffer9 {
void** v_table;
};
struct IDirect3DTexture9 {
void** v_table;
};
struct D3DLOCKED_RECT {
int32_t Pitch;
void* pBits;
};
struct IDirect3DVertexShader9__v_table {
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
void* v_fn_3_GetDevice;
void* v_fn_4_GetFunction;
};
struct IDirect3DVertexShader9 {
IDirect3DVertexShader9__v_table* v_table;
};
struct IDirect3DPixelShader9__v_table {
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
void* v_fn_3_GetDevice;
void* v_fn_4_GetFunction;
};
struct IDirect3DPixelShader9 {
IDirect3DPixelShader9__v_table* v_v_table;
};
typedef IDirect3DDevice9* LPDIRECT3DDEVICE9;
#endif

View file

@ -0,0 +1,14 @@
#ifndef D3D9_DEVTYPE_H
#define D3D9_DEVTYPE_H
DECLARE_ENUM(D3DDEVTYPE);
enum D3DDEVTYPE {
D3DDEVTYPE_HAL = 1,
D3DDEVTYPE_REF = 2,
D3DDEVTYPE_SW = 3,
D3DDEVTYPE_FORCE_DWORD = 0xffffffff
};
#endif

View file

@ -0,0 +1,35 @@
#ifndef D3D9_DIRECT3D_H
#define D3D9_DIRECT3D_H
DECLARE_STRUCT(IDirect3D9__v_table);
DECLARE_STRUCT(IDirect3D9);
struct IDirect3D9__v_table {
/*** IUnknown methods ***/
void* v_fn_1_QueryInterface;
void* v_fn_2_AddRef;
void* v_fn_3_Release;
/*** IDirect3D9 methods ***/
void* v_fn_4_RegisterSoftwareDevice;
void* v_fn_5_GetAdapterCount;
void* v_fn_6_GetAdapterIdentifier;
void* v_fn_7_GetAdapterModeCount;
void* v_fn_8_EnumAdapterModes;
void* v_fn_9_GetAdapterDisplayMode;
void* v_fn_10_CheckDeviceType;
void* v_fn_11_CheckDeviceFormat;
void* v_fn_12_CheckDeviceMultiSampleType;
void* v_fn_13_CheckDepthStencilMatch;
void* v_fn_14_CheckDeviceFormatConversion;
void* v_fn_15_GetDeviceCaps;
void* v_fn_16_GetAdapterMonitor;
void* v_fn_17_CreateDevice;
};
struct IDirect3D9 {
IDirect3D9__v_table* v_table;
};
typedef IDirect3D9* LPDIRECT3D9;
#endif

View file

@ -0,0 +1,15 @@
#ifndef D3D9_DISPLAYMODE_H
#define D3D9_DISPLAYMODE_H
DECLARE_STRUCT(D3DDISPLAYMODE);
#include "external/d3d9/format.h"
struct D3DDISPLAYMODE {
uint32_t Width;
uint32_t Height;
uint32_t RefreshRate;
D3DFORMAT Format;
};
#endif

View file

@ -0,0 +1,94 @@
#ifndef D3D9_FORMAT_H
#define D3D9_FORMAT_H
DECLARE_ENUM(D3DFORMAT);
#ifndef MAKEFOURCC
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
#endif
enum D3DFORMAT {
D3DFMT_UNKNOWN = 0,
D3DFMT_R8G8B8 = 20,
D3DFMT_A8R8G8B8 = 21,
D3DFMT_X8R8G8B8 = 22,
D3DFMT_R5G6B5 = 23,
D3DFMT_X1R5G5B5 = 24,
D3DFMT_A1R5G5B5 = 25,
D3DFMT_A4R4G4B4 = 26,
D3DFMT_R3G3B2 = 27,
D3DFMT_A8 = 28,
D3DFMT_A8R3G3B2 = 29,
D3DFMT_X4R4G4B4 = 30,
D3DFMT_A2B10G10R10 = 31,
D3DFMT_A8B8G8R8 = 32,
D3DFMT_X8B8G8R8 = 33,
D3DFMT_G16R16 = 34,
D3DFMT_A2R10G10B10 = 35,
D3DFMT_A16B16G16R16 = 36,
D3DFMT_A8P8 = 40,
D3DFMT_P8 = 41,
D3DFMT_L8 = 50,
D3DFMT_A8L8 = 51,
D3DFMT_A4L4 = 52,
D3DFMT_V8U8 = 60,
D3DFMT_L6V5U5 = 61,
D3DFMT_X8L8V8U8 = 62,
D3DFMT_Q8W8V8U8 = 63,
D3DFMT_V16U16 = 64,
D3DFMT_A2W10V10U10 = 67,
// D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
// D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
// D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
// D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
// D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
// D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
// D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
// D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M', 'E', 'T', '1'),
// D3DFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'),
// D3DFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'),
D3DFMT_D16_LOCKABLE = 70,
D3DFMT_D32 = 71,
D3DFMT_D15S1 = 73,
D3DFMT_D24S8 = 75,
D3DFMT_D24X8 = 77,
D3DFMT_D24X4S4 = 79,
D3DFMT_D16 = 80,
D3DFMT_L16 = 81,
D3DFMT_D32F_LOCKABLE = 82,
D3DFMT_D24FS8 = 83,
D3DFMT_D32_LOCKABLE = 84,
D3DFMT_S8_LOCKABLE = 85,
D3DFMT_VERTEXDATA = 100,
D3DFMT_INDEX16 = 101,
D3DFMT_INDEX32 = 102,
D3DFMT_Q16W16V16U16 = 110,
/* Floating point formats */
D3DFMT_R16F = 111,
D3DFMT_G16R16F = 112,
D3DFMT_A16B16G16R16F = 113,
/* IEEE formats */
D3DFMT_R32F = 114,
D3DFMT_G32R32F = 115,
D3DFMT_A32B32G32R32F = 116,
D3DFMT_CxV8U8 = 117,
D3DFMT_A1 = 118,
D3DFMT_A2B10G10R10_XR_BIAS = 119,
D3DFMT_BINARYBUFFER = 199,
D3DFMT_FORCE_DWORD = 0xFFFFFFFF
};
#endif

View file

@ -0,0 +1,33 @@
#ifndef D3D9_INDEX_BUFFER_H
#define D3D9_INDEX_BUFFER_H
DECLARE_STRUCT(IDirect3DIndexBuffer9__v_table);
DECLARE_STRUCT(IDirect3DIndexBuffer9);
struct IDirect3DIndexBuffer9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DIndexBuffer9 methods ***/
void* v_fn_11_Lock;
void* v_fn_12_Unlock;
void* v_fn_13_GetDesc;
};
struct IDirect3DIndexBuffer9 {
IDirect3DIndexBuffer9__v_table* v_table;
};
typedef IDirect3DIndexBuffer9* LPDIRECT3DINDEXBUFFER9;
#endif

View file

@ -0,0 +1,26 @@
#ifndef D3D9_LIGHT_H
#define D3D9_LIGHT_H
DECLARE_STRUCT(D3DLIGHT9);
#include "external/d3d9/lighttype.h"
#include "external/d3d9/colorvalue.h"
#include "external/d3d9/vector.h"
struct D3DLIGHT9 {
D3DLIGHTTYPE Type;
D3DCOLORVALUE Diffuse;
D3DCOLORVALUE Specular;
D3DCOLORVALUE Ambient;
D3DVECTOR Position;
D3DVECTOR Direction;
float Range;
float Falloff;
float Attenuation0;
float Attenuation1;
float Attenuation2;
float Theta;
float Phi;
};
#endif

View file

@ -0,0 +1,14 @@
#ifndef D3D9_LIGHTTYPE_H
#define D3D9_LIGHTTYPE_H
DECLARE_ENUM(D3DLIGHTTYPE);
enum D3DLIGHTTYPE {
D3DLIGHT_POINT = 1,
D3DLIGHT_SPOT = 2,
D3DLIGHT_DIRECTIONAL = 3,
D3DLIGHT_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,11 @@
#ifndef D3D9_LOCKEDRECT_H
#define D3D9_LOCKEDRECT_H
DECLARE_STRUCT(D3DLOCKED_RECT);
struct D3DLOCKED_RECT {
int32_t Pitch;
void* pBits;
};
#endif

View file

@ -0,0 +1,28 @@
#ifndef D3D9_MULTISAMPLETYPE_H
#define D3D9_MULTISAMPLETYPE_H
DECLARE_ENUM(D3DMULTISAMPLE_TYPE);
enum D3DMULTISAMPLE_TYPE {
D3DMULTISAMPLE_NONE = 0,
D3DMULTISAMPLE_NONMASKABLE = 1,
D3DMULTISAMPLE_2_SAMPLES = 2,
D3DMULTISAMPLE_3_SAMPLES = 3,
D3DMULTISAMPLE_4_SAMPLES = 4,
D3DMULTISAMPLE_5_SAMPLES = 5,
D3DMULTISAMPLE_6_SAMPLES = 6,
D3DMULTISAMPLE_7_SAMPLES = 7,
D3DMULTISAMPLE_8_SAMPLES = 8,
D3DMULTISAMPLE_9_SAMPLES = 9,
D3DMULTISAMPLE_10_SAMPLES = 10,
D3DMULTISAMPLE_11_SAMPLES = 11,
D3DMULTISAMPLE_12_SAMPLES = 12,
D3DMULTISAMPLE_13_SAMPLES = 13,
D3DMULTISAMPLE_14_SAMPLES = 14,
D3DMULTISAMPLE_15_SAMPLES = 15,
D3DMULTISAMPLE_16_SAMPLES = 16,
D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,19 @@
#ifndef D3D9_PIXELSHADER_H
#define D3D9_PIXELSHADER_H
DECLARE_STRUCT(IDirect3DPixelShader9__v_table);
DECLARE_STRUCT(IDirect3DPixelShader9);
struct IDirect3DPixelShader9__v_table {
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
void* v_fn_3_GetDevice;
void* v_fn_4_GetFunction;
};
struct IDirect3DPixelShader9 {
IDirect3DPixelShader9__v_table* v_v_table;
};
#endif

View file

@ -0,0 +1,15 @@
#ifndef D3D9_POOL_H
#define D3D9_POOL_H
DECLARE_ENUM(D3DPOOL);
enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,30 @@
#ifndef D3D9_PRESENTPARAMETERS_H
#define D3D9_PRESENTPARAMETERS_H
DECLARE_STRUCT(D3DPRESENT_PARAMETERS);
#include "external/d3d9/format.h"
#include "external/d3d9/multisampletype.h"
#include "external/d3d9/swapeffect.h"
struct D3DPRESENT_PARAMETERS {
uint32_t BackBufferWidth;
uint32_t BackBufferHeight;
D3DFORMAT BackBufferFormat;
uint32_t BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
uint32_t MultiSampleQuality;
D3DSWAPEFFECT SwapEffect;
void* hDeviceWindow;
int32_t Windowed;
int32_t EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
uint32_t Flags;
uint32_t FullScreen_RefreshRateInHz;
uint32_t PresentationInterval;
};
#endif

View file

@ -0,0 +1,17 @@
#ifndef D3D9_PRIMITIVETYPE_H
#define D3D9_PRIMITIVETYPE_H
DECLARE_ENUM(D3DPRIMITIVETYPE);
enum D3DPRIMITIVETYPE {
D3DPT_POINTLIST = 1,
D3DPT_LINELIST = 2,
D3DPT_LINESTRIP = 3,
D3DPT_TRIANGLELIST = 4,
D3DPT_TRIANGLESTRIP = 5,
D3DPT_TRIANGLEFAN = 6,
D3DPT_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,24 @@
#ifndef D3D9_QUERY_H
#define D3D9_QUERY_H
DECLARE_STRUCT(IDirect3DQuery9__v_table);
DECLARE_STRUCT(IDirect3DQuery9);
struct IDirect3DQuery9__v_table {
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
void* v_fn_3_GetDevice;
void* v_fn_4_GetType;
void* v_fn_5_GetDataSize;
void* v_fn_6_Issue;
void* v_fn_7_GetData;
};
struct IDirect3DQuery9 {
IDirect3DQuery9__v_table* v_table;
};
typedef IDirect3DQuery9* LPDIRECT3DQUERY9;
#endif

View file

@ -0,0 +1,114 @@
#ifndef D3D9_RENDERSTATETYPE_H
#define D3D9_RENDERSTATETYPE_H
DECLARE_ENUM(D3DRENDERSTATETYPE);
enum D3DRENDERSTATETYPE {
D3DRS_ZENABLE = 7,
D3DRS_FILLMODE = 8,
D3DRS_SHADEMODE = 9,
D3DRS_ZWRITEENABLE = 14,
D3DRS_ALPHATESTENABLE = 15,
D3DRS_LASTPIXEL = 16,
D3DRS_SRCBLEND = 19,
D3DRS_DESTBLEND = 20,
D3DRS_CULLMODE = 22,
D3DRS_ZFUNC = 23,
D3DRS_ALPHAREF = 24,
D3DRS_ALPHAFUNC = 25,
D3DRS_DITHERENABLE = 26,
D3DRS_ALPHABLENDENABLE = 27,
D3DRS_FOGENABLE = 28,
D3DRS_SPECULARENABLE = 29,
D3DRS_FOGCOLOR = 34,
D3DRS_FOGTABLEMODE = 35,
D3DRS_FOGSTART = 36,
D3DRS_FOGEND = 37,
D3DRS_FOGDENSITY = 38,
D3DRS_RANGEFOGENABLE = 48,
D3DRS_STENCILENABLE = 52,
D3DRS_STENCILFAIL = 53,
D3DRS_STENCILZFAIL = 54,
D3DRS_STENCILPASS = 55,
D3DRS_STENCILFUNC = 56,
D3DRS_STENCILREF = 57,
D3DRS_STENCILMASK = 58,
D3DRS_STENCILWRITEMASK = 59,
D3DRS_TEXTUREFACTOR = 60,
D3DRS_WRAP0 = 128,
D3DRS_WRAP1 = 129,
D3DRS_WRAP2 = 130,
D3DRS_WRAP3 = 131,
D3DRS_WRAP4 = 132,
D3DRS_WRAP5 = 133,
D3DRS_WRAP6 = 134,
D3DRS_WRAP7 = 135,
D3DRS_CLIPPING = 136,
D3DRS_LIGHTING = 137,
D3DRS_AMBIENT = 139,
D3DRS_FOGVERTEXMODE = 140,
D3DRS_COLORVERTEX = 141,
D3DRS_LOCALVIEWER = 142,
D3DRS_NORMALIZENORMALS = 143,
D3DRS_DIFFUSEMATERIALSOURCE = 145,
D3DRS_SPECULARMATERIALSOURCE = 146,
D3DRS_AMBIENTMATERIALSOURCE = 147,
D3DRS_EMISSIVEMATERIALSOURCE = 148,
D3DRS_VERTEXBLEND = 151,
D3DRS_CLIPPLANEENABLE = 152,
D3DRS_POINTSIZE = 154,
D3DRS_POINTSIZE_MIN = 155,
D3DRS_POINTSPRITEENABLE = 156,
D3DRS_POINTSCALEENABLE = 157,
D3DRS_POINTSCALE_A = 158,
D3DRS_POINTSCALE_B = 159,
D3DRS_POINTSCALE_C = 160,
D3DRS_MULTISAMPLEANTIALIAS = 161,
D3DRS_MULTISAMPLEMASK = 162,
D3DRS_PATCHEDGESTYLE = 163,
D3DRS_DEBUGMONITORTOKEN = 165,
D3DRS_POINTSIZE_MAX = 166,
D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
D3DRS_COLORWRITEENABLE = 168,
D3DRS_TWEENFACTOR = 170,
D3DRS_BLENDOP = 171,
D3DRS_POSITIONDEGREE = 172,
D3DRS_NORMALDEGREE = 173,
D3DRS_SCISSORTESTENABLE = 174,
D3DRS_SLOPESCALEDEPTHBIAS = 175,
D3DRS_ANTIALIASEDLINEENABLE = 176,
D3DRS_MINTESSELLATIONLEVEL = 178,
D3DRS_MAXTESSELLATIONLEVEL = 179,
D3DRS_ADAPTIVETESS_X = 180,
D3DRS_ADAPTIVETESS_Y = 181,
D3DRS_ADAPTIVETESS_Z = 182,
D3DRS_ADAPTIVETESS_W = 183,
D3DRS_ENABLEADAPTIVETESSELLATION= 184,
D3DRS_TWOSIDEDSTENCILMODE = 185,
D3DRS_CCW_STENCILFAIL = 186,
D3DRS_CCW_STENCILZFAIL = 187,
D3DRS_CCW_STENCILPASS = 188,
D3DRS_CCW_STENCILFUNC = 189,
D3DRS_COLORWRITEENABLE1 = 190,
D3DRS_COLORWRITEENABLE2 = 191,
D3DRS_COLORWRITEENABLE3 = 192,
D3DRS_BLENDFACTOR = 193,
D3DRS_SRGBWRITEENABLE = 194,
D3DRS_DEPTHBIAS = 195,
D3DRS_WRAP8 = 198,
D3DRS_WRAP9 = 199,
D3DRS_WRAP10 = 200,
D3DRS_WRAP11 = 201,
D3DRS_WRAP12 = 202,
D3DRS_WRAP13 = 203,
D3DRS_WRAP14 = 204,
D3DRS_WRAP15 = 205,
D3DRS_SEPARATEALPHABLENDENABLE = 206,
D3DRS_SRCBLENDALPHA = 207,
D3DRS_DESTBLENDALPHA = 208,
D3DRS_BLENDOPALPHA = 209,
D3DRS_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,18 @@
#ifndef D3D9_RESOURCETYPE_H
#define D3D9_RESOURCETYPE_H
DECLARE_ENUM(D3DRESOURCETYPE);
enum D3DRESOURCETYPE {
D3DRTYPE_SURFACE = 1,
D3DRTYPE_VOLUME = 2,
D3DRTYPE_TEXTURE = 3,
D3DRTYPE_VOLUMETEXTURE = 4,
D3DRTYPE_CUBETEXTURE = 5,
D3DRTYPE_VERTEXBUFFER = 6,
D3DRTYPE_INDEXBUFFER = 7,
D3DRTYPE_FORCE_DWORD = 0x7fffffff
};
#endif

View file

@ -0,0 +1,36 @@
#ifndef D3D9_SURFACE_H
#define D3D9_SURFACE_H
DECLARE_STRUCT(IDirect3DSurface9__v_table);
DECLARE_STRUCT(IDirect3DSurface9);
struct IDirect3DSurface9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DSurface9 methods ***/
void* v_fn_11_GetContainer;
void* v_fn_12_GetDesc;
void* v_fn_13_LockRect;
void* v_fn_14_UnlockRect;
void* v_fn_15_GetDC;
void* v_fn_16_ReleaseDC;
};
struct IDirect3DSurface9 {
IDirect3DSurface9__v_table* v_table;
};
typedef IDirect3DSurface9* LPDIRECT3DSURFACE9;
#endif

View file

@ -0,0 +1,22 @@
#ifndef D3D9_SURFACEDESC_H
#define D3D9_SURFACEDESC_H
DECLARE_STRUCT(D3DSURFACE_DESC);
#include "external/d3d9/format.h"
#include "external/d3d9/resourcetype.h"
#include "external/d3d9/pool.h"
#include "external/d3d9/multisampletype.h"
struct D3DSURFACE_DESC {
D3DFORMAT Format;
D3DRESOURCETYPE Type;
uint32_t Usage;
D3DPOOL Pool;
D3DMULTISAMPLE_TYPE MultiSampleType;
uint32_t MultiSampleQuality;
uint32_t Width;
uint32_t Height;
};
#endif

View file

@ -0,0 +1,15 @@
#ifndef D3D9_SWAPEFFECT_H
#define D3D9_SWAPEFFECT_H
DECLARE_ENUM(D3DSWAPEFFECT);
enum D3DSWAPEFFECT {
D3DSWAPEFFECT_DISCARD = 1,
D3DSWAPEFFECT_FLIP = 2,
D3DSWAPEFFECT_COPY = 3,
D3DSWAPEFFECT_OVERLAY = 4,
D3DSWAPEFFECT_FLIPEX = 5,
D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF
};
#endif

View file

@ -0,0 +1,42 @@
#ifndef D3D9_TEXTURE_H
#define D3D9_TEXTURE_H
DECLARE_STRUCT(IDirect3DTexture9__v_table);
DECLARE_STRUCT(IDirect3DTexture9);
struct IDirect3DTexture9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DBaseTexture9 methods ***/
void* v_fn_11_SetLOD;
void* v_fn_12_GetLOD;
void* v_fn_13_GetLevelCount;
void* v_fn_14_SetAutoGenFilterType;
void* v_fn_15_GetAutoGenFilterType;
void* v_fn_16_GenerateMipSubLevels;
/*** IDirect3DTexture9 methods ***/
void* v_fn_17_GetLevelDesc;
void* v_fn_18_GetSurfaceLevel;
void* v_fn_19_LockRect;
void* v_fn_20_UnlockRect;
void* v_fn_21_AddDirtyRect;
};
struct IDirect3DTexture9 {
IDirect3DTexture9__v_table* v_table;
};
typedef IDirect3DTexture9* LPDIRECT3DTEXTURE9;
#endif

View file

@ -0,0 +1,12 @@
#ifndef D3D9_VECTOR_H
#define D3D9_VECTOR_H
DECLARE_STRUCT(D3DVECTOR);
struct D3DVECTOR {
float x;
float y;
float z;
};
#endif

View file

@ -0,0 +1,32 @@
#ifndef D3D9_VERTEXBUFFER_H
DECLARE_STRUCT(IDirect3DVertexBuffer9__v_table);
DECLARE_STRUCT(IDirect3DVertexBuffer9);
struct IDirect3DVertexBuffer9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DResource9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_SetPrivateData;
void* v_fn_5_GetPrivateData;
void* v_fn_6_FreePrivateData;
void* v_fn_7_SetPriority;
void* v_fn_8_GetPriority;
void* v_fn_9_PreLoad;
void* v_fn_10_GetType;
/*** IDirect3DVertexBuffer9 methods ***/
void* v_fn_11_Lock;
void* v_fn_12_Unlock;
void* v_fn_13_GetDesc;
};
struct IDirect3DVertexBuffer9 {
IDirect3DVertexBuffer9__v_table* v_table;
};
typedef IDirect3DVertexBuffer9* LPDIRECT3DVERTEXBUFFER9;
#endif

View file

@ -0,0 +1,23 @@
#ifndef D3D9_VERTEXDECLARATION_H
#define D3D9_VERTEXDECLARATION_H
DECLARE_STRUCT(IDirect3DVertexDeclaration9__v_table);
DECLARE_STRUCT(IDirect3DVertexDeclaration9);
struct IDirect3DVertexDeclaration9__v_table {
/*** IUnknown methods ***/
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
/*** IDirect3DVertexDeclaration9 methods ***/
void* v_fn_3_GetDevice;
void* v_fn_4_GetDeclaration;
};
struct IDirect3DVertexDeclaration9 {
IDirect3DVertexDeclaration9__v_table* v_table;
};
typedef IDirect3DVertexDeclaration9* LPDIRECT3DVERTEXDECLARATION9;
#endif

View file

@ -0,0 +1,15 @@
#ifndef D3D9_VERTEXELEMENT_H
#define D3D9_VERTEXELEMENT_H
DECLARE_STRUCT(D3DVERTEXELEMENT9);
struct D3DVERTEXELEMENT9 {
uint16_t Stream;
uint16_t Offset;
uint8_t Type;
uint8_t Method;
uint8_t Usage;
uint8_t UsageIndex;
};
#endif

View file

@ -0,0 +1,21 @@
#ifndef D3D9_VERTEXSHADER_H
#define D3D9_VERTEXSHADER_H
DECLARE_STRUCT(IDirect3DVertexShader9__v_table);
DECLARE_STRUCT(IDirect3DVertexShader9);
struct IDirect3DVertexShader9__v_table {
void* v_fn_0_QueryInterface;
void* v_fn_1_AddRef;
void* v_fn_2_Release;
void* v_fn_3_GetDevice;
void* v_fn_4_GetFunction;
};
struct IDirect3DVertexShader9 {
IDirect3DVertexShader9__v_table* v_table;
};
typedef IDirect3DVertexShader9* LPDIRECT3DVERTEXSHADER9;
#endif

View file

@ -3,7 +3,7 @@
#include "gx/device.h"
#include "external/d3d9/device.h"
#include "external/d3d9/d3d9.h"
#include "storm/array.h"
@ -199,7 +199,9 @@ enum CGxDeviceD3d__EDeviceState {
};
struct CGxDeviceD3d__GxVertexDecl {
uint32_t m_unk00;
uint32_t count;
D3DVERTEXELEMENT9 elements[15];
IDirect3DVertexDeclaration9* d3dDecl;
};
STORM_TS_GROWABLE_ARRAY(CGxDeviceD3d__GxVertexDecl);
@ -210,36 +212,41 @@ struct CGxDeviceD3d {
uint16_t unk396E;
int32_t m_ownhwnd;
void* m_d3dLib;
IDirect3D9* m_d3d;
IDirect3DDevice9* m_d3dDevice;
LPDIRECT3D9 m_d3d;
LPDIRECT3DDEVICE9 m_d3dDevice;
D3DCAPS9 m_d3dCaps;
int32_t m_d3dIsHwDevice;
int32_t m_d3dNVAPI;
uint32_t m_d3dStereoEnabled; // UC
uint32_t unk3ABC;
uint32_t m_d3dStereoRestore; // m_d3dStereoRestore
uint32_t m_d3dStereoHandle; // UC
float m_d3dStereoConvergence; // UC
float m_d3dStereoSeparation; // UC
int32_t unk3ACC;
TSGrowableArray_CGxDeviceD3d__GxVertexDecl m_vertexDecl;
IDirect3DVertexDeclaration9* m_d3dVertexDecl[14];
int32_t m_d3dStereoDirty; // 3ACC, UC
TSGrowableArray_CGxDeviceD3d__GxVertexDecl m_gxVertexDecl;
LPDIRECT3DVERTEXDECLARATION9 m_d3dVertexDecl[14];
D3DDISPLAYMODE m_desktopDisplayMode;
int32_t m_inScene;
uint32_t unk3B2C;
// set to zero by CGxDeviceD3d::IStateSetD3DDefaults
// checked in IStateSyncLights
int32_t int3B2C;
D3DFORMAT m_devDepthFormat;
D3DFORMAT m_devAdapterFormat;
uint32_t unk3B38;
IDirect3DSurface9* m_defColorSurface;
IDirect3DSurface9* m_defDepthSurface;
uint32_t unk3B44;
uint32_t unk3B48;
int32_t m_hwCursorNeedsUpdate;
IDirect3DTexture9* m_hwCursorTexture;
IDirect3DSurface9* m_hwCursorBitmap;
uint32_t unk3B58;
IDirect3DVertexDeclaration9* m_d3dCurrentVertexDecl;
IDirect3DIndexBuffer9* m_d3dCurrentIndexBuf;
IDirect3DVertexBuffer9* m_d3dVertexStreamBuf[8];
// used by CGxDeviceD3d::DeviceSetRenderTarget
// IDirect3DSurface9* surface3B38;
LPDIRECT3DSURFACE9 m_defDepthStencilSurface;
LPDIRECT3DSURFACE9 m_defColorSurface;
LPDIRECT3DSURFACE9 m_defDepthSurface;
// used in DeviceReadPixels
LPDIRECT3DSURFACE9 surface3B44; // m_backBufferSurface?
LPDIRECT3DQUERY9 m_eventQuery; // m_queryEvent? m_eventQuery?
int32_t m_hwCursorDirty;
LPDIRECT3DTEXTURE9 m_hwCursorTexture;
LPDIRECT3DSURFACE9 m_hwCursorBitmap;
CGxTex* texture3B58;
LPDIRECT3DVERTEXDECLARATION9 m_d3dCurrentVertexDecl;
LPDIRECT3DINDEXBUFFER9 m_d3dCurrentIndexBuf;
LPDIRECT3DVERTEXBUFFER9 m_d3dVertexStreamBuf[8];
uint32_t m_d3dVertexStreamOfs[8];
uint32_t m_d3dVertexStreamStride[8];
uint32_t m_deviceStates[182];

View file

@ -13,11 +13,13 @@
#include "tempest/box.h"
#include "tempest/matrix.h"
#include "tempest/rect.h"
#include "tempest/plane.h"
#include "tempest/vector.h"
#include "gx/types.h"
#include "gx/caps.h"
#include "gx/format.h"
#include "gx/light.h"
#include "gx/state_bom.h"
#include "gx/shader.h"
#include "gx/matrix_stack.h"
@ -31,7 +33,8 @@ DECLARE_STRUCT(CGxPushedRenderState);
DECLARE_STRUCT(ShaderConstants);
DECLARE_STRUCT(CGxDevice);
DECLARE_STRUCT(CGxDevice__TextureTarget);
DECLARE_STRUCT(CGxDevice__vtable);
DECLARE_STRUCT(CGxDevice__v_table);
DECLARE_STRUCT(CGxDevice__GxLight);
typedef void (*DEVICERESTOREDCALLBACK)();
STORM_TS_GROWABLE_ARRAY(DEVICERESTOREDCALLBACK);
@ -68,8 +71,15 @@ struct CGxDevice__TextureTarget {
void* m_apiSpecific;
};
// GxLight?
struct CGxDevice__GxLight {
CGxLight light;
int32_t enable;
uint16_t flags;
};
// 84 functions
struct CGxDevice__vtable {
struct CGxDevice__v_table {
// void ITexMarkAsUpdated(CGxTex* texId);
void* v_fn_0_ITexMarkAsUpdated;
// void IRsSendToHw(EGxRenderState rs);
@ -146,7 +156,7 @@ struct CGxDevice__vtable {
// }
// void DeviceResolveDepthBuffer(CGxTex* texId);
void* v_fn_26_DeviceResolveDepthBuffer;
// void DeviceCopyTex(CGxTex* a1, int32_t a2, CGxTex* a3, int32_t a4);
// void DeviceCopyTex(CGxTex* sourceTex, uint32_t sourcePlane, CGxTex* destTex, uint32_t destPlane);
void* v_fn_27_DeviceCopyTex;
// void DeviceOverride(EGxOverride override, uint32_t value);
void* v_fn_28_DeviceOverride;
@ -164,11 +174,11 @@ struct CGxDevice__vtable {
void* v_fn_34_RemoveStereoChangedCallback;
// void CapsWindowSize(CRect& dst);
void* v_fn_35_CapsWindowSize;
// void CapsWindowSize(CRect& dst);
// void CapsWindowSizeInScreenCoords(CRect& dst);
void* v_fn_36_CapsWindowSizeInScreenCoords;
// void LogCrashInfo(char* buffer, uint32_t size);
// void LogCrashInfo(char* buffer, uint32_t buffersize);
void* v_fn_37_LogCrashInfo;
// void ScenePresent(uint32_t mask);
// void ScenePresent();
void* v_fn_38_ScenePresent;
// void SceneClear(uint32_t mask, CImVector color);
void* v_fn_39_SceneClear;
@ -210,15 +220,15 @@ struct CGxDevice__vtable {
void* v_fn_57_TexCreate;
// void TexDestroy(CGxTex* texId);
void* v_fn_58_TexDestroy;
// int32_t TexCopy(CGxTex* a1, CGxTex* a2, const C2iVector& a3, const C2iVector& a4, uint32_t a5, uint32_t a6);
// int32_t TexCopy(CGxTex* sourceTex, CGxTex* destTex, const C2iVector& pos, const C2iVector& size, uint32_t level, uint32_t plane);
void* v_fn_59_TexCopy;
// bool TexStretch(CGxTex* a1, CGxTex* a2, const CiRect* a3, const CiRect* a4, uint32_t a5, uint32_t a6);
// bool TexStretch(CGxTex* sourceTex, CGxTex* destTex, const CiRect* destRect, const CiRect* sourceRect, uint32_t level, uint32_t plane);
void* v_fn_60_TexStretch;
// void TexSetCacheSize(int32_t cacheSize);
void* v_fn_61_TexSetCacheSize;
// void QueryCreate(CGxQuery*& query, EGxQueryType queryType);
// void QueryCreate(CGxQuery*& query, EGxQueryType type);
void* v_fn_62_QueryCreate;
// bool QueryDestroy(CGxQuery*& query);
// void QueryDestroy(CGxQuery*& query);
void* v_fn_63_QueryDestroy;
// bool QueryBegin(CGxQuery* query);
void* v_fn_64_QueryBegin;
@ -228,7 +238,7 @@ struct CGxDevice__vtable {
void* v_fn_66_QueryGetParam;
// bool QueryGetData(CGxQuery* query, uint32_t* data);
void* v_fn_67_QueryGetData;
// void ShaderCreate(CGxShader*[] shaders[], EGxShTarget target, const char* a3, const char* a4, int32_t permutations);
// void ShaderCreate(CGxShader* shaders[], EGxShTarget target, const char* a3, const char* a4, int32_t permutations);
void* v_fn_68_ShaderCreate;
// void ShaderDestroy(CGxShader*& shader);
void* v_fn_69_ShaderDestroy;
@ -265,7 +275,7 @@ struct CGxDevice__vtable {
// this class is 14692 bytes in size
struct CGxDevice {
// pointer to struct CGxDevice__vtable
CGxDevice__vtable* v_vtable; // 0x0 (size: 0x4)
CGxDevice__v_table* v_table; // 0x0 (size: 0x4)
TSGrowableArray_CGxPushedRenderState m_pushedStates; // 0x4 (size: 0x14)
TSGrowableArray_uint32_t m_stackOffsets; // 0x18 (size: 0x14)
TSGrowableArray_EGxRenderState m_dirtyStates; // 0x2C (size: 0x14)
@ -299,19 +309,37 @@ struct CGxDevice {
// TSHashTable_CGxShader_HASHKEY_STRI m_shaderList[6];
int32_t (*m_windowProc)(void* window, uint32_t message, uintptr_t wparam, intptr_t lparam);
int32_t m_context;
// Set to zero by CGxDevice::ScenePresent
// prevents Draw from working if != 0
int32_t intF5C;
int32_t m_windowVisible;
// set to 1 by ICursorClip
int32_t intF64;
int32_t intF68;
// Invented name, though seems to have the same place as CGxDeviceD3d::m_d3dNeedsReset (Alpha)
int32_t m_needsReset;
// Incremented by CGxDevice::ScenePresent
int32_t m_frameCount; // m_perfCounter?
// seems to have the same place as CGxDeviceD3d::m_d3dNeedsReset (Alpha)
int32_t m_viewportDirty; // m_viewportDirty
CBoundingBox m_viewport;
C44Matrix m_projection;
C44Matrix m_projNative;
// CGxMatrixStack m_xforms[GxXforms_Last];
CGxMatrixStack m_xforms[11];
CGxMatrixStack m_texGen[8];
uint32_t unk24D0[102];
// used by CGxDevice::ClipPlaneSet
// seems to be a bitmask to note which clip planes are set
uint32_t m_clipPlaneMask;
// used by:
// CGxDevice::ClipPlaneSet
C4Plane m_clipPlane[6]; // m_clipPlanes?
// used by
// CGxDeviceD3d::DeviceSetRenderTarget
// set to 1
// CGxDeviceD3d::IStateSyncScissorRect
int32_t m_scissorRectDirty; // m_scissorRectDirty?
CRect m_scissorRect;
// something to do with lighting?
// uint32_t unk2548[72];
CGxDevice__GxLight m_lights[4];
// uint32_t unk2536[60];
TSHashTable_CGxShader_HASHKEY_STRI m_shaderList[6];
uint32_t m_appMasterEnables;
@ -339,7 +367,9 @@ struct CGxDevice {
EmergencyMem m_emergencyMem[2]; // 0x28C4
TSFixedArray_CGxAppRenderState m_appRenderStates;
TSFixedArray_CGxStateBom m_hwRenderStates;
uint32_t unk2904[3]; // 0x2904 (size 0xC)
// Accessed by ITexForceRecreation
// uint32_t unk2904[3]; // 0x2904 (size 0xC) // possibly: m_textures? TSList<CGxTex> ?
TSExplicitList_CGxTex m_textures;
CGxDevice__TextureTarget m_textureTarget[2];
TSExplicitList_CGxQuery m_queryList; // 0x2928
int32_t m_scrShotClick; // 0x2934

View file

@ -1,14 +1,13 @@
#ifndef GX_EMERGENCY_MEM_H
#define GX_EMERGENCY_MEM_H
#include "storm/array/uint8_t.h"
DECLARE_STRUCT(EmergencyMem);
struct EmergencyMem {
uint32_t unk00;
uint32_t unk04;
uint32_t unk08;
uint32_t unk0C;
uint32_t unk10;
TSGrowableArray_uint8_t m_data;
};
#endif

View file

@ -31,7 +31,7 @@ struct CGxFormat {
CGxFormat__Format depthFormat;
C2iVector size;
// set by CVGxTripleBufferCallback
uint32_t backbuffers; // buffering? buffer? framebufferCount?
uint32_t backBufferCount; // buffering? buffer? framebufferCount?
uint32_t sampleCount;
float multisampleQuality; // UC, write at 00769693
CGxFormat__Format colorFormat;

View file

@ -8,7 +8,7 @@ DECLARE_STRUCT(CGxLight);
struct CGxLight {
// int32_t m_enabled : 1;
// int32_t m_isOmni : 1;
int32_t m_flags;
int32_t f_flags;
C3Vector m_dir;
C3Vector m_ambColor;
C3Vector m_dirColor;

View file

@ -23,6 +23,7 @@ struct CGxTexFlags {
uint32_t f_flags;
};
STORM_TS_LIST(CGxTex);
struct CGxTex {
CiRect m_updateRect;
int16_t m_updatePlaneMin;
@ -38,8 +39,7 @@ struct CGxTex {
void* m_userFunc;
void* m_apiSpecificData;
void* m_apiSpecificData2;
uint32_t unk40;
uint32_t unk44;
TSLink_CGxTex m_link;
uint32_t unk48;
uint32_t unk4C;
uint32_t unk50;

View file

@ -5,9 +5,7 @@
// Types (include all files to expose them in the disassembler)
// external types (c-ified)
#include "external/d3d9/caps.h"
#include "external/d3d9/device.h"
#include "external/d3d9/d3d9.h"
#include "external/lua/lua.h"
#include "async/object.h"
@ -54,6 +52,7 @@
#include "gx/caps.h"
#include "gx/device.h"
#include "gx/format.h"
#include "gx/light.h"
#include "gx/matrix_stack.h"
#include "gx/monitor_mode.h"
#include "gx/opengl.h"
@ -78,6 +77,8 @@
#include "m2/shared.h"
#include "m2/types.h"
#include "nvapi/nvapi.h"
#include "os/processorfeatures.h"
#include "os/timemanager.h"

View file

@ -0,0 +1,184 @@
#ifndef NVAPI_NVAPI_H
#define NVAPI_NVAPI_H
DECLARE_STRUCT(NvAPI_InterfaceTable);
DECLARE_ENUM(NvAPI_Status);
DECLARE_ENUM(NV_StereoRegistryProfileType);
enum NvAPI_Status {
NVAPI_OK = 0, //!< Success. Request is completed.
NVAPI_ERROR = -1, //!< Generic error
NVAPI_LIBRARY_NOT_FOUND = -2, //!< NVAPI support library cannot be loaded.
NVAPI_NO_IMPLEMENTATION = -3, //!< not implemented in current driver installation
NVAPI_API_NOT_INITIALIZED = -4, //!< NvAPI_Initialize has not been called (successfully)
NVAPI_INVALID_ARGUMENT = -5, //!< The argument/parameter value is not valid or NULL.
NVAPI_NVIDIA_DEVICE_NOT_FOUND = -6, //!< No NVIDIA display driver, or NVIDIA GPU driving a display, was found.
NVAPI_END_ENUMERATION = -7, //!< No more items to enumerate
NVAPI_INVALID_HANDLE = -8, //!< Invalid handle
NVAPI_INCOMPATIBLE_STRUCT_VERSION = -9, //!< An argument's structure version is not supported
NVAPI_HANDLE_INVALIDATED = -10, //!< The handle is no longer valid (likely due to GPU or display re-configuration)
NVAPI_OPENGL_CONTEXT_NOT_CURRENT = -11, //!< No NVIDIA OpenGL context is current (but needs to be)
NVAPI_INVALID_POINTER = -14, //!< An invalid pointer, usually NULL, was passed as a parameter
NVAPI_NO_GL_EXPERT = -12, //!< OpenGL Expert is not supported by the current drivers
NVAPI_INSTRUMENTATION_DISABLED = -13, //!< OpenGL Expert is supported, but driver instrumentation is currently disabled
NVAPI_NO_GL_NSIGHT = -15, //!< OpenGL does not support Nsight
NVAPI_EXPECTED_LOGICAL_GPU_HANDLE = -100, //!< Expected a logical GPU handle for one or more parameters
NVAPI_EXPECTED_PHYSICAL_GPU_HANDLE = -101, //!< Expected a physical GPU handle for one or more parameters
NVAPI_EXPECTED_DISPLAY_HANDLE = -102, //!< Expected an NV display handle for one or more parameters
NVAPI_INVALID_COMBINATION = -103, //!< The combination of parameters is not valid.
NVAPI_NOT_SUPPORTED = -104, //!< Requested feature is not supported in the selected GPU
NVAPI_PORTID_NOT_FOUND = -105, //!< No port ID was found for the I2C transaction
NVAPI_EXPECTED_UNATTACHED_DISPLAY_HANDLE = -106, //!< Expected an unattached display handle as one of the input parameters.
NVAPI_INVALID_PERF_LEVEL = -107, //!< Invalid perf level
NVAPI_DEVICE_BUSY = -108, //!< Device is busy; request not fulfilled
NVAPI_NV_PERSIST_FILE_NOT_FOUND = -109, //!< NV persist file is not found
NVAPI_PERSIST_DATA_NOT_FOUND = -110, //!< NV persist data is not found
NVAPI_EXPECTED_TV_DISPLAY = -111, //!< Expected a TV output display
NVAPI_EXPECTED_TV_DISPLAY_ON_DCONNECTOR = -112, //!< Expected a TV output on the D Connector - HDTV_EIAJ4120.
NVAPI_NO_ACTIVE_SLI_TOPOLOGY = -113, //!< SLI is not active on this device.
NVAPI_SLI_RENDERING_MODE_NOTALLOWED = -114, //!< Setup of SLI rendering mode is not possible right now.
NVAPI_EXPECTED_DIGITAL_FLAT_PANEL = -115, //!< Expected a digital flat panel.
NVAPI_ARGUMENT_EXCEED_MAX_SIZE = -116, //!< Argument exceeds the expected size.
NVAPI_DEVICE_SWITCHING_NOT_ALLOWED = -117, //!< Inhibit is ON due to one of the flags in NV_GPU_DISPLAY_CHANGE_INHIBIT or SLI active.
NVAPI_TESTING_CLOCKS_NOT_SUPPORTED = -118, //!< Testing of clocks is not supported.
NVAPI_UNKNOWN_UNDERSCAN_CONFIG = -119, //!< The specified underscan config is from an unknown source (e.g. INF)
NVAPI_TIMEOUT_RECONFIGURING_GPU_TOPO = -120, //!< Timeout while reconfiguring GPUs
NVAPI_DATA_NOT_FOUND = -121, //!< Requested data was not found
NVAPI_EXPECTED_ANALOG_DISPLAY = -122, //!< Expected an analog display
NVAPI_NO_VIDLINK = -123, //!< No SLI video bridge is present
NVAPI_REQUIRES_REBOOT = -124, //!< NVAPI requires a reboot for the settings to take effect
NVAPI_INVALID_HYBRID_MODE = -125, //!< The function is not supported with the current Hybrid mode.
NVAPI_MIXED_TARGET_TYPES = -126, //!< The target types are not all the same
NVAPI_SYSWOW64_NOT_SUPPORTED = -127, //!< The function is not supported from 32-bit on a 64-bit system.
NVAPI_IMPLICIT_SET_GPU_TOPOLOGY_CHANGE_NOT_ALLOWED = -128, //!< There is no implicit GPU topology active. Use NVAPI_SetHybridMode to change topology.
NVAPI_REQUEST_USER_TO_CLOSE_NON_MIGRATABLE_APPS = -129, //!< Prompt the user to close all non-migratable applications.
NVAPI_OUT_OF_MEMORY = -130, //!< Could not allocate sufficient memory to complete the call.
NVAPI_WAS_STILL_DRAWING = -131, //!< The previous operation that is transferring information to or from this surface is incomplete.
NVAPI_FILE_NOT_FOUND = -132, //!< The file was not found.
NVAPI_TOO_MANY_UNIQUE_STATE_OBJECTS = -133, //!< There are too many unique instances of a particular type of state object.
NVAPI_INVALID_CALL = -134, //!< The method call is invalid. For example, a method's parameter may not be a valid pointer.
NVAPI_D3D10_1_LIBRARY_NOT_FOUND = -135, //!< d3d10_1.dll cannot be loaded.
NVAPI_FUNCTION_NOT_FOUND = -136, //!< Couldn't find the function in the loaded DLL.
NVAPI_INVALID_USER_PRIVILEGE = -137, //!< The application will require Administrator privileges to access this API.
//!< The application can be elevated to a higher permission level by selecting "Run as Administrator".
NVAPI_EXPECTED_NON_PRIMARY_DISPLAY_HANDLE = -138, //!< The handle corresponds to GDIPrimary.
NVAPI_EXPECTED_COMPUTE_GPU_HANDLE = -139, //!< Setting Physx GPU requires that the GPU is compute-capable.
NVAPI_STEREO_NOT_INITIALIZED = -140, //!< The Stereo part of NVAPI failed to initialize completely. Check if the stereo driver is installed.
NVAPI_STEREO_REGISTRY_ACCESS_FAILED = -141, //!< Access to stereo-related registry keys or values has failed.
NVAPI_STEREO_REGISTRY_PROFILE_TYPE_NOT_SUPPORTED = -142, //!< The given registry profile type is not supported.
NVAPI_STEREO_REGISTRY_VALUE_NOT_SUPPORTED = -143, //!< The given registry value is not supported.
NVAPI_STEREO_NOT_ENABLED = -144, //!< Stereo is not enabled and the function needed it to execute completely.
NVAPI_STEREO_NOT_TURNED_ON = -145, //!< Stereo is not turned on and the function needed it to execute completely.
NVAPI_STEREO_INVALID_DEVICE_INTERFACE = -146, //!< Invalid device interface.
NVAPI_STEREO_PARAMETER_OUT_OF_RANGE = -147, //!< Separation percentage or JPEG image capture quality is out of [0-100] range.
NVAPI_STEREO_FRUSTUM_ADJUST_MODE_NOT_SUPPORTED = -148, //!< The given frustum adjust mode is not supported.
NVAPI_TOPO_NOT_POSSIBLE = -149, //!< The mosaic topology is not possible given the current state of the hardware.
NVAPI_MODE_CHANGE_FAILED = -150, //!< An attempt to do a display resolution mode change has failed.
NVAPI_D3D11_LIBRARY_NOT_FOUND = -151, //!< d3d11.dll/d3d11_beta.dll cannot be loaded.
NVAPI_INVALID_ADDRESS = -152, //!< Address is outside of valid range.
NVAPI_STRING_TOO_SMALL = -153, //!< The pre-allocated string is too small to hold the result.
NVAPI_MATCHING_DEVICE_NOT_FOUND = -154, //!< The input does not match any of the available devices.
NVAPI_DRIVER_RUNNING = -155, //!< Driver is running.
NVAPI_DRIVER_NOTRUNNING = -156, //!< Driver is not running.
NVAPI_ERROR_DRIVER_RELOAD_REQUIRED = -157, //!< A driver reload is required to apply these settings.
NVAPI_SET_NOT_ALLOWED = -158, //!< Intended setting is not allowed.
NVAPI_ADVANCED_DISPLAY_TOPOLOGY_REQUIRED = -159, //!< Information can't be returned due to "advanced display topology".
NVAPI_SETTING_NOT_FOUND = -160, //!< Setting is not found.
NVAPI_SETTING_SIZE_TOO_LARGE = -161, //!< Setting size is too large.
NVAPI_TOO_MANY_SETTINGS_IN_PROFILE = -162, //!< There are too many settings for a profile.
NVAPI_PROFILE_NOT_FOUND = -163, //!< Profile is not found.
NVAPI_PROFILE_NAME_IN_USE = -164, //!< Profile name is duplicated.
NVAPI_PROFILE_NAME_EMPTY = -165, //!< Profile name is empty.
NVAPI_EXECUTABLE_NOT_FOUND = -166, //!< Application not found in the Profile.
NVAPI_EXECUTABLE_ALREADY_IN_USE = -167, //!< Application already exists in the other profile.
NVAPI_DATATYPE_MISMATCH = -168, //!< Data Type mismatch
NVAPI_PROFILE_REMOVED = -169, //!< The profile passed as parameter has been removed and is no longer valid.
NVAPI_UNREGISTERED_RESOURCE = -170, //!< An unregistered resource was passed as a parameter.
NVAPI_ID_OUT_OF_RANGE = -171, //!< The DisplayId corresponds to a display which is not within the normal outputId range.
NVAPI_DISPLAYCONFIG_VALIDATION_FAILED = -172, //!< Display topology is not valid so the driver cannot do a mode set on this configuration.
NVAPI_DPMST_CHANGED = -173, //!< Display Port Multi-Stream topology has been changed.
NVAPI_INSUFFICIENT_BUFFER = -174, //!< Input buffer is insufficient to hold the contents.
NVAPI_ACCESS_DENIED = -175, //!< No access to the caller.
NVAPI_MOSAIC_NOT_ACTIVE = -176, //!< The requested action cannot be performed without Mosaic being enabled.
NVAPI_SHARE_RESOURCE_RELOCATED = -177, //!< The surface is relocated away from video memory.
NVAPI_REQUEST_USER_TO_DISABLE_DWM = -178, //!< The user should disable DWM before calling NvAPI.
NVAPI_D3D_DEVICE_LOST = -179, //!< D3D device status is D3DERR_DEVICELOST or D3DERR_DEVICENOTRESET - the user has to reset the device.
NVAPI_INVALID_CONFIGURATION = -180, //!< The requested action cannot be performed in the current state.
NVAPI_STEREO_HANDSHAKE_NOT_DONE = -181, //!< Call failed as stereo handshake not completed.
NVAPI_EXECUTABLE_PATH_IS_AMBIGUOUS = -182, //!< The path provided was too short to determine the correct NVDRS_APPLICATION
NVAPI_DEFAULT_STEREO_PROFILE_IS_NOT_DEFINED = -183, //!< Default stereo profile is not currently defined
NVAPI_DEFAULT_STEREO_PROFILE_DOES_NOT_EXIST = -184, //!< Default stereo profile does not exist
NVAPI_CLUSTER_ALREADY_EXISTS = -185, //!< A cluster is already defined with the given configuration.
NVAPI_DPMST_DISPLAY_ID_EXPECTED = -186, //!< The input display id is not that of a multi stream enabled connector or a display device in a multi stream topology
NVAPI_INVALID_DISPLAY_ID = -187, //!< The input display id is not valid or the monitor associated to it does not support the current operation
NVAPI_STREAM_IS_OUT_OF_SYNC = -188, //!< While playing secure audio stream, stream goes out of sync
NVAPI_INCOMPATIBLE_AUDIO_DRIVER = -189, //!< Older audio driver version than required
NVAPI_VALUE_ALREADY_SET = -190, //!< Value already set, setting again not allowed.
NVAPI_TIMEOUT = -191, //!< Requested operation timed out
NVAPI_GPU_WORKSTATION_FEATURE_INCOMPLETE = -192, //!< The requested workstation feature set has incomplete driver internal allocation resources
NVAPI_STEREO_INIT_ACTIVATION_NOT_DONE = -193, //!< Call failed because InitActivation was not called.
NVAPI_SYNC_NOT_ACTIVE = -194, //!< The requested action cannot be performed without Sync being enabled.
NVAPI_SYNC_MASTER_NOT_FOUND = -195, //!< The requested action cannot be performed without Sync Master being enabled.
NVAPI_INVALID_SYNC_TOPOLOGY = -196, //!< Invalid displays passed in the NV_GSYNC_DISPLAY pointer.
NVAPI_ECID_SIGN_ALGO_UNSUPPORTED = -197, //!< The specified signing algorithm is not supported. Either an incorrect value was entered or the current installed driver/hardware does not support the input value.
NVAPI_ECID_KEY_VERIFICATION_FAILED = -198, //!< The encrypted public key verification has failed.
NVAPI_FIRMWARE_OUT_OF_DATE = -199, //!< The device's firmware is out of date.
NVAPI_FIRMWARE_REVISION_NOT_SUPPORTED = -200, //!< The device's firmware is not supported.
NVAPI_LICENSE_CALLER_AUTHENTICATION_FAILED = -201, //!< The caller is not authorized to modify the License.
NVAPI_D3D_DEVICE_NOT_REGISTERED = -202, //!< The user tried to use a deferred context without registering the device first
NVAPI_RESOURCE_NOT_ACQUIRED = -203, //!< Head or SourceId was not reserved for the VR Display before doing the Modeset or the dedicated display.
NVAPI_TIMING_NOT_SUPPORTED = -204, //!< Provided timing is not supported.
NVAPI_HDCP_ENCRYPTION_FAILED = -205, //!< HDCP Encryption Failed for the device. Would be applicable when the device is HDCP Capable.
NVAPI_PCLK_LIMITATION_FAILED = -206, //!< Provided mode is over sink device pclk limitation.
NVAPI_NO_CONNECTOR_FOUND = -207, //!< No connector on GPU found.
NVAPI_HDCP_DISABLED = -208, //!< When a non-HDCP capable HMD is connected, we would inform user by this code.
NVAPI_API_IN_USE = -209, //!< Atleast an API is still being called
NVAPI_NVIDIA_DISPLAY_NOT_FOUND = -210, //!< No display found on Nvidia GPU(s).
NVAPI_PRIV_SEC_VIOLATION = -211, //!< Priv security violation, improper access to a secured register.
NVAPI_INCORRECT_VENDOR = -212, //!< NVAPI cannot be called by this vendor
NVAPI_DISPLAY_IN_USE = -213, //!< DirectMode Display is already in use
NVAPI_UNSUPPORTED_CONFIG_NON_HDCP_HMD = -214, //!< The Config is having Non-NVidia GPU with Non-HDCP HMD connected
NVAPI_MAX_DISPLAY_LIMIT_REACHED = -215, //!< GPU's Max Display Limit has Reached
NVAPI_INVALID_DIRECT_MODE_DISPLAY = -216, //!< DirectMode not Enabled on the Display
NVAPI_GPU_IN_DEBUG_MODE = -217, //!< GPU is in debug mode, OC is NOT allowed.
NVAPI_D3D_CONTEXT_NOT_FOUND = -218, //!< No NvAPI context was found for this D3D object
NVAPI_STEREO_VERSION_MISMATCH = -219, //!< there is version mismatch between stereo driver and dx driver
NVAPI_GPU_NOT_POWERED = -220, //!< GPU is not powered and so the request cannot be completed.
NVAPI_ERROR_DRIVER_RELOAD_IN_PROGRESS = -221, //!< The display driver update in progress.
NVAPI_WAIT_FOR_HW_RESOURCE = -222, //!< Wait for HW resources allocation
NVAPI_REQUIRE_FURTHER_HDCP_ACTION = -223, //!< operation requires further HDCP action
NVAPI_DISPLAY_MUX_TRANSITION_FAILED = -224, //!< Dynamic Mux transition failure
NVAPI_INVALID_DSC_VERSION = -225, //!< Invalid DSC version
NVAPI_INVALID_DSC_SLICECOUNT = -226, //!< Invalid DSC slice count
NVAPI_INVALID_DSC_OUTPUT_BPP = -227, //!< Invalid DSC output BPP
NVAPI_FAILED_TO_LOAD_FROM_DRIVER_STORE = -228, //!< There was an error while loading nvapi.dll from the driver store.
NVAPI_NO_VULKAN = -229, //!< OpenGL does not export Vulkan fake extensions
NVAPI_REQUEST_PENDING = -230, //!< A request for NvTOPPs telemetry CData has already been made and is pending a response.
NVAPI_RESOURCE_IN_USE = -231, //!< Operation cannot be performed because the resource is in use.
NVAPI_INVALID_IMAGE = -232, //!< Device kernel image is invalid
NVAPI_INVALID_PTX = -233, //!< PTX JIT compilation failed
NVAPI_NVLINK_UNCORRECTABLE = -234, //!< Uncorrectable NVLink error was detected during the execution
NVAPI_JIT_COMPILER_NOT_FOUND = -235, //!< PTX JIT compiler library was not found.
NVAPI_INVALID_SOURCE = -236, //!< Device kernel source is invalid.
NVAPI_ILLEGAL_INSTRUCTION = -237, //!< While executing a kernel, the device encountered an illegal instruction.
NVAPI_INVALID_PC = -238, //!< While executing a kernel, the device program counter wrapped its address space
NVAPI_LAUNCH_FAILED = -239, //!< An exception occurred on the device while executing a kernel
NVAPI_NOT_PERMITTED = -240, //!< Attempted operation is not permitted.
NVAPI_CALLBACK_ALREADY_REGISTERED = -241, //!< The callback function has already been registered.
NVAPI_CALLBACK_NOT_FOUND = -242, //!< The callback function is not found or not registered.
NVAPI_INVALID_OUTPUT_WIRE_FORMAT = -243, //!< Invalid Wire Format for the VR HMD
};
enum NV_StereoRegistryProfileType {
NVAPI_STEREO_DEFAULT_REGISTRY_PROFILE, //!< Default registry configuration profile.
NVAPI_STEREO_DX9_REGISTRY_PROFILE, //!< Separate registry configuration profile for a DirectX 9 executable.
NVAPI_STEREO_DX10_REGISTRY_PROFILE //!< Separate registry configuration profile for a DirectX 10 executable.
};
struct NvAPI_InterfaceTable {
uintptr_t func;
uint32_t id;
};
#endif

View file

@ -25,28 +25,4 @@ struct TSGrowableArray_##T { \
uint32_t m_chunk; \
};
// "pointer-to" types hack
#define STORM_TS_BASE_ARRAY_POINTER_TO(T) typedef struct TSBaseArray_pointer_to_##T TSBaseArray_pointer_to_##T; \
struct TSBaseArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
};
#define STORM_TS_FIXED_ARRAY_POINTER_TO(T) typedef struct TSFixedArray_pointer_to_##T TSFixedArray_pointer_to_##T; \
struct TSFixedArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
};
#define STORM_TS_GROWABLE_ARRAY_POINTER_TO(T) typedef struct TSGrowableArray_pointer_to_##T TSGrowableArray_pointer_to_##T; \
struct TSGrowableArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
uint32_t m_chunk; \
};
#endif

View file

@ -5,6 +5,8 @@
#include "storm/array.h"
STORM_TS_GROWABLE_ARRAY_POINTER_TO(void);
typedef void* pointer_to_void;
STORM_TS_GROWABLE_ARRAY(pointer_to_void);
#endif

View file

@ -18,7 +18,8 @@ struct CFrameStrataNode {
int32_t batchDirty;
TSExplicitList_CRenderBatch renderList;
};
STORM_TS_FIXED_ARRAY_POINTER_TO(CFrameStrataNode);
typedef CFrameStrataNode* pointer_to_CFrameStrataNode;
STORM_TS_FIXED_ARRAY(pointer_to_CFrameStrataNode);
struct CFrameStrata {
int32_t batchDirty;

View file

@ -38,7 +38,8 @@ struct FRAMEPRIORITY {
CSimpleFrame* frame;
uint32_t priority;
};
COMMON_SIMPLE_SORTED_ARRAY_POINTER_TO(FRAMEPRIORITY);
typedef FRAMEPRIORITY* pointer_to_FRAMEPRIORITY;
COMMON_SIMPLE_SORTED_ARRAY(pointer_to_FRAMEPRIORITY);
struct CSimpleTop {
CLayoutFrame b_base;