Browse Source

Pass by reference instead of copying parameters

nce_cpp
David Marcec 6 years ago
parent
commit
d9082de7ea
  1. 10
      src/video_core/engines/maxwell_3d.cpp
  2. 2
      src/video_core/engines/maxwell_3d.h
  3. 2
      src/video_core/macro/macro.cpp
  4. 2
      src/video_core/macro/macro.h

10
src/video_core/engines/maxwell_3d.cpp

@ -115,7 +115,7 @@ void Maxwell3D::InitializeRegisterDefaults() {
mme_inline[MAXWELL3D_REG_INDEX(index_array.count)] = true; mme_inline[MAXWELL3D_REG_INDEX(index_array.count)] = true;
} }
void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32>&& parameters) {
void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32>& parameters) {
// Reset the current macro. // Reset the current macro.
executing_macro = 0; executing_macro = 0;
@ -124,7 +124,7 @@ void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32>&& parameters) {
((method - MacroRegistersStart) >> 1) % static_cast<u32>(macro_positions.size()); ((method - MacroRegistersStart) >> 1) % static_cast<u32>(macro_positions.size());
// Execute the current macro. // Execute the current macro.
macro_engine->Execute(macro_positions[entry], std::move(parameters));
macro_engine->Execute(macro_positions[entry], parameters);
if (mme_draw.current_mode != MMEDrawMode::Undefined) { if (mme_draw.current_mode != MMEDrawMode::Undefined) {
FlushMMEInlineDraw(); FlushMMEInlineDraw();
} }
@ -160,7 +160,8 @@ void Maxwell3D::CallMethod(u32 method, u32 method_argument, bool is_last_call) {
// Call the macro when there are no more parameters in the command buffer // Call the macro when there are no more parameters in the command buffer
if (is_last_call) { if (is_last_call) {
CallMacroMethod(executing_macro, std::move(macro_params));
CallMacroMethod(executing_macro, macro_params);
macro_params.clear();
} }
return; return;
} }
@ -304,7 +305,8 @@ void Maxwell3D::CallMultiMethod(u32 method, const u32* base_start, u32 amount,
// Call the macro when there are no more parameters in the command buffer // Call the macro when there are no more parameters in the command buffer
if (amount == methods_pending) { if (amount == methods_pending) {
CallMacroMethod(executing_macro, std::move(macro_params));
CallMacroMethod(executing_macro, macro_params);
macro_params.clear();
} }
return; return;
} }

2
src/video_core/engines/maxwell_3d.h

@ -1495,7 +1495,7 @@ private:
* @param num_parameters Number of arguments * @param num_parameters Number of arguments
* @param parameters Arguments to the method call * @param parameters Arguments to the method call
*/ */
void CallMacroMethod(u32 method, std::vector<u32>&& parameters);
void CallMacroMethod(u32 method, std::vector<u32>& parameters);
/// Handles writes to the macro uploading register. /// Handles writes to the macro uploading register.
void ProcessMacroUpload(u32 data); void ProcessMacroUpload(u32 data);

2
src/video_core/macro/macro.cpp

@ -15,7 +15,7 @@ void MacroEngine::AddCode(u32 method, u32 data) {
uploaded_macro_code[method].push_back(data); uploaded_macro_code[method].push_back(data);
} }
void MacroEngine::Execute(u32 method, std::vector<u32> parameters) {
void MacroEngine::Execute(u32 method, std::vector<u32>& parameters) {
auto compiled_macro = macro_cache.find(method); auto compiled_macro = macro_cache.find(method);
if (compiled_macro != macro_cache.end()) { if (compiled_macro != macro_cache.end()) {
compiled_macro->second->Execute(parameters, method); compiled_macro->second->Execute(parameters, method);

2
src/video_core/macro/macro.h

@ -113,7 +113,7 @@ public:
void AddCode(u32 method, u32 data); void AddCode(u32 method, u32 data);
// Compiles the macro if its not in the cache, and executes the compiled macro // Compiles the macro if its not in the cache, and executes the compiled macro
void Execute(u32 method, std::vector<u32> parameters);
void Execute(u32 method, std::vector<u32>& parameters);
protected: protected:
virtual std::unique_ptr<CachedMacro> Compile(const std::vector<u32>& code) = 0; virtual std::unique_ptr<CachedMacro> Compile(const std::vector<u32>& code) = 0;

Loading…
Cancel
Save