mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-28 07:18:33 +00:00
Convert OpcodeDecoder::Opcode and OpcodeDecoder::Primitive to enum class
This commit is contained in:
parent
3fc12431c5
commit
3aaeb2b9ef
13 changed files with 177 additions and 132 deletions
|
@ -10,6 +10,7 @@
|
|||
#include "Common/BitSet.h"
|
||||
#include "Common/ChunkFile.h"
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/EnumMap.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Common/MathUtil.h"
|
||||
|
||||
|
@ -38,8 +39,10 @@
|
|||
|
||||
std::unique_ptr<VertexManagerBase> g_vertex_manager;
|
||||
|
||||
using OpcodeDecoder::Primitive;
|
||||
|
||||
// GX primitive -> RenderState primitive, no primitive restart
|
||||
constexpr std::array<PrimitiveType, 8> primitive_from_gx{{
|
||||
constexpr Common::EnumMap<PrimitiveType, Primitive::GX_DRAW_POINTS> primitive_from_gx{
|
||||
PrimitiveType::Triangles, // GX_DRAW_QUADS
|
||||
PrimitiveType::Triangles, // GX_DRAW_QUADS_2
|
||||
PrimitiveType::Triangles, // GX_DRAW_TRIANGLES
|
||||
|
@ -48,10 +51,10 @@ constexpr std::array<PrimitiveType, 8> primitive_from_gx{{
|
|||
PrimitiveType::Lines, // GX_DRAW_LINES
|
||||
PrimitiveType::Lines, // GX_DRAW_LINE_STRIP
|
||||
PrimitiveType::Points, // GX_DRAW_POINTS
|
||||
}};
|
||||
};
|
||||
|
||||
// GX primitive -> RenderState primitive, using primitive restart
|
||||
constexpr std::array<PrimitiveType, 8> primitive_from_gx_pr{{
|
||||
constexpr Common::EnumMap<PrimitiveType, Primitive::GX_DRAW_POINTS> primitive_from_gx_pr{
|
||||
PrimitiveType::TriangleStrip, // GX_DRAW_QUADS
|
||||
PrimitiveType::TriangleStrip, // GX_DRAW_QUADS_2
|
||||
PrimitiveType::TriangleStrip, // GX_DRAW_TRIANGLES
|
||||
|
@ -60,7 +63,7 @@ constexpr std::array<PrimitiveType, 8> primitive_from_gx_pr{{
|
|||
PrimitiveType::Lines, // GX_DRAW_LINES
|
||||
PrimitiveType::Lines, // GX_DRAW_LINE_STRIP
|
||||
PrimitiveType::Points, // GX_DRAW_POINTS
|
||||
}};
|
||||
};
|
||||
|
||||
// Due to the BT.601 standard which the GameCube is based on being a compromise
|
||||
// between PAL and NTSC, neither standard gets square pixels. They are each off
|
||||
|
@ -107,13 +110,13 @@ u32 VertexManagerBase::GetRemainingSize() const
|
|||
return static_cast<u32>(m_end_buffer_pointer - m_cur_buffer_pointer);
|
||||
}
|
||||
|
||||
void VertexManagerBase::AddIndices(int primitive, u32 num_vertices)
|
||||
void VertexManagerBase::AddIndices(OpcodeDecoder::Primitive primitive, u32 num_vertices)
|
||||
{
|
||||
m_index_generator.AddIndices(primitive, num_vertices);
|
||||
}
|
||||
|
||||
DataReader VertexManagerBase::PrepareForAdditionalData(int primitive, u32 count, u32 stride,
|
||||
bool cullall)
|
||||
DataReader VertexManagerBase::PrepareForAdditionalData(OpcodeDecoder::Primitive primitive,
|
||||
u32 count, u32 stride, bool cullall)
|
||||
{
|
||||
// Flush all EFB pokes. Since the buffer is shared, we can't draw pokes+primitives concurrently.
|
||||
g_framebuffer_manager->FlushEFBPokes();
|
||||
|
@ -185,7 +188,7 @@ void VertexManagerBase::FlushData(u32 count, u32 stride)
|
|||
m_cur_buffer_pointer += count * stride;
|
||||
}
|
||||
|
||||
u32 VertexManagerBase::GetRemainingIndices(int primitive) const
|
||||
u32 VertexManagerBase::GetRemainingIndices(OpcodeDecoder::Primitive primitive) const
|
||||
{
|
||||
const u32 index_len = MAXIBUFFERSIZE - m_index_generator.GetIndexLen();
|
||||
|
||||
|
@ -193,22 +196,22 @@ u32 VertexManagerBase::GetRemainingIndices(int primitive) const
|
|||
{
|
||||
switch (primitive)
|
||||
{
|
||||
case OpcodeDecoder::GX_DRAW_QUADS:
|
||||
case OpcodeDecoder::GX_DRAW_QUADS_2:
|
||||
case Primitive::GX_DRAW_QUADS:
|
||||
case Primitive::GX_DRAW_QUADS_2:
|
||||
return index_len / 5 * 4;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLES:
|
||||
case Primitive::GX_DRAW_TRIANGLES:
|
||||
return index_len / 4 * 3;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP:
|
||||
case Primitive::GX_DRAW_TRIANGLE_STRIP:
|
||||
return index_len / 1 - 1;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLE_FAN:
|
||||
case Primitive::GX_DRAW_TRIANGLE_FAN:
|
||||
return index_len / 6 * 4 + 1;
|
||||
|
||||
case OpcodeDecoder::GX_DRAW_LINES:
|
||||
case Primitive::GX_DRAW_LINES:
|
||||
return index_len;
|
||||
case OpcodeDecoder::GX_DRAW_LINE_STRIP:
|
||||
case Primitive::GX_DRAW_LINE_STRIP:
|
||||
return index_len / 2 + 1;
|
||||
|
||||
case OpcodeDecoder::GX_DRAW_POINTS:
|
||||
case Primitive::GX_DRAW_POINTS:
|
||||
return index_len;
|
||||
|
||||
default:
|
||||
|
@ -219,22 +222,22 @@ u32 VertexManagerBase::GetRemainingIndices(int primitive) const
|
|||
{
|
||||
switch (primitive)
|
||||
{
|
||||
case OpcodeDecoder::GX_DRAW_QUADS:
|
||||
case OpcodeDecoder::GX_DRAW_QUADS_2:
|
||||
case Primitive::GX_DRAW_QUADS:
|
||||
case Primitive::GX_DRAW_QUADS_2:
|
||||
return index_len / 6 * 4;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLES:
|
||||
case Primitive::GX_DRAW_TRIANGLES:
|
||||
return index_len;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP:
|
||||
case Primitive::GX_DRAW_TRIANGLE_STRIP:
|
||||
return index_len / 3 + 2;
|
||||
case OpcodeDecoder::GX_DRAW_TRIANGLE_FAN:
|
||||
case Primitive::GX_DRAW_TRIANGLE_FAN:
|
||||
return index_len / 3 + 2;
|
||||
|
||||
case OpcodeDecoder::GX_DRAW_LINES:
|
||||
case Primitive::GX_DRAW_LINES:
|
||||
return index_len;
|
||||
case OpcodeDecoder::GX_DRAW_LINE_STRIP:
|
||||
case Primitive::GX_DRAW_LINE_STRIP:
|
||||
return index_len / 2 + 1;
|
||||
|
||||
case OpcodeDecoder::GX_DRAW_POINTS:
|
||||
case Primitive::GX_DRAW_POINTS:
|
||||
return index_len;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue