nv2a: Implement vertex attribute setters

This commit is contained in:
Erik Abair 2022-01-24 13:05:27 -08:00 committed by mborgerson
parent 6b821d2062
commit d17e019684
3 changed files with 59 additions and 0 deletions

View File

@ -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

View File

@ -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*)&parameter
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;

View File

@ -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)