diff --git a/plugins/GSdx/GLLoader.cpp b/plugins/GSdx/GLLoader.cpp index 561c50042d..680f19fab1 100644 --- a/plugins/GSdx/GLLoader.cpp +++ b/plugins/GSdx/GLLoader.cpp @@ -107,6 +107,10 @@ PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv = NUL PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline = NULL; PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog = NULL; PFNGLGETPROGRAMBINARYPROC glGetProgramBinary = NULL; +PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf = NULL; +PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv = NULL; +PFNGLSCISSORINDEXEDPROC glScissorIndexed = NULL; +PFNGLSCISSORINDEXEDVPROC glScissorIndexedv = NULL; // NO GL4.1 PFNGLUSEPROGRAMPROC glUseProgram = NULL; PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL; @@ -352,7 +356,7 @@ namespace GLLoader { bool found_GL_ARB_draw_buffers_blend = false; // Not supported on AMD R600 (80 nm class chip, HD2900). Nvidia requires FERMI. Intel SB bool found_GL_ARB_gpu_shader5 = false; // Require IvyBridge bool found_GL_ARB_shader_image_load_store = false; // Intel IB. Nvidia/AMD miss Mesa implementation. - // FIXME add GL_ARB_viewport_array + bool found_GL_ARB_viewport_array = false; // Intel IB. AMD/NVIDIA DX10 // Mandatory bool found_GL_ARB_texture_storage = false; @@ -443,6 +447,7 @@ namespace GLLoader { if (ext.compare("GL_ARB_gpu_shader5") == 0) found_GL_ARB_gpu_shader5 = true; if (ext.compare("GL_ARB_draw_buffers_blend") == 0) found_GL_ARB_draw_buffers_blend = true; // GL4.1 + if (ext.compare("GL_ARB_viewport_array") == 0) found_GL_ARB_viewport_array = true; if (ext.compare("GL_ARB_separate_shader_objects") == 0) { if (!fglrx_buggy_driver && !mesa_amd_buggy_driver && !intel_buggy_driver) found_GL_ARB_separate_shader_objects = true; else fprintf(stderr, "Buggy driver detected, GL_ARB_separate_shader_objects will be disabled\n" @@ -478,6 +483,7 @@ namespace GLLoader { status &= status_and_override(found_GL_ARB_gpu_shader5, "GL_ARB_gpu_shader5"); status &= status_and_override(found_GL_ARB_draw_buffers_blend, "GL_ARB_draw_buffers_blend"); // GL4.1 + status &= status_and_override(found_GL_ARB_viewport_array, "GL_ARB_viewport_array"); status &= status_and_override(found_GL_ARB_separate_shader_objects, "GL_ARB_separate_shader_objects"); // GL4.2 status &= status_and_override(found_GL_ARB_shader_image_load_store, "GL_ARB_shader_image_load_store"); diff --git a/plugins/GSdx/GLLoader.h b/plugins/GSdx/GLLoader.h index 7ac046ca3a..2d4da9a98c 100644 --- a/plugins/GSdx/GLLoader.h +++ b/plugins/GSdx/GLLoader.h @@ -282,6 +282,10 @@ extern PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv; extern PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline; extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog; extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary; +extern PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf; +extern PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv; +extern PFNGLSCISSORINDEXEDPROC glScissorIndexed; +extern PFNGLSCISSORINDEXEDVPROC glScissorIndexedv; // NO GL4.1 extern PFNGLUSEPROGRAMPROC glUseProgram; extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; diff --git a/plugins/GSdx/GSWnd.cpp b/plugins/GSdx/GSWnd.cpp index c31d8efe04..c6eddb3afb 100644 --- a/plugins/GSdx/GSWnd.cpp +++ b/plugins/GSdx/GSWnd.cpp @@ -105,6 +105,10 @@ void GSWndGL::PopulateGlFunction() *(void**)&(glUseProgramStages) = GetProcAddress("glUseProgramStages", true); *(void**)&(glProgramUniform1i) = GetProcAddress("glProgramUniform1i", true); // but no GL4.2 *(void**)&(glGetProgramBinary) = GetProcAddress("glGetProgramBinary", true); + *(void**)&(glViewportIndexedf) = GetProcAddress("glViewportIndexedf", true); + *(void**)&(glViewportIndexedfv) = GetProcAddress("glViewportIndexedfv", true); + *(void**)&(glScissorIndexed) = GetProcAddress("glScissorIndexed", true); + *(void**)&(glScissorIndexedv) = GetProcAddress("glScissorIndexedv", true); // NO GL4.1 *(void**)&(glDeleteProgram) = GetProcAddress("glDeleteProgram"); *(void**)&(glDeleteShader) = GetProcAddress("glDeleteShader");