diff options
| author | bunnei <bunneidev@gmail.com> | 2015-05-22 19:40:57 -0400 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2015-05-22 19:40:57 -0400 |
| commit | 7b94b312d39037e9a90c981b49743965c0d1a743 (patch) | |
| tree | f922946de22f54bf0c0aaaff01371f5ca7a2fc57 /src/video_core/command_processor.cpp | |
| parent | eca2b71fa8a6c4c104695b866952e4295dc6466f (diff) | |
| parent | 62668688e1055dbfcbff824acfd9c9f970fc2c09 (diff) | |
Merge pull request #789 from tfarley/opengl-renderer
OpenGL Hardware Renderer
Diffstat (limited to 'src/video_core/command_processor.cpp')
| -rw-r--r-- | src/video_core/command_processor.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 6121df8e3..5c4c04408 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -12,8 +12,10 @@ #include "pica.h" #include "primitive_assembly.h" #include "vertex_shader.h" +#include "video_core.h" #include "core/hle/service/gsp_gpu.h" #include "core/hw/gpu.h" +#include "core/settings.h" #include "debug_utils/debug_utils.h" @@ -107,7 +109,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { bool index_u16 = index_info.format != 0; DebugUtils::GeometryDumper geometry_dumper; - PrimitiveAssembler<VertexShader::OutputVertex> clipper_primitive_assembler(registers.triangle_topology.Value()); + PrimitiveAssembler<VertexShader::OutputVertex> primitive_assembler(registers.triangle_topology.Value()); PrimitiveAssembler<DebugUtils::GeometryDumper::Vertex> dumping_primitive_assembler(registers.triangle_topology.Value()); for (unsigned int index = 0; index < registers.num_vertices; ++index) @@ -185,9 +187,25 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { // TODO: Add processed vertex to vertex cache! } - // Send to triangle clipper - clipper_primitive_assembler.SubmitVertex(output, Clipper::ProcessTriangle); + if (Settings::values.use_hw_renderer) { + // Send to hardware renderer + static auto AddHWTriangle = [](const Pica::VertexShader::OutputVertex& v0, + const Pica::VertexShader::OutputVertex& v1, + const Pica::VertexShader::OutputVertex& v2) { + VideoCore::g_renderer->hw_rasterizer->AddTriangle(v0, v1, v2); + }; + + primitive_assembler.SubmitVertex(output, AddHWTriangle); + } else { + // Send to triangle clipper + primitive_assembler.SubmitVertex(output, Clipper::ProcessTriangle); + } } + + if (Settings::values.use_hw_renderer) { + VideoCore::g_renderer->hw_rasterizer->DrawTriangles(); + } + geometry_dumper.Dump(); if (g_debug_context) @@ -340,6 +358,8 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { break; } + VideoCore::g_renderer->hw_rasterizer->NotifyPicaRegisterChanged(id); + if (g_debug_context) g_debug_context->OnEvent(DebugContext::Event::CommandProcessed, reinterpret_cast<void*>(&id)); } |
