mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-29 12:19:12 +00:00
VideoCommon: Cull vertices on the CPU
This commit is contained in:
parent
b170ef9651
commit
1be0149146
7 changed files with 57 additions and 7 deletions
|
@ -104,6 +104,7 @@ VertexManagerBase::~VertexManagerBase() = default;
|
|||
bool VertexManagerBase::Initialize()
|
||||
{
|
||||
m_index_generator.Init();
|
||||
m_cpu_cull.Init();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -117,6 +118,13 @@ void VertexManagerBase::AddIndices(OpcodeDecoder::Primitive primitive, u32 num_v
|
|||
m_index_generator.AddIndices(primitive, num_vertices);
|
||||
}
|
||||
|
||||
bool VertexManagerBase::AreAllVerticesCulled(VertexLoaderBase* loader,
|
||||
OpcodeDecoder::Primitive primitive, const u8* src,
|
||||
u32 count)
|
||||
{
|
||||
return m_cpu_cull.AreAllVerticesCulled(loader, primitive, src, count);
|
||||
}
|
||||
|
||||
DataReader VertexManagerBase::PrepareForAdditionalData(OpcodeDecoder::Primitive primitive,
|
||||
u32 count, u32 stride, bool cullall)
|
||||
{
|
||||
|
@ -185,6 +193,16 @@ DataReader VertexManagerBase::PrepareForAdditionalData(OpcodeDecoder::Primitive
|
|||
return DataReader(m_cur_buffer_pointer, m_end_buffer_pointer);
|
||||
}
|
||||
|
||||
DataReader VertexManagerBase::DisableCullAll(u32 stride)
|
||||
{
|
||||
if (m_cull_all)
|
||||
{
|
||||
m_cull_all = false;
|
||||
ResetBuffer(stride);
|
||||
}
|
||||
return DataReader(m_cur_buffer_pointer, m_end_buffer_pointer);
|
||||
}
|
||||
|
||||
void VertexManagerBase::FlushData(u32 count, u32 stride)
|
||||
{
|
||||
m_cur_buffer_pointer += count * stride;
|
||||
|
@ -546,6 +564,8 @@ void VertexManagerBase::Flush()
|
|||
// Now the vertices can be flushed to the GPU. Everything following the CommitBuffer() call
|
||||
// must be careful to not upload any utility vertices, as the binding will be lost otherwise.
|
||||
const u32 num_indices = m_index_generator.GetIndexLen();
|
||||
if (num_indices == 0)
|
||||
return;
|
||||
u32 base_vertex, base_index;
|
||||
CommitBuffer(m_index_generator.GetNumVerts(),
|
||||
VertexLoaderManager::GetCurrentVertexFormat()->GetVertexStride(), num_indices,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue