gsdx ogl: don't use per buffer blending

It increases the number of state that driver must handle.
This commit is contained in:
Gregory Hainaut 2017-01-20 18:20:51 +01:00
parent 3400d7eecc
commit 81adc3ef4d
3 changed files with 2 additions and 24 deletions

View File

@ -169,16 +169,6 @@ PFNGLTEXTUREBARRIERPROC glTextureBarrier = NUL
PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage = NULL; PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage = NULL;
namespace ReplaceGL { namespace ReplaceGL {
void APIENTRY BlendEquationSeparateiARB(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
{
glBlendEquationSeparate(modeRGB, modeAlpha);
}
void APIENTRY BlendFuncSeparateiARB(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
void APIENTRY ScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) void APIENTRY ScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height)
{ {
glScissor(left, bottom, width, height); glScissor(left, bottom, width, height);
@ -206,7 +196,6 @@ namespace GLLoader {
bool found_GL_ARB_clear_texture = false; // Miss AMD Mesa (otherwise seems SW) bool found_GL_ARB_clear_texture = false; // Miss AMD Mesa (otherwise seems SW)
bool found_GL_ARB_get_texture_sub_image = false; // Not yet used bool found_GL_ARB_get_texture_sub_image = false; // Not yet used
// DX11 GPU // DX11 GPU
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_gpu_shader5 = false; // Require IvyBridge
bool found_GL_ARB_shader_image_load_store = false; // Intel IB. Nvidia/AMD miss Mesa implementation. bool found_GL_ARB_shader_image_load_store = false; // Intel IB. Nvidia/AMD miss Mesa implementation.
bool found_GL_ARB_viewport_array = false; // Intel IB. AMD/NVIDIA DX10 bool found_GL_ARB_viewport_array = false; // Intel IB. AMD/NVIDIA DX10
@ -313,7 +302,6 @@ namespace GLLoader {
if (ext.compare("GL_NVX_gpu_memory_info") == 0) found_GL_NVX_gpu_memory_info = true; if (ext.compare("GL_NVX_gpu_memory_info") == 0) found_GL_NVX_gpu_memory_info = true;
// GL4.0 // GL4.0
if (ext.compare("GL_ARB_gpu_shader5") == 0) found_GL_ARB_gpu_shader5 = true; 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 // GL4.1
if (ext.compare("GL_ARB_viewport_array") == 0) found_GL_ARB_viewport_array = true; if (ext.compare("GL_ARB_viewport_array") == 0) found_GL_ARB_viewport_array = true;
if (ext.compare("GL_ARB_separate_shader_objects") == 0) found_GL_ARB_separate_shader_objects = true; if (ext.compare("GL_ARB_separate_shader_objects") == 0) found_GL_ARB_separate_shader_objects = true;
@ -344,7 +332,6 @@ namespace GLLoader {
status &= status_and_override(found_GL_EXT_texture_filter_anisotropic, "GL_EXT_texture_filter_anisotropic"); status &= status_and_override(found_GL_EXT_texture_filter_anisotropic, "GL_EXT_texture_filter_anisotropic");
// GL4.0 // GL4.0
status &= status_and_override(found_GL_ARB_gpu_shader5, "GL_ARB_gpu_shader5"); 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 // GL4.1
status &= status_and_override(found_GL_ARB_viewport_array, "GL_ARB_viewport_array"); 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", true); status &= status_and_override(found_GL_ARB_separate_shader_objects, "GL_ARB_separate_shader_objects", true);
@ -378,12 +365,6 @@ namespace GLLoader {
glViewportIndexedf = ReplaceGL::ViewportIndexedf; glViewportIndexedf = ReplaceGL::ViewportIndexedf;
} }
if (!found_GL_ARB_draw_buffers_blend) {
fprintf(stderr, "GL_ARB_draw_buffers_blend: not supported ! function pointer will be replaced\n");
glBlendFuncSeparateiARB = ReplaceGL::BlendFuncSeparateiARB;
glBlendEquationSeparateiARB = ReplaceGL::BlendEquationSeparateiARB;
}
fprintf(stdout, "\n"); fprintf(stdout, "\n");
return status; return status;

View File

@ -1767,13 +1767,13 @@ void GSDeviceOGL::OMSetBlendState(uint8 blend_index, uint8 blend_factor, bool is
if (GLState::eq_RGB != b.op) { if (GLState::eq_RGB != b.op) {
GLState::eq_RGB = b.op; GLState::eq_RGB = b.op;
glBlendEquationSeparateiARB(0, b.op, GL_FUNC_ADD); glBlendEquationSeparate(b.op, GL_FUNC_ADD);
} }
if (GLState::f_sRGB != b.src || GLState::f_dRGB != b.dst) { if (GLState::f_sRGB != b.src || GLState::f_dRGB != b.dst) {
GLState::f_sRGB = b.src; GLState::f_sRGB = b.src;
GLState::f_dRGB = b.dst; GLState::f_dRGB = b.dst;
glBlendFuncSeparateiARB(0, b.src, b.dst, GL_ONE, GL_ZERO); glBlendFuncSeparate(b.src, b.dst, GL_ONE, GL_ZERO);
} }
} else { } else {

View File

@ -95,9 +95,6 @@ void GSWndGL::PopulateGlFunction()
GL_EXT_LOAD_OPT(glGetInteger64v); GL_EXT_LOAD_OPT(glGetInteger64v);
GL_EXT_LOAD_OPT(glCreateQueries); GL_EXT_LOAD_OPT(glCreateQueries);
GL_EXT_LOAD_OPT(glDeleteQueries); GL_EXT_LOAD_OPT(glDeleteQueries);
// GL4.0
GL_EXT_LOAD_OPT(glBlendEquationSeparateiARB);
GL_EXT_LOAD_OPT(glBlendFuncSeparateiARB);
// GL4.1 // GL4.1
GL_EXT_LOAD(glCreateShaderProgramv); GL_EXT_LOAD(glCreateShaderProgramv);
GL_EXT_LOAD(glBindProgramPipeline); GL_EXT_LOAD(glBindProgramPipeline);