diff options
Diffstat (limited to 'src/video_core')
25 files changed, 84 insertions, 101 deletions
diff --git a/src/video_core/clipper.cpp b/src/video_core/clipper.cpp index bb6048cc0..ed99c4f13 100644 --- a/src/video_core/clipper.cpp +++ b/src/video_core/clipper.cpp @@ -4,10 +4,10 @@ #include <boost/container/static_vector.hpp> -#include "clipper.h" -#include "pica.h" -#include "rasterizer.h" -#include "shader/shader_interpreter.h" +#include "video_core/clipper.h" +#include "video_core/pica.h" +#include "video_core/rasterizer.h" +#include "video_core/shader/shader_interpreter.h" namespace Pica { diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 6e9cb2586..47afd8938 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -2,25 +2,24 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include <cmath> #include <boost/range/algorithm/fill.hpp> #include "common/microprofile.h" #include "common/profiler.h" +#include "core/settings.h" #include "core/hle/service/gsp_gpu.h" #include "core/hw/gpu.h" -#include "core/settings.h" - -#include "debug_utils/debug_utils.h" -#include "clipper.h" -#include "command_processor.h" -#include "math.h" -#include "pica.h" -#include "primitive_assembly.h" -#include "renderer_base.h" -#include "shader/shader_interpreter.h" -#include "video_core.h" +#include "video_core/clipper.h" +#include "video_core/command_processor.h" +#include "video_core/pica.h" +#include "video_core/primitive_assembly.h" +#include "video_core/renderer_base.h" +#include "video_core/video_core.h" +#include "video_core/debug_utils/debug_utils.h" +#include "video_core/shader/shader_interpreter.h" namespace Pica { diff --git a/src/video_core/debug_utils/debug_utils.cpp b/src/video_core/debug_utils/debug_utils.cpp index 059445f7d..77a4fe272 100644 --- a/src/video_core/debug_utils/debug_utils.cpp +++ b/src/video_core/debug_utils/debug_utils.cpp @@ -31,8 +31,7 @@ #include "video_core/renderer_base.h" #include "video_core/utils.h" #include "video_core/video_core.h" - -#include "debug_utils.h" +#include "video_core/debug_utils/debug_utils.h" using nihstro::DVLBHeader; using nihstro::DVLEHeader; @@ -298,7 +297,6 @@ void DumpShader(const std::string& filename, const Regs::ShaderConfig& config, c } // Write data to file - static int dump_index = 0; std::ofstream file(filename, std::ios_base::out | std::ios_base::binary); for (auto& chunk : writing_queue) { @@ -695,7 +693,6 @@ void DumpTexture(const Pica::Regs::TextureConfig& texture_config, u8* data) { for (unsigned y = 0; y < texture_config.height; ++y) { u8* row_ptr = (u8*)buf + y * row_stride; - u8* ptr = row_ptr; png_write_row(png_ptr, row_ptr); } diff --git a/src/video_core/gpu_debugger.h b/src/video_core/gpu_debugger.h index 48ac269e3..fae5de7d1 100644 --- a/src/video_core/gpu_debugger.h +++ b/src/video_core/gpu_debugger.h @@ -10,9 +10,6 @@ #include "core/hle/service/gsp_gpu.h" -#include "command_processor.h" -#include "pica.h" - class GraphicsDebugger { public: diff --git a/src/video_core/pica.cpp b/src/video_core/pica.cpp index 61983bc6c..8c528989e 100644 --- a/src/video_core/pica.cpp +++ b/src/video_core/pica.cpp @@ -5,8 +5,8 @@ #include <cstring> #include <unordered_map> -#include "pica.h" -#include "shader/shader.h" +#include "video_core/pica.h" +#include "video_core/shader/shader.h" namespace Pica { diff --git a/src/video_core/pica.h b/src/video_core/pica.h index c1dca5087..ff81b409d 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h @@ -13,8 +13,8 @@ #include "common/bit_field.h" #include "common/common_funcs.h" #include "common/common_types.h" -#include "common/logging/log.h" #include "common/vector_math.h" +#include "common/logging/log.h" namespace Pica { diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index e2b1df44c..44a8dbfe9 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp @@ -2,12 +2,12 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include "pica.h" -#include "primitive_assembly.h" -#include "shader/shader_interpreter.h" - #include "common/logging/log.h" + +#include "video_core/pica.h" +#include "video_core/primitive_assembly.h" #include "video_core/debug_utils/debug_utils.h" +#include "video_core/shader/shader_interpreter.h" namespace Pica { diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index 80432d68a..52d0ec8ff 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h @@ -8,8 +8,6 @@ #include "video_core/pica.h" -#include "video_core/shader/shader_interpreter.h" - namespace Pica { /* diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index 77eadda9e..a90ff5fef 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include <algorithm> +#include <cmath> #include "common/color.h" #include "common/common_types.h" @@ -10,15 +11,14 @@ #include "common/microprofile.h" #include "common/profiler.h" -#include "core/hw/gpu.h" #include "core/memory.h" +#include "core/hw/gpu.h" -#include "debug_utils/debug_utils.h" -#include "math.h" -#include "pica.h" -#include "rasterizer.h" -#include "shader/shader_interpreter.h" +#include "video_core/pica.h" +#include "video_core/rasterizer.h" #include "video_core/utils.h" +#include "video_core/debug_utils/debug_utils.h" +#include "video_core/shader/shader_interpreter.h" namespace Pica { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 0260a28ce..50eb157a5 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -12,9 +12,9 @@ #include "common/microprofile.h" #include "common/profiler.h" -#include "core/hw/gpu.h" #include "core/memory.h" #include "core/settings.h" +#include "core/hw/gpu.h" #include "video_core/pica.h" #include "video_core/utils.h" @@ -212,9 +212,9 @@ void RasterizerOpenGL::Reset() { void RasterizerOpenGL::AddTriangle(const Pica::Shader::OutputVertex& v0, const Pica::Shader::OutputVertex& v1, const Pica::Shader::OutputVertex& v2) { - vertex_batch.push_back(HardwareVertex(v0)); - vertex_batch.push_back(HardwareVertex(v1)); - vertex_batch.push_back(HardwareVertex(v2)); + vertex_batch.emplace_back(v0); + vertex_batch.emplace_back(v1); + vertex_batch.emplace_back(v2); } void RasterizerOpenGL::DrawTriangles() { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 24560d7f8..1fe307846 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -9,11 +9,10 @@ #include "common/common_types.h" #include "video_core/hwrasterizer_base.h" +#include "video_core/renderer_opengl/gl_rasterizer_cache.h" +#include "video_core/renderer_opengl/gl_state.h" #include "video_core/shader/shader_interpreter.h" -#include "gl_state.h" -#include "gl_rasterizer_cache.h" - class RasterizerOpenGL : public HWRasterizer { public: diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index d9ccf2a3f..10d4ab0b6 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -10,9 +10,9 @@ #include "core/memory.h" +#include "video_core/debug_utils/debug_utils.h" #include "video_core/renderer_opengl/gl_rasterizer_cache.h" #include "video_core/renderer_opengl/pica_to_gl.h" -#include "video_core/debug_utils/debug_utils.h" RasterizerCacheOpenGL::~RasterizerCacheOpenGL() { FullFlush(); diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index ec56237b5..98a48ffbe 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h @@ -4,13 +4,13 @@ #pragma once -#include "gl_state.h" -#include "gl_resource_manager.h" -#include "video_core/debug_utils/debug_utils.h" -#include "video_core/pica.h" - -#include <memory> #include <map> +#include <memory> + +#include "video_core/pica.h" +#include "video_core/debug_utils/debug_utils.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" +#include "video_core/renderer_opengl/gl_state.h" class RasterizerCacheOpenGL : NonCopyable { public: diff --git a/src/video_core/renderer_opengl/gl_shader_util.cpp b/src/video_core/renderer_opengl/gl_shader_util.cpp index 42d0e597c..4cf246c06 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.cpp +++ b/src/video_core/renderer_opengl/gl_shader_util.cpp @@ -2,11 +2,11 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include "gl_shader_util.h" -#include "common/logging/log.h" - -#include <vector> #include <algorithm> +#include <vector> + +#include "common/logging/log.h" +#include "video_core/renderer_opengl/gl_shader_util.h" namespace ShaderUtil { diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index e02c27fbf..77b2816cb 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -2,8 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include "video_core/renderer_opengl/gl_state.h" #include "video_core/pica.h" +#include "video_core/renderer_opengl/gl_state.h" OpenGLState OpenGLState::cur_state; diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 067d072ae..22f261c68 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -11,18 +11,18 @@ #include "common/logging/log.h" #include "common/profiler_reporting.h" +#include "core/memory.h" +#include "core/settings.h" #include "core/hw/gpu.h" #include "core/hw/hw.h" #include "core/hw/lcd.h" -#include "core/memory.h" -#include "core/settings.h" #include "video_core/video_core.h" -#include "video_core/renderer_opengl/renderer_opengl.h" +#include "video_core/debug_utils/debug_utils.h" +#include "video_core/renderer_opengl/gl_rasterizer.h" #include "video_core/renderer_opengl/gl_shader_util.h" #include "video_core/renderer_opengl/gl_shaders.h" - -#include "video_core/debug_utils/debug_utils.h" +#include "video_core/renderer_opengl/renderer_opengl.h" /** * Vertex structure that the drawn screen rectangles are composed of. diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index 4b023dc98..5677e538b 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -8,13 +8,10 @@ #include <glad/glad.h> -#include "common/math_util.h" - #include "core/hw/gpu.h" #include "video_core/renderer_base.h" #include "video_core/renderer_opengl/gl_state.h" -#include "video_core/renderer_opengl/gl_rasterizer.h" class EmuWindow; @@ -64,9 +61,6 @@ private: void LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, const TextureInfo& texture); - /// Computes the viewport rectangle - MathUtil::Rectangle<unsigned> GetViewportExtent(); - EmuWindow* render_window; ///< Handle to render window u32 last_mode; ///< Last render mode diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index f89117521..59f54236b 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -146,7 +146,6 @@ OutputVertex Run(UnitState<false>& state, const InputVertex& input, int num_attr DebugData<true> ProduceDebugInfo(const InputVertex& input, int num_attributes, const Regs::ShaderConfig& config, const State::ShaderSetup& setup) { UnitState<true> state; - const auto& shader_memory = setup.program_code; state.program_counter = config.main_offset; state.debug.max_offset = 0; state.debug.max_opdesc_id = 0; diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index bac51ddd8..1c6fa592c 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h @@ -289,13 +289,13 @@ struct UnitState { DebugData<Debug> debug; - static int InputOffset(const SourceRegister& reg) { + static size_t InputOffset(const SourceRegister& reg) { switch (reg.GetRegisterType()) { case RegisterType::Input: - return (int)offsetof(UnitState::Registers, input) + reg.GetIndex()*sizeof(Math::Vec4<float24>); + return offsetof(UnitState::Registers, input) + reg.GetIndex()*sizeof(Math::Vec4<float24>); case RegisterType::Temporary: - return (int)offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4<float24>); + return offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4<float24>); default: UNREACHABLE(); @@ -303,13 +303,13 @@ struct UnitState { } } - static int OutputOffset(const DestRegister& reg) { + static size_t OutputOffset(const DestRegister& reg) { switch (reg.GetRegisterType()) { case RegisterType::Output: - return (int)offsetof(UnitState::Registers, output) + reg.GetIndex()*sizeof(Math::Vec4<float24>); + return offsetof(UnitState::Registers, output) + reg.GetIndex()*sizeof(Math::Vec4<float24>); case RegisterType::Temporary: - return (int)offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4<float24>); + return offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4<float24>); default: UNREACHABLE(); diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp index 69e4efa68..7b0c20b74 100644 --- a/src/video_core/shader/shader_interpreter.cpp +++ b/src/video_core/shader/shader_interpreter.cpp @@ -7,9 +7,8 @@ #include <nihstro/shader_bytecode.h> #include "video_core/pica.h" - -#include "shader.h" -#include "shader_interpreter.h" +#include "video_core/shader/shader.h" +#include "video_core/shader/shader_interpreter.h" using nihstro::OpCode; using nihstro::Instruction; diff --git a/src/video_core/shader/shader_interpreter.h b/src/video_core/shader/shader_interpreter.h index 71bcad5ac..294bca50e 100644 --- a/src/video_core/shader/shader_interpreter.h +++ b/src/video_core/shader/shader_interpreter.h @@ -4,9 +4,7 @@ #pragma once -#include "video_core/pica.h" - -#include "shader.h" +#include "video_core/shader/shader.h" namespace Pica { diff --git a/src/video_core/shader/shader_jit_x64.cpp b/src/video_core/shader/shader_jit_x64.cpp index b9a0b19e3..00415e402 100644 --- a/src/video_core/shader/shader_jit_x64.cpp +++ b/src/video_core/shader/shader_jit_x64.cpp @@ -144,7 +144,7 @@ static const u8 NO_DEST_REG_MASK = 0xf; */ void JitCompiler::Compile_SwizzleSrc(Instruction instr, unsigned src_num, SourceRegister src_reg, X64Reg dest) { X64Reg src_ptr; - int src_offset; + size_t src_offset; if (src_reg.GetRegisterType() == RegisterType::FloatUniform) { src_ptr = UNIFORMS; @@ -154,6 +154,9 @@ void JitCompiler::Compile_SwizzleSrc(Instruction instr, unsigned src_num, Source src_offset = UnitState<false>::InputOffset(src_reg); } + int src_offset_disp = (int)src_offset; + ASSERT_MSG(src_offset == src_offset_disp, "Source register offset too large for int type"); + unsigned operand_desc_id; if (instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MAD || instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MADI) { @@ -163,7 +166,7 @@ void JitCompiler::Compile_SwizzleSrc(Instruction instr, unsigned src_num, Source operand_desc_id = instr.mad.operand_desc_id; // Load the source - MOVAPS(dest, MDisp(src_ptr, src_offset)); + MOVAPS(dest, MDisp(src_ptr, src_offset_disp)); } else { operand_desc_id = instr.common.operand_desc_id; @@ -173,13 +176,13 @@ void JitCompiler::Compile_SwizzleSrc(Instruction instr, unsigned src_num, Source if (src_num == offset_src && instr.common.address_register_index != 0) { switch (instr.common.address_register_index) { case 1: // address offset 1 - MOVAPS(dest, MComplex(src_ptr, ADDROFFS_REG_0, 1, src_offset)); + MOVAPS(dest, MComplex(src_ptr, ADDROFFS_REG_0, SCALE_1, src_offset_disp)); break; case 2: // address offset 2 - MOVAPS(dest, MComplex(src_ptr, ADDROFFS_REG_1, 1, src_offset)); + MOVAPS(dest, MComplex(src_ptr, ADDROFFS_REG_1, SCALE_1, src_offset_disp)); break; - case 3: // adddress offet 3 - MOVAPS(dest, MComplex(src_ptr, LOOPCOUNT_REG, 1, src_offset)); + case 3: // address offset 3 + MOVAPS(dest, MComplex(src_ptr, LOOPCOUNT_REG, SCALE_1, src_offset_disp)); break; default: UNREACHABLE(); @@ -187,7 +190,7 @@ void JitCompiler::Compile_SwizzleSrc(Instruction instr, unsigned src_num, Source } } else { // Load the source - MOVAPS(dest, MDisp(src_ptr, src_offset)); + MOVAPS(dest, MDisp(src_ptr, src_offset_disp)); } } @@ -224,14 +227,17 @@ void JitCompiler::Compile_DestEnable(Instruction instr,X64Reg src) { SwizzlePattern swiz = { g_state.vs.swizzle_data[operand_desc_id] }; + int dest_offset_disp = (int)UnitState<false>::OutputOffset(dest); + ASSERT_MSG(dest_offset_disp == UnitState<false>::OutputOffset(dest), "Destinaton offset too large for int type"); + // If all components are enabled, write the result to the destination register if (swiz.dest_mask == NO_DEST_REG_MASK) { // Store dest back to memory - MOVAPS(MDisp(REGISTERS, UnitState<false>::OutputOffset(dest)), src); + MOVAPS(MDisp(REGISTERS, dest_offset_disp), src); } else { // Not all components are enabled, so mask the result when storing to the destination register... - MOVAPS(SCRATCH, MDisp(REGISTERS, UnitState<false>::OutputOffset(dest))); + MOVAPS(SCRATCH, MDisp(REGISTERS, dest_offset_disp)); if (Common::GetCPUCaps().sse4_1) { u8 mask = ((swiz.dest_mask & 1) << 3) | ((swiz.dest_mask & 8) >> 3) | ((swiz.dest_mask & 2) << 1) | ((swiz.dest_mask & 4) >> 1); @@ -250,7 +256,7 @@ void JitCompiler::Compile_DestEnable(Instruction instr,X64Reg src) { } // Store dest back to memory - MOVAPS(MDisp(REGISTERS, UnitState<false>::OutputOffset(dest)), SCRATCH); + MOVAPS(MDisp(REGISTERS, dest_offset_disp), SCRATCH); } } @@ -743,7 +749,6 @@ void JitCompiler::Compile_NextInstr(unsigned* offset) { CompiledShader* JitCompiler::Compile() { const u8* start = GetCodePtr(); - const auto& code = g_state.vs.program_code; unsigned offset = g_state.regs.vs.main_offset; // The stack pointer is 8 modulo 16 at the entry of a procedure diff --git a/src/video_core/shader/shader_jit_x64.h b/src/video_core/shader/shader_jit_x64.h index 8668cfff4..3afbceccf 100644 --- a/src/video_core/shader/shader_jit_x64.h +++ b/src/video_core/shader/shader_jit_x64.h @@ -9,8 +9,7 @@ #include "common/x64/emitter.h" #include "video_core/pica.h" - -#include "shader.h" +#include "video_core/shader/shader.h" using nihstro::Instruction; using nihstro::OpCode; diff --git a/src/video_core/utils.cpp b/src/video_core/utils.cpp index c7cc93cea..6e1ff5cf4 100644 --- a/src/video_core/utils.cpp +++ b/src/video_core/utils.cpp @@ -2,8 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include <stdio.h> -#include <string.h> +#include <cstdio> +#include <cstring> #include "video_core/utils.h" diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index 943fde5ee..eaddda668 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp @@ -2,17 +2,16 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include "common/logging/log.h" #include "common/emu_window.h" +#include "common/logging/log.h" #include "core/core.h" #include "core/settings.h" -#include "video_core.h" -#include "renderer_base.h" -#include "renderer_opengl/renderer_opengl.h" - -#include "pica.h" +#include "video_core/pica.h" +#include "video_core/renderer_base.h" +#include "video_core/video_core.h" +#include "video_core/renderer_opengl/renderer_opengl.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // Video Core namespace |