gsdx ogl: GL_ARB_clip_control is now mandatory

This commit is contained in:
Gregory Hainaut 2016-04-07 21:57:54 +02:00
parent dfb4b5a339
commit f751f70b1e
9 changed files with 9 additions and 48 deletions

View File

@ -495,7 +495,7 @@ namespace GLLoader {
status &= status_and_override(found_GL_ARB_buffer_storage,"GL_ARB_buffer_storage"); status &= status_and_override(found_GL_ARB_buffer_storage,"GL_ARB_buffer_storage");
status &= status_and_override(found_GL_ARB_clear_texture,"GL_ARB_clear_texture"); status &= status_and_override(found_GL_ARB_clear_texture,"GL_ARB_clear_texture");
// GL4.5 // GL4.5
status &= status_and_override(found_GL_ARB_clip_control, "GL_ARB_clip_control"); status &= status_and_override(found_GL_ARB_clip_control, "GL_ARB_clip_control", true);
status &= status_and_override(found_GL_ARB_direct_state_access, "GL_ARB_direct_state_access"); status &= status_and_override(found_GL_ARB_direct_state_access, "GL_ARB_direct_state_access");
status &= status_and_override(found_GL_ARB_texture_barrier, "GL_ARB_texture_barrier", true); status &= status_and_override(found_GL_ARB_texture_barrier, "GL_ARB_texture_barrier", true);

View File

@ -363,7 +363,6 @@ namespace GLLoader {
extern bool found_GL_ARB_shader_image_load_store; extern bool found_GL_ARB_shader_image_load_store;
extern bool found_GL_ARB_clear_texture; extern bool found_GL_ARB_clear_texture;
extern bool found_GL_ARB_buffer_storage; extern bool found_GL_ARB_buffer_storage;
extern bool found_GL_ARB_clip_control;
extern bool found_GL_ARB_direct_state_access; extern bool found_GL_ARB_direct_state_access;
extern bool found_GL_EXT_texture_filter_anisotropic; extern bool found_GL_EXT_texture_filter_anisotropic;
} }

View File

