mirror of
				https://git.h3cjp.net/H3cJP/citra.git
				synced 2025-11-04 00:46:37 +00:00 
			
		
		
		
	gl_shader_gen: std::move objects where applicable
Avoids performing copies into the pair being returned. Instead, we can just move the resources into the pair, avoiding the need to make copies of both the std::string and ShaderEntries struct.
This commit is contained in:
		
							parent
							
								
									fb85d5670d
								
							
						
					
					
						commit
						3356ea5bc2
					
				| 
						 | 
				
			
			@ -33,14 +33,14 @@ layout (std140, binding = EMULATION_UBO_BINDING) uniform vs_config {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
)";
 | 
			
		||||
    ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    const ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    ProgramResult program =
 | 
			
		||||
        Decompile(device, program_ir, Maxwell3D::Regs::ShaderStage::Vertex, "vertex");
 | 
			
		||||
 | 
			
		||||
    out += program.first;
 | 
			
		||||
 | 
			
		||||
    if (setup.IsDualProgram()) {
 | 
			
		||||
        ShaderIR program_ir_b(setup.program.code_b, PROGRAM_OFFSET);
 | 
			
		||||
        const ShaderIR program_ir_b(setup.program.code_b, PROGRAM_OFFSET);
 | 
			
		||||
        ProgramResult program_b =
 | 
			
		||||
            Decompile(device, program_ir_b, Maxwell3D::Regs::ShaderStage::Vertex, "vertex_b");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ void main() {
 | 
			
		|||
    }
 | 
			
		||||
})";
 | 
			
		||||
 | 
			
		||||
    return {out, program.second};
 | 
			
		||||
    return {std::move(out), std::move(program.second)};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ProgramResult GenerateGeometryShader(const Device& device, const ShaderSetup& setup) {
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ layout (std140, binding = EMULATION_UBO_BINDING) uniform gs_config {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
)";
 | 
			
		||||
    ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    const ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    ProgramResult program =
 | 
			
		||||
        Decompile(device, program_ir, Maxwell3D::Regs::ShaderStage::Geometry, "geometry");
 | 
			
		||||
    out += program.first;
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ void main() {
 | 
			
		|||
    execute_geometry();
 | 
			
		||||
};)";
 | 
			
		||||
 | 
			
		||||
    return {out, program.second};
 | 
			
		||||
    return {std::move(out), std::move(program.second)};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ProgramResult GenerateFragmentShader(const Device& device, const ShaderSetup& setup) {
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ bool AlphaFunc(in float value) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
)";
 | 
			
		||||
    ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    const ShaderIR program_ir(setup.program.code, PROGRAM_OFFSET);
 | 
			
		||||
    ProgramResult program =
 | 
			
		||||
        Decompile(device, program_ir, Maxwell3D::Regs::ShaderStage::Fragment, "fragment");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +172,7 @@ void main() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
)";
 | 
			
		||||
    return {out, program.second};
 | 
			
		||||
    return {std::move(out), std::move(program.second)};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace OpenGL::GLShader
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue