void GLVertexDecompilerThread::insertMainStart(std::stringstream & OS) { insert_glsl_legacy_function(OS); OS << "void main()" << std::endl; OS << "{" << std::endl; // Declare inside main function for (const ParamType PT : m_parr.params[PF_PARAM_NONE]) { for (const ParamItem &PI : PT.items) { OS << " " << PT.type << " " << PI.name; if (!PI.value.empty()) OS << " = " << PI.value; OS << ";" << std::endl; } } for (const ParamType &PT : m_parr.params[PF_PARAM_IN]) { for (const ParamItem &PI : PT.items) add_input(OS, PI, rsx_vertex_program.rsx_vertex_inputs); } }
void GLVertexDecompilerThread::insertMainStart(std::stringstream & OS) { insert_glsl_legacy_function(OS, glsl::glsl_vertex_program, properties.has_lit_op); glsl::insert_vertex_input_fetch(OS, glsl::glsl_rules_opengl4, gl::get_driver_caps().vendor_INTEL==false); std::string parameters = ""; for (int i = 0; i < 16; ++i) { std::string reg_name = "dst_reg" + std::to_string(i); if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name)) { if (parameters.length()) parameters += ", "; parameters += "inout vec4 " + reg_name; } } OS << "void vs_main(" << parameters << ")\n"; OS << "{\n"; //Declare temporary registers, ignoring those mapped to outputs for (const ParamType PT : m_parr.params[PF_PARAM_NONE]) { for (const ParamItem &PI : PT.items) { if (PI.name.substr(0, 7) == "dst_reg") continue; OS << " " << PT.type << " " << PI.name; if (!PI.value.empty()) OS << " = " << PI.value; OS << ";\n"; } } for (const ParamType &PT : m_parr.params[PF_PARAM_IN]) { for (const ParamItem &PI : PT.items) { OS << " vec4 " << PI.name << "= read_location(" << std::to_string(PI.location) << ");\n"; } } for (const ParamType &PT : m_parr.params[PF_PARAM_UNIFORM]) { if (PT.type == "sampler2D") { for (const ParamItem &PI : PT.items) { OS << " vec2 " << PI.name << "_coord_scale = vec2(1.);\n"; } } } }
void GLFragmentDecompilerThread::insertMainStart(std::stringstream & OS) { insert_glsl_legacy_function(OS); OS << "void main ()" << std::endl; OS << "{" << std::endl; for (const ParamType& PT : m_parr.params[PF_PARAM_NONE]) { for (const ParamItem& PI : PT.items) { OS << " " << PT.type << " " << PI.name; if (!PI.value.empty()) OS << " = " << PI.value; OS << ";" << std::endl; } } OS << " vec4 ssa = gl_FrontFacing ? vec4(1.) : vec4(-1.);\n"; for (const ParamType& PT : m_parr.params[PF_PARAM_UNIFORM]) { if (PT.type != "sampler2D") continue; for (const ParamItem& PI : PT.items) { std::string samplerType = PT.type; int index = atoi(&PI.name.data()[3]); if (m_prog.unnormalized_coords & (1 << index)) { OS << "vec2 tex" << index << "_coord_scale = 1. / textureSize(" << PI.name << ", 0);\n"; } else { OS << "vec2 tex" << index << "_coord_scale = vec2(1.);\n"; } } } // search if there is fogc in inputs for (const ParamType& PT : m_parr.params[PF_PARAM_IN]) { for (const ParamItem& PI : PT.items) { if (PI.name == "fogc") { insert_fog_declaration(OS, m_prog.fog_equation); return; } } } }
void GLVertexDecompilerThread::insertMainStart(std::stringstream & OS) { insert_glsl_legacy_function(OS); std::string parameters = ""; for (int i = 0; i < 16; ++i) { std::string reg_name = "dst_reg" + std::to_string(i); if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name)) { if (parameters.length()) parameters += ", "; parameters += "inout vec4 " + reg_name; } } OS << "void vs_main(" << parameters << ")" << std::endl; OS << "{" << std::endl; //Declare temporary registers, ignoring those mapped to outputs for (const ParamType PT : m_parr.params[PF_PARAM_NONE]) { for (const ParamItem &PI : PT.items) { if (PI.name.substr(0, 7) == "dst_reg") continue; OS << " " << PT.type << " " << PI.name; if (!PI.value.empty()) OS << " = " << PI.value; OS << ";" << std::endl; } } for (const ParamType &PT : m_parr.params[PF_PARAM_IN]) { for (const ParamItem &PI : PT.items) add_input(OS, PI, rsx_vertex_program.rsx_vertex_inputs); } for (const ParamType &PT : m_parr.params[PF_PARAM_UNIFORM]) { if (PT.type == "sampler2D") { for (const ParamItem &PI : PT.items) { OS << " vec2 " << PI.name << "_coord_scale = vec2(1.);" << std::endl; } } } }