mirror of https://github.com/xemu-project/xemu.git
nv2a: Implement vertex attribute setters
This commit is contained in:
parent
6b821d2062
commit
d17e019684
hw/xbox/nv2a
|
@ -1040,6 +1040,13 @@
|
|||
# define NV097_SET_LIGHT_LOCAL_POSITION 0x0000105C
|
||||
# define NV097_SET_LIGHT_LOCAL_ATTENUATION 0x00001068
|
||||
# define NV097_SET_VERTEX4F 0x00001518
|
||||
# define NV097_SET_NORMAL 0x00001530
|
||||
# define NV097_SET_DIFFUSE_COLOR4F 0x00001550
|
||||
# define NV097_SET_SPECULAR_COLOR4F 0x00001570
|
||||
# define NV097_SET_TEXCOORD0 0x00001590
|
||||
# define NV097_SET_TEXCOORD1 0x000015B8
|
||||
# define NV097_SET_TEXCOORD2 0x000015E0
|
||||
# define NV097_SET_TEXCOORD3 0x00001608
|
||||
# define NV097_SET_VERTEX_DATA_ARRAY_OFFSET 0x00001720
|
||||
# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT 0x00001760
|
||||
# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE 0x0000000F
|
||||
|
|
|
@ -2241,6 +2241,51 @@ DEF_METHOD_INC(NV097, SET_VERTEX4F)
|
|||
}
|
||||
}
|
||||
|
||||
#define SET_VERTEX_ATTRIBUTE(command, attr_index, num_params) \
|
||||
int slot = (method - (command)) / (num_params); \
|
||||
VertexAttribute *attribute = &pg->vertex_attributes[(attr_index)]; \
|
||||
pgraph_allocate_inline_buffer_vertices(pg, (attr_index)); \
|
||||
attribute->inline_value[slot] = *(float*)¶meter
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_NORMAL)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_NORMAL, NV2A_VERTEX_ATTR_NORMAL, 3);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_DIFFUSE_COLOR4F)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_DIFFUSE_COLOR4F, NV2A_VERTEX_ATTR_DIFFUSE,
|
||||
4);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_SPECULAR_COLOR4F)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_SPECULAR_COLOR4F, NV2A_VERTEX_ATTR_SPECULAR,
|
||||
4);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_TEXCOORD0)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_TEXCOORD0, NV2A_VERTEX_ATTR_TEXTURE0, 2);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_TEXCOORD1)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_TEXCOORD1, NV2A_VERTEX_ATTR_TEXTURE1, 2);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_TEXCOORD2)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_TEXCOORD2, NV2A_VERTEX_ATTR_TEXTURE2, 2);
|
||||
}
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_TEXCOORD3)
|
||||
{
|
||||
SET_VERTEX_ATTRIBUTE(NV097_SET_TEXCOORD3, NV2A_VERTEX_ATTR_TEXTURE3, 2);
|
||||
}
|
||||
|
||||
#undef SET_VERTEX_ATTRIBUTE
|
||||
|
||||
DEF_METHOD_INC(NV097, SET_VERTEX_DATA_ARRAY_FORMAT)
|
||||
{
|
||||
int slot = (method - NV097_SET_VERTEX_DATA_ARRAY_FORMAT) / 4;
|
||||
|
|
|
@ -107,6 +107,13 @@ DEF_METHOD_RANGE(NV097, SET_VERTEX3F, 3)
|
|||
DEF_METHOD_RANGE(NV097, SET_BACK_LIGHT_AMBIENT_COLOR, 8*16)
|
||||
DEF_METHOD_RANGE(NV097, SET_LIGHT_AMBIENT_COLOR, 8*32)
|
||||
DEF_METHOD_RANGE(NV097, SET_VERTEX4F, 4)
|
||||
DEF_METHOD_RANGE(NV097, SET_NORMAL, 3)
|
||||
DEF_METHOD_RANGE(NV097, SET_DIFFUSE_COLOR4F, 4)
|
||||
DEF_METHOD_RANGE(NV097, SET_SPECULAR_COLOR4F, 4)
|
||||
DEF_METHOD_RANGE(NV097, SET_TEXCOORD0, 2)
|
||||
DEF_METHOD_RANGE(NV097, SET_TEXCOORD1, 2)
|
||||
DEF_METHOD_RANGE(NV097, SET_TEXCOORD2, 2)
|
||||
DEF_METHOD_RANGE(NV097, SET_TEXCOORD3, 2)
|
||||
DEF_METHOD_RANGE(NV097, SET_VERTEX_DATA_ARRAY_FORMAT, 16)
|
||||
DEF_METHOD_RANGE(NV097, SET_VERTEX_DATA_ARRAY_OFFSET, 16)
|
||||
DEF_METHOD(NV097, SET_LOGIC_OP_ENABLE)
|
||||
|
|
Loading…
Reference in New Issue