mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
UBO works for Pixel Shaders if Binding for UBO is zero, otherwise fails. Probably why Vertex shader UBO is failing. Too tired to investigate right now.
This commit is contained in:

committed by
Sonicadvance1

parent
904adb9e3d
commit
1f75ee49bf
@ -63,26 +63,49 @@ void CreateRgbToYuyvProgram()
|
||||
// Output is BGRA because that is slightly faster than RGBA.
|
||||
if(g_ActiveConfig.bUseGLSL)
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 120\n"
|
||||
"#ifdef GL_ARB_texture_rectangle\n"
|
||||
"#extension GL_ARB_texture_rectangle : require\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec2 uv1 = vec2(gl_TexCoord[0].x + 1.0f, gl_TexCoord[0].y);\n"
|
||||
" vec3 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgb;\n"
|
||||
" vec3 c1 = texture2DRect(samp0, uv1).rgb;\n"
|
||||
" vec3 y_const = vec3(0.257f,0.504f,0.098f);\n"
|
||||
" vec3 u_const = vec3(-0.148f,-0.291f,0.439f);\n"
|
||||
" vec3 v_const = vec3(0.439f,-0.368f,-0.071f);\n"
|
||||
" vec4 const3 = vec4(0.0625f,0.5f,0.0625f,0.5f);\n"
|
||||
" vec3 c01 = (c0 + c1) * 0.5f;\n"
|
||||
" gl_FragData[0] = vec4(dot(c1,y_const),dot(c01,u_const),dot(c0,y_const),dot(c01, v_const)) + const3;\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_rgbToYuyvProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create RGB to YUYV fragment program.");
|
||||
if(g_ActiveConfig.backend_info.bSupportsGLSLBinding)
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 330 compatibility\n"
|
||||
"#extension GL_ARB_texture_rectangle : enable\n"
|
||||
"#extension GL_ARB_shading_language_420pack : enable\n"
|
||||
"layout(binding = 0) uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec2 uv1 = vec2(gl_TexCoord[0].x + 1.0f, gl_TexCoord[0].y);\n"
|
||||
" vec3 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgb;\n"
|
||||
" vec3 c1 = texture2DRect(samp0, uv1).rgb;\n"
|
||||
" vec3 y_const = vec3(0.257f,0.504f,0.098f);\n"
|
||||
" vec3 u_const = vec3(-0.148f,-0.291f,0.439f);\n"
|
||||
" vec3 v_const = vec3(0.439f,-0.368f,-0.071f);\n"
|
||||
" vec4 const3 = vec4(0.0625f,0.5f,0.0625f,0.5f);\n"
|
||||
" vec3 c01 = (c0 + c1) * 0.5f;\n"
|
||||
" gl_FragData[0] = vec4(dot(c1,y_const),dot(c01,u_const),dot(c0,y_const),dot(c01, v_const)) + const3;\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_rgbToYuyvProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create RGB to YUYV fragment program.");
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 120\n"
|
||||
"#extension GL_ARB_texture_rectangle : enable\n"
|
||||
"uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec2 uv1 = vec2(gl_TexCoord[0].x + 1.0f, gl_TexCoord[0].y);\n"
|
||||
" vec3 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgb;\n"
|
||||
" vec3 c1 = texture2DRect(samp0, uv1).rgb;\n"
|
||||
" vec3 y_const = vec3(0.257f,0.504f,0.098f);\n"
|
||||
" vec3 u_const = vec3(-0.148f,-0.291f,0.439f);\n"
|
||||
" vec3 v_const = vec3(0.439f,-0.368f,-0.071f);\n"
|
||||
" vec4 const3 = vec4(0.0625f,0.5f,0.0625f,0.5f);\n"
|
||||
" vec3 c01 = (c0 + c1) * 0.5f;\n"
|
||||
" gl_FragData[0] = vec4(dot(c1,y_const),dot(c01,u_const),dot(c0,y_const),dot(c01, v_const)) + const3;\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_rgbToYuyvProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create RGB to YUYV fragment program.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -111,29 +134,57 @@ void CreateYuyvToRgbProgram()
|
||||
{
|
||||
if(g_ActiveConfig.bUseGLSL)
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 120\n"
|
||||
"#ifdef GL_ARB_texture_rectangle\n"
|
||||
"#extension GL_ARB_texture_rectangle : require\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec4 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgba;\n"
|
||||
if(g_ActiveConfig.backend_info.bSupportsGLSLBinding)
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 330 compatibility\n"
|
||||
"#extension GL_ARB_texture_rectangle : enable\n"
|
||||
"#extension GL_ARB_shading_language_420pack : enable\n"
|
||||
"layout(binding = 0) uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec4 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgba;\n"
|
||||
|
||||
" float f = step(0.5, fract(gl_TexCoord[0].x));\n"
|
||||
" float y = mix(c0.b, c0.r, f);\n"
|
||||
" float yComp = 1.164f * (y - 0.0625f);\n"
|
||||
" float uComp = c0.g - 0.5f;\n"
|
||||
" float vComp = c0.a - 0.5f;\n"
|
||||
" float f = step(0.5, fract(gl_TexCoord[0].x));\n"
|
||||
" float y = mix(c0.b, c0.r, f);\n"
|
||||
" float yComp = 1.164f * (y - 0.0625f);\n"
|
||||
" float uComp = c0.g - 0.5f;\n"
|
||||
" float vComp = c0.a - 0.5f;\n"
|
||||
|
||||
" gl_FragData[0] = vec4(yComp + (1.596f * vComp),\n"
|
||||
" yComp - (0.813f * vComp) - (0.391f * uComp),\n"
|
||||
" yComp + (2.018f * uComp),\n"
|
||||
" 1.0f);\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_yuyvToRgbProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program.");
|
||||
" gl_FragData[0] = vec4(yComp + (1.596f * vComp),\n"
|
||||
" yComp - (0.813f * vComp) - (0.391f * uComp),\n"
|
||||
" yComp + (2.018f * uComp),\n"
|
||||
" 1.0f);\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_yuyvToRgbProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program.");
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *FProgram =
|
||||
"#version 120\n"
|
||||
"#ifdef GL_ARB_texture_rectangle\n"
|
||||
"#extension GL_ARB_texture_rectangle : require\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2DRect samp0;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec4 c0 = texture2DRect(samp0, gl_TexCoord[0].xy).rgba;\n"
|
||||
|
||||
" float f = step(0.5, fract(gl_TexCoord[0].x));\n"
|
||||
" float y = mix(c0.b, c0.r, f);\n"
|
||||
" float yComp = 1.164f * (y - 0.0625f);\n"
|
||||
" float uComp = c0.g - 0.5f;\n"
|
||||
" float vComp = c0.a - 0.5f;\n"
|
||||
|
||||
" gl_FragData[0] = vec4(yComp + (1.596f * vComp),\n"
|
||||
" yComp - (0.813f * vComp) - (0.391f * uComp),\n"
|
||||
" yComp + (2.018f * uComp),\n"
|
||||
" 1.0f);\n"
|
||||
"}\n";
|
||||
if (!PixelShaderCache::CompilePixelShader(s_yuyvToRgbProgram, FProgram))
|
||||
ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user