mirror of https://github.com/PCSX2/pcsx2.git
gsdx ogl: use load resource to load shader
* Windows behavior must be checked * remove glsl_source.h v2: fix missing include Big thanks to Turtleli v3: fix indentation in gsdx-res.xml add dependency in cmake remove old res/glsl/fxaa.fx symlink add tfx.cl for OpenCL support on Linux v4, v5 fix cmake indentation
This commit is contained in:
parent
38c4f5b6e7
commit
2d0a61fc8d
|
@ -34,24 +34,6 @@ eval {
|
||||||
print "Disable MD5\n";
|
print "Disable MD5\n";
|
||||||
};
|
};
|
||||||
|
|
||||||
########################
|
|
||||||
# GSdx
|
|
||||||
########################
|
|
||||||
my $gsdx_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "GSdx", "res");
|
|
||||||
my $gsdx_out = File::Spec->catdir($gsdx_path, "glsl_source.h");
|
|
||||||
|
|
||||||
# Just a hack to reuse glsl2h function easily
|
|
||||||
$gsdx_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "GSdx", "res", "glsl");
|
|
||||||
my @tfx_res = qw/tfx_fs.glsl/;
|
|
||||||
my $tfx_all = File::Spec->catdir($gsdx_path, "tfx_fs_all.glsl");
|
|
||||||
|
|
||||||
my @gsdx_res = qw/common_header.glsl convert.glsl interlace.glsl merge.glsl shadeboost.glsl tfx_vgs.glsl tfx_fs_all.glsl fxaa.fx/;
|
|
||||||
concat($gsdx_path, $tfx_all, \@tfx_res);
|
|
||||||
|
|
||||||
glsl2h($gsdx_path, $gsdx_out, \@gsdx_res);
|
|
||||||
|
|
||||||
unlink $tfx_all;
|
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# ZZOGL
|
# ZZOGL
|
||||||
########################
|
########################
|
||||||
|
@ -60,22 +42,6 @@ my $zz_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "zzogl-
|
||||||
my $zz_out = File::Spec->catdir($zz_path, "ps2hw_gl4.h");
|
my $zz_out = File::Spec->catdir($zz_path, "ps2hw_gl4.h");
|
||||||
glsl2h($zz_path, $zz_out, \@zz_res);
|
glsl2h($zz_path, $zz_out, \@zz_res);
|
||||||
|
|
||||||
sub concat {
|
|
||||||
my $in_dir = shift;
|
|
||||||
my $out_file = shift;
|
|
||||||
my $glsl_files = shift;
|
|
||||||
|
|
||||||
my $line;
|
|
||||||
open(my $TMP, ">$out_file");
|
|
||||||
foreach my $file (@{$glsl_files}) {
|
|
||||||
open(my $GLSL, File::Spec->catfile($in_dir, $file)) or die "$! : $file";
|
|
||||||
while(defined($line = <$GLSL>)) {
|
|
||||||
print $TMP $line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
sub glsl2h {
|
sub glsl2h {
|
||||||
my $in_dir = shift;
|
my $in_dir = shift;
|
||||||
my $out_file = shift;
|
my $out_file = shift;
|
||||||
|
|
|
@ -195,7 +195,6 @@ set(GSdxHeaders
|
||||||
PSX/GPUSetupPrimCodeGenerator.h
|
PSX/GPUSetupPrimCodeGenerator.h
|
||||||
PSX/GPUState.h
|
PSX/GPUState.h
|
||||||
PSX/GPUVertex.h
|
PSX/GPUVertex.h
|
||||||
res/glsl_source.h
|
|
||||||
stdafx.h
|
stdafx.h
|
||||||
xbyak/xbyak.h
|
xbyak/xbyak.h
|
||||||
xbyak/xbyak_mnemonic.h
|
xbyak/xbyak_mnemonic.h
|
||||||
|
@ -289,23 +288,30 @@ if(OPENCL_FOUND)
|
||||||
set(GSdxFinalLibs ${GSdxFinalLibs} ${OPENCL_LIBRARIES})
|
set(GSdxFinalLibs ${GSdxFinalLibs} ${OPENCL_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Generate Glsl header file. Protect with REBUILD_SHADER to avoid build-dependency on PERL
|
|
||||||
if (REBUILD_SHADER)
|
|
||||||
add_custom_command(OUTPUT res/glsl_source.h COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/glsl2h.pl)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res")
|
set(RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res")
|
||||||
|
set(RESOURCE_FILES
|
||||||
|
res/logo-ogl.bmp
|
||||||
|
res/fxaa.fx
|
||||||
|
res/tfx.cl
|
||||||
|
res/glsl/common_header.glsl
|
||||||
|
res/glsl/convert.glsl
|
||||||
|
res/glsl/interlace.glsl
|
||||||
|
res/glsl/merge.glsl
|
||||||
|
res/glsl/shadeboost.glsl
|
||||||
|
res/glsl/tfx_fs.glsl
|
||||||
|
res/glsl/tfx_vgs.glsl)
|
||||||
|
|
||||||
# Note: trying to combine --generate-source and --generate-header doesn't work. It outputs whichever one comes last into the file named by the first
|
# Note: trying to combine --generate-source and --generate-header doesn't work. It outputs whichever one comes last into the file named by the first
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT GSdxResources.h
|
OUTPUT GSdxResources.h
|
||||||
COMMAND glib-compile-resources --sourcedir "${RESOURCE_DIR}" --generate-header
|
COMMAND glib-compile-resources --sourcedir "${RESOURCE_DIR}" --generate-header
|
||||||
--c-name GSdx_res "${RESOURCE_DIR}/gsdx-res.xml" --target=GSdxResources.h
|
--c-name GSdx_res "${RESOURCE_DIR}/gsdx-res.xml" --target=GSdxResources.h
|
||||||
DEPENDS res/gsdx-res.xml res/logo-ogl.bmp)
|
DEPENDS res/gsdx-res.xml ${RESOURCE_FILES})
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT GSdxResources.cpp
|
OUTPUT GSdxResources.cpp
|
||||||
COMMAND glib-compile-resources --sourcedir "${RESOURCE_DIR}" --generate-source
|
COMMAND glib-compile-resources --sourcedir "${RESOURCE_DIR}" --generate-source
|
||||||
--c-name GSdx_res "${RESOURCE_DIR}/gsdx-res.xml" --target=GSdxResources.cpp
|
--c-name GSdx_res "${RESOURCE_DIR}/gsdx-res.xml" --target=GSdxResources.cpp
|
||||||
DEPENDS res/gsdx-res.xml res/logo-ogl.bmp)
|
DEPENDS res/gsdx-res.xml ${RESOURCE_FILES})
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,14 @@
|
||||||
#include "GSOsdManager.h"
|
#include "GSOsdManager.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
#include "res/glsl_source.h"
|
|
||||||
|
|
||||||
//#define ONLY_LINES
|
//#define ONLY_LINES
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include "resource.h"
|
||||||
|
#else
|
||||||
|
#include "GSdxResources.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO port those value into PerfMon API
|
// TODO port those value into PerfMon API
|
||||||
#ifdef ENABLE_OGL_DEBUG_MEM_BW
|
#ifdef ENABLE_OGL_DEBUG_MEM_BW
|
||||||
uint64 g_real_texture_upload_byte = 0;
|
uint64 g_real_texture_upload_byte = 0;
|
||||||
|
@ -289,6 +293,7 @@ GSTexture* GSDeviceOGL::FetchSurface(int type, int w, int h, bool msaa, int form
|
||||||
|
|
||||||
bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
{
|
{
|
||||||
|
std::vector<char> shader;
|
||||||
// ****************************************************************
|
// ****************************************************************
|
||||||
// Debug helper
|
// Debug helper
|
||||||
// ****************************************************************
|
// ****************************************************************
|
||||||
|
@ -381,11 +386,13 @@ bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
m_misc_cb_cache.ScalingFactor = GSVector4i(theApp.GetConfigI("upscale_multiplier"));
|
m_misc_cb_cache.ScalingFactor = GSVector4i(theApp.GetConfigI("upscale_multiplier"));
|
||||||
m_convert.cb->cache_upload(&m_misc_cb_cache);
|
m_convert.cb->cache_upload(&m_misc_cb_cache);
|
||||||
|
|
||||||
vs = m_shader->Compile("convert.glsl", "vs_main", GL_VERTEX_SHADER, convert_glsl);
|
theApp.LoadResource(IDR_CONVERT_GLSL, shader);
|
||||||
|
|
||||||
|
vs = m_shader->Compile("convert.glsl", "vs_main", GL_VERTEX_SHADER, shader.data());
|
||||||
|
|
||||||
m_convert.vs = vs;
|
m_convert.vs = vs;
|
||||||
for(size_t i = 0; i < countof(m_convert.ps); i++) {
|
for(size_t i = 0; i < countof(m_convert.ps); i++) {
|
||||||
ps = m_shader->Compile("convert.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, convert_glsl);
|
ps = m_shader->Compile("convert.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, shader.data());
|
||||||
string pretty_name = "Convert pipe " + to_string(i);
|
string pretty_name = "Convert pipe " + to_string(i);
|
||||||
m_convert.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
m_convert.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
||||||
}
|
}
|
||||||
|
@ -411,8 +418,10 @@ bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
|
|
||||||
m_merge_obj.cb = new GSUniformBufferOGL("Merge UBO", g_merge_cb_index, sizeof(MergeConstantBuffer));
|
m_merge_obj.cb = new GSUniformBufferOGL("Merge UBO", g_merge_cb_index, sizeof(MergeConstantBuffer));
|
||||||
|
|
||||||
|
theApp.LoadResource(IDR_MERGE_GLSL, shader);
|
||||||
|
|
||||||
for(size_t i = 0; i < countof(m_merge_obj.ps); i++) {
|
for(size_t i = 0; i < countof(m_merge_obj.ps); i++) {
|
||||||
ps = m_shader->Compile("merge.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, merge_glsl);
|
ps = m_shader->Compile("merge.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, shader.data());
|
||||||
string pretty_name = "Merge pipe " + to_string(i);
|
string pretty_name = "Merge pipe " + to_string(i);
|
||||||
m_merge_obj.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
m_merge_obj.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
||||||
}
|
}
|
||||||
|
@ -426,8 +435,10 @@ bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
|
|
||||||
m_interlace.cb = new GSUniformBufferOGL("Interlace UBO", g_interlace_cb_index, sizeof(InterlaceConstantBuffer));
|
m_interlace.cb = new GSUniformBufferOGL("Interlace UBO", g_interlace_cb_index, sizeof(InterlaceConstantBuffer));
|
||||||
|
|
||||||
|
theApp.LoadResource(IDR_INTERLACE_GLSL, shader);
|
||||||
|
|
||||||
for(size_t i = 0; i < countof(m_interlace.ps); i++) {
|
for(size_t i = 0; i < countof(m_interlace.ps); i++) {
|
||||||
ps = m_shader->Compile("interlace.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, interlace_glsl);
|
ps = m_shader->Compile("interlace.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, shader.data());
|
||||||
string pretty_name = "Interlace pipe " + to_string(i);
|
string pretty_name = "Interlace pipe " + to_string(i);
|
||||||
m_interlace.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
m_interlace.ps[i] = m_shader->LinkPipeline(pretty_name, vs, 0, ps);
|
||||||
}
|
}
|
||||||
|
@ -446,7 +457,9 @@ bool GSDeviceOGL::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
+ format("#define SB_BRIGHTNESS %d.0\n", ShadeBoost_Brightness)
|
+ format("#define SB_BRIGHTNESS %d.0\n", ShadeBoost_Brightness)
|
||||||
+ format("#define SB_CONTRAST %d.0\n", ShadeBoost_Contrast);
|
+ format("#define SB_CONTRAST %d.0\n", ShadeBoost_Contrast);
|
||||||
|
|
||||||
ps = m_shader->Compile("shadeboost.glsl", "ps_main", GL_FRAGMENT_SHADER, shadeboost_glsl, shade_macro);
|
theApp.LoadResource(IDR_SHADEBOOST_GLSL, shader);
|
||||||
|
|
||||||
|
ps = m_shader->Compile("shadeboost.glsl", "ps_main", GL_FRAGMENT_SHADER, shader.data(), shade_macro);
|
||||||
m_shadeboost.ps = m_shader->LinkPipeline("ShadeBoost pipe", vs, 0, ps);
|
m_shadeboost.ps = m_shader->LinkPipeline("ShadeBoost pipe", vs, 0, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,6 +579,9 @@ void GSDeviceOGL::CreateTextureFX()
|
||||||
m_vs_cb = new GSUniformBufferOGL("HW VS UBO", g_vs_cb_index, sizeof(VSConstantBuffer));
|
m_vs_cb = new GSUniformBufferOGL("HW VS UBO", g_vs_cb_index, sizeof(VSConstantBuffer));
|
||||||
m_ps_cb = new GSUniformBufferOGL("HW PS UBO", g_ps_cb_index, sizeof(PSConstantBuffer));
|
m_ps_cb = new GSUniformBufferOGL("HW PS UBO", g_ps_cb_index, sizeof(PSConstantBuffer));
|
||||||
|
|
||||||
|
theApp.LoadResource(IDR_TFX_VGS_GLSL, m_shader_tfx_vgs);
|
||||||
|
theApp.LoadResource(IDR_TFX_FS_GLSL, m_shader_tfx_fs);
|
||||||
|
|
||||||
// warning 1 sampler by image unit. So you cannot reuse m_ps_ss...
|
// warning 1 sampler by image unit. So you cannot reuse m_ps_ss...
|
||||||
m_palette_ss = CreateSampler(PSSamplerSelector(0));
|
m_palette_ss = CreateSampler(PSSamplerSelector(0));
|
||||||
glBindSampler(1, m_palette_ss);
|
glBindSampler(1, m_palette_ss);
|
||||||
|
@ -899,28 +915,25 @@ void GSDeviceOGL::Barrier(GLbitfield b)
|
||||||
glMemoryBarrier(b);
|
glMemoryBarrier(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: must be here because tfx_glsl is static */
|
|
||||||
GLuint GSDeviceOGL::CompileVS(VSSelector sel)
|
GLuint GSDeviceOGL::CompileVS(VSSelector sel)
|
||||||
{
|
{
|
||||||
if (GLLoader::buggy_sso_dual_src)
|
if (GLLoader::buggy_sso_dual_src)
|
||||||
return m_shader->CompileShader("tfx_vgs.glsl", "vs_main", GL_VERTEX_SHADER, tfx_vgs_glsl, "");
|
return m_shader->CompileShader("tfx_vgs.glsl", "vs_main", GL_VERTEX_SHADER, m_shader_tfx_vgs.data(), "");
|
||||||
else
|
else
|
||||||
return m_shader->Compile("tfx_vgs.glsl", "vs_main", GL_VERTEX_SHADER, tfx_vgs_glsl, "");
|
return m_shader->Compile("tfx_vgs.glsl", "vs_main", GL_VERTEX_SHADER, m_shader_tfx_vgs.data(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: must be here because tfx_glsl is static */
|
|
||||||
GLuint GSDeviceOGL::CompileGS(GSSelector sel)
|
GLuint GSDeviceOGL::CompileGS(GSSelector sel)
|
||||||
{
|
{
|
||||||
std::string macro = format("#define GS_POINT %d\n", sel.point)
|
std::string macro = format("#define GS_POINT %d\n", sel.point)
|
||||||
+ format("#define GS_LINE %d\n", sel.line);
|
+ format("#define GS_LINE %d\n", sel.line);
|
||||||
|
|
||||||
if (GLLoader::buggy_sso_dual_src)
|
if (GLLoader::buggy_sso_dual_src)
|
||||||
return m_shader->CompileShader("tfx_vgs.glsl", "gs_main", GL_GEOMETRY_SHADER, tfx_vgs_glsl, macro);
|
return m_shader->CompileShader("tfx_vgs.glsl", "gs_main", GL_GEOMETRY_SHADER, m_shader_tfx_vgs.data(), macro);
|
||||||
else
|
else
|
||||||
return m_shader->Compile("tfx_vgs.glsl", "gs_main", GL_GEOMETRY_SHADER, tfx_vgs_glsl, macro);
|
return m_shader->Compile("tfx_vgs.glsl", "gs_main", GL_GEOMETRY_SHADER, m_shader_tfx_vgs.data(), macro);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: must be here because tfx_glsl is static */
|
|
||||||
GLuint GSDeviceOGL::CompilePS(PSSelector sel)
|
GLuint GSDeviceOGL::CompilePS(PSSelector sel)
|
||||||
{
|
{
|
||||||
std::string macro = format("#define PS_FST %d\n", sel.fst)
|
std::string macro = format("#define PS_FST %d\n", sel.fst)
|
||||||
|
@ -961,9 +974,9 @@ GLuint GSDeviceOGL::CompilePS(PSSelector sel)
|
||||||
;
|
;
|
||||||
|
|
||||||
if (GLLoader::buggy_sso_dual_src)
|
if (GLLoader::buggy_sso_dual_src)
|
||||||
return m_shader->CompileShader("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, tfx_fs_all_glsl, macro);
|
return m_shader->CompileShader("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, m_shader_tfx_fs.data(), macro);
|
||||||
else
|
else
|
||||||
return m_shader->Compile("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, tfx_fs_all_glsl, macro);
|
return m_shader->Compile("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, m_shader_tfx_fs.data(), macro);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSDeviceOGL::SelfShaderTestRun(const string& dir, const string& file, const PSSelector& sel, int& nb_shader)
|
void GSDeviceOGL::SelfShaderTestRun(const string& dir, const string& file, const PSSelector& sel, int& nb_shader)
|
||||||
|
@ -1481,7 +1494,11 @@ void GSDeviceOGL::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
||||||
|
|
||||||
std::string fxaa_macro = "#define FXAA_GLSL_130 1\n";
|
std::string fxaa_macro = "#define FXAA_GLSL_130 1\n";
|
||||||
fxaa_macro += "#extension GL_ARB_gpu_shader5 : enable\n";
|
fxaa_macro += "#extension GL_ARB_gpu_shader5 : enable\n";
|
||||||
GLuint ps = m_shader->Compile("fxaa.fx", "ps_main", GL_FRAGMENT_SHADER, fxaa_fx, fxaa_macro);
|
|
||||||
|
std::vector<char> shader;
|
||||||
|
theApp.LoadResource(IDR_FXAA_FX, shader);
|
||||||
|
|
||||||
|
GLuint ps = m_shader->Compile("fxaa.fx", "ps_main", GL_FRAGMENT_SHADER, shader.data(), fxaa_macro);
|
||||||
m_fxaa.ps = m_shader->LinkPipeline("FXAA pipe", m_convert.vs, 0, ps);
|
m_fxaa.ps = m_shader->LinkPipeline("FXAA pipe", m_convert.vs, 0, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -418,6 +418,10 @@ public:
|
||||||
|
|
||||||
bool m_disable_hw_gl_draw;
|
bool m_disable_hw_gl_draw;
|
||||||
|
|
||||||
|
// Place holder for the GLSL shader code (to avoid useless reload)
|
||||||
|
std::vector<char> m_shader_tfx_vgs;
|
||||||
|
std::vector<char> m_shader_tfx_fs;
|
||||||
|
|
||||||
GLuint m_fbo; // frame buffer container
|
GLuint m_fbo; // frame buffer container
|
||||||
GLuint m_fbo_read; // frame buffer container only for reading
|
GLuint m_fbo_read; // frame buffer container only for reading
|
||||||
|
|
||||||
|
|
|
@ -1931,14 +1931,10 @@ GSRendererCL::CL::CL()
|
||||||
|
|
||||||
std::vector<char> buff;
|
std::vector<char> buff;
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
if(theApp.LoadResource(IDR_TFX_CL, buff))
|
if(theApp.LoadResource(IDR_TFX_CL, buff))
|
||||||
{
|
{
|
||||||
kernel_str = std::string(buff.data(), buff.size());
|
kernel_str = std::string(buff.data(), buff.size());
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
ASSERT(0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
vb.head = vb.tail = vb.size = 0;
|
vb.head = vb.tail = vb.size = 0;
|
||||||
ib.head = ib.tail = ib.size = 0;
|
ib.head = ib.tail = ib.size = 0;
|
||||||
|
|
|
@ -87,5 +87,15 @@ enum {
|
||||||
IDC_OSD_MONITOR,
|
IDC_OSD_MONITOR,
|
||||||
IDC_OSD_MAX_LOG,
|
IDC_OSD_MAX_LOG,
|
||||||
IDC_OSD_MAX_LOG_EDIT,
|
IDC_OSD_MAX_LOG_EDIT,
|
||||||
|
// Shader
|
||||||
|
IDR_CONVERT_GLSL,
|
||||||
|
IDR_FXAA_FX,
|
||||||
|
IDR_INTERLACE_GLSL,
|
||||||
|
IDR_MERGE_GLSL,
|
||||||
|
IDR_SHADEBOOST_GLSL,
|
||||||
|
IDR_COMMON_GLSL,
|
||||||
|
IDR_TFX_VGS_GLSL,
|
||||||
|
IDR_TFX_FS_GLSL,
|
||||||
|
IDR_TFX_CL,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,12 +23,18 @@
|
||||||
#include "GSShaderOGL.h"
|
#include "GSShaderOGL.h"
|
||||||
#include "GLState.h"
|
#include "GLState.h"
|
||||||
|
|
||||||
#include "res/glsl_source.h"
|
#ifdef _WIN32
|
||||||
|
#include "resource.h"
|
||||||
|
#else
|
||||||
|
#include "GSdxResources.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
GSShaderOGL::GSShaderOGL(bool debug) :
|
GSShaderOGL::GSShaderOGL(bool debug) :
|
||||||
m_pipeline(0),
|
m_pipeline(0),
|
||||||
m_debug_shader(debug)
|
m_debug_shader(debug)
|
||||||
{
|
{
|
||||||
|
theApp.LoadResource(IDR_COMMON_GLSL, m_common_header);
|
||||||
|
|
||||||
// Create a default pipeline
|
// Create a default pipeline
|
||||||
m_pipeline = LinkPipeline("HW pipe", 0, 0, 0);
|
m_pipeline = LinkPipeline("HW pipe", 0, 0, 0);
|
||||||
BindPipeline(m_pipeline);
|
BindPipeline(m_pipeline);
|
||||||
|
@ -263,7 +269,7 @@ GLuint GSShaderOGL::Compile(const std::string& glsl_file, const std::string& ent
|
||||||
std::string header = GenGlslHeader(entry, type, macro_sel);
|
std::string header = GenGlslHeader(entry, type, macro_sel);
|
||||||
|
|
||||||
sources[0] = header.c_str();
|
sources[0] = header.c_str();
|
||||||
sources[1] = common_header_glsl;
|
sources[1] = m_common_header.data();
|
||||||
sources[2] = glsl_h_code;
|
sources[2] = glsl_h_code;
|
||||||
|
|
||||||
program = glCreateShaderProgramv(type, shader_nb, sources);
|
program = glCreateShaderProgramv(type, shader_nb, sources);
|
||||||
|
@ -297,7 +303,7 @@ GLuint GSShaderOGL::CompileShader(const std::string& glsl_file, const std::strin
|
||||||
std::string header = GenGlslHeader(entry, type, macro_sel);
|
std::string header = GenGlslHeader(entry, type, macro_sel);
|
||||||
|
|
||||||
sources[0] = header.c_str();
|
sources[0] = header.c_str();
|
||||||
sources[1] = common_header_glsl;
|
sources[1] = m_common_header.data();
|
||||||
sources[2] = glsl_h_code;
|
sources[2] = glsl_h_code;
|
||||||
|
|
||||||
shader = glCreateShader(type);
|
shader = glCreateShader(type);
|
||||||
|
|
|
@ -35,6 +35,7 @@ class GSShaderOGL {
|
||||||
bool ValidatePipeline(GLuint p);
|
bool ValidatePipeline(GLuint p);
|
||||||
|
|
||||||
std::string GenGlslHeader(const std::string& entry, GLenum type, const std::string& macro);
|
std::string GenGlslHeader(const std::string& entry, GLenum type, const std::string& macro);
|
||||||
|
std::vector<char> m_common_header;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GSShaderOGL(bool debug);
|
GSShaderOGL(bool debug);
|
||||||
|
|
|
@ -67,6 +67,33 @@ bool GSdxApp::LoadResource(int id, std::vector<char>& buff, const char* type)
|
||||||
{
|
{
|
||||||
std::string path;
|
std::string path;
|
||||||
switch (id) {
|
switch (id) {
|
||||||
|
case IDR_COMMON_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/common_header.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_CONVERT_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/convert.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_FXAA_FX:
|
||||||
|
path = "/GSdx/res/fxaa.fx";
|
||||||
|
break;
|
||||||
|
case IDR_INTERLACE_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/interlace.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_MERGE_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/merge.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_SHADEBOOST_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/shadeboost.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_TFX_VGS_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/tfx_vgs.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_TFX_FS_GLSL:
|
||||||
|
path = "/GSdx/res/glsl/tfx_fs.glsl";
|
||||||
|
break;
|
||||||
|
case IDR_TFX_CL:
|
||||||
|
path = "/GSdx/res/tfx.cl";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("LoadResource not implemented for id %d\n", id);
|
printf("LoadResource not implemented for id %d\n", id);
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -83,6 +83,19 @@ IDR_SHADEBOOST_FX RCDATA "res\\shadeboost.fx"
|
||||||
|
|
||||||
IDR_TFX_CL RCDATA "res\\tfx.cl"
|
IDR_TFX_CL RCDATA "res\\tfx.cl"
|
||||||
|
|
||||||
|
IDR_CONVERT_GLSL RCDATA "res\\glsl\\convert.glsl";
|
||||||
|
|
||||||
|
IDR_INTERLACE_GLSL RCDATA "res\\glsl\\interlace.glsl";
|
||||||
|
|
||||||
|
IDR_MERGE_GLSL RCDATA "res\\glsl\\merge.glsl";
|
||||||
|
|
||||||
|
IDR_SHADEBOOST_GLSL RCDATA "res\\glsl\\shadeboost.glsl";
|
||||||
|
|
||||||
|
IDR_COMMON_GLSL RCDATA "res\\glsl\\common_header.glsl";
|
||||||
|
|
||||||
|
IDR_TFX_VGS_GLSL RCDATA "res\\glsl\\tfx_vgs.glsl";
|
||||||
|
|
||||||
|
IDR_TFX_FS_GLSL RCDATA "res\\glsl\\tfx_fs.glsl";
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
../fxaa.fx
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,4 +3,31 @@
|
||||||
<gresource prefix="/GSdx/res/">
|
<gresource prefix="/GSdx/res/">
|
||||||
<file>logo-ogl.bmp</file>
|
<file>logo-ogl.bmp</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/common_header.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/convert.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>fxaa.fx</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/interlace.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/merge.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/shadeboost.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/tfx_vgs.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>glsl/tfx_fs.glsl</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/GSdx/res/">
|
||||||
|
<file>tfx.cl</file>
|
||||||
|
</gresource>
|
||||||
</gresources>
|
</gresources>
|
||||||
|
|
|
@ -151,6 +151,13 @@
|
||||||
#define IDR_TFX_CL 10008
|
#define IDR_TFX_CL 10008
|
||||||
#define IDD_HACKS 10009
|
#define IDD_HACKS 10009
|
||||||
#define IDD_OSD 10010
|
#define IDD_OSD 10010
|
||||||
|
#define IDR_CONVERT_GLSL 10011
|
||||||
|
#define IDR_INTERLACE_GLSL 10012
|
||||||
|
#define IDR_MERGE_GLSL 10013
|
||||||
|
#define IDR_SHADEBOOST_GLSL 10014
|
||||||
|
#define IDR_COMMON_GLSL 10015
|
||||||
|
#define IDR_TFX_VGS_GLSL 10016
|
||||||
|
#define IDR_TFX_FS_GLSL 10017
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
|
|
Loading…
Reference in New Issue