nxdk_pgraph_tests
A collection of tests for the Xbox nv2a graphics processor
 
Loading...
Searching...
No Matches
nxdk_ext.h
1#ifndef NXDK_EXT_H__
2#define NXDK_EXT_H__
3
4// TODO: upstream missing nv2a defines
5// See
6// https://github.com/xqemu/xqemu/blob/f9b9a9bad88b3b2df53a1b01db6a37783aa2eb27/hw/xbox/nv2a/nv2a_shaders.c#L296-L312
7#define NV2A_VERTEX_ATTR_POSITION 0
8#define NV2A_VERTEX_ATTR_WEIGHT 1
9#define NV2A_VERTEX_ATTR_NORMAL 2
10#define NV2A_VERTEX_ATTR_DIFFUSE 3
11#define NV2A_VERTEX_ATTR_SPECULAR 4
12#define NV2A_VERTEX_ATTR_FOG_COORD 5
13#define NV2A_VERTEX_ATTR_POINT_SIZE 6
14#define NV2A_VERTEX_ATTR_BACK_DIFFUSE 7
15#define NV2A_VERTEX_ATTR_BACK_SPECULAR 8
16#define NV2A_VERTEX_ATTR_TEXTURE0 9
17#define NV2A_VERTEX_ATTR_TEXTURE1 10
18#define NV2A_VERTEX_ATTR_TEXTURE2 11
19#define NV2A_VERTEX_ATTR_TEXTURE3 12
20// These do not have a default semantic but are usable from custom vertex shaders.
21#define NV2A_VERTEX_ATTR_13 13
22#define NV2A_VERTEX_ATTR_14 14
23#define NV2A_VERTEX_ATTR_15 15
24
25#define NV097_SET_WEIGHT2F 0x16A0
26#define NV097_SET_WEIGHT3F 0x16B0
27
28#define NV097_SET_ZMIN_MAX_CONTROL_CULL_NEAR_FAR_EN_FALSE 0
29#define NV097_SET_ZMIN_MAX_CONTROL_CULL_NEAR_FAR_EN_TRUE NV097_SET_ZMIN_MAX_CONTROL_CULL_NEAR_FAR
30#define NV097_SET_ZMIN_MAX_CONTROL_ZCLAMP_EN_CULL 0
31#define NV097_SET_ZMIN_MAX_CONTROL_ZCLAMP_EN_CLAMP NV097_SET_ZMIN_MAX_CONTROL_ZCLAMP_CLAMP
32#define NV097_SET_ZMIN_MAX_CONTROL_CULL_IGNORE_W_FALSE 0
33#define NV097_SET_ZMIN_MAX_CONTROL_CULL_IGNORE_W_TRUE NV097_SET_ZMIN_MAX_CONTROL_CULL_IGNORE_W
34
35// Naming from xemu's nv2a_regs.h, to be used with nxdk's NV_IMAGE_BLIT definitions.
36#define NV09F_SET_OPERATION_BLEND_AND 0x02
37#define NV09F_SET_OPERATION_SRCCOPY 0x03
38#define NV09F_SET_OPERATION_SRCCOPY_PREMULT 0x04
39#define NV09F_SET_OPERATION_BLEND_AND_PREMULT 0x05
40
41#define NV_IMAGE_BLIT_SET_BETA 0x0194
42#define NV_IMAGE_BLIT_SET_BETA4 0x0198
43
44#define NV012_BETA 0x00000012 // Alpha factor
45#define NV012_SET_BETA 0x0300
46
47#define NV072_BETA_4 0x00000072 // RGBA factor
48#define NV072_SET_BETA 0x0300
49
50#define NV04_SURFACE_2D_FORMAT_Y8 0x00000001
51#define NV04_SURFACE_2D_FORMAT_X1R5G5B5_Z1R5G5B5 0x00000002
52#define NV04_SURFACE_2D_FORMAT_X1R5G5B5_X1R5G5B5 0x00000003
53#define NV04_SURFACE_2D_FORMAT_R5G6B5 0x00000004
54#define NV04_SURFACE_2D_FORMAT_Y16 0x00000005
55#define NV04_SURFACE_2D_FORMAT_X8R8G8B8_Z8R8G8B8 0x00000006
56#define NV04_SURFACE_2D_FORMAT_X8R8G8B8_X8R8G8B8 0x00000007
57#define NV04_SURFACE_2D_FORMAT_X1A7R8G8B8_Z1A7R8G8B8 0x00000008
58#define NV04_SURFACE_2D_FORMAT_X1A7R8G8B8_X1A7R8G8B8 0x00000009
59#define NV04_SURFACE_2D_FORMAT_A8R8G8B8 0x0000000a
60#define NV04_SURFACE_2D_FORMAT_Y32 0x0000000b
61
62// From https://github.com/xemu-project/xemu/pull/1937#issuecomment-2692650398
63#define NV097_SET_CONTROL0_TEXTURE_PERSPECTIVE_ENABLE (1 << 20)
64
65// Used to set light parameters for lights beyond 0.
66// Supported params:
67// NV097_SET_LIGHT_AMBIENT_COLOR
68// NV097_SET_LIGHT_DIFFUSE_COLOR
69// NV097_SET_LIGHT_SPECULAR_COLOR
70// NV097_SET_LIGHT_LOCAL_RANGE
71// NV097_SET_LIGHT_INFINITE_HALF_VECTOR
72// NV097_SET_LIGHT_INFINITE_DIRECTION
73// NV097_SET_LIGHT_SPOT_FALLOFF
74// NV097_SET_LIGHT_SPOT_DIRECTION
75// NV097_SET_LIGHT_LOCAL_POSITION
76// NV097_SET_LIGHT_LOCAL_ATTENUATION
77#define SET_LIGHT(i, param) ((param) + (i) * 128)
78
79// Used to set light parameters for back lights beyond 0.
80// Supported params:
81// NV097_SET_BACK_LIGHT_AMBIENT_COLOR
82// NV097_SET_BACK_LIGHT_DIFFUSE_COLOR
83// NV097_SET_BACK_LIGHT_SPECULAR_COLOR
84#define SET_BACK_LIGHT(i, param) ((param) + (i) * 64)
85
86// Used to enable/disable a specific light.
87// Mode must be one of the `NV097_SET_LIGHT_ENABLE_MASK_LIGHT0_*` values.
88#define LIGHT_MODE(i, mode) ((mode) << (2 * (i)))
89
90#define NV097_SET_SPECULAR_PARAMS 0x9E0
91#define NV097_SET_SPECULAR_PARAMS_BACK 0x1E28
92#define NV097_SET_MATERIAL_ALPHA_BACK 0x17AC
93#define NV097_SET_SCENE_AMBIENT_COLOR_BACK 0x17A0
94#define NV097_SET_MATERIAL_EMISSION_BACK 0x17B0
95
96#define NV042_SET_PITCH 0x304
97#define NV042_SET_COLOR_FORMAT NV04_CONTEXT_SURFACES_2D_FORMAT
98#define NV042_SET_COLOR_FORMAT_LE_A8R8G8B8 0x0A
99
100#define NV05C_SET_COLOR_FORMAT_LE_X16R5G6B5 0x00000001
101#define NV05C_SET_COLOR_FORMAT_LE_X17R5G5B5 0x00000002
102#define NV05C_SET_COLOR_FORMAT_LE_X8R8G8B8 0x00000003
103
104// NV_PGRAPH_TEXFILTER0_CONVOLUTION_KERNEL from xemu.
105#define NV097_SET_TEXTURE_FILTER_CONVOLUTION_KERNEL 0x0000E000
106
107#define NV062_SET_COLOR_FORMAT NV10_CONTEXT_SURFACES_2D_FORMAT
108#define NV062_SET_PITCH NV10_CONTEXT_SURFACES_2D_PITCH
109#define NV062_SET_OFFSET_SOURCE NV10_CONTEXT_SURFACES_2D_OFFSET_SRC
110#define NV062_SET_OFFSET_DESTIN NV10_CONTEXT_SURFACES_2D_OFFSET_DST
111
112#define NV09F_CONTROL_POINT_IN NV_IMAGE_BLIT_POINT_IN
113#define NV09F_CONTROL_POINT_OUT NV_IMAGE_BLIT_POINT_OUT
114#define NV09F_SIZE NV_IMAGE_BLIT_SIZE
115
116#define NV097_SET_SMOOTHING_CONTROL 0x00001D7C
117
118#define NV097_SET_STENCIL_FUNC_V_NEVER 0x200
119#define NV097_SET_STENCIL_FUNC_V_LESS 0x201
120#define NV097_SET_STENCIL_FUNC_V_EQUAL 0x202
121#define NV097_SET_STENCIL_FUNC_V_LEQUAL 0x203
122#define NV097_SET_STENCIL_FUNC_V_GREATER 0x204
123#define NV097_SET_STENCIL_FUNC_V_NOTEQUAL 0x205
124#define NV097_SET_STENCIL_FUNC_V_GEQUAL 0x206
125#define NV097_SET_STENCIL_FUNC_V_ALWAYS 0x207
126
127// NV_PVIDEO_INTR is already defined in outer.h
128#define NV_PVIDEO_INTR_BUFFER_0 (1 << 0)
129#define NV_PVIDEO_INTR_BUFFER_1 (1 << 4)
130#define NV_PVIDEO_INTR_EN 0x00008140
131#define NV_PVIDEO_INTR_EN_BUFFER_0 (1 << 0)
132#define NV_PVIDEO_INTR_EN_BUFFER_1 (1 << 4)
133#define NV_PVIDEO_BUFFER 0x00008700
134#define NV_PVIDEO_BUFFER_0_USE (1 << 0)
135#define NV_PVIDEO_BUFFER_1_USE (1 << 4)
136#define NV_PVIDEO_STOP 0x00008704
137#define NV_PVIDEO_BASE 0x00008900
138#define NV_PVIDEO_LIMIT 0x00008908
139#define NV_PVIDEO_LUMINANCE 0x00008910
140#define NV_PVIDEO_CHROMINANCE 0x00008918
141#define NV_PVIDEO_OFFSET 0x00008920
142#define NV_PVIDEO_SIZE_IN 0x00008928
143#define NV_PVIDEO_SIZE_IN_WIDTH 0x000007FF
144#define NV_PVIDEO_SIZE_IN_HEIGHT 0x07FF0000
145#define NV_PVIDEO_POINT_IN 0x00008930
146#define NV_PVIDEO_POINT_IN_S 0x00007FFF
147#define NV_PVIDEO_POINT_IN_T 0xFFFE0000
148#define NV_PVIDEO_DS_DX 0x00008938
149#define NV_PVIDEO_DT_DY 0x00008940
150#define NV_PVIDEO_POINT_OUT 0x00008948
151#define NV_PVIDEO_POINT_OUT_X 0x00000FFF
152#define NV_PVIDEO_POINT_OUT_Y 0x0FFF0000
153#define NV_PVIDEO_SIZE_OUT 0x00008950
154#define NV_PVIDEO_SIZE_OUT_WIDTH 0x00000FFF
155#define NV_PVIDEO_SIZE_OUT_HEIGHT 0x0FFF0000
156#define NV_PVIDEO_FORMAT 0x00008958
157#define NV_PVIDEO_FORMAT_PITCH 0x00001FFF
158#define NV_PVIDEO_FORMAT_COLOR 0x00030000
159#define NV_PVIDEO_FORMAT_COLOR_LE_CR8YB8CB8YA8 1
160#define NV_PVIDEO_FORMAT_DISPLAY (1 << 20)
161#define NV_PVIDEO_FORMAT_DISPLAY_COLOR_KEY 1
162#define NV_PVIDEO_COLOR_KEY 0x00008B00
163#define NV_PVIDEO_COLOR_KEY_RED 0x00FF0000
164#define NV_PVIDEO_COLOR_KEY_GREEN 0x0000FF00
165#define NV_PVIDEO_COLOR_KEY_BLUE 0x000000FF
166#define NV_PVIDEO_COLOR_KEY_ALPHA 0xFF000000
167
168#define NV097_SET_SWATH_WIDTH 0x000009f8
169#define NV097_SET_SWATH_WIDTH_V_00 0x00
170#define NV097_SET_SWATH_WIDTH_V_01 0x01
171#define NV097_SET_SWATH_WIDTH_V_02 0x02
172#define NV097_SET_SWATH_WIDTH_V_03 0x03
173#define NV097_SET_SWATH_WIDTH_V_04 0x04
174#define NV097_SET_SWATH_WIDTH_V_OFF 0x0F
175
176#endif // NXDK_EXT_H__