summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2011-12-29 00:32:06 -0600
committerRyan Houdek <Sonicadvance1@gmail.com>2011-12-29 00:32:06 -0600
commit8a48b42e4c79e1d55e28c4d2f67ed72e39057a14 (patch)
tree4ba379c351450144df7835a9f6b321267bd3b98d /Source/Core/VideoCommon
parentfbbea9bb9b30b8957f2c9229660b6cbfc801933f (diff)
Add support for Dual source blending to older ATI cards that don't support 420pack but do support GL_ARB_blend_func_extended. This is more proper as well anyways.
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/Src/PixelShaderGen.cpp15
-rw-r--r--Source/Core/VideoCommon/Src/VideoConfig.h1
2 files changed, 13 insertions, 3 deletions
diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
index 277cd2e3e4..55a453c9b6 100644
--- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
+++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
@@ -568,6 +568,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType
if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind)
WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n");
+ if (g_ActiveConfig.backend_info.bSupportsGLSLBlend)
+ WRITE(p, "#extension GL_ARB_blend_func_extended : enable\n");
// Silly differences
WRITE(p, "#define float2 vec2\n");
WRITE(p, "#define float3 vec3\n");
@@ -693,13 +695,20 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType
{
// GLSL doesn't do main arguments
// Once we switch to GLSL 1.3 we will bind a lot of these.
-
if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND)
{
// This won't get hit unless we support GL 3.3
- WRITE(p, " layout(location = 0) out float4 ocol0;\n");
- WRITE(p, " layout(location = 0, index = 1) out float4 ocol1;\n"); // Will be supported later
+ if (g_ActiveConfig.backend_info.bSupportsGLSLBinding)
+ {
+ WRITE(p, " layout(location = 0) out float4 ocol0;\n");
+ WRITE(p, " layout(location = 0, index = 1) out float4 ocol1;\n");
+ }
+ else
+ {
+ WRITE(p, " out float4 ocol0;\n");
+ WRITE(p, " out float4 ocol1;\n");
+ }
}
else
{
diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h
index b8a7168dfe..d51d99d411 100644
--- a/Source/Core/VideoCommon/Src/VideoConfig.h
+++ b/Source/Core/VideoCommon/Src/VideoConfig.h
@@ -170,6 +170,7 @@ struct VideoConfig
bool bSupportsGLSL;
bool bSupportsGLSLBinding;
+ bool bSupportsGLSLBlend;
bool bSupportsGLSLUBO;
bool bSupportsGLSLATTRBind;
bool bSupportsGLSLCache;