PICA: Use VS config to get immediate mode attribute count
This commit is contained in:
parent
116194b147
commit
936e180787
2 changed files with 18 additions and 3 deletions
|
@ -131,14 +131,17 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
|
||||||
|
|
||||||
immediate_input.attr[immediate_attribute_id++] = attribute;
|
immediate_input.attr[immediate_attribute_id++] = attribute;
|
||||||
|
|
||||||
if (immediate_attribute_id >= attribute_config.GetNumTotalAttributes()) {
|
if (immediate_attribute_id >= g_state.regs.vs.GetNumTotalAttributes()) {
|
||||||
immediate_attribute_id = 0;
|
immediate_attribute_id = 0;
|
||||||
|
|
||||||
Shader::UnitState<false> shader_unit;
|
Shader::UnitState<false> shader_unit;
|
||||||
Shader::Setup(shader_unit);
|
Shader::Setup(shader_unit);
|
||||||
|
|
||||||
|
if (g_debug_context)
|
||||||
|
g_debug_context->OnEvent(DebugContext::Event::VertexLoaded, (void*)&immediate_input);
|
||||||
|
|
||||||
// Send to vertex shader
|
// Send to vertex shader
|
||||||
Shader::OutputVertex output = Shader::Run(shader_unit, immediate_input, attribute_config.GetNumTotalAttributes());
|
Shader::OutputVertex output = Shader::Run(shader_unit, immediate_input, g_state.regs.vs.GetNumTotalAttributes());
|
||||||
|
|
||||||
// Send to renderer
|
// Send to renderer
|
||||||
using Pica::Shader::OutputVertex;
|
using Pica::Shader::OutputVertex;
|
||||||
|
|
|
@ -985,6 +985,7 @@ struct Regs {
|
||||||
return (id >= 12) || (attribute_mask & (1ULL << id)) != 0;
|
return (id >= 12) || (attribute_mask & (1ULL << id)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The number of attributes loaded from the vertex buffer
|
||||||
inline int GetNumTotalAttributes() const {
|
inline int GetNumTotalAttributes() const {
|
||||||
return (int)num_extra_attributes+1;
|
return (int)num_extra_attributes+1;
|
||||||
}
|
}
|
||||||
|
@ -1123,7 +1124,17 @@ struct Regs {
|
||||||
BitField<24, 8, u32> w;
|
BitField<24, 8, u32> w;
|
||||||
} int_uniforms[4];
|
} int_uniforms[4];
|
||||||
|
|
||||||
INSERT_PADDING_WORDS(0x5);
|
INSERT_PADDING_WORDS(0x4);
|
||||||
|
|
||||||
|
union {
|
||||||
|
BitField<0, 4, u32> input_vertex_attributes;
|
||||||
|
//TODO: Geometry Shader fields
|
||||||
|
};
|
||||||
|
|
||||||
|
// Number of fixed attributes + loaded from vertex buffer (or immediate buffer) ?
|
||||||
|
inline int GetNumTotalAttributes() const {
|
||||||
|
return (int)input_vertex_attributes+1;
|
||||||
|
}
|
||||||
|
|
||||||
// Offset to shader program entry point (in words)
|
// Offset to shader program entry point (in words)
|
||||||
BitField<0, 16, u32> main_offset;
|
BitField<0, 16, u32> main_offset;
|
||||||
|
@ -1292,6 +1303,7 @@ ASSERT_REG_POSITION(triangle_topology, 0x25e);
|
||||||
ASSERT_REG_POSITION(restart_primitive, 0x25f);
|
ASSERT_REG_POSITION(restart_primitive, 0x25f);
|
||||||
ASSERT_REG_POSITION(gs, 0x280);
|
ASSERT_REG_POSITION(gs, 0x280);
|
||||||
ASSERT_REG_POSITION(vs, 0x2b0);
|
ASSERT_REG_POSITION(vs, 0x2b0);
|
||||||
|
ASSERT_REG_POSITION(vs.input_vertex_attributes, 0x2b9);
|
||||||
|
|
||||||
#undef ASSERT_REG_POSITION
|
#undef ASSERT_REG_POSITION
|
||||||
#endif // !defined(_MSC_VER)
|
#endif // !defined(_MSC_VER)
|
||||||
|
|
Loading…
Reference in a new issue