mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Slight shader simplification
- Don't declare texture if it's not read from. Stops Vulkan validation layers whinging. - Get rid of OpenGL common_header.glsl, and use name linking instead of leftovers from separate shader objects.
This commit is contained in:
parent
1c600c7068
commit
d70334ee57
|
@ -1,104 +0,0 @@
|
|||
//#version 420 // Keep it for editor detection
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Common Interface Definition
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef VERTEX_SHADER
|
||||
|
||||
#if !pGL_ES
|
||||
out gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
float gl_PointSize;
|
||||
#if !pGL_ES
|
||||
float gl_ClipDistance[1];
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef GEOMETRY_SHADER
|
||||
|
||||
#if !pGL_ES
|
||||
in gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
float gl_PointSize;
|
||||
#if !pGL_ES
|
||||
float gl_ClipDistance[1];
|
||||
#endif
|
||||
} gl_in[];
|
||||
|
||||
out gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
float gl_PointSize;
|
||||
#if !pGL_ES
|
||||
float gl_ClipDistance[1];
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Constant Buffer Definition
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Performance note, some drivers (nouveau) will validate all Constant Buffers
|
||||
// even if only one was updated.
|
||||
|
||||
#if defined(VERTEX_SHADER) || defined(GEOMETRY_SHADER)
|
||||
layout(std140, binding = 1) uniform cb20
|
||||
{
|
||||
vec2 VertexScale;
|
||||
vec2 VertexOffset;
|
||||
|
||||
vec2 TextureScale;
|
||||
vec2 TextureOffset;
|
||||
|
||||
vec2 PointSize;
|
||||
uint MaxDepth;
|
||||
uint pad_cb20;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(VERTEX_SHADER) || defined(FRAGMENT_SHADER)
|
||||
layout(std140, binding = 0) uniform cb21
|
||||
{
|
||||
vec3 FogColor;
|
||||
float AREF;
|
||||
|
||||
vec4 WH;
|
||||
|
||||
vec2 TA;
|
||||
float MaxDepthPS;
|
||||
float Af;
|
||||
|
||||
uvec4 FbMask;
|
||||
|
||||
vec4 HalfTexel;
|
||||
|
||||
vec4 MinMax;
|
||||
vec4 STRange;
|
||||
|
||||
ivec4 ChannelShuffle;
|
||||
|
||||
vec2 TC_OffsetHack;
|
||||
vec2 STScale;
|
||||
|
||||
mat4 DitherMatrix;
|
||||
|
||||
float ScaledScaleFactor;
|
||||
float RcpScaleFactor;
|
||||
};
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Default Sampler
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#ifdef FRAGMENT_SHADER
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
#endif
|
|
@ -35,6 +35,8 @@ in vec4 PSin_p;
|
|||
in vec2 PSin_t;
|
||||
in vec4 PSin_c;
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
// Give a different name so I remember there is a special case!
|
||||
#if defined(ps_convert_rgba8_16bits) || defined(ps_convert_float32_32bits)
|
||||
layout(location = 0) out uint SV_Target1;
|
||||
|
|
|
@ -8,6 +8,8 @@ in vec4 PSin_c;
|
|||
|
||||
uniform vec4 ZrH;
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@ in vec4 PSin_c;
|
|||
|
||||
uniform vec4 BGColor;
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
|
||||
void ps_main0()
|
||||
|
|
|
@ -46,6 +46,8 @@ in vec4 PSin_p;
|
|||
in vec2 PSin_t;
|
||||
in vec4 PSin_c;
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
|
||||
vec4 sample_c()
|
||||
|
|
|
@ -17,6 +17,8 @@ in vec4 PSin_p;
|
|||
in vec2 PSin_t;
|
||||
in vec4 PSin_c;
|
||||
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
|
||||
// For all settings: 1.0 = 100% 0.5=50% 1.5 = 150%
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
//#version 420 // Keep it for text editor detection
|
||||
|
||||
// Require for bit operation
|
||||
//#extension GL_ARB_gpu_shader5 : enable
|
||||
|
||||
#define FMT_32 0
|
||||
#define FMT_24 1
|
||||
#define FMT_16 2
|
||||
|
||||
// APITRACE_DEBUG enables forced pixel output to easily detect
|
||||
// the fragment computed by primitive
|
||||
#define APITRACE_DEBUG 0
|
||||
// TEX_COORD_DEBUG output the uv coordinate as color. It is useful
|
||||
// to detect bad sampling due to upscaling
|
||||
//#define TEX_COORD_DEBUG
|
||||
|
@ -25,12 +19,37 @@
|
|||
#define PS_PRIMID_INIT (PS_DATE == 1 || PS_DATE == 2)
|
||||
#define NEEDS_RT_EARLY (PS_TEX_IS_FB == 1 || PS_DATE >= 5)
|
||||
#define NEEDS_RT (NEEDS_RT_EARLY || (!PS_PRIMID_INIT && (PS_FBMASK || SW_BLEND_NEEDS_RT || SW_AD_TO_HW)))
|
||||
#define NEEDS_TEX (PS_TFX != 4)
|
||||
|
||||
#ifdef FRAGMENT_SHADER
|
||||
layout(std140, binding = 0) uniform cb21
|
||||
{
|
||||
vec3 FogColor;
|
||||
float AREF;
|
||||
|
||||
vec4 WH;
|
||||
|
||||
vec2 TA;
|
||||
float MaxDepthPS;
|
||||
float Af;
|
||||
|
||||
uvec4 FbMask;
|
||||
|
||||
vec4 HalfTexel;
|
||||
|
||||
vec4 MinMax;
|
||||
vec4 STRange;
|
||||
|
||||
ivec4 ChannelShuffle;
|
||||
|
||||
vec2 TC_OffsetHack;
|
||||
vec2 STScale;
|
||||
|
||||
mat4 DitherMatrix;
|
||||
|
||||
float ScaledScaleFactor;
|
||||
float RcpScaleFactor;
|
||||
};
|
||||
|
||||
#if !defined(BROKEN_DRIVER) && (pGL_ES || defined(GL_ARB_enhanced_layouts) && GL_ARB_enhanced_layouts)
|
||||
layout(location = 0)
|
||||
#endif
|
||||
in SHADER
|
||||
{
|
||||
vec4 t_float;
|
||||
|
@ -70,7 +89,10 @@ in SHADER
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if NEEDS_TEX
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
layout(binding = 1) uniform sampler2D PaletteSampler;
|
||||
#endif
|
||||
|
||||
#if !HAS_FRAMEBUFFER_FETCH && NEEDS_RT
|
||||
layout(binding = 2) uniform sampler2D RtSampler; // note 2 already use by the image below
|
||||
|
@ -94,6 +116,8 @@ vec4 fetch_rt()
|
|||
#endif
|
||||
}
|
||||
|
||||
#if NEEDS_TEX
|
||||
|
||||
vec4 sample_c(vec2 uv)
|
||||
{
|
||||
#if PS_TEX_IS_FB == 1
|
||||
|
@ -565,6 +589,8 @@ vec4 sample_color(vec2 st)
|
|||
return trunc(t * 255.0f + 0.05f);
|
||||
}
|
||||
|
||||
#endif // NEEDS_TEX
|
||||
|
||||
vec4 tfx(vec4 T, vec4 C)
|
||||
{
|
||||
vec4 C_out;
|
||||
|
@ -632,7 +658,9 @@ vec4 ps_color()
|
|||
vec2 st_int = PSin.t_int.zw;
|
||||
#endif
|
||||
|
||||
#if PS_CHANNEL_FETCH == 1
|
||||
#if !NEEDS_TEX
|
||||
vec4 T = vec4(0.0);
|
||||
#elif PS_CHANNEL_FETCH == 1
|
||||
vec4 T = fetch_red();
|
||||
#elif PS_CHANNEL_FETCH == 2
|
||||
vec4 T = fetch_green();
|
||||
|
@ -898,18 +926,6 @@ void ps_main()
|
|||
#endif
|
||||
|
||||
vec4 C = ps_color();
|
||||
#if (APITRACE_DEBUG & 1) == 1
|
||||
C.r = 255.0f;
|
||||
#endif
|
||||
#if (APITRACE_DEBUG & 2) == 2
|
||||
C.g = 255.0f;
|
||||
#endif
|
||||
#if (APITRACE_DEBUG & 4) == 4
|
||||
C.b = 255.0f;
|
||||
#endif
|
||||
#if (APITRACE_DEBUG & 8) == 8
|
||||
C.a = 128.0f;
|
||||
#endif
|
||||
|
||||
#if PS_SHUFFLE
|
||||
uvec4 denorm_c = uvec4(C);
|
||||
|
@ -1029,5 +1045,3 @@ void ps_main()
|
|||
gl_FragDepth = min(gl_FragCoord.z, MaxDepthPS);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,18 @@
|
|||
//#version 420 // Keep it for text editor detection
|
||||
|
||||
layout(std140, binding = 1) uniform cb20
|
||||
{
|
||||
vec2 VertexScale;
|
||||
vec2 VertexOffset;
|
||||
|
||||
vec2 TextureScale;
|
||||
vec2 TextureOffset;
|
||||
|
||||
vec2 PointSize;
|
||||
uint MaxDepth;
|
||||
uint pad_cb20;
|
||||
};
|
||||
|
||||
#ifdef VERTEX_SHADER
|
||||
layout(location = 0) in vec2 i_st;
|
||||
layout(location = 2) in vec4 i_c;
|
||||
|
@ -9,9 +22,6 @@ layout(location = 5) in uint i_z;
|
|||
layout(location = 6) in uvec2 i_uv;
|
||||
layout(location = 7) in vec4 i_f;
|
||||
|
||||
#if !defined(BROKEN_DRIVER) && (pGL_ES || defined(GL_ARB_enhanced_layouts) && GL_ARB_enhanced_layouts)
|
||||
layout(location = 0)
|
||||
#endif
|
||||
out SHADER
|
||||
{
|
||||
vec4 t_float;
|
||||
|
@ -85,9 +95,6 @@ void vs_main()
|
|||
|
||||
#ifdef GEOMETRY_SHADER
|
||||
|
||||
#if !defined(BROKEN_DRIVER) && (pGL_ES || defined(GL_ARB_enhanced_layouts) && GL_ARB_enhanced_layouts)
|
||||
layout(location = 0)
|
||||
#endif
|
||||
in SHADER
|
||||
{
|
||||
vec4 t_float;
|
||||
|
@ -99,9 +106,6 @@ in SHADER
|
|||
#endif
|
||||
} GSin[];
|
||||
|
||||
#if !defined(BROKEN_DRIVER) && (pGL_ES || defined(GL_ARB_enhanced_layouts) && GL_ARB_enhanced_layouts)
|
||||
layout(location = 0)
|
||||
#endif
|
||||
out SHADER
|
||||
{
|
||||
vec4 t_float;
|
||||
|
|
|
@ -356,6 +356,8 @@ void main()
|
|||
|
||||
#define PS_FEEDBACK_LOOP_IS_NEEDED (PS_TEX_IS_FB == 1 || PS_FBMASK || SW_BLEND_NEEDS_RT || (PS_DATE >= 5))
|
||||
|
||||
#define NEEDS_TEX (PS_TFX != 4)
|
||||
|
||||
layout(std140, set = 0, binding = 1) uniform cb1
|
||||
{
|
||||
vec3 FogColor;
|
||||
|
@ -394,8 +396,10 @@ layout(location = 0, index = 1) out vec4 o_col1;
|
|||
layout(location = 0) out vec4 o_col0;
|
||||
#endif
|
||||
|
||||
#if NEEDS_TEX
|
||||
layout(set = 1, binding = 0) uniform sampler2D Texture;
|
||||
layout(set = 1, binding = 1) uniform texture2D Palette;
|
||||
#endif
|
||||
|
||||
#if PS_FEEDBACK_LOOP_IS_NEEDED
|
||||
#ifndef DISABLE_TEXTURE_BARRIER
|
||||
|
@ -411,6 +415,8 @@ layout(set = 1, binding = 1) uniform texture2D Palette;
|
|||
layout(set = 2, binding = 1) uniform texture2D PrimMinTexture;
|
||||
#endif
|
||||
|
||||
#if NEEDS_TEX
|
||||
|
||||
vec4 sample_c(vec2 uv)
|
||||
{
|
||||
#if PS_TEX_IS_FB
|
||||
|
@ -885,6 +891,8 @@ vec4 sample_color(vec2 st)
|
|||
return trunc(t * 255.0f + 0.05f);
|
||||
}
|
||||
|
||||
#endif // NEEDS_TEX
|
||||
|
||||
vec4 tfx(vec4 T, vec4 C)
|
||||
{
|
||||
vec4 C_out;
|
||||
|
@ -962,7 +970,9 @@ vec4 ps_color()
|
|||
vec2 st_int = vsIn.ti.zw;
|
||||
#endif
|
||||
|
||||
#if PS_CHANNEL_FETCH == 1
|
||||
#if !NEEDS_TEX
|
||||
vec4 T = vec4(0.0f);
|
||||
#elif PS_CHANNEL_FETCH == 1
|
||||
vec4 T = fetch_red(ivec2(gl_FragCoord.xy));
|
||||
#elif PS_CHANNEL_FETCH == 2
|
||||
vec4 T = fetch_green(ivec2(gl_FragCoord.xy));
|
||||
|
|
|
@ -145,17 +145,6 @@ bool GSDeviceOGL::Create()
|
|||
DevCon.WriteLn("Using %s for point expansion and %s for line expansion.",
|
||||
m_features.point_expand ? "hardware" : "geometry shaders", m_features.line_expand ? "hardware" : "geometry shaders");
|
||||
|
||||
{
|
||||
auto shader = Host::ReadResourceFileToString("shaders/opengl/common_header.glsl");
|
||||
if (!shader.has_value())
|
||||
{
|
||||
Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/common_header.glsl.");
|
||||
return false;
|
||||
}
|
||||
|
||||
m_shader_common_header = std::move(*shader);
|
||||
}
|
||||
|
||||
// because of fbo bindings below...
|
||||
GLState::Clear();
|
||||
|
||||
|
@ -282,12 +271,12 @@ bool GSDeviceOGL::Create()
|
|||
|
||||
|
||||
|
||||
m_convert.vs = GetShaderSource("vs_main", GL_VERTEX_SHADER, m_shader_common_header, *convert_glsl, {});
|
||||
m_convert.vs = GetShaderSource("vs_main", GL_VERTEX_SHADER, *convert_glsl);
|
||||
|
||||
for (size_t i = 0; i < std::size(m_convert.ps); i++)
|
||||
{
|
||||
const char* name = shaderName(static_cast<ShaderConvert>(i));
|
||||
const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, m_shader_common_header, *convert_glsl, std::string()));
|
||||
const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, *convert_glsl));
|
||||
if (!m_shader_cache.GetProgram(&m_convert.ps[i], m_convert.vs, {}, ps))
|
||||
return false;
|
||||
m_convert.ps[i].SetFormattedName("Convert pipe %s", name);
|
||||
|
@ -336,12 +325,12 @@ bool GSDeviceOGL::Create()
|
|||
return false;
|
||||
}
|
||||
|
||||
std::string present_vs(GetShaderSource("vs_main", GL_VERTEX_SHADER, m_shader_common_header, *shader, {}));
|
||||
std::string present_vs(GetShaderSource("vs_main", GL_VERTEX_SHADER, *shader));
|
||||
|
||||
for (size_t i = 0; i < std::size(m_present); i++)
|
||||
{
|
||||
const char* name = shaderName(static_cast<PresentShader>(i));
|
||||
const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, m_shader_common_header, *shader, {}));
|
||||
const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, *shader));
|
||||
if (!m_shader_cache.GetProgram(&m_present[i], present_vs, {}, ps))
|
||||
return false;
|
||||
m_present[i].SetFormattedName("Present pipe %s", name);
|
||||
|
@ -374,7 +363,7 @@ bool GSDeviceOGL::Create()
|
|||
|
||||
for (size_t i = 0; i < std::size(m_merge_obj.ps); i++)
|
||||
{
|
||||
const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, m_shader_common_header, *shader, {}));
|
||||
const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, *shader));
|
||||
if (!m_shader_cache.GetProgram(&m_merge_obj.ps[i], m_convert.vs, {}, ps))
|
||||
return false;
|
||||
m_merge_obj.ps[i].SetFormattedName("Merge pipe %zu", i);
|
||||
|
@ -397,7 +386,7 @@ bool GSDeviceOGL::Create()
|
|||
|
||||
for (size_t i = 0; i < std::size(m_interlace.ps); i++)
|
||||
{
|
||||
const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, m_shader_common_header, *shader, {}));
|
||||
const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, *shader));
|
||||
if (!m_shader_cache.GetProgram(&m_interlace.ps[i], m_convert.vs, {}, ps))
|
||||
return false;
|
||||
m_interlace.ps[i].SetFormattedName("Merge pipe %zu", i);
|
||||
|
@ -418,7 +407,7 @@ bool GSDeviceOGL::Create()
|
|||
return false;
|
||||
}
|
||||
|
||||
const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, m_shader_common_header, *shader, {}));
|
||||
const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, *shader));
|
||||
if (!m_shader_cache.GetProgram(&m_shadeboost.ps, m_convert.vs, {}, ps))
|
||||
return false;
|
||||
m_shadeboost.ps.RegisterUniform("params");
|
||||
|
@ -458,7 +447,7 @@ bool GSDeviceOGL::Create()
|
|||
{
|
||||
const std::string ps(GetShaderSource(
|
||||
fmt::format("ps_stencil_image_init_{}", i),
|
||||
GL_FRAGMENT_SHADER, m_shader_common_header, *convert_glsl, {}));
|
||||
GL_FRAGMENT_SHADER, *convert_glsl));
|
||||
m_shader_cache.GetProgram(&m_date.primid_ps[i], m_convert.vs, {}, ps);
|
||||
m_date.primid_ps[i].SetFormattedName("PrimID Destination Alpha Init %d", i);
|
||||
}
|
||||
|
@ -862,10 +851,9 @@ GSTexture* GSDeviceOGL::InitPrimDateTexture(GSTexture* rt, const GSVector4i& are
|
|||
return tex;
|
||||
}
|
||||
|
||||
std::string GSDeviceOGL::GetShaderSource(const std::string_view& entry, GLenum type, const std::string_view& common_header, const std::string_view& glsl_h_code, const std::string_view& macro_sel)
|
||||
std::string GSDeviceOGL::GetShaderSource(const std::string_view& entry, GLenum type, const std::string_view& glsl_h_code, const std::string_view& macro_sel)
|
||||
{
|
||||
std::string src = GenGlslHeader(entry, type, macro_sel);
|
||||
src += m_shader_common_header;
|
||||
src += glsl_h_code;
|
||||
return src;
|
||||
}
|
||||
|
@ -930,18 +918,6 @@ std::string GSDeviceOGL::GenGlslHeader(const std::string_view& entry, GLenum typ
|
|||
else
|
||||
header += "#define HAS_CLIP_CONTROL 0\n";
|
||||
|
||||
if (GLLoader::vendor_id_amd || GLLoader::vendor_id_intel)
|
||||
header += "#define BROKEN_DRIVER as_usual\n";
|
||||
|
||||
// Stupid GL implementation (can't use GL_ES)
|
||||
// AMD/nvidia define it to 0
|
||||
// intel window don't define it
|
||||
// intel linux refuse to define it
|
||||
if (GLLoader::is_gles)
|
||||
header += "#define pGL_ES 1\n";
|
||||
else
|
||||
header += "#define pGL_ES 0\n";
|
||||
|
||||
// Allow to puts several shader in 1 files
|
||||
switch (type)
|
||||
{
|
||||
|
@ -977,7 +953,6 @@ std::string GSDeviceOGL::GetVSSource(VSSelector sel)
|
|||
+ fmt::format("#define VS_POINT_SIZE {}\n", static_cast<u32>(sel.point_size));
|
||||
|
||||
std::string src = GenGlslHeader("vs_main", GL_VERTEX_SHADER, macro);
|
||||
src += m_shader_common_header;
|
||||
src += m_shader_tfx_vgs;
|
||||
return src;
|
||||
}
|
||||
|
@ -991,7 +966,6 @@ std::string GSDeviceOGL::GetGSSource(GSSelector sel)
|
|||
+ fmt::format("#define GS_IIP {}\n", static_cast<u32>(sel.iip));
|
||||
|
||||
std::string src = GenGlslHeader("gs_main", GL_GEOMETRY_SHADER, macro);
|
||||
src += m_shader_common_header;
|
||||
src += m_shader_tfx_vgs;
|
||||
return src;
|
||||
}
|
||||
|
@ -1054,7 +1028,6 @@ std::string GSDeviceOGL::GetPSSource(const PSSelector& sel)
|
|||
;
|
||||
|
||||
std::string src = GenGlslHeader("ps_main", GL_FRAGMENT_SHADER, macro);
|
||||
src += m_shader_common_header;
|
||||
src += m_shader_tfx_fs;
|
||||
return src;
|
||||
}
|
||||
|
@ -1474,12 +1447,12 @@ void GSDeviceOGL::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
|||
if (!GLLoader::is_gles && !GLLoader::found_GL_ARB_gpu_shader5)
|
||||
return;
|
||||
|
||||
std::string fxaa_macro = "#define FXAA_GLSL_130 1\n";
|
||||
const std::string_view fxaa_macro = "#define FXAA_GLSL_130 1\n";
|
||||
std::optional<std::string> shader = Host::ReadResourceFileToString("shaders/common/fxaa.fx");
|
||||
if (!shader.has_value())
|
||||
return;
|
||||
|
||||
const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, m_shader_common_header, shader->c_str(), fxaa_macro));
|
||||
const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, shader->c_str(), fxaa_macro));
|
||||
if (!m_fxaa.ps.Compile(m_convert.vs, {}, ps) || !m_fxaa.ps.Link())
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -202,8 +202,6 @@ public:
|
|||
};
|
||||
|
||||
private:
|
||||
// Place holder for the GLSL shader code (to avoid useless reload)
|
||||
std::string m_shader_common_header;
|
||||
std::string m_shader_tfx_vgs;
|
||||
std::string m_shader_tfx_fs;
|
||||
|
||||
|
@ -364,7 +362,8 @@ public:
|
|||
void OMUnbindTexture(GSTextureOGL* tex);
|
||||
|
||||
bool CreateTextureFX();
|
||||
std::string GetShaderSource(const std::string_view& entry, GLenum type, const std::string_view& common_header, const std::string_view& glsl_h_code, const std::string_view& macro_sel);
|
||||
std::string GetShaderSource(const std::string_view& entry, GLenum type, const std::string_view& glsl_h_code,
|
||||
const std::string_view& macro_sel = std::string_view());
|
||||
std::string GenGlslHeader(const std::string_view& entry, GLenum type, const std::string_view& macro);
|
||||
std::string GetVSSource(VSSelector sel);
|
||||
std::string GetGSSource(GSSelector sel);
|
||||
|
|
|
@ -15,4 +15,4 @@
|
|||
|
||||
/// Version number for GS and other shaders. Increment whenever any of the contents of the
|
||||
/// shaders change, to invalidate the cache.
|
||||
static constexpr u32 SHADER_CACHE_VERSION = 21;
|
||||
static constexpr u32 SHADER_CACHE_VERSION = 22;
|
||||
|
|
Loading…
Reference in New Issue