@ -376,10 +376,8 @@ bool GSDeviceOGL::Create(GSWnd* wnd)
// because of -1 we loose lot of precision for small GS value // because of -1 we loose lot of precision for small GS value
// This extension allow FS depth to range from -1 to 1. So // This extension allow FS depth to range from -1 to 1. So
// gl_position.z could range from [0, 1] // gl_position.z could range from [0, 1]
if (GLLoader::found_GL_ARB_clip_control) { // Change depth convention
// Change depth convention glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
}
// **************************************************************** // ****************************************************************
// HW renderer shader // HW renderer shader
@ -687,10 +685,9 @@ void GSDeviceOGL::Barrier(GLbitfield b)
} }
/* Note: must be here because tfx_glsl is static */ /* Note: must be here because tfx_glsl is static */
GLuint GSDeviceOGL::CompileVS(VSSelector sel, int logz) GLuint GSDeviceOGL::CompileVS(VSSelector sel)
{ {
std::string macro = format("#define VS_BPPZ %d\n", sel.bppz) std::string macro = format("#define VS_BPPZ %d\n", sel.bppz)
+ format("#define VS_LOGZ %d\n", logz)
+ format("#define VS_WILDHACK %d\n", sel.wildhack) + format("#define VS_WILDHACK %d\n", sel.wildhack)
; ;

View File

@ -527,7 +527,7 @@ class GSDeviceOGL final : public GSDevice
void CreateTextureFX(); void CreateTextureFX();
GLuint CompileVS(VSSelector sel, int logz); GLuint CompileVS(VSSelector sel);
GLuint CompileGS(GSSelector sel); GLuint CompileGS(GSSelector sel);
GLuint CompilePS(PSSelector sel); GLuint CompilePS(PSSelector sel);
GLuint CreateSampler(bool bilinear, bool tau, bool tav, bool aniso = false); GLuint CreateSampler(bool bilinear, bool tau, bool tav, bool aniso = false);

View File

@ -210,9 +210,6 @@ std::string GSShaderOGL::GenGlslHeader(const std::string& entry, GLenum type, co
} else { } else {
header += "#define DISABLE_GL42_image\n"; header += "#define DISABLE_GL42_image\n";
} }
if (GLLoader::found_GL_ARB_clip_control) {
header += "#define ZERO_TO_ONE_DEPTH\n";
}
// Stupid GL implementation (can't use GL_ES) // Stupid GL implementation (can't use GL_ES)
// AMD/nvidia define it to 0 // AMD/nvidia define it to 0

View File

@ -54,7 +54,7 @@ void GSDeviceOGL::CreateTextureFX()
for (uint32 key = 0; key < countof(m_vs); key++) { for (uint32 key = 0; key < countof(m_vs); key++) {
VSSelector sel(key); VSSelector sel(key);
m_vs[key] = CompileVS(sel, !GLLoader::found_GL_ARB_clip_control); m_vs[key] = CompileVS(sel);
} }
GL_POP(); GL_POP();

View File

@ -168,7 +168,7 @@ void GSWndGL::PopulateGlFunction()
GL_EXT_LOAD_OPT(glCreateSamplers); GL_EXT_LOAD_OPT(glCreateSamplers);
GL_EXT_LOAD_OPT(glCreateProgramPipelines); GL_EXT_LOAD_OPT(glCreateProgramPipelines);
GL_EXT_LOAD_OPT(glClipControl); GL_EXT_LOAD(glClipControl);
GL_EXT_LOAD(glTextureBarrier); GL_EXT_LOAD(glTextureBarrier);
if (glCreateFramebuffers == NULL) { if (glCreateFramebuffers == NULL) {

View File

@ -60,11 +60,7 @@ out gl_PerVertex {
#endif #endif
}; };
#ifdef ZERO_TO_ONE_DEPTH
const float exp_min32 = exp2(-32.0f); const float exp_min32 = exp2(-32.0f);
#else
const float exp_min31 = exp2(-31.0f);
#endif
void texture_coord() void texture_coord()
{ {
@ -99,19 +95,7 @@ void vs_main()
p.xy = vec2(i_p) - vec2(0.05f, 0.05f); p.xy = vec2(i_p) - vec2(0.05f, 0.05f);
p.xy = p.xy * VertexScale - VertexOffset; p.xy = p.xy * VertexScale - VertexOffset;
p.w = 1.0f; p.w = 1.0f;
#ifdef ZERO_TO_ONE_DEPTH p.z = float(z) * exp_min32;
if(VS_LOGZ == 1) {
p.z = max(0.0f, log2(float(z))) / 32.0f;
} else {
p.z = float(z) * exp_min32;
}
#else
if(VS_LOGZ == 1) {
p.z = max(0.0f, log2(float(z))) / 31.0f - 1.0f;
} else {
p.z = float(z) * exp_min31 - 1.0f;
}
#endif
gl_Position = p; gl_Position = p;

View File

@ -685,11 +685,7 @@ static const char* tfx_vgs_glsl =
"#endif\n" "#endif\n"
"};\n" "};\n"
"\n" "\n"
"#ifdef ZERO_TO_ONE_DEPTH\n"
"const float exp_min32 = exp2(-32.0f);\n" "const float exp_min32 = exp2(-32.0f);\n"
"#else\n"
"const float exp_min31 = exp2(-31.0f);\n"
"#endif\n"
"\n" "\n"
"void texture_coord()\n" "void texture_coord()\n"
"{\n" "{\n"
@ -724,19 +720,7 @@ static const char* tfx_vgs_glsl =
" p.xy = vec2(i_p) - vec2(0.05f, 0.05f);\n" " p.xy = vec2(i_p) - vec2(0.05f, 0.05f);\n"
" p.xy = p.xy * VertexScale - VertexOffset;\n" " p.xy = p.xy * VertexScale - VertexOffset;\n"
" p.w = 1.0f;\n" " p.w = 1.0f;\n"
"#ifdef ZERO_TO_ONE_DEPTH\n" " p.z = float(z) * exp_min32;\n"
" if(VS_LOGZ == 1) {\n"
" p.z = max(0.0f, log2(float(z))) / 32.0f;\n"
" } else {\n"
" p.z = float(z) * exp_min32;\n"
" }\n"
"#else\n"
" if(VS_LOGZ == 1) {\n"
" p.z = max(0.0f, log2(float(z))) / 31.0f - 1.0f;\n"
" } else {\n"
" p.z = float(z) * exp_min31 - 1.0f;\n"
" }\n"
"#endif\n"
"\n" "\n"
" gl_Position = p;\n" " gl_Position = p;\n"
"\n" "\n"