mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 17:58:37 +12:00
gl: Refactor shader type usage
Use Common/GLSLTypes.h program_domain instead of duplicated own internal type
This commit is contained in:
parent
3db2f23e02
commit
b0d3c4d75e
9 changed files with 49 additions and 33 deletions
|
@ -44,7 +44,7 @@ namespace gl
|
||||||
{
|
{
|
||||||
if (!compiled)
|
if (!compiled)
|
||||||
{
|
{
|
||||||
m_shader.create(gl::glsl::shader::type::compute, m_src);
|
m_shader.create(::glsl::program_domain::glsl_compute_program, m_src);
|
||||||
m_shader.compile();
|
m_shader.compile();
|
||||||
|
|
||||||
m_program.create();
|
m_program.create();
|
||||||
|
|
|
@ -366,7 +366,7 @@ void GLFragmentProgram::Decompile(const RSXFragmentProgram& prog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shader.create(gl::glsl::shader::type::fragment, source);
|
shader.create(::glsl::program_domain::glsl_fragment_program, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLFragmentProgram::Compile()
|
void GLFragmentProgram::Compile()
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "GLExecutionState.h"
|
#include "GLExecutionState.h"
|
||||||
#include "../GCM.h"
|
#include "../GCM.h"
|
||||||
#include "../Common/TextureUtils.h"
|
#include "../Common/TextureUtils.h"
|
||||||
|
#include "../Common/GLSLTypes.h"
|
||||||
|
|
||||||
#include "Emu/system_config.h"
|
#include "Emu/system_config.h"
|
||||||
#include "Utilities/geometry.h"
|
#include "Utilities/geometry.h"
|
||||||
|
@ -2406,18 +2407,9 @@ public:
|
||||||
{
|
{
|
||||||
class shader
|
class shader
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
std::string source;
|
std::string source;
|
||||||
enum class type
|
::glsl::program_domain type;
|
||||||
{
|
|
||||||
fragment = GL_FRAGMENT_SHADER,
|
|
||||||
vertex = GL_VERTEX_SHADER,
|
|
||||||
compute = GL_COMPUTE_SHADER
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
GLuint m_id = GL_NONE;
|
GLuint m_id = GL_NONE;
|
||||||
type shader_type = type::vertex;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
shader() = default;
|
shader() = default;
|
||||||
|
@ -2427,7 +2419,7 @@ public:
|
||||||
set_id(id);
|
set_id(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
shader(type type_, const std::string& src)
|
shader(::glsl::program_domain type_, const std::string& src)
|
||||||
{
|
{
|
||||||
create(type_, src);
|
create(type_, src);
|
||||||
}
|
}
|
||||||
|
@ -2438,15 +2430,31 @@ public:
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
void create(type type_, const std::string& src)
|
void create(::glsl::program_domain type_, const std::string& src)
|
||||||
{
|
{
|
||||||
shader_type = type_;
|
type = type_;
|
||||||
source = src;
|
source = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
shader& compile()
|
shader& compile()
|
||||||
{
|
{
|
||||||
m_id = glCreateShader(static_cast<GLenum>(shader_type));
|
GLenum shader_type;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case ::glsl::program_domain::glsl_vertex_program:
|
||||||
|
shader_type = GL_VERTEX_SHADER;
|
||||||
|
break;
|
||||||
|
case ::glsl::program_domain::glsl_fragment_program:
|
||||||
|
shader_type = GL_FRAGMENT_SHADER;
|
||||||
|
break;
|
||||||
|
case ::glsl::program_domain::glsl_compute_program:
|
||||||
|
shader_type = GL_COMPUTE_SHADER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rsx_log.fatal("gl::glsl::shader::compile(): Unhandled shader type");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_id = glCreateShader(shader_type);
|
||||||
const char* str = source.c_str();
|
const char* str = source.c_str();
|
||||||
const GLint length = ::narrow<GLint>(source.length());
|
const GLint length = ::narrow<GLint>(source.length());
|
||||||
|
|
||||||
|
@ -2455,13 +2463,13 @@ public:
|
||||||
std::string base_name;
|
std::string base_name;
|
||||||
switch (shader_type)
|
switch (shader_type)
|
||||||
{
|
{
|
||||||
case type::vertex:
|
case ::glsl::program_domain::glsl_vertex_program:
|
||||||
base_name = "shaderlog/VertexProgram";
|
base_name = "shaderlog/VertexProgram";
|
||||||
break;
|
break;
|
||||||
case type::fragment:
|
case ::glsl::program_domain::glsl_fragment_program:
|
||||||
base_name = "shaderlog/FragmentProgram";
|
base_name = "shaderlog/FragmentProgram";
|
||||||
break;
|
break;
|
||||||
case type::compute:
|
case ::glsl::program_domain::glsl_compute_program:
|
||||||
base_name = "shaderlog/ComputeProgram";
|
base_name = "shaderlog/ComputeProgram";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2508,6 +2516,11 @@ public:
|
||||||
return m_id;
|
return m_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string& get_source() const
|
||||||
|
{
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
void set_id(uint id)
|
void set_id(uint id)
|
||||||
{
|
{
|
||||||
m_id = id;
|
m_id = id;
|
||||||
|
|
|
@ -55,10 +55,10 @@ namespace gl
|
||||||
{
|
{
|
||||||
if (!compiled)
|
if (!compiled)
|
||||||
{
|
{
|
||||||
fs.create(gl::glsl::shader::type::fragment, fs_src);
|
fs.create(::glsl::program_domain::glsl_fragment_program, fs_src);
|
||||||
fs.compile();
|
fs.compile();
|
||||||
|
|
||||||
vs.create(gl::glsl::shader::type::vertex, vs_src);
|
vs.create(::glsl::program_domain::glsl_vertex_program, vs_src);
|
||||||
vs.compile();
|
vs.compile();
|
||||||
|
|
||||||
program_handle.create();
|
program_handle.create();
|
||||||
|
|
|
@ -79,8 +79,8 @@ struct GLTraits
|
||||||
rsx_log.notice("*** vp id = %d", vertexProgramData.id);
|
rsx_log.notice("*** vp id = %d", vertexProgramData.id);
|
||||||
rsx_log.notice("*** fp id = %d", fragmentProgramData.id);
|
rsx_log.notice("*** fp id = %d", fragmentProgramData.id);
|
||||||
|
|
||||||
rsx_log.notice("*** vp shader = \n%s", vertexProgramData.shader.source.c_str());
|
rsx_log.notice("*** vp shader = \n%s", vertexProgramData.shader.get_source().c_str());
|
||||||
rsx_log.notice("*** fp shader = \n%s", fragmentProgramData.shader.source.c_str());
|
rsx_log.notice("*** fp shader = \n%s", fragmentProgramData.shader.get_source().c_str());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,16 @@ namespace gl
|
||||||
|
|
||||||
namespace interpreter
|
namespace interpreter
|
||||||
{
|
{
|
||||||
void texture_pool_allocator::create(shader::type domain)
|
void texture_pool_allocator::create(::glsl::program_domain domain)
|
||||||
{
|
{
|
||||||
GLenum pname;
|
GLenum pname;
|
||||||
switch (domain)
|
switch (domain)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
rsx_log.fatal("Unexpected program domain %d", static_cast<int>(domain));
|
rsx_log.fatal("Unexpected program domain %d", static_cast<int>(domain));
|
||||||
case shader::type::vertex:
|
case ::glsl::program_domain::glsl_vertex_program:
|
||||||
pname = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS; break;
|
pname = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS; break;
|
||||||
case shader::type::fragment:
|
case ::glsl::program_domain::glsl_fragment_program:
|
||||||
pname = GL_MAX_TEXTURE_IMAGE_UNITS; break;
|
pname = GL_MAX_TEXTURE_IMAGE_UNITS; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ namespace gl
|
||||||
builder << program_common::interpreter::get_vertex_interpreter();
|
builder << program_common::interpreter::get_vertex_interpreter();
|
||||||
const std::string s = builder.str();
|
const std::string s = builder.str();
|
||||||
|
|
||||||
m_vs.create(glsl::shader::type::vertex, s);
|
m_vs.create(::glsl::program_domain::glsl_vertex_program, s);
|
||||||
m_vs.compile();
|
m_vs.compile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ namespace gl
|
||||||
auto& allocator = prog_data.allocator;
|
auto& allocator = prog_data.allocator;
|
||||||
if (compiler_options & program_common::interpreter::COMPILER_OPT_ENABLE_TEXTURES)
|
if (compiler_options & program_common::interpreter::COMPILER_OPT_ENABLE_TEXTURES)
|
||||||
{
|
{
|
||||||
allocator.create(glsl::shader::type::fragment);
|
allocator.create(::glsl::program_domain::glsl_fragment_program);
|
||||||
if (allocator.max_image_units >= 32)
|
if (allocator.max_image_units >= 32)
|
||||||
{
|
{
|
||||||
// 16 + 4 + 4 + 4
|
// 16 + 4 + 4 + 4
|
||||||
|
@ -302,7 +302,7 @@ namespace gl
|
||||||
builder << program_common::interpreter::get_fragment_interpreter();
|
builder << program_common::interpreter::get_fragment_interpreter();
|
||||||
const std::string s = builder.str();
|
const std::string s = builder.str();
|
||||||
|
|
||||||
prog_data.fs.create(glsl::shader::type::fragment, s);
|
prog_data.fs.create(::glsl::program_domain::glsl_fragment_program, s);
|
||||||
prog_data.fs.compile();
|
prog_data.fs.compile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "GLHelpers.h"
|
#include "GLHelpers.h"
|
||||||
#include "../Common/ProgramStateCache.h"
|
#include "../Common/ProgramStateCache.h"
|
||||||
|
#include "../Common/TextureUtils.h"
|
||||||
|
|
||||||
namespace gl
|
namespace gl
|
||||||
{
|
{
|
||||||
|
using namespace ::glsl;
|
||||||
|
|
||||||
namespace interpreter
|
namespace interpreter
|
||||||
{
|
{
|
||||||
using program_metadata = program_hash_util::fragment_program_utils::fragment_program_metadata;
|
using program_metadata = program_hash_util::fragment_program_utils::fragment_program_metadata;
|
||||||
|
@ -48,7 +51,7 @@ namespace gl
|
||||||
int used = 0;
|
int used = 0;
|
||||||
std::vector<texture_pool> pools;
|
std::vector<texture_pool> pools;
|
||||||
|
|
||||||
void create(::gl::glsl::shader::type domain);
|
void create(::glsl::program_domain domain);
|
||||||
void allocate(int size);
|
void allocate(int size);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,10 @@ namespace gl
|
||||||
"}\n"
|
"}\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
m_fs.create(gl::glsl::shader::type::fragment, fs);
|
m_fs.create(::glsl::program_domain::glsl_fragment_program, fs);
|
||||||
m_fs.compile();
|
m_fs.compile();
|
||||||
|
|
||||||
m_vs.create(gl::glsl::shader::type::vertex, vs);
|
m_vs.create(::glsl::program_domain::glsl_vertex_program, vs);
|
||||||
m_vs.compile();
|
m_vs.compile();
|
||||||
|
|
||||||
m_program.create();
|
m_program.create();
|
||||||
|
|
|
@ -270,7 +270,7 @@ void GLVertexProgram::Decompile(const RSXVertexProgram& prog)
|
||||||
GLVertexDecompilerThread decompiler(prog, source, parr);
|
GLVertexDecompilerThread decompiler(prog, source, parr);
|
||||||
decompiler.Task();
|
decompiler.Task();
|
||||||
|
|
||||||
shader.create(gl::glsl::shader::type::vertex, source);
|
shader.create(::glsl::program_domain::glsl_vertex_program, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLVertexProgram::Compile()
|
void GLVertexProgram::Compile()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue