OpcodeDecoding: Get vertex size from the loader
This commit is contained in:
parent
a6c6ec012c
commit
2db74e7f21
|
@ -55,6 +55,11 @@ public:
|
|||
|
||||
OPCODE_CALLBACK(CPState& GetCPState()) { return m_cpmem; }
|
||||
|
||||
OPCODE_CALLBACK(u32 GetVertexSize(u8 vat))
|
||||
{
|
||||
return VertexLoaderBase::GetVertexSize(GetCPState().vtx_desc, GetCPState().vtx_attr[vat]);
|
||||
}
|
||||
|
||||
bool m_start_of_primitives = false;
|
||||
bool m_end_of_primitives = false;
|
||||
bool m_efb_copy = false;
|
||||
|
|
|
@ -45,6 +45,11 @@ public:
|
|||
|
||||
OPCODE_CALLBACK(CPState& GetCPState()) { return m_cpmem; }
|
||||
|
||||
OPCODE_CALLBACK(u32 GetVertexSize(u8 vat))
|
||||
{
|
||||
return VertexLoaderBase::GetVertexSize(GetCPState().vtx_desc, GetCPState().vtx_attr[vat]);
|
||||
}
|
||||
|
||||
private:
|
||||
void ProcessVertexComponent(CPArray array_index, VertexComponentFormat array_type,
|
||||
u32 component_offset, u32 vertex_size, u16 num_vertices,
|
||||
|
|
|
@ -316,6 +316,11 @@ public:
|
|||
|
||||
OPCODE_CALLBACK(CPState& GetCPState()) { return m_cpmem; }
|
||||
|
||||
OPCODE_CALLBACK(u32 GetVertexSize(u8 vat))
|
||||
{
|
||||
return VertexLoaderBase::GetVertexSize(GetCPState().vtx_desc, GetCPState().vtx_attr[vat]);
|
||||
}
|
||||
|
||||
QString text;
|
||||
CPState m_cpmem;
|
||||
};
|
||||
|
@ -731,6 +736,11 @@ public:
|
|||
|
||||
OPCODE_CALLBACK(CPState& GetCPState()) { return m_cpmem; }
|
||||
|
||||
OPCODE_CALLBACK(u32 GetVertexSize(u8 vat))
|
||||
{
|
||||
return VertexLoaderBase::GetVertexSize(GetCPState().vtx_desc, GetCPState().vtx_attr[vat]);
|
||||
}
|
||||
|
||||
QString text;
|
||||
CPState m_cpmem;
|
||||
};
|
||||
|
|
|
@ -228,6 +228,12 @@ public:
|
|||
return g_main_cp_state;
|
||||
}
|
||||
|
||||
OPCODE_CALLBACK(u32 GetVertexSize(u8 vat))
|
||||
{
|
||||
VertexLoaderBase* loader = VertexLoaderManager::RefreshLoader<is_preprocess>(vat);
|
||||
return loader->m_vertex_size;
|
||||
}
|
||||
|
||||
u32 m_cycles = 0;
|
||||
bool m_in_display_list = false;
|
||||
};
|
||||
|
|
|
@ -110,6 +110,8 @@ public:
|
|||
|
||||
// Get the current CP state. Needed for vertex decoding; will also be mutated for CP commands.
|
||||
virtual CPState& GetCPState() = 0;
|
||||
|
||||
virtual u32 GetVertexSize(u8 vat) = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -229,8 +231,7 @@ static DOLPHIN_FORCE_INLINE u32 RunCommand(const u8* data, u32 available, T& cal
|
|||
(cmdbyte & OpcodeDecoder::GX_PRIMITIVE_MASK) >> OpcodeDecoder::GX_PRIMITIVE_SHIFT);
|
||||
const u8 vat = cmdbyte & OpcodeDecoder::GX_VAT_MASK;
|
||||
|
||||
const u32 vertex_size = VertexLoaderBase::GetVertexSize(callback.GetCPState().vtx_desc,
|
||||
callback.GetCPState().vtx_attr[vat]);
|
||||
const u32 vertex_size = callback.GetVertexSize(vat);
|
||||
const u16 num_vertices = Common::swap16(&data[1]);
|
||||
|
||||
if (available < 3 + num_vertices * vertex_size)
|
||||
|
|
Loading…
Reference in New Issue