From b20176b74f28c05ec62ac8bbaeb80ff0ae6bb119 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 30 Nov 2011 21:00:21 -0600 Subject: [PATCH 001/625] Add in GLSL setting again. PS and VS making. Untested and won't work for now. Add in program shader cache files. Readd NativeVertexFormat stuffs. Add in PS and VS cache things. SetShaders in places. Fixed EFB cache index computations in OpenGL renderer. The previous computation was very likely to go out of array bounds, which could result in crashes on EFB access. Also, the cache size was rounded down instead of up. This is a problem since EFB_HEIGHT (528) is not a multiple of EFB_CACHE_RECT_SIZE (64). --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 188 ++++-- Source/Core/VideoCommon/Src/PixelShaderGen.h | 13 + .../Core/VideoCommon/Src/VertexShaderGen.cpp | 191 ++++-- Source/Core/VideoCommon/Src/VertexShaderGen.h | 11 +- Source/Core/VideoCommon/Src/VideoCommon.h | 6 + Source/Core/VideoCommon/Src/VideoConfig.cpp | 4 + Source/Core/VideoCommon/Src/VideoConfig.h | 2 + Source/Plugins/Plugin_VideoDX11/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoDX9/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 1 + .../Src/NativeVertexFormat.cpp | 18 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 578 ++++++++++-------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 10 + .../Src/ProgramShaderCache.cpp | 150 +++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 108 ++++ Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 28 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 27 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 414 ++++++++----- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 10 + Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 1 + 20 files changed, 1243 insertions(+), 519 deletions(-) create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 1726855d54..4cdf562182 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -500,6 +500,15 @@ static void BuildSwapModeTable() } } +const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) +{ + if(ApiType == API_GLSL) + return ""; // Nothing to do here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; +} + const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { setlocale(LC_NUMERIC, "C"); // Reset locale for compilation @@ -524,6 +533,21 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } } DepthTextureEnable = (bpmem.ztex2.op != ZTEXTURE_DISABLE && !bpmem.zcontrol.zcomploc && bpmem.zmode.testenable && bpmem.zmode.updateenable) || g_ActiveConfig.bEnablePerPixelDepth ; + + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + } // Declare samplers if(ApiType != API_D3D11) @@ -538,7 +562,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType bool bfirst = true; for (int i = 0; i < 8; ++i) { - WRITE(p, "%s samp%d : register(s%d)", bfirst?"":",", i, i); + WRITE(p, "%s samp%d %s", bfirst?"":",", i, WriteRegister(ApiType, "s", i)); bfirst = false; } WRITE(p, ";\n"); @@ -555,67 +579,107 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } WRITE(p, "\n"); - - WRITE(p, "uniform float4 "I_COLORS"[4] : register(c%d);\n", C_COLORS); - WRITE(p, "uniform float4 "I_KCOLORS"[4] : register(c%d);\n", C_KCOLORS); - WRITE(p, "uniform float4 "I_ALPHA"[1] : register(c%d);\n", C_ALPHA); - WRITE(p, "uniform float4 "I_TEXDIMS"[8] : register(c%d);\n", C_TEXDIMS); - WRITE(p, "uniform float4 "I_ZBIAS"[2] : register(c%d);\n", C_ZBIAS); - WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] : register(c%d);\n", C_INDTEXSCALE); - WRITE(p, "uniform float4 "I_INDTEXMTX"[6] : register(c%d);\n", C_INDTEXMTX); - WRITE(p, "uniform float4 "I_FOG"[3] : register(c%d);\n", C_FOG); + + WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p,"typedef struct { float4 col; float4 cosatt; float4 distatt; float4 pos; float4 dir; } Light;\n"); - WRITE(p,"typedef struct { Light lights[8]; } s_"I_PLIGHTS";\n"); - WRITE(p, "uniform s_"I_PLIGHTS" "I_PLIGHTS" : register(c%d);\n", C_PLIGHTS); - WRITE(p, "typedef struct { float4 C0, C1, C2, C3; } s_"I_PMATERIALS";\n"); - WRITE(p, "uniform s_"I_PMATERIALS" "I_PMATERIALS" : register(c%d);\n", C_PMATERIALS); + WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); } - WRITE(p, "void main(\n"); - if(ApiType != API_D3D11) - { - WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", - DepthTextureEnable ? "\n out float depth : DEPTH," : "", - ApiType & API_OPENGL ? "WPOS" : ApiType & API_D3D9_SM20 ? "POSITION" : "VPOS"); - } - else - { - WRITE(p, " out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "", - DepthTextureEnable ? "\n out float depth : SV_Depth," : ""); - } - - WRITE(p, " in float4 colors_0 : COLOR0,\n"); - WRITE(p, " in float4 colors_1 : COLOR1"); - - // compute window position if needed because binding semantic WPOS is not widely supported - if (numTexgen < 7) - { - for (int i = 0; i < numTexgen; ++i) - WRITE(p, ",\n in float3 uv%d : TEXCOORD%d", i, i); - WRITE(p, ",\n in float4 clipPos : TEXCOORD%d", numTexgen); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, ",\n in float4 Normal : TEXCOORD%d", numTexgen + 1); - } - else - { - // wpos is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if(ApiType != API_GLSL) + { + WRITE(p, "void main(\n"); + if(ApiType != API_D3D11) { - for (int i = 0; i < 8; ++i) - WRITE(p, ",\n in float4 uv%d : TEXCOORD%d", i, i); + WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", + DepthTextureEnable ? "\n out float depth : DEPTH," : "", + ApiType & API_OPENGL ? "WPOS" : ApiType & API_D3D9_SM20 ? "POSITION" : "VPOS"); } else { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, ",\n in float%d uv%d : TEXCOORD%d", i < 4 ? 4 : 3 , i, i); + WRITE(p, " out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "", + DepthTextureEnable ? "\n out float depth : SV_Depth," : ""); } + + WRITE(p, " in float4 colors_0 : COLOR0,\n"); + WRITE(p, " in float4 colors_1 : COLOR1"); + + // compute window position if needed because binding semantic WPOS is not widely supported + if (numTexgen < 7) + { + for (int i = 0; i < numTexgen; ++i) + WRITE(p, ",\n in float3 uv%d : TEXCOORD%d", i, i); + WRITE(p, ",\n in float4 clipPos : TEXCOORD%d", numTexgen); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, ",\n in float4 Normal : TEXCOORD%d", numTexgen + 1); + } + else + { + // wpos is in w of first 4 texcoords + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, ",\n in float4 uv%d : TEXCOORD%d", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, ",\n in float%d uv%d : TEXCOORD%d", i < 4 ? 4 : 3 , i, i); + } + } + WRITE(p, " ) {\n"); + } + else + { + // GLSL doesn't do main arguments + // Once we switch to GLSL 1.3 we will bind a lot of these. + + WRITE(p, " float4 ocol0;\n"); + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, " float4 ocol1;\n"); // Will be supported later + if(DepthTextureEnable) + WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? + WRITE(p, " float4 rawpos = gl_FragCoord;\n"); + + WRITE(p, " float4 colors_0 = gl_Color;\n"); + WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); + + // compute window position if needed because binding semantic WPOS is not widely supported + if (numTexgen < 7) + { + for (int i = 0; i < numTexgen; ++i) + WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); + WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); + } + else + { + // wpos is in w of first 4 texcoords + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? ".xyz" : ""); + } + } + WRITE(p, "void main()\n{\n"); } - WRITE(p, " ) {\n"); char* pmainstart = p; int Pretest = AlphaPreTest(); @@ -624,8 +688,10 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (!Pretest) { // alpha test will always fail, so restart the shader and just make it an empty function - WRITE(p, "ocol0 = 0;\n"); + WRITE(p, "ocol0 = float4(0);\n"); WRITE(p, "discard;\n"); + if(ApiType == API_GLSL) + WRITE(p, "gl_FragData[0] = ocol0;\n"); if(ApiType != API_D3D11) WRITE(p, "return;\n"); } @@ -733,6 +799,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "depth = 1.f;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "ocol1 = 0;\n"); + if(ApiType == API_GLSL) + { + // Once we switch to GLSL 1.3 and bind variables, we won't need to do this + WRITE(p, "gl_FragData[0] = ocol0;\n"); + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + ; // TODO: Will do this later + } WRITE(p, "discard;\n"); if(ApiType != API_D3D11) WRITE(p, "return;\n"); @@ -781,6 +856,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // ...and the alpha from ocol0 will be written to the framebuffer. WRITE(p, " ocol0.a = "I_ALPHA"[0].a;\n"); } + + if(ApiType == API_GLSL) + { + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragData[0] = ocol0;\n"); + } } WRITE(p, "}\n"); if (text[sizeof(text) - 1] != 0x7C) @@ -1242,4 +1324,4 @@ static void WriteFog(char *&p) WRITE(p, " prev.rgb = lerp(prev.rgb,"I_FOG"[0].rgb,fog);\n"); -} \ No newline at end of file +} diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 31242a916e..589fc927bc 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -47,6 +47,19 @@ #define PIXELSHADERUID_MAX_VALUES 70 #define PIXELSHADERUID_MAX_VALUES_SAFE 120 +// Annoying sure, can be removed once we get up to GLSL ~1.3 +const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; + // DO NOT make anything in this class virtual. template class _PIXELSHADERUID diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 5076f9f044..fcdc0e8976 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -130,7 +130,7 @@ static char text[16384]; #define WRITE p+=sprintf -char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE api_type) +char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) { WRITE(p, "struct VS_OUTPUT {\n"); WRITE(p, " float4 pos : POSITION;\n"); @@ -161,7 +161,10 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE api_type) return p; } -const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) +extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); + + +const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { setlocale(LC_NUMERIC, "C"); // Reset locale for compilation text[sizeof(text) - 1] = 0x7C; // canary @@ -169,7 +172,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) _assert_(bpmem.genMode.numtexgens == xfregs.numTexGen.numTexGens); _assert_(bpmem.genMode.numcolchans == xfregs.numChan.numColorChans); - bool is_d3d = (api_type & API_D3D9 || api_type == API_D3D11); + bool is_d3d = (ApiType & API_D3D9 || ApiType == API_D3D11); u32 lightMask = 0; if (xfregs.numChan.numColorChans > 0) lightMask |= xfregs.color[0].GetFullLightMask() | xfregs.alpha[0].GetFullLightMask(); @@ -178,78 +181,109 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) char *p = text; WRITE(p, "//Vertex Shader: comp:%x, \n", components); - WRITE(p, "typedef struct { float4 T0, T1, T2; float4 N0, N1, N2; } s_"I_POSNORMALMATRIX";\n" - "typedef struct { float4 t; } FLT4;\n" - "typedef struct { FLT4 T[24]; } s_"I_TEXMATRICES";\n" - "typedef struct { FLT4 T[64]; } s_"I_TRANSFORMMATRICES";\n" - "typedef struct { FLT4 T[32]; } s_"I_NORMALMATRICES";\n" - "typedef struct { FLT4 T[64]; } s_"I_POSTTRANSFORMMATRICES";\n" - "typedef struct { float4 col; float4 cosatt; float4 distatt; float4 pos; float4 dir; } Light;\n" - "typedef struct { Light lights[8]; } s_"I_LIGHTS";\n" - "typedef struct { float4 C0, C1, C2, C3; } s_"I_MATERIALS";\n" - "typedef struct { float4 T0, T1, T2, T3; } s_"I_PROJECTION";\n" - ); - - p = GenerateVSOutputStruct(p, components, api_type); - - // uniforms - - WRITE(p, "uniform s_"I_TRANSFORMMATRICES" "I_TRANSFORMMATRICES" : register(c%d);\n", C_TRANSFORMMATRICES); - WRITE(p, "uniform s_"I_TEXMATRICES" "I_TEXMATRICES" : register(c%d);\n", C_TEXMATRICES); // also using tex matrices - WRITE(p, "uniform s_"I_NORMALMATRICES" "I_NORMALMATRICES" : register(c%d);\n", C_NORMALMATRICES); - WRITE(p, "uniform s_"I_POSNORMALMATRIX" "I_POSNORMALMATRIX" : register(c%d);\n", C_POSNORMALMATRIX); - WRITE(p, "uniform s_"I_POSTTRANSFORMMATRICES" "I_POSTTRANSFORMMATRICES" : register(c%d);\n", C_POSTTRANSFORMMATRICES); - WRITE(p, "uniform s_"I_LIGHTS" "I_LIGHTS" : register(c%d);\n", C_LIGHTS); - WRITE(p, "uniform s_"I_MATERIALS" "I_MATERIALS" : register(c%d);\n", C_MATERIALS); - WRITE(p, "uniform s_"I_PROJECTION" "I_PROJECTION" : register(c%d);\n", C_PROJECTION); - WRITE(p, "uniform float4 "I_DEPTHPARAMS" : register(c%d);\n", C_DEPTHPARAMS); - - WRITE(p, "VS_OUTPUT main(\n"); - // inputs - if (components & VB_HAS_NRM0) - WRITE(p, " float3 rawnorm0 : NORMAL0,\n"); - if (components & VB_HAS_NRM1) { - if (is_d3d) - WRITE(p, " float3 rawnorm1 : NORMAL1,\n"); - else - WRITE(p, " float3 rawnorm1 : ATTR%d,\n", SHADER_NORM1_ATTRIB); + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } - if (components & VB_HAS_NRM2) { - if (is_d3d) - WRITE(p, " float3 rawnorm2 : NORMAL2,\n"); - else - WRITE(p, " float3 rawnorm2 : ATTR%d,\n", SHADER_NORM2_ATTRIB); - } - if (components & VB_HAS_COL0) - WRITE(p, " float4 color0 : COLOR0,\n"); - if (components & VB_HAS_COL1) - WRITE(p, " float4 color1 : COLOR1,\n"); - for (int i = 0; i < 8; ++i) { - u32 hastexmtx = (components & (VB_HAS_TEXMTXIDX0< class _VERTEXSHADERUID { diff --git a/Source/Core/VideoCommon/Src/VideoCommon.h b/Source/Core/VideoCommon/Src/VideoCommon.h index 9f6dd59cd3..f87cb7e9b1 100644 --- a/Source/Core/VideoCommon/Src/VideoCommon.h +++ b/Source/Core/VideoCommon/Src/VideoCommon.h @@ -152,5 +152,11 @@ inline unsigned int GetPow2(unsigned int val) ++ret; return ret; } +struct s_svar +{ + const char *name; + const unsigned int reg; + const unsigned int size; +}; #endif // _VIDEOCOMMON_H diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index b6ba76f45e..57685dec09 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -151,6 +151,7 @@ void VideoConfig::GameIniLoad(const char *ini_file) iniFile.GetIfExists("Video_Settings", "DisableFog", &bDisableFog); iniFile.GetIfExists("Video_Settings", "EnableOpenCL", &bEnableOpenCL); iniFile.GetIfExists("Video_Settings", "OMPDecoder", &bOMPDecoder); + iniFile.GetIfExists("Video_Settings", "UseGLSL", &bUseGLSL); iniFile.GetIfExists("Video_Enhancements", "ForceFiltering", &bForceFiltering); iniFile.GetIfExists("Video_Enhancements", "MaxAnisotropy", &iMaxAnisotropy); // NOTE - this is x in (1 << x) @@ -183,6 +184,7 @@ void VideoConfig::VerifyValidity() if (!backend_info.bSupports3DVision) b3DVision = false; if (!backend_info.bSupportsFormatReinterpretation) bEFBEmulateFormatChanges = false; if (!backend_info.bSupportsPixelLighting) bEnablePixelLighting = false; + if (!backend_info.bSupportsGLSL) bUseGLSL = false; } void VideoConfig::Save(const char *ini_file) @@ -230,6 +232,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Settings", "DisableTexturing", bDisableTexturing); iniFile.Set("Settings", "DstAlphaPass", bDstAlphaPass); iniFile.Set("Settings", "DisableFog", bDisableFog); + iniFile.Set("Settings", "bUseGLSL", bUseGLSL); iniFile.Set("Settings", "EnableOpenCL", bEnableOpenCL); iniFile.Set("Settings", "OMPDecoder", bOMPDecoder); @@ -296,6 +299,7 @@ void VideoConfig::GameIniSave(const char* default_ini, const char* game_ini) SET_IF_DIFFERS("Video_Settings", "DisableFog", bDisableFog); SET_IF_DIFFERS("Video_Settings", "EnableOpenCL", bEnableOpenCL); SET_IF_DIFFERS("Video_Settings", "OMPDecoder", bOMPDecoder); + SET_IF_DIFFERS("Video_Settings", "UseGLSL", bUseGLSL); SET_IF_DIFFERS("Video_Enhancements", "ForceFiltering", bForceFiltering); SET_IF_DIFFERS("Video_Enhancements", "MaxAnisotropy", iMaxAnisotropy); // NOTE - this is x in (1 << x) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 3bd833cc73..63df7e0ded 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -106,6 +106,7 @@ struct VideoConfig bool bDisableTexturing; bool bDstAlphaPass; bool bDisableFog; + bool bUseGLSL; // Utility bool bDumpTextures; @@ -166,6 +167,7 @@ struct VideoConfig bool bSupportsDualSourceBlend; // only supported by D3D11 and OpenGL bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; + bool bSupportsGLSL; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp index ba93890e2b..dc494682d8 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp @@ -94,6 +94,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = true; g_Config.backend_info.bSupportsFormatReinterpretation = true; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsGLSL = false; IDXGIFactory* factory; IDXGIAdapter* ad; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp index 1d733f7dc3..1a98fb5c44 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp @@ -96,6 +96,7 @@ void InitBackendInfo() g_Config.backend_info.bSupports3DVision = true; g_Config.backend_info.bSupportsDualSourceBlend = false; g_Config.backend_info.bSupportsFormatReinterpretation = true; + g_Config.backend_info.bSupportsGLSL = false; g_Config.backend_info.bSupportsPixelLighting = C_PLIGHTS + 40 <= maxConstants && C_PMATERIALS + 4 <= maxConstants; diff --git a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt index c57106645f..6a49269c6c 100644 --- a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt +++ b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt @@ -4,6 +4,7 @@ set(SRCS Src/FramebufferManager.cpp Src/NativeVertexFormat.cpp Src/PixelShaderCache.cpp Src/PostProcessing.cpp + Src/ProgramShaderCache.cpp Src/RasterFont.cpp Src/Render.cpp Src/TextureCache.cpp diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index 9fa3281b19..c83c976fb2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -19,6 +19,7 @@ #include "x64Emitter.h" #include "ABI.h" #include "MemoryUtil.h" +#include "ProgramShaderCache.h" #include "VertexShaderGen.h" #include "CPMemory.h" @@ -191,8 +192,15 @@ void GLVertexFormat::SetupVertexPointers() { if (vtx_decl.num_normals >= 1) { glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); if (vtx_decl.num_normals == 3) { - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); + GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB; + if(g_ActiveConfig.bUseGLSL){ + varLocation1 = OGL::ProgramShaderCache::GetAttr(0); + varLocation2 = OGL::ProgramShaderCache::GetAttr(1); + } + if(varLocation1 > 0) + glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); + if(varLocation2 > 0) + glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); } } @@ -216,7 +224,11 @@ void GLVertexFormat::SetupVertexPointers() { } if (vtx_decl.posmtx_offset != -1) { - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); + GLint varLocation = SHADER_POSMTX_ATTRIB; + if(g_ActiveConfig.bUseGLSL) + varLocation = OGL::ProgramShaderCache::GetAttr(2); + if(varLocation > 0) + glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); } #endif } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 050b378d2f..6c6725bb13 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -27,6 +27,7 @@ #include "Common.h" #include "Render.h" #include "VertexShaderGen.h" +#include "ProgramShaderCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" #include "FileUtil.h" @@ -47,326 +48,427 @@ bool PixelShaderCache::ShaderEnabled; PixelShaderCache::PSCacheEntry* PixelShaderCache::last_entry = NULL; PIXELSHADERUID PixelShaderCache::last_uid; +void(*pSetPSConstant4f)(unsigned int, float, float, float, float); +void(*pSetPSConstant4fv)(unsigned int, const float*); +void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); + GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram; + return s_DepthMatrixProgram; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram; + return s_ColorMatrixProgram; } void PixelShaderCache::Init() { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; - GL_REPORT_ERRORD(); + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; + GL_REPORT_ERRORD(); - s_displayCompileAlert = true; + s_displayCompileAlert = true; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); - - if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; + if(g_ActiveConfig.bUseGLSL) + { + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + } + else + { + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + } + + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); + + if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. + s_nMaxPixelInstructions = 4096; + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxPixelInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxPixelInstructions = 4096; + } #endif - int maxinst, maxattribs; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); - INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - - char pmatrixprog[2048]; - sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_ColorMatrixProgram); - SetCurrentShader(s_ColorMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + int maxinst, maxattribs; + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); + INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - } + char pmatrixprog[2048]; + sprintf(pmatrixprog, "!!ARBfp1.0" + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); + glGenProgramsARB(1, &s_ColorMatrixProgram); + SetCurrentShader(s_ColorMatrixProgram); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + glDeleteProgramsARB(1, &s_ColorMatrixProgram); + s_ColorMatrixProgram = 0; + } - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + sprintf(pmatrixprog, "!!ARBfp1.0\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - "FLR R0.x,R0;\n" //bits 31..24 + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "FLR R0.x,R0;\n" //bits 31..24 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - - "MUL R0,R0,K0.y;\n" // /255 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_DepthMatrixProgram); - SetCurrentShader(s_DepthMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + "MUL R0,R0,K0.y;\n" // /255 + + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 + + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); + glGenProgramsARB(1, &s_DepthMatrixProgram); + SetCurrentShader(s_DepthMatrixProgram); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + glDeleteProgramsARB(1, &s_DepthMatrixProgram); + s_DepthMatrixProgram = 0; + } - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - } - } void PixelShaderCache::Shutdown() { - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; + glDeleteProgramsARB(1, &s_ColorMatrixProgram); + s_ColorMatrixProgram = 0; glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - PSCache::iterator iter = PixelShaders.begin(); - for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); - PixelShaders.clear(); + s_DepthMatrixProgram = 0; + PSCache::iterator iter = PixelShaders.begin(); + for (; iter != PixelShaders.end(); iter++) + iter->second.Destroy(); + PixelShaders.clear(); } FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components) { - PIXELSHADERUID uid; - GetPixelShaderId(&uid, dstAlphaMode, components); - - // Check if the shader is already set - if (last_entry) - { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } - } + PIXELSHADERUID uid; + GetPixelShaderId(&uid, dstAlphaMode, components); - last_uid = uid; + // Check if the shader is already set + if (last_entry) + { + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } + } - PSCache::iterator iter = PixelShaders.find(uid); - if (iter != PixelShaders.end()) - { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + last_uid = uid; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + PSCache::iterator iter = PixelShaders.find(uid); + if (iter != PixelShaders.end()) + { + PSCacheEntry &entry = iter->second; + last_entry = &entry; - // Make an entry in the table - PSCacheEntry& newentry = PixelShaders[uid]; - last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } - if (g_ActiveConfig.bEnableShaderDebugging && code) - { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; - } + // Make an entry in the table + PSCacheEntry& newentry = PixelShaders[uid]; + last_entry = &newentry; + const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + + if (g_ActiveConfig.bEnableShaderDebugging && code) + { + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; + } #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - - SaveData(szTemp, code); - } + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + + SaveData(szTemp, code); + } #endif - if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } - - INCSTAT(stats.numPixelShadersCreated); - SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - return &last_entry->shader; + if (!code || !CompilePixelShader(newentry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } + + INCSTAT(stats.numPixelShadersCreated); + SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + return &last_entry->shader; } bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } #if defined HAVE_CG && HAVE_CG - char stropt[128]; - sprintf(stropt, "MaxLocalParams=32,NumInstructionSlots=%d", s_nMaxPixelInstructions); - const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", opts); + char stropt[128]; + sprintf(stropt, "MaxLocalParams=32,NumInstructionSlots=%d", s_nMaxPixelInstructions); + const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", opts); - // handle errors - if (!cgIsProgram(tempprog)) - { - cgDestroyProgram(tempprog); + // handle errors + if (!cgIsProgram(tempprog)) + { + cgDestroyProgram(tempprog); - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sbad_ps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sbad_ps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile pixel shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile pixel shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - return false; - } + return false; + } - // handle warnings - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } + // handle warnings + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) - { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); - } + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) + { + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); + } - glGenProgramsARB(1, &ps.glprogid); - SetCurrentShader(ps.glprogid); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + glGenProgramsARB(1, &ps.glprogid); + SetCurrentShader(ps.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO - } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } - cgDestroyProgram(tempprog); + cgDestroyProgram(tempprog); #endif - return true; + return true; } //Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { - if(ShaderEnabled) - { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; - } + if(ShaderEnabled) + { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; + } } //bind a program if is diferent from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { - if(!ShaderEnabled) - { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - } - if(CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); - } + if(!ShaderEnabled) + { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + } + if(CurrentShader != Shader) + { + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + } +} +// GLSL Specific +void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) +{ + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform1i(tmp.UniformLocations[a], Tex); + return; + } + } +} +void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) +{ + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } +} +void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + float f[4] = { f1, f2, f3, f4 }; + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } + } } +void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) +{ + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } + } +} + +void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } + } +} +// CG Specific +void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + float f[4] = { f1, f2, f3, f4 }; + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); +} + +void SetCGPSConstant4fv(unsigned int const_number, const float *f) +{ + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); +} + +void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); +} +// Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + pSetPSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetPSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + pSetPSConstant4fv(const_number, f); } void Renderer::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + pSetMultiPSConstant4fv(const_number, count, f); } - } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index f528eeb35b..9d61d7229a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -73,6 +73,8 @@ class PixelShaderCache public: static void Init(); static void Shutdown(); + // This is a GLSL only function + static void SetPSSampler(const char * name, unsigned int Tex); static FRAGMENTSHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 components); static bool CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); @@ -85,7 +87,15 @@ public: static void DisableShader(); }; +// GLSL Specific +void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetGLSLPSConstant4fv(unsigned int const_number, const float *f); +void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +//CG Specific +void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetCGPSConstant4fv(unsigned int const_number, const float *f); +void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); } // namespace OGL #endif // _PIXELSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp new file mode 100644 index 0000000000..fc056aed63 --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -0,0 +1,150 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +#include "ProgramShaderCache.h" + +namespace OGL +{ + GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; + ProgramShaderCache::PCache ProgramShaderCache::pshaders; + + std::pair ProgramShaderCache::CurrentShaderProgram; + const char *UniformNames[NUM_UNIFORMS] = { + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; + + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + { + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; + + + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } + + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); + + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + glAttachShader(entry.program.glprogid, entry.program.psid); + glLinkProgram(entry.program.glprogid); + //checkForGLError("linking program"); + glUseProgram(entry.program.glprogid); + //checkForGLError("using program"); + + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + + + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + } + + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } + + GLint ProgramShaderCache::GetAttr(int num) + { + return pshaders[CurrentShaderProgram].program.attrLoc[num]; + } + PROGRAMSHADER ProgramShaderCache::GetShaderProgram() + { + return pshaders[CurrentShaderProgram].program; + } + + void ProgramShaderCache::Shutdown(void) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + } +} + +void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) +{ + uid->uid.vsid = _v; + uid->uid.psid = _p; +} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h new file mode 100644 index 0000000000..53abe440f5 --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -0,0 +1,108 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _ProgramShaderCache_H_ +#define _ProgramShaderCache_H_ + +#include "GLUtil.h" + +#include "VertexShaderCache.h" +#include "PixelShaderCache.h" +#include "PixelShaderGen.h" +#include "VertexShaderGen.h" + + union PID + { + struct { + GLuint vsid, psid; + }; + u64 id; + }; + +class PROGRAMUID +{ +public: + + PID uid; + + PROGRAMUID() + { + uid.id = 0; + } + + PROGRAMUID(const PROGRAMUID& r) + { + uid.id = r.uid.id; + } + PROGRAMUID(GLuint _v, GLuint _p) + { + uid.vsid = _v; + uid.psid = _p; + } + + int GetNumValues() const + { + return uid.id; + } +}; +void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); + +namespace OGL +{ +#define NUM_UNIFORMS 27 +extern const char *UniformNames[NUM_UNIFORMS]; + + +struct PROGRAMSHADER +{ + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + GLuint glprogid; // opengl program id + GLuint vsid, psid; + GLint attrLoc[3]; + GLint UniformLocations[NUM_UNIFORMS]; +}; + + +class ProgramShaderCache +{ + struct PCacheEntry + { + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } + }; + typedef std::map, PCacheEntry> PCache; + + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static std::pair CurrentShaderProgram; +public: + static PROGRAMSHADER GetShaderProgram(); + static GLint GetAttr(int num); + static void SetBothShaders(GLuint PS, GLuint VS); + static GLuint GetCurrentProgram(void); + static void Shutdown(void); + +}; + +} // namespace OGL + +#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 792c14960e..1dae8d0752 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -45,6 +45,7 @@ #include "DLCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" #include "VertexLoaderManager.h" @@ -125,8 +126,8 @@ static std::thread scrshotThread; // EFB cache related const u32 EFB_CACHE_RECT_SIZE = 64; // Cache 64x64 blocks. -const u32 EFB_CACHE_WIDTH = EFB_WIDTH / EFB_CACHE_RECT_SIZE; -const u32 EFB_CACHE_HEIGHT = EFB_HEIGHT / EFB_CACHE_RECT_SIZE; +const u32 EFB_CACHE_WIDTH = (EFB_WIDTH + EFB_CACHE_RECT_SIZE - 1) / EFB_CACHE_RECT_SIZE; // round up +const u32 EFB_CACHE_HEIGHT = (EFB_HEIGHT + EFB_CACHE_RECT_SIZE - 1) / EFB_CACHE_RECT_SIZE; static bool s_efbCacheValid[2][EFB_CACHE_WIDTH * EFB_CACHE_HEIGHT]; static std::vector s_efbCache[2][EFB_CACHE_WIDTH * EFB_CACHE_HEIGHT]; // 2 for PEEK_Z and PEEK_COLOR @@ -698,7 +699,8 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) if (!g_ActiveConfig.bEFBAccessEnable) return 0; - u32 cacheRectIdx = ((x / EFB_CACHE_RECT_SIZE) << 16) | (y / EFB_CACHE_RECT_SIZE); + u32 cacheRectIdx = (y / EFB_CACHE_RECT_SIZE) * EFB_CACHE_WIDTH + + (x / EFB_CACHE_RECT_SIZE); // Get the rectangular target region containing the EFB pixel EFBRectangle efbPixelRc; @@ -1426,8 +1428,13 @@ void Renderer::ResetAPIState() { // Gets us to a reasonably sane state where it's possible to do things like // image copies with textured quads, etc. - VertexShaderCache::DisableShader(); - PixelShaderCache::DisableShader(); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(0, 0); + else + { + VertexShaderCache::DisableShader(); + PixelShaderCache::DisableShader(); + } glDisable(GL_SCISSOR_TEST); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); @@ -1452,9 +1459,14 @@ void Renderer::RestoreAPIState() if (g_ActiveConfig.bWireFrame) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - VertexShaderCache::SetCurrentShader(0); - PixelShaderCache::SetCurrentShader(0); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(0, 0); + else + { + VertexShaderCache::SetCurrentShader(0); + PixelShaderCache::SetCurrentShader(0); + } } void Renderer::SetGenerationMode() diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 5144c328d9..2c97b904b2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -33,6 +33,7 @@ #include "PixelShaderManager.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderGen.h" #include "VertexLoader.h" #include "VertexManager.h" @@ -176,10 +177,6 @@ void VertexManager::vFlush() } } - // set global constants - VertexShaderManager::SetConstants(); - PixelShaderManager::SetConstants(); - bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; @@ -212,8 +209,18 @@ void VertexManager::vFlush() FRAGMENTSHADER* ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); #endif VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); - if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. - if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(ps->glprogid, vs->glprogid); + else + { + if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. + if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); + } + + // set global constants + VertexShaderManager::SetConstants(); + PixelShaderManager::SetConstants(); Draw(); @@ -221,7 +228,13 @@ void VertexManager::vFlush() if (useDstAlpha && !dualSourcePossible) { ps = PixelShaderCache::SetShader(DSTALPHA_ALPHA_PASS,g_nativeVertexFmt->m_components); - if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); + if(g_ActiveConfig.bUseGLSL) + { + ProgramShaderCache::SetBothShaders(ps->glprogid, 0); + PixelShaderManager::SetConstants(); // Need to set these again + } + else + if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // only update alpha glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index dbbb7ee29b..a7b1c68e7a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -26,6 +26,7 @@ #include "Render.h" #include "VertexShaderGen.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderCache.h" #include "VertexManager.h" #include "VertexLoader.h" @@ -45,194 +46,293 @@ VertexShaderCache::VSCacheEntry* VertexShaderCache::last_entry = NULL; VERTEXSHADERUID VertexShaderCache::last_uid; static int s_nMaxVertexInstructions; - +void (*pSetVSConstant4f)(unsigned int, float, float, float, float); +void (*pSetVSConstant4fv)(unsigned int, const float*); +void (*pSetMultiVSConstant4fv)(unsigned int, unsigned int, const float*); +void (*pSetMultiVSConstant3fv)(unsigned int, unsigned int, const float*); void VertexShaderCache::Init() { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; - glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; + if(g_ActiveConfig.bUseGLSL) + { + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + } + else + { + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + } + + glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxVertexInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxVertexInstructions = 4096; + } #endif } void VertexShaderCache::Shutdown() { - for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); - vshaders.clear(); + for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) + iter->second.Destroy(); + vshaders.clear(); } VERTEXSHADER* VertexShaderCache::SetShader(u32 components) { - VERTEXSHADERUID uid; - GetVertexShaderId(&uid, components); - if (last_entry) - { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; - } - } + VERTEXSHADERUID uid; + GetVertexShaderId(&uid, components); + if (last_entry) + { + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } + } - last_uid = uid; + last_uid = uid; - VSCache::iterator iter = vshaders.find(uid); - if (iter != vshaders.end()) - { - VSCacheEntry &entry = iter->second; - last_entry = &entry; + VSCache::iterator iter = vshaders.find(uid); + if (iter != vshaders.end()) + { + VSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; - } + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; + } - // Make an entry in the table - VSCacheEntry& entry = vshaders[uid]; - last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, API_OPENGL); - GetSafeVertexShaderId(&entry.safe_uid, components); + // Make an entry in the table + VSCacheEntry& entry = vshaders[uid]; + last_entry = &entry; + const char *code = GenerateVertexShaderCode(components, API_OPENGL); + GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numVertexShadersCreated); - SETSTAT(stats.numVertexShadersAlive, vshaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numVertexShadersCreated); + SETSTAT(stats.numVertexShadersAlive, vshaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + return &last_entry->shader; } bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } #if defined HAVE_CG && HAVE_CG - char stropt[64]; - sprintf(stropt, "MaxLocalParams=256,MaxInstructions=%d", s_nMaxVertexInstructions); - const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", opts); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + char stropt[64]; + sprintf(stropt, "MaxLocalParams=256,MaxInstructions=%d", s_nMaxVertexInstructions); + const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", opts); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - SetCurrentShader(vs.glprogid); + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + SetCurrentShader(vs.glprogid); - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } - cgDestroyProgram(tempprog); + cgDestroyProgram(tempprog); #endif - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; - return true; + return true; } void VertexShaderCache::DisableShader() { - if (ShaderEnabled) - { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; + } } void VertexShaderCache::SetCurrentShader(GLuint Shader) { - if (!ShaderEnabled) - { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; - } - if (CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; + } + if (CurrentShader != Shader) + { + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + } } - -void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +// GLSL Specific +void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } - -void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) +void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); + float buf[4]; + buf[0] = f1; + buf[1] = f2; + buf[2] = f3; + buf[3] = f4; + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } + } } -void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) +{ + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } + } +} + +void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } + } +} + +void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +{ + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } + } +} + +// CG Specific +void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); +} + +void SetCGVSConstant4fv(unsigned int const_number, const float *f) +{ + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); +} + +void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { if(GLEW_EXT_gpu_program_parameters) { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); } else { @@ -241,32 +341,54 @@ void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int cou } } -void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { + if(GLEW_EXT_gpu_program_parameters) + { float buf[4 * C_VENVCONST_END]; for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } else { for (unsigned int i = 0; i < count; i++) - { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); - } + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } } +// Renderer Functions +void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + pSetVSConstant4f(const_number, f1, f2, f3, f4); +} + +void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) +{ + pSetVSConstant4fv(const_number, f); +} + +void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + pSetMultiVSConstant4fv(const_number, count, f); +} + +void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +{ + pSetMultiVSConstant3fv(const_number, count, f); +} + + } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index 6f4cbe25c2..e398a801ff 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -70,7 +70,17 @@ public: static void DisableShader(); }; +// GLSL Specific +void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetGLSLVSConstant4fv(unsigned int const_number, const float *f); +void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +// CG Specific +void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetCGVSConstant4fv(unsigned int const_number, const float *f); +void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); } // namespace OGL #endif // _VERTEXSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index a25f9cd839..0d1c3fc35a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -135,6 +135,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = false; // supported, but broken g_Config.backend_info.bSupportsFormatReinterpretation = false; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsGLSL = true; // aamodes const char* caamodes[] = {"None", "2x", "4x", "8x", "8x CSAA", "8xQ CSAA", "16x CSAA", "16xQ CSAA"}; From f8eb45637ff64957b118127457d77e02959ca4f1 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 1 Dec 2011 00:33:12 -0600 Subject: [PATCH 002/625] Now CG plays nice with this new stuff. --- .../VideoCommon/Src/LightingShaderGen.cpp | 34 +++++++++---------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 32 +++++++++-------- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 11 +++--- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 11 +++--- 4 files changed, 42 insertions(+), 46 deletions(-) diff --git a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp index a506acadfc..5933a7d28f 100644 --- a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp @@ -47,13 +47,13 @@ char *GenerateLightShader(char *p, int index, const LitChannel& chan, const char // atten disabled switch (chan.diffusefunc) { case LIGHTDIF_NONE: - WRITE(p, "lacc.%s += %s.lights[%d].col.%s;\n", swizzle, lightsName, index, swizzle); + WRITE(p, "lacc.%s += %s[%d].%s;\n", swizzle, lightsName, index * 5, swizzle); break; case LIGHTDIF_SIGN: case LIGHTDIF_CLAMP: - WRITE(p, "ldir = normalize(%s.lights[%d].pos.xyz - pos.xyz);\n", lightsName, index); - WRITE(p, "lacc.%s += %sdot(ldir, _norm0)) * %s.lights[%d].col.%s;\n", - swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, index, swizzle); + WRITE(p, "ldir = normalize(%s[%d + 3].xyz - pos.xyz);\n", lightsName, index * 5); + WRITE(p, "lacc.%s += %sdot(ldir, _norm0)) * %s[%d].%s;\n", + swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, index * 5, swizzle); break; default: _assert_(0); } @@ -62,32 +62,32 @@ char *GenerateLightShader(char *p, int index, const LitChannel& chan, const char if (chan.attnfunc == 3) { // spot - WRITE(p, "ldir = %s.lights[%d].pos.xyz - pos.xyz;\n", lightsName, index); + WRITE(p, "ldir = %s[%d + 3].xyz - pos.xyz;\n", lightsName, index * 5); WRITE(p, "dist2 = dot(ldir, ldir);\n" "dist = sqrt(dist2);\n" "ldir = ldir / dist;\n" - "attn = max(0.0f, dot(ldir, %s.lights[%d].dir.xyz));\n", lightsName, index); - WRITE(p, "attn = max(0.0f, dot(%s.lights[%d].cosatt.xyz, float3(1.0f, attn, attn*attn))) / dot(%s.lights[%d].distatt.xyz, float3(1.0f,dist,dist2));\n", lightsName, index, lightsName, index); + "attn = max(0.0f, dot(ldir, %s[%d + 4].xyz));\n", lightsName, index * 5); + WRITE(p, "attn = max(0.0f, dot(%s[%d + 1].xyz, float3(1.0f, attn, attn*attn))) / dot(%s[%d + 2].xyz, float3(1.0f,dist,dist2));\n", lightsName, index * 5, lightsName, index * 5); } else if (chan.attnfunc == 1) { // specular - WRITE(p, "ldir = normalize(%s.lights[%d].pos.xyz);\n", lightsName, index); - WRITE(p, "attn = (dot(_norm0,ldir) >= 0.0f) ? max(0.0f, dot(_norm0, %s.lights[%d].dir.xyz)) : 0.0f;\n", lightsName, index); - WRITE(p, "attn = max(0.0f, dot(%s.lights[%d].cosatt.xyz, float3(1,attn,attn*attn))) / dot(%s.lights[%d].distatt.xyz, float3(1,attn,attn*attn));\n", lightsName, index, lightsName, index); + WRITE(p, "ldir = normalize(%s[%d + 3].xyz);\n", lightsName, index * 5); + WRITE(p, "attn = (dot(_norm0,ldir) >= 0.0f) ? max(0.0f, dot(_norm0, %s[%d + 4].xyz)) : 0.0f;\n", lightsName, index * 5); + WRITE(p, "attn = max(0.0f, dot(%s[%d + 1].xyz, float3(1,attn,attn*attn))) / dot(%s[%d + 2].xyz, float3(1,attn,attn*attn));\n", lightsName, index * 5, lightsName, index * 5); } switch (chan.diffusefunc) { case LIGHTDIF_NONE: - WRITE(p, "lacc.%s += attn * %s.lights[%d].col.%s;\n", swizzle, lightsName, index, swizzle); + WRITE(p, "lacc.%s += attn * %s[%d].%s;\n", swizzle, lightsName, index * 5, swizzle); break; case LIGHTDIF_SIGN: case LIGHTDIF_CLAMP: - WRITE(p, "lacc.%s += attn * %sdot(ldir, _norm0)) * %s.lights[%d].col.%s;\n", + WRITE(p, "lacc.%s += attn * %sdot(ldir, _norm0)) * %s[%d].%s;\n", swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, - index, + index * 5, swizzle); break; default: _assert_(0); @@ -120,7 +120,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "mat = float4(1.0f, 1.0f, 1.0f, 1.0f);\n"); } else // from color - WRITE(p, "mat = %s.C%d;\n", materialsName, j+2); + WRITE(p, "mat = %s[%d];\n", materialsName, j+2); if (color.enablelighting) { if (color.ambsource) { // from vertex @@ -132,7 +132,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "lacc = float4(0.0f, 0.0f, 0.0f, 0.0f);\n"); } else // from color - WRITE(p, "lacc = %s.C%d;\n", materialsName, j); + WRITE(p, "lacc = %s[%d];\n", materialsName, j); } else { @@ -149,7 +149,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, else WRITE(p, "mat.w = 1.0f;\n"); } else // from color - WRITE(p, "mat.w = %s.C%d.w;\n", materialsName, j+2); + WRITE(p, "mat.w = %s[%d].w;\n", materialsName, j+2); } if (alpha.enablelighting) @@ -163,7 +163,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "lacc.w = 0.0f;\n"); } else // from color - WRITE(p, "lacc.w = %s.C%d.w;\n", materialsName, j); + WRITE(p, "lacc.w = %s[%d].w;\n", materialsName, j); } else { diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index fcdc0e8976..43ffdeedd8 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -292,11 +292,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "int posmtx = fposmtx;\n"); } - WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES".T[posmtx].t, rawpos), dot("I_TRANSFORMMATRICES".T[posmtx+1].t, rawpos), dot("I_TRANSFORMMATRICES".T[posmtx+2].t, rawpos), 1);\n"); + WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES"[posmtx], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); if (components & VB_HAS_NRMALL) { WRITE(p, "int normidx = posmtx >= 32 ? (posmtx-32) : posmtx;\n"); - WRITE(p, "float3 N0 = "I_NORMALMATRICES".T[normidx].t.xyz, N1 = "I_NORMALMATRICES".T[normidx+1].t.xyz, N2 = "I_NORMALMATRICES".T[normidx+2].t.xyz;\n"); + WRITE(p, "float3 N0 = "I_NORMALMATRICES"[normidx].xyz, N1 = "I_NORMALMATRICES"[normidx+1].xyz, N2 = "I_NORMALMATRICES"[normidx+2].xyz;\n"); } if (components & VB_HAS_NRM0) @@ -308,13 +308,13 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "float4 pos = float4(dot("I_POSNORMALMATRIX".T0, rawpos), dot("I_POSNORMALMATRIX".T1, rawpos), dot("I_POSNORMALMATRIX".T2, rawpos), 1.0f);\n"); + WRITE(p, "float4 pos = float4(dot("I_POSNORMALMATRIX"[0], rawpos), dot("I_POSNORMALMATRIX"[1], rawpos), dot("I_POSNORMALMATRIX"[2], rawpos), 1.0f);\n"); if (components & VB_HAS_NRM0) - WRITE(p, "float3 _norm0 = normalize(float3(dot("I_POSNORMALMATRIX".N0.xyz, rawnorm0), dot("I_POSNORMALMATRIX".N1.xyz, rawnorm0), dot("I_POSNORMALMATRIX".N2.xyz, rawnorm0)));\n"); + WRITE(p, "float3 _norm0 = normalize(float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm0)));\n"); if (components & VB_HAS_NRM1) - WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX".N0.xyz, rawnorm1), dot("I_POSNORMALMATRIX".N1.xyz, rawnorm1), dot("I_POSNORMALMATRIX".N2.xyz, rawnorm1));\n"); + WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); if (components & VB_HAS_NRM2) - WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX".N0.xyz, rawnorm2), dot("I_POSNORMALMATRIX".N1.xyz, rawnorm2), dot("I_POSNORMALMATRIX".N2.xyz, rawnorm2));\n"); + WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX".[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); } if (!(components & VB_HAS_NRM0)) @@ -322,7 +322,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) - WRITE(p, "o.pos = float4(dot("I_PROJECTION".T0, pos), dot("I_PROJECTION".T1, pos), dot("I_PROJECTION".T2, pos), dot("I_PROJECTION".T3, pos));\n"); + WRITE(p, "o.pos = float4(dot("I_PROJECTION"[0], pos), dot("I_PROJECTION"[1], pos), dot("I_PROJECTION"[2], pos), dot("I_PROJECTION"[3], pos));\n"); WRITE(p, "float4 mat, lacc;\n" "float3 ldir, h;\n" @@ -421,18 +421,20 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) break; case XF_TEXGEN_REGULAR: default: - if (components & (VB_HAS_TEXMTXIDX0< Date: Fri, 2 Dec 2011 18:26:15 -0600 Subject: [PATCH 003/625] meh --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 166 ++++++++++-------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 + .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 131 +++++++------- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 2 + 4 files changed, 164 insertions(+), 137 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index d6acf10588..c4162b54a0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -51,6 +51,7 @@ PIXELSHADERUID PixelShaderCache::last_uid; void(*pSetPSConstant4f)(unsigned int, float, float, float, float); void(*pSetPSConstant4fv)(unsigned int, const float*); void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); +bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { @@ -77,12 +78,14 @@ void PixelShaderCache::Init() pSetPSConstant4f = SetGLSLPSConstant4f; pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; } else { pSetPSConstant4f = SetCGPSConstant4f; pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); @@ -262,83 +265,7 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } - -#if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); - - // handle errors - if (!cgIsProgram(tempprog)) - { - cgDestroyProgram(tempprog); - - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); - - PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); - - return false; - } - - // handle warnings - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) - { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); - } - - glGenProgramsARB(1, &ps.glprogid); - SetCurrentShader(ps.glprogid); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO - } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); -#endif - - return true; + return pCompilePixelShader(ps, pstrprogram); } //Disable Fragment programs and reset the selected Program @@ -367,6 +294,10 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) } } // GLSL Specific +bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) +{ + return false; +} void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); @@ -437,6 +368,87 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co } } // CG Specific + +bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) +{ + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } + +#if defined HAVE_CG && HAVE_CG + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); + + // handle errors + if (!cgIsProgram(tempprog)) + { + cgDestroyProgram(tempprog); + + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); + + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + return false; + } + + // handle warnings + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) + { + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); + } + + glGenProgramsARB(1, &ps.glprogid); + PixelShaderCache::SetCurrentShader(ps.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); +#endif + + return true; +} void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 9d61d7229a..429af249f1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -91,11 +91,13 @@ public: void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetGLSLPSConstant4fv(unsigned int const_number, const float *f); void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); //CG Specific void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetCGPSConstant4fv(unsigned int const_number, const float *f); void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); } // namespace OGL #endif // _PIXELSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 82db873e85..eb4f56522e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -50,6 +50,7 @@ void (*pSetVSConstant4f)(unsigned int, float, float, float, float); void (*pSetVSConstant4fv)(unsigned int, const float*); void (*pSetMultiVSConstant4fv)(unsigned int, unsigned int, const float*); void (*pSetMultiVSConstant3fv)(unsigned int, unsigned int, const float*); +bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { @@ -64,6 +65,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetGLSLVSConstant4fv; pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } else { @@ -71,6 +73,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetCGVSConstant4fv; pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -147,66 +150,7 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } - -#if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); - - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); - - cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } - - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - SetCurrentShader(vs.glprogid); - - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); -#endif - - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; - - return true; + return pCompileVertexShader(vs, pstrprogram); } void VertexShaderCache::DisableShader() @@ -234,6 +178,10 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) } } // GLSL Specific +bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) +{ + return false; +} void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); @@ -315,6 +263,69 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } // CG Specific +bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) +{ + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } + +#if defined HAVE_CG && HAVE_CG + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); + + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } + + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + VertexShaderCache::SetCurrentShader(vs.glprogid); + + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); +#endif + + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; + + return true; +} void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index e398a801ff..fc08cc4efd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -75,12 +75,14 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f); void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram); // CG Specific void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetCGVSConstant4fv(unsigned int const_number, const float *f); void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram); } // namespace OGL #endif // _VERTEXSHADERCACHE_H_ From 6882e00d5e39b2cfa92975a51f717a19bc9319c9 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 18:31:06 -0600 Subject: [PATCH 004/625] Compile --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 31 ++++++++++++++++++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 31 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index c4162b54a0..36a8f054f5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -296,7 +296,36 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) // GLSL Specific bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - return false; + GLuint result = glCreateShader(GL_FRAGMENT_SHADER); + + glShaderSource(result, 1, &pstrprogram, NULL); + glCompileShader(result); + GLsizei length = 0; + + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + delete[] infoLog; + } + + GLint compileStatus; + glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); + if (compileStatus != GL_TRUE) + { + // Compile failed + ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + // Don't try to use this shader + glDeleteShader(result); + return false; + } + + (void)GL_REPORT_ERROR(); + ps.glprogid = result; + return true; } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index eb4f56522e..f58e9eb786 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -180,7 +180,36 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) // GLSL Specific bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - return false; + GLuint result = glCreateShader(GL_VERTEX_SHADER); + + glShaderSource(result, 1, &pstrprogram, NULL); + glCompileShader(result); + GLsizei length = 0; + + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + delete[] infoLog; + } + + GLint compileStatus; + glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); + if (compileStatus != GL_TRUE) + { + // Compile failed + ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + // Don't try to use this shader + glDeleteShader(result); + return false; + } + + (void)GL_REPORT_ERROR(); + vs.glprogid = result; + return true; } void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { From 8a18a110b7bda3c244a8478010b71f951cfffdc6 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 18:46:07 -0600 Subject: [PATCH 005/625] mah --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 8 +++++++- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 9 +++++++-- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 10 ++++++++-- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 15 +++++++++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 36a8f054f5..32e6fb3374 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -20,6 +20,7 @@ #include "GLUtil.h" #include +#include #include "Statistics.h" #include "VideoConfig.h" @@ -234,7 +235,8 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Make an entry in the table PSCacheEntry& newentry = PixelShaders[uid]; last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + newentry.shader.bGLSL = g_ActiveConfig.bUseGLSL; + const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); if (g_ActiveConfig.bEnableShaderDebugging && code) { @@ -271,6 +273,8 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr //Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { + if(g_ActiveConfig.bUseGLSL) + assert(true); if(ShaderEnabled) { glDisable(GL_FRAGMENT_PROGRAM_ARB); @@ -281,6 +285,8 @@ void PixelShaderCache::DisableShader() //bind a program if is diferent from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { + if(g_ActiveConfig.bUseGLSL) + assert(true); if(!ShaderEnabled) { glEnable(GL_FRAGMENT_PROGRAM_ARB); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 429af249f1..d5e2cae6bc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -29,16 +29,21 @@ namespace OGL struct FRAGMENTSHADER { - FRAGMENTSHADER() : glprogid(0) { } + FRAGMENTSHADER() : glprogid(0), bGLSL(0) { } void Destroy() { if (glprogid) { - glDeleteProgramsARB(1, &glprogid); + if(bGLSL) + glDeleteShader(glprogid); + else + glDeleteProgramsARB(1, &glprogid); glprogid = 0; } } GLuint glprogid; // opengl program id + + bool bGLSL; std::string strprog; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index f58e9eb786..ea7a97196b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -16,6 +16,7 @@ // http://code.google.com/p/dolphin-emu/ #include +#include #include "Globals.h" #include "VideoConfig.h" @@ -73,7 +74,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetCGVSConstant4fv; pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; + pCompileVertexShader = CompileCGVertexShader; } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -124,7 +125,8 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) // Make an entry in the table VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, API_OPENGL); + entry.shader.bGLSL = g_ActiveConfig.bUseGLSL; + const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) @@ -155,6 +157,8 @@ bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrpr void VertexShaderCache::DisableShader() { + if(g_ActiveConfig.bUseGLSL) + assert(true); if (ShaderEnabled) { glDisable(GL_VERTEX_PROGRAM_ARB); @@ -165,6 +169,8 @@ void VertexShaderCache::DisableShader() void VertexShaderCache::SetCurrentShader(GLuint Shader) { + if(g_ActiveConfig.bUseGLSL) + assert(true); if (!ShaderEnabled) { glEnable(GL_VERTEX_PROGRAM_ARB); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index fc08cc4efd..c3a6146b53 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -29,9 +29,18 @@ namespace OGL struct VERTEXSHADER { - VERTEXSHADER() : glprogid(0) {} + VERTEXSHADER() : glprogid(0), bGLSL(0) {} + void Destroy() + { + if(bGLSL) + glDeleteShader(glprogid); + else + glDeleteProgramsARB(1, &glprogid); + glprogid = 0; + } GLuint glprogid; // opengl program id + bool bGLSL; std::string strprog; }; @@ -43,9 +52,7 @@ class VertexShaderCache VERTEXSHADERUIDSAFE safe_uid; VSCacheEntry() {} void Destroy() { - // printf("Destroying vs %i\n", shader.glprogid); - glDeleteProgramsARB(1, &shader.glprogid); - shader.glprogid = 0; + shader.Destroy(); } }; From ae6ac5b4399a5032cf185b7f695896859799af99 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 19:04:37 -0600 Subject: [PATCH 006/625] moe --- Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp | 8 - .../Src/TextureConversionShader.cpp | 150 +++++++++++++----- 2 files changed, 106 insertions(+), 52 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp index f9fd3c4635..099d7db8d2 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp @@ -585,14 +585,6 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc } } -#if defined(_DEBUG) || defined(DEBUGFAST) - if (gpr.SanityCheck() || fpr.SanityCheck()) - { - char ppcInst[256]; - DisassembleGekko(ops[i].inst.hex, em_address, ppcInst, 256); - NOTICE_LOG(DYNA_REC, "Unflushed reg: %s", ppcInst); - } -#endif if (js.skipnext) { js.skipnext = false; diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index c921a1a9fd..ce4a5ca1f4 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -65,21 +65,35 @@ u16 GetEncodedSampleCount(u32 format) default: return 1; } } +const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) +{ + if(ApiType == API_GLSL) + return ""; // Once we switch to GLSL 1.3 we can do something here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; +} // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) { - WRITE(p, "uniform float4 blkDims : register(c%d);\n", C_COLORMATRIX); - WRITE(p, "uniform float4 textureDims : register(c%d);\n", C_COLORMATRIX + 1); + // [0] left, top, right, bottom of source rectangle within source texture + // [1] width and height of destination texture in pixels + // Two were merged for GLSL + WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); float samples = (float)GetEncodedSampleCount(format); - if(ApiType == API_OPENGL) + if (ApiType == API_OPENGL) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } + else if (ApiType == API_GLSL) + { + WRITE(p, "uniform sampler2DRect samp0;\n"); + } else if (ApiType & API_D3D9) { WRITE(p,"uniform sampler samp0 : register(s0);\n"); @@ -91,14 +105,24 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } - WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if(ApiType == API_GLSL) { - WRITE(p," out float4 ocol0 : COLOR0,\n"); + WRITE(p, " float4 ocol0;\n"); + WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); + WRITE(p, "void main()\n"); } else { - WRITE(p," out float4 ocol0 : SV_Target,\n"); + WRITE(p,"void main(\n"); + if(ApiType != API_D3D11) + { + WRITE(p," out float4 ocol0 : COLOR0,\n"); + } + else + { + WRITE(p," out float4 ocol0 : SV_Target,\n"); + } + WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } WRITE(p," in float2 uv0 : TEXCOORD0)\n" @@ -113,7 +137,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * textureDims.x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / %f);\n", blkW); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -121,26 +145,28 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (xb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * blkDims.xy;\n"); + WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); if(ApiType == API_OPENGL) - WRITE(p," sampleUv.y = textureDims.y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + textureDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); if(ApiType != API_OPENGL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / blkDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); } } // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) -{ - WRITE(p, "uniform float4 blkDims : register(c%d);\n", C_COLORMATRIX); - WRITE(p, "uniform float4 textureDims : register(c%d);\n", C_COLORMATRIX + 1); +{ + // [0] left, top, right, bottom of source rectangle within source texture + // [1] width and height of destination texture in pixels + // Two were merged for GLSL + WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -150,6 +176,10 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } + else if (ApiType == API_GLSL) + { + WRITE(p, "uniform sampler2DRect samp0;\n"); + } else if (ApiType & API_D3D9) { WRITE(p,"uniform sampler samp0 : register(s0);\n"); @@ -160,17 +190,27 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, "Texture2D Tex0 : register(t0);\n"); } - - WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if(ApiType == API_GLSL) { - WRITE(p," out float4 ocol0 : COLOR0,\n"); + WRITE(p, " float4 ocol0;\n"); + WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); + WRITE(p, "void main()\n"); } else { - WRITE(p," out float4 ocol0 : SV_Target,\n"); + WRITE(p,"void main(\n"); + if(ApiType != API_D3D11) + { + WRITE(p," out float4 ocol0 : COLOR0,\n"); + } + else + { + WRITE(p," out float4 ocol0 : SV_Target,\n"); + } + WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } + WRITE(p," in float2 uv0 : TEXCOORD0)\n" "{\n" " float2 sampleUv;\n" @@ -179,7 +219,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * textureDims.x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / 2);\n"); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -192,17 +232,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * blkDims.xy;\n"); + WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); if(ApiType == API_OPENGL) - WRITE(p," sampleUv.y = textureDims.y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + textureDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); if(ApiType != API_OPENGL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / blkDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); } } @@ -213,15 +253,17 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP texSampleOpName = "tex2D"; else if (ApiType == API_D3D11) texSampleOpName = "tex0.Sample"; + else if (ApiType == API_GLSL) + texSampleOpName = "texture2DRect"; else texSampleOpName = "texRECT"; // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; if(ApiType != API_OPENGL) - texSampleIncrementUnit = "blkDims.x / blkDims.z"; + texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else - texSampleIncrementUnit = "blkDims.x"; + texSampleIncrementUnit = I_COLORS"[0].x"; WRITE(p, " %s = %s(samp0, sampleUv + float2(%d * (%s), 0)).%s;\n", dest, texSampleOpName, s_incrementSampleXCount, texSampleIncrementUnit, colorComp); @@ -263,8 +305,10 @@ void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest) WRITE(p, " %s = floor(%s * %ff);\n", dest, src, result); } -void WriteEncoderEnd(char* p) +void WriteEncoderEnd(char* p, API_TYPE ApiType) { + if(ApiType == API_GLSL) + WRITE(p, "gl_FragData[0] = ocol0;\n"); WRITE(p, "}\n"); IntensityConstantAdded = false; s_incrementSampleXCount = 0; @@ -292,7 +336,7 @@ void WriteI8Encoder(char* p, API_TYPE ApiType) WRITE(p, " ocol0.rgba += IntensityConst.aaaa;\n"); // see WriteColorToIntensity - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteI4Encoder(char* p, API_TYPE ApiType) @@ -340,7 +384,7 @@ void WriteI4Encoder(char* p, API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteIA8Encoder(char* p,API_TYPE ApiType) @@ -359,7 +403,7 @@ void WriteIA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.ga += IntensityConst.aa;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteIA4Encoder(char* p,API_TYPE ApiType) @@ -394,7 +438,7 @@ void WriteIA4Encoder(char* p,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGB565Encoder(char* p,API_TYPE ApiType) @@ -419,7 +463,7 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.ga = ocol0.ga + gLower * 32.0f;\n"); WRITE(p, " ocol0 = ocol0 / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) @@ -486,7 +530,7 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) WRITE(p, "}\n"); WRITE(p, " ocol0 = ocol0 / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) @@ -512,7 +556,7 @@ void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) WriteToBitDepth(p, 4, "texSample.b", "color1.a"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGBA8Encoder(char* p,API_TYPE ApiType) @@ -542,7 +586,7 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0 = (cl0 * color0) + (cl1 * color1);\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -578,7 +622,7 @@ void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -596,7 +640,7 @@ void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) WriteSampleColor(p, comp, "ocol0.a",ApiType); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -629,7 +673,7 @@ void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) @@ -641,7 +685,7 @@ void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) WriteSampleColor(p, comp, "ocol0.ra",ApiType); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) @@ -665,7 +709,7 @@ void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) WriteSampleColor(p, "b", "depth",ApiType); WRITE(p, "ocol0.a = frac(depth * %s);\n", multiplier); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ16Encoder(char* p,API_TYPE ApiType) @@ -699,7 +743,7 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.r = expanded.g / 255;\n"); WRITE(p, " ocol0.a = expanded.r / 255;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ16LEncoder(char* p,API_TYPE ApiType) @@ -737,7 +781,7 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.r = expanded.b;\n"); WRITE(p, " ocol0.a = expanded.g;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ24Encoder(char* p, API_TYPE ApiType) @@ -780,7 +824,7 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) WRITE(p, " ocol0.a = expanded1.r / 255;\n"); WRITE(p, " }\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) @@ -790,6 +834,24 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) char *p = text; + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + + // We require this here + WRITE(p, "#ifdef GL_ARB_texture_rectangle\n #extension GL_ARB_texture_rectangle : require\n#endif\n"); + } + switch(format) { case GX_TF_I4: From 804938e9fc4afefac1e04b2eeae4c158b7b34d00 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 20:17:26 -0600 Subject: [PATCH 007/625] More stuff --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 20 +-- Source/Core/VideoCommon/Src/VideoConfig.cpp | 4 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 132 ++++++++++++------ .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 10 +- 6 files changed, 126 insertions(+), 52 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 4cdf562182..5d7fa9790e 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -1183,7 +1183,7 @@ void SampleTexture(char *&p, const char *destination, const char *texcoords, con if (ApiType == API_D3D11) WRITE(p, "%s=Tex%d.Sample(samp%d,%s.xy * "I_TEXDIMS"[%d].xy).%s;\n", destination, texmap,texmap, texcoords, texmap, texswap); else - WRITE(p, "%s=tex2D(samp%d,%s.xy * "I_TEXDIMS"[%d].xy).%s;\n", destination, texmap, texcoords, texmap, texswap); + WRITE(p, "%s=%s(samp%d,%s.xy * "I_TEXDIMS"[%d].xy).%s;\n", destination, ApiType == API_GLSL ? "texture2D" : "tex2D", texmap, texcoords, texmap, texswap); } static const char *tevAlphaFuncsTable[] = diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 43ffdeedd8..ac35a4aa35 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -132,30 +132,32 @@ static char text[16384]; char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) { + // This turned a bit ugly with GLSL + // Will be less ugly with GLSL 1.3...hopefully WRITE(p, "struct VS_OUTPUT {\n"); - WRITE(p, " float4 pos : POSITION;\n"); - WRITE(p, " float4 colors_0 : COLOR0;\n"); - WRITE(p, " float4 colors_1 : COLOR1;\n"); + WRITE(p, " float4 pos %s POSITION;\n", ApiType == API_GLSL ? ";//" : ":"); + WRITE(p, " float4 colors_0 %s COLOR0;\n", ApiType == API_GLSL ? ";//" : ":"); + WRITE(p, " float4 colors_1 %s COLOR1;\n", ApiType == API_GLSL ? ";//" : ":"); if (xfregs.numTexGen.numTexGens < 7) { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float3 tex%d : TEXCOORD%d;\n", i, i); - WRITE(p, " float4 clipPos : TEXCOORD%d;\n", xfregs.numTexGen.numTexGens); + WRITE(p, " float3 tex%d %s TEXCOORD%d;\n", i, ApiType == API_GLSL ? ";//" : ":", i); + WRITE(p, " float4 clipPos %s TEXCOORD%d;\n", ApiType == API_GLSL ? ";//" : ":", xfregs.numTexGen.numTexGens); if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " float4 Normal : TEXCOORD%d;\n", xfregs.numTexGen.numTexGens + 1); + WRITE(p, " float4 Normal %s TEXCOORD%d;\n", ApiType == API_GLSL ? ";//" : ":", xfregs.numTexGen.numTexGens + 1); } else { // clip position is in w of first 4 texcoords if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, " float4 tex%d : TEXCOORD%d;\n", i, i); + WRITE(p, " float4 tex%d %s TEXCOORD%d;\n", i, ApiType == API_GLSL ? ";//" : ":", i); } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d tex%d : TEXCOORD%d;\n", i < 4 ? 4 : 3 , i, i); + WRITE(p, " float%d tex%d %s TEXCOORD%d;\n", i < 4 ? 4 : 3 , i, ApiType == API_GLSL ? ";//" : ":", i); } - } + } WRITE(p, "};\n"); return p; diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index 57685dec09..69c1c4ce1c 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -43,6 +43,7 @@ VideoConfig::VideoConfig() backend_info.APIType = API_NONE; backend_info.bUseRGBATextures = false; backend_info.bSupports3DVision = false; + backend_info.bSupportsGLSL = false; } void VideoConfig::Load(const char *ini_file) @@ -92,6 +93,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Settings", "DisableLighting", &bDisableLighting, 0); iniFile.Get("Settings", "DisableTexturing", &bDisableTexturing, 0); iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); + iniFile.Get("Settings", "UseGLSL", &bUseGLSL, 0); iniFile.Get("Settings", "EnableOpenCL", &bEnableOpenCL, false); iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); @@ -232,7 +234,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Settings", "DisableTexturing", bDisableTexturing); iniFile.Set("Settings", "DstAlphaPass", bDstAlphaPass); iniFile.Set("Settings", "DisableFog", bDisableFog); - iniFile.Set("Settings", "bUseGLSL", bUseGLSL); + iniFile.Set("Settings", "UseGLSL", bUseGLSL); iniFile.Set("Settings", "EnableOpenCL", bEnableOpenCL); iniFile.Set("Settings", "OMPDecoder", bOMPDecoder); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 32e6fb3374..601445988f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -314,7 +314,15 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "ps_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) + exit(0); delete[] infoLog; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index c715775194..588c593b13 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -60,51 +60,105 @@ static FRAGMENTSHADER s_encodingPrograms[NUM_ENCODING_PROGRAMS]; void CreateRgbToYuyvProgram() { // Output is BGRA because that is slightly faster than RGBA. - const char *FProgram = - "uniform samplerRECT samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float2 uv1 = float2(uv0.x + 1.0f, uv0.y);\n" - " float3 c0 = texRECT(samp0, uv0).rgb;\n" - " float3 c1 = texRECT(samp0, uv1).rgb;\n" - " float3 y_const = float3(0.257f,0.504f,0.098f);\n" - " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" - " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" - " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" - " float3 c01 = (c0 + c1) * 0.5f;\n" - " ocol0 = float4(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.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."); + } + else + { + const char *FProgram = + "uniform samplerRECT samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float2 uv1 = float2(uv0.x + 1.0f, uv0.y);\n" + " float3 c0 = texRECT(samp0, uv0).rgb;\n" + " float3 c1 = texRECT(samp0, uv1).rgb;\n" + " float3 y_const = float3(0.257f,0.504f,0.098f);\n" + " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" + " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" + " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" + " float3 c01 = (c0 + c1) * 0.5f;\n" + " ocol0 = float4(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."); + } } void CreateYuyvToRgbProgram() { - const char *FProgram = - "uniform samplerRECT samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float4 c0 = texRECT(samp0, uv0).rgba;\n" + 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" - " float f = step(0.5, frac(uv0.x));\n" - " float y = lerp(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" - " ocol0 = float4(yComp + (1.596f * vComp),\n" - " yComp - (0.813f * vComp) - (0.391f * uComp),\n" - " yComp + (2.018f * uComp),\n" - " 1.0f);\n" - "}\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 + { + const char *FProgram = + "uniform samplerRECT samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float4 c0 = texRECT(samp0, uv0).rgba;\n" - if (!PixelShaderCache::CompilePixelShader(s_yuyvToRgbProgram, FProgram)) - ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program."); + " float f = step(0.5, frac(uv0.x));\n" + " float y = lerp(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" + + " ocol0 = float4(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."); + } } FRAGMENTSHADER &GetOrCreateEncodingShader(u32 format) @@ -117,7 +171,7 @@ FRAGMENTSHADER &GetOrCreateEncodingShader(u32 format) if (s_encodingPrograms[format].glprogid == 0) { - const char* shader = TextureConversionShader::GenerateEncodingShader(format,API_OPENGL); + const char* shader = TextureConversionShader::GenerateEncodingShader(format, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && shader) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index ea7a97196b..c543dfb86e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -198,7 +198,15 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) + exit(0); delete[] infoLog; } From 164b56ff73c9e850edbac8546a9d4530621082b5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 20:20:53 -0600 Subject: [PATCH 008/625] This is the terrible bit that can't be removed until we use UBOs in the GLSL shaders. --- .../VideoCommon/Src/PixelShaderManager.cpp | 36 +++++++++---------- .../VideoCommon/Src/VertexShaderManager.cpp | 22 ++++++------ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 2521f80500..4f6cd8da2d 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -87,35 +87,35 @@ void PixelShaderManager::SetConstants() { for (int i = 0; i < 2; ++i) { - if (s_nColorsChanged[i]) + if (s_nColorsChanged[i] || g_ActiveConfig.bUseGLSL) { int baseind = i ? C_KCOLORS : C_COLORS; for (int j = 0; j < 4; ++j) { - if (s_nColorsChanged[i] & (1 << j)) + if (s_nColorsChanged[i] & (1 << j) || g_ActiveConfig.bUseGLSL) SetPSConstant4fv(baseind+j, &lastRGBAfull[i][j][0]); } s_nColorsChanged[i] = 0; } } - if (s_nTexDimsChanged) + if (s_nTexDimsChanged || g_ActiveConfig.bUseGLSL) { for (int i = 0; i < 8; ++i) { - if (s_nTexDimsChanged & (1<>8)&0xff)/255.0f, 0, ((lastAlpha>>16)&0xff)/255.0f); s_bAlphaChanged = false; } - if (s_bZTextureTypeChanged) + if (s_bZTextureTypeChanged || g_ActiveConfig.bUseGLSL) { float ftemp[4]; switch (bpmem.ztex2.type) @@ -137,7 +137,7 @@ void PixelShaderManager::SetConstants() s_bZTextureTypeChanged = false; } - if (s_bZBiasChanged || s_bDepthRangeChanged) + if (s_bZBiasChanged || s_bDepthRangeChanged || g_ActiveConfig.bUseGLSL) { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -153,12 +153,12 @@ void PixelShaderManager::SetConstants() } // indirect incoming texture scales - if (s_nIndTexScaleChanged) + if (s_nIndTexScaleChanged || g_ActiveConfig.bUseGLSL) { // set as two sets of vec4s, each containing S and T of two ind stages. float f[8]; - if (s_nIndTexScaleChanged & 0x03) + if (s_nIndTexScaleChanged & 0x03 || g_ActiveConfig.bUseGLSL) { for (u32 i = 0; i < 2; ++i) { @@ -169,7 +169,7 @@ void PixelShaderManager::SetConstants() SetPSConstant4fv(C_INDTEXSCALE, f); } - if (s_nIndTexScaleChanged & 0x0c) { + if (s_nIndTexScaleChanged & 0x0c || g_ActiveConfig.bUseGLSL) { for (u32 i = 2; i < 4; ++i) { f[2 * i] = bpmem.texscale[1].getScaleS(i & 1); f[2 * i + 1] = bpmem.texscale[1].getScaleT(i & 1); @@ -181,11 +181,11 @@ void PixelShaderManager::SetConstants() s_nIndTexScaleChanged = 0; } - if (s_nIndTexMtxChanged) + if (s_nIndTexMtxChanged || g_ActiveConfig.bUseGLSL) { for (int i = 0; i < 3; ++i) { - if (s_nIndTexMtxChanged & (1 << i)) + if (s_nIndTexMtxChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { int scale = ((u32)bpmem.indmtx[i].col0.s0 << 0) | ((u32)bpmem.indmtx[i].col1.s1 << 2) | @@ -215,13 +215,13 @@ void PixelShaderManager::SetConstants() s_nIndTexMtxChanged = 0; } - if (s_bFogColorChanged) + if (s_bFogColorChanged || g_ActiveConfig.bUseGLSL) { SetPSConstant4f(C_FOG, bpmem.fog.color.r / 255.0f, bpmem.fog.color.g / 255.0f, bpmem.fog.color.b / 255.0f, 0); s_bFogColorChanged = false; } - if (s_bFogParamChanged) + if (s_bFogParamChanged || g_ActiveConfig.bUseGLSL) { if(!g_ActiveConfig.bDisableFog) { @@ -237,7 +237,7 @@ void PixelShaderManager::SetConstants() s_bFogParamChanged = false; } - if (s_bFogRangeAdjustChanged) + if (s_bFogRangeAdjustChanged || g_ActiveConfig.bUseGLSL) { if(!g_ActiveConfig.bDisableFog && bpmem.fogRange.Base.Enabled == 1) { @@ -261,7 +261,7 @@ void PixelShaderManager::SetConstants() if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) // config check added because the code in here was crashing for me inside SetPSConstant4f { - if (nLightsChanged[0] >= 0) + if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -297,14 +297,14 @@ void PixelShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged) + if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i)) + if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { u32 data = *(xfregs.ambColor + i); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index a18829fde2..8fd53d128d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -173,7 +173,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (nTransformMatricesChanged[0] >= 0) + if (nTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nTransformMatricesChanged[0] / 4; int endn = (nTransformMatricesChanged[1] + 3) / 4; @@ -181,7 +181,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_TRANSFORMMATRICES + startn, endn - startn, pstart); nTransformMatricesChanged[0] = nTransformMatricesChanged[1] = -1; } - if (nNormalMatricesChanged[0] >= 0) + if (nNormalMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nNormalMatricesChanged[0] / 3; int endn = (nNormalMatricesChanged[1] + 2) / 3; @@ -190,7 +190,7 @@ void VertexShaderManager::SetConstants() nNormalMatricesChanged[0] = nNormalMatricesChanged[1] = -1; } - if (nPostTransformMatricesChanged[0] >= 0) + if (nPostTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nPostTransformMatricesChanged[0] / 4; int endn = (nPostTransformMatricesChanged[1] + 3 ) / 4; @@ -198,7 +198,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_POSTTRANSFORMMATRICES + startn, endn - startn, pstart); } - if (nLightsChanged[0] >= 0) + if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -234,14 +234,14 @@ void VertexShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged) + if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i)) + if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { u32 data = *(xfregs.ambColor + i); @@ -257,7 +257,7 @@ void VertexShaderManager::SetConstants() nMaterialsChanged = 0; } - if (bPosNormalMatrixChanged) + if (bPosNormalMatrixChanged || g_ActiveConfig.bUseGLSL) { bPosNormalMatrixChanged = false; @@ -268,7 +268,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant3fv(C_POSNORMALMATRIX + 3, 3, norm); } - if (bTexMatricesChanged[0]) + if (bTexMatricesChanged[0] || g_ActiveConfig.bUseGLSL) { bTexMatricesChanged[0] = false; const float *fptrs[] = @@ -283,7 +283,7 @@ void VertexShaderManager::SetConstants() } } - if (bTexMatricesChanged[1]) + if (bTexMatricesChanged[1] || g_ActiveConfig.bUseGLSL) { bTexMatricesChanged[1] = false; const float *fptrs[] = { @@ -297,7 +297,7 @@ void VertexShaderManager::SetConstants() } } - if (bViewportChanged) + if (bViewportChanged || g_ActiveConfig.bUseGLSL) { bViewportChanged = false; SetVSConstant4f(C_DEPTHPARAMS,xfregs.viewport.farZ / 16777216.0f,xfregs.viewport.zRange / 16777216.0f,0.0f,0.0f); @@ -306,7 +306,7 @@ void VertexShaderManager::SetConstants() bProjectionChanged = true; } - if (bProjectionChanged) + if (bProjectionChanged || g_ActiveConfig.bUseGLSL) { bProjectionChanged = false; From 33c24f0a15161de23c26c61e2fc6efeb73def6df Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:04:34 -0600 Subject: [PATCH 009/625] Almost there. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 218 +++++++++++------- .../Plugin_VideoOGL/Src/TextureCache.cpp | 9 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 29 ++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 3 +- 6 files changed, 175 insertions(+), 88 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 5d7fa9790e..d3d59cde63 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -1263,7 +1263,7 @@ static bool WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode compindex = bpmem.alphaFunc.comp1 % 8; WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table - WRITE(p, ")){ocol0 = 0;%s%s discard;%s}\n", + WRITE(p, ")){ocol0 = float4(0.0);%s%s discard;%s}\n", dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = 0;" : "", DepthTextureEnable ? "depth = 1.f;" : "", (ApiType != API_D3D11) ? "return;" : ""); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index ac35a4aa35..9a6a220979 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -291,7 +291,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "int posmtx = fposmtx;\n"); + WRITE(p, "int posmtx = int(fposmtx);\n"); } WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES"[posmtx], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 601445988f..6c67252dde 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -38,8 +38,8 @@ namespace OGL { static int s_nMaxPixelInstructions; -static GLuint s_ColorMatrixProgram = 0; -static GLuint s_DepthMatrixProgram = 0; +static FRAGMENTSHADER s_ColorMatrixProgram; +static FRAGMENTSHADER s_DepthMatrixProgram; PixelShaderCache::PSCache PixelShaderCache::PixelShaders; PIXELSHADERUID PixelShaderCache::s_curuid; bool PixelShaderCache::s_displayCompileAlert; @@ -56,12 +56,12 @@ bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram; + return s_DepthMatrixProgram.glprogid; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram; + return s_ColorMatrixProgram.glprogid; } void PixelShaderCache::Init() @@ -105,98 +105,154 @@ void PixelShaderCache::Init() glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); + if(g_ActiveConfig.bUseGLSL) + { + char pmatrixprog[2048]; + sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if(!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + s_ColorMatrixProgram.Destroy(); + } + sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if(!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + s_DepthMatrixProgram.Destroy(); + } + } + else + { + char pmatrixprog[2048]; + sprintf(pmatrixprog, "!!ARBfp1.0" + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + glGenProgramsARB(1, &s_ColorMatrixProgram.glprogid); + SetCurrentShader(s_ColorMatrixProgram.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - char pmatrixprog[2048]; - sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_ColorMatrixProgram); - SetCurrentShader(s_ColorMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + s_ColorMatrixProgram.Destroy(); + } - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - } + sprintf(pmatrixprog, "!!ARBfp1.0\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + "FLR R0.x,R0;\n" //bits 31..24 - "FLR R0.x,R0;\n" //bits 31..24 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 + "MUL R0,R0,K0.y;\n" // /255 - "MUL R0,R0,K0.y;\n" // /255 + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + glGenProgramsARB(1, &s_DepthMatrixProgram.glprogid); + SetCurrentShader(s_DepthMatrixProgram.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_DepthMatrixProgram); - SetCurrentShader(s_DepthMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - } + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + s_DepthMatrixProgram.Destroy(); + } + } } void PixelShaderCache::Shutdown() { - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; + s_ColorMatrixProgram.Destroy(); + s_DepthMatrixProgram.Destroy(); PSCache::iterator iter = PixelShaders.begin(); for (; iter != PixelShaders.end(); iter++) iter->second.Destroy(); @@ -235,7 +291,6 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Make an entry in the table PSCacheEntry& newentry = PixelShaders[uid]; last_entry = &newentry; - newentry.shader.bGLSL = g_ActiveConfig.bUseGLSL; const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); if (g_ActiveConfig.bEnableShaderDebugging && code) @@ -320,7 +375,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) exit(0); delete[] infoLog; @@ -339,6 +393,7 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) (void)GL_REPORT_ERROR(); ps.glprogid = result; + ps.bGLSL = true; return true; } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) @@ -462,6 +517,7 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } glGenProgramsARB(1, &ps.glprogid); + ps.bGLSL = false; PixelShaderCache::SetCurrentShader(ps.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 4a9431a563..d3a1283627 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -42,6 +42,7 @@ #include "ImageWrite.h" #include "MemoryUtil.h" #include "PixelShaderCache.h" +#include "ProgramShaderCache.h" #include "PixelShaderManager.h" #include "Render.h" #include "Statistics.h" @@ -296,7 +297,13 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtualW, virtualH); - PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); + if(g_ActiveConfig.bUseGLSL) + { + ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); + PixelShaderCache::SetPSSampler("samp0", 0); + } + else + PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); PixelShaderManager::SetColorMatrix(colmat); // set transformation GL_REPORT_ERRORD(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 2c97b904b2..ebca599fe8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -129,9 +129,6 @@ void VertexManager::vFlush() //glBufferData(GL_ARRAY_BUFFER, s_pCurBufferPointer - LocalVBuffer, LocalVBuffer, GL_STREAM_DRAW); GL_REPORT_ERRORD(); - // setup the pointers - if (g_nativeVertexFmt) - g_nativeVertexFmt->SetupVertexPointers(); GL_REPORT_ERRORD(); u32 usedtextures = 0; @@ -221,6 +218,21 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); + + // setup the pointers + if (g_nativeVertexFmt) + g_nativeVertexFmt->SetupVertexPointers(); + GL_REPORT_ERRORD(); + if(g_ActiveConfig.bUseGLSL) + for (int i = 0; i < 8; i++) + { + if (usedtextures & (1 << i)) + { + char tmp[16]; + sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? + PixelShaderCache::SetPSSampler(tmp, i); + } + } Draw(); @@ -232,6 +244,17 @@ void VertexManager::vFlush() { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); PixelShaderManager::SetConstants(); // Need to set these again + if (g_nativeVertexFmt) + g_nativeVertexFmt->SetupVertexPointers(); + for (int i = 0; i < 8; i++) + { + if (usedtextures & (1 << i)) + { + char tmp[16]; + sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? + PixelShaderCache::SetPSSampler(tmp, i); + } + } } else if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index c543dfb86e..34c8020a00 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -125,7 +125,6 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) // Make an entry in the table VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - entry.shader.bGLSL = g_ActiveConfig.bUseGLSL; const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); GetSafeVertexShaderId(&entry.safe_uid, components); @@ -223,6 +222,7 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) (void)GL_REPORT_ERROR(); vs.glprogid = result; + vs.bGLSL = true; return true; } void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) @@ -352,6 +352,7 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) plocal = strstr(plocal + 13, "program.local"); } glGenProgramsARB(1, &vs.glprogid); + vs.bGLSL = false; VertexShaderCache::SetCurrentShader(vs.glprogid); glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); From ed18b82d2f9b36293f6b3ffaaeeaf958cf024144 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:11:41 -0600 Subject: [PATCH 010/625] This lets us see stuff with GLSL shaders. Just need to take care of some compile errors now. --- Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6c67252dde..b3e8b09b18 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -66,7 +66,6 @@ GLuint PixelShaderCache::GetColorMatrixProgram() void PixelShaderCache::Init() { - glEnable(GL_FRAGMENT_PROGRAM_ARB); ShaderEnabled = true; CurrentShader = 0; last_entry = NULL; @@ -87,6 +86,7 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 34c8020a00..e51e70d9eb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -55,7 +55,6 @@ bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { - glEnable(GL_VERTEX_PROGRAM_ARB); ShaderEnabled = true; CurrentShader = 0; last_entry = NULL; @@ -75,6 +74,7 @@ void VertexShaderCache::Init() pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); From bf4ef054d3cf2889a7753d86ce3b582ce5349e4c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:47:13 -0600 Subject: [PATCH 011/625] Shader Compile fixes. Played SMS for two shines. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/TextureConversionShader.cpp | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index d3d59cde63..dcfa2da05d 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -750,7 +750,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // optional perspective divides if (xfregs.texMtxInfo[i].projection == XF_TEXPROJ_STQ) { - WRITE(p, "if (uv%d.z)", i); + WRITE(p, "if (uv%d.z != 0.0f)", i); WRITE(p, " uv%d.xy = uv%d.xy / uv%d.z;\n", i, i, i); } diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index ce4a5ca1f4..caa4ff8f72 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -125,8 +125,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } - WRITE(p," in float2 uv0 : TEXCOORD0)\n" - "{\n" + WRITE(p, "{\n" " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); @@ -448,10 +447,9 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) WriteSampleColor(p, "rgb", "float3 texSample0",ApiType); WriteIncrementSampleX(p,ApiType); WriteSampleColor(p, "rgb", "float3 texSample1",ApiType); - - WRITE(p, " float2 texRs = {texSample0.r, texSample1.r};\n"); - WRITE(p, " float2 texGs = {texSample0.g, texSample1.g};\n"); - WRITE(p, " float2 texBs = {texSample0.b, texSample1.b};\n"); + WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n"); + WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n"); + WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n"); WriteToBitDepth(p, 6, "texGs", "float2 gInt"); WRITE(p, " float2 gUpper = floor(gInt / 8.0f);\n"); From b01c97368942b8efb2ad1888b36d11d818d2c4fe Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:01:14 -0600 Subject: [PATCH 012/625] Missed one --- Source/Core/VideoCommon/Src/TextureConversionShader.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index caa4ff8f72..bf45484850 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -210,8 +210,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) } - WRITE(p," in float2 uv0 : TEXCOORD0)\n" - "{\n" + WRITE(p, "{\n" " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); From 4c136c4efc40400e1f94f8dad39c71217cf4c477 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:20:55 -0600 Subject: [PATCH 013/625] Missed a spot. Most games work now, Still have a problem with viewtiful joe. Destination Alpha pass doesn't work yet, going to use Dual source blending on that. --- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 588c593b13..b5e67b9f19 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -24,6 +24,7 @@ #include "TextureConversionShader.h" #include "TextureCache.h" #include "PixelShaderCache.h" +#include "ProgramShaderCache.h" #include "VertexShaderManager.h" #include "FramebufferManager.h" #include "Globals.h" @@ -228,7 +229,7 @@ void Shutdown() s_texConvFrameBuffer = 0; } -void EncodeToRamUsingShader(FRAGMENTSHADER& shader, GLuint srcTexture, const TargetRectangle& sourceRc, +void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) { @@ -265,8 +266,6 @@ void EncodeToRamUsingShader(FRAGMENTSHADER& shader, GLuint srcTexture, const Tar glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); - PixelShaderCache::SetCurrentShader(shader.glprogid); - // Draw... glBegin(GL_QUADS); glTexCoord2f((float)sourceRc.left, (float)sourceRc.top); glVertex2f(-1,-1); @@ -347,13 +346,6 @@ void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyf s32 expandedHeight = (height + blkH) & (~blkH); float sampleStride = bScaleByHalf ? 2.f : 1.f; - TextureConversionShader::SetShaderParameters( - (float)expandedWidth, - (float)Renderer::EFBToScaledY(expandedHeight), // TODO: Why do we scale this? - (float)Renderer::EFBToScaledX(source.left), - (float)Renderer::EFBToScaledY(EFB_HEIGHT - source.top - expandedHeight), - Renderer::EFBToScaledXf(sampleStride), - Renderer::EFBToScaledYf(sampleStride)); TargetRectangle scaledSource; scaledSource.top = 0; @@ -366,7 +358,23 @@ void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyf int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); g_renderer->ResetAPIState(); - EncodeToRamUsingShader(texconv_shader, source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight, readStride, true, bScaleByHalf > 0); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); + + TextureConversionShader::SetShaderParameters( + (float)expandedWidth, + (float)Renderer::EFBToScaledY(expandedHeight), // TODO: Why do we scale this? + (float)Renderer::EFBToScaledX(source.left), + (float)Renderer::EFBToScaledY(EFB_HEIGHT - source.top - expandedHeight), + Renderer::EFBToScaledXf(sampleStride), + Renderer::EFBToScaledYf(sampleStride)); + + EncodeToRamUsingShader(source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight, readStride, true, bScaleByHalf > 0); + + FramebufferManager::SetFramebuffer(0); VertexShaderManager::SetViewportChanged(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); @@ -411,6 +419,11 @@ u64 EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, s32 expandedWidth = (width + blkW) & (~blkW); s32 expandedHeight = (height + blkH) & (~blkH); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); + float sampleStride = bScaleByHalf ? 2.f : 1.f; TextureConversionShader::SetShaderParameters((float)expandedWidth, (float)Renderer::EFBToScaledY(expandedHeight), // TODO: Why do we scale this? @@ -430,7 +443,7 @@ u64 EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); - EncodeToRamUsingShader(texconv_shader, source_texture, scaledSource, + EncodeToRamUsingShader(source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight, readStride, true, bScaleByHalf > 0 && !bFromZBuffer); @@ -451,7 +464,13 @@ u64 EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, int dstWidth, int dstHeight) { g_renderer->ResetAPIState(); - EncodeToRamUsingShader(s_rgbToYuyvProgram, srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(s_rgbToYuyvProgram.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(s_rgbToYuyvProgram.glprogid); + + EncodeToRamUsingShader(srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); FramebufferManager::SetFramebuffer(0); VertexShaderManager::SetViewportChanged(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); From f77d54ff52c19ae7b61e2bc7e59d5de1a6e22722 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:23:00 -0600 Subject: [PATCH 014/625] Welp, just fixed that problem. --- Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index b5e67b9f19..e1439d621c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -263,6 +263,8 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, } GL_REPORT_ERRORD(); + if(g_ActiveConfig.bUseGLSL) + PixelShaderCache::SetPSSampler("samp0", 0); glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); From 1201988fe4e94720f32f2165ee03d5debf957cd7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 01:51:08 -0600 Subject: [PATCH 015/625] Add support for GL_ARB_shading_language_420pack so we don't have to binding sampler locations. Also add support for GL_ARB_separate_shader_objects which doesn't currently work for some reason....investigating. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 93 ++++++--- .../Src/TextureConversionShader.cpp | 13 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 34 ++-- Source/Core/VideoCommon/Src/VideoConfig.h | 2 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 179 +++++++++++++----- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 + .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ++ 7 files changed, 252 insertions(+), 91 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index dcfa2da05d..3d328ed70c 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -508,6 +508,22 @@ const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) sprintf(result, " : register(%s%d)", prefix, num); return result; } +const char* WriteBinding(API_TYPE ApiType, const u32 num) +{ + if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) + return ""; + static char result[64]; + sprintf(result, "layout(binding = %d) ", num); + return result; +} +const char* WriteLocation(API_TYPE ApiType, const u32 num) +{ + if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLLocation) + return ""; + static char result[64]; + sprintf(result, "layout(location = %d) ", num); + return result; +} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { @@ -537,7 +553,16 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - WRITE(p, "#version 120\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) + WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + } + else + WRITE(p, "#version 120\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -547,52 +572,58 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#define frac(x) fract(x)\n"); WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); - } - // Declare samplers - - if(ApiType != API_D3D11) - { - WRITE(p, "uniform sampler2D "); + + for (int i = 0; i < 8; ++i) + WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); } else { - WRITE(p, "sampler "); - } + // Declare samplers - bool bfirst = true; - for (int i = 0; i < 8; ++i) - { - WRITE(p, "%s samp%d %s", bfirst?"":",", i, WriteRegister(ApiType, "s", i)); - bfirst = false; - } - WRITE(p, ";\n"); - if(ApiType == API_D3D11) - { - WRITE(p, "Texture2D "); - bfirst = true; + if(ApiType != API_D3D11) + { + WRITE(p, "uniform sampler2D "); + } + else + { + WRITE(p, "sampler "); + } + + bool bfirst = true; for (int i = 0; i < 8; ++i) { - WRITE(p, "%s Tex%d : register(t%d)", bfirst?"":",", i, i); + WRITE(p, "%s samp%d %s", bfirst?"":",", i, WriteRegister(ApiType, "s", i)); bfirst = false; } WRITE(p, ";\n"); + if(ApiType == API_D3D11) + { + WRITE(p, "Texture2D "); + bfirst = true; + for (int i = 0; i < 8; ++i) + { + WRITE(p, "%s Tex%d : register(t%d)", bfirst?"":",", i, i); + bfirst = false; + } + WRITE(p, ";\n"); + } } WRITE(p, "\n"); - WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); } if(ApiType != API_GLSL) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index bf45484850..1be760a608 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -26,6 +26,7 @@ #include "PixelShaderGen.h" #include "BPMemory.h" #include "RenderBase.h" +#include "VideoConfig.h" #define WRITE p+=sprintf @@ -92,6 +93,8 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } else if (ApiType == API_GLSL) { + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "layout(binding = 0) "); WRITE(p, "uniform sampler2DRect samp0;\n"); } else if (ApiType & API_D3D9) @@ -177,6 +180,8 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) } else if (ApiType == API_GLSL) { + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "layout(binding = 0) "); WRITE(p, "uniform sampler2DRect samp0;\n"); } else if (ApiType & API_D3D9) @@ -834,7 +839,13 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - WRITE(p, "#version 120\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + WRITE(p, "#version 330 compatibility\n"); + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + } + else + WRITE(p, "#version 120\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 9a6a220979..78feff6541 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -164,7 +164,8 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) } extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); - +extern const char* WriteBinding(API_TYPE ApiType, const u32 num); +extern const char* WriteLocation(API_TYPE ApiType, const u32 num); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -187,7 +188,16 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - WRITE(p, "#version 120\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) + WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + } + else + WRITE(p, "#version 120\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -199,15 +209,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); p = GenerateVSOutputStruct(p, components, ApiType); @@ -403,7 +413,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & (VB_HAS_NRM1|VB_HAS_NRM2)) { // transform the light dir into tangent space - WRITE(p, "ldir = normalize("I_LIGHTS".lights[%d].pos.xyz - pos.xyz);\n", texinfo.embosslightshift); + WRITE(p, "ldir = normalize("I_LIGHTS"[%d + 3].xyz - pos.xyz);\n", texinfo.embosslightshift); WRITE(p, "o.tex%d.xyz = o.tex%d.xyz + float3(dot(ldir, _norm1), dot(ldir, _norm2), 0.0f);\n", i, texinfo.embosssourceshift); } else diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 63df7e0ded..414086ed15 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -168,6 +168,8 @@ struct VideoConfig bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; bool bSupportsGLSL; + bool bSupportsGLSLBinding; + bool bSupportsGLSLLocation; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index b3e8b09b18..5ee839676c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -63,7 +63,6 @@ GLuint PixelShaderCache::GetColorMatrixProgram() { return s_ColorMatrixProgram.glprogid; } - void PixelShaderCache::Init() { ShaderEnabled = true; @@ -79,6 +78,12 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + g_ActiveConfig.backend_info.bSupportsGLSLBinding = true; + // This bit doesn't quite work yet, always set to false + //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) + g_ActiveConfig.backend_info.bSupportsGLSLLocation = false; } else { @@ -108,56 +113,118 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; - sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - if(!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + sprintf(pmatrixprog, "#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" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + else + { + sprintf(pmatrixprog, "#version 120\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + if (!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - if(!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + sprintf(pmatrixprog, "#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" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + else + { + sprintf(pmatrixprog, "#version 120\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + if (!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); s_DepthMatrixProgram.Destroy(); @@ -398,6 +465,8 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { + if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for(int a = 0; a < NUM_UNIFORMS; ++a) if(!strcmp(name, UniformNames[a])) @@ -429,6 +498,12 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; + + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) @@ -442,6 +517,11 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) @@ -455,6 +535,11 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index d5e2cae6bc..6547b95234 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -88,6 +88,8 @@ public: static GLuint GetDepthMatrixProgram(); + static bool SupportsBinding(); + static void SetCurrentShader(GLuint Shader); static void DisableShader(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index e51e70d9eb..143340277e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -247,6 +247,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[1] = f2; buf[2] = f3; buf[3] = f4; + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -260,6 +265,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -273,6 +283,11 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -294,6 +309,11 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co buf[4*i+2] = *f++; buf[4*i+3] = 0.f; } + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) From cecc3c3873c6aaabea514b3a5eff380e5a32856f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 03:20:31 -0600 Subject: [PATCH 016/625] Bit of cleanup. Clean up my massive hack in the ShaderManagerFiles. Almost feature parity with Nvidia CG now I think. Just need to do Alpha test with Dual source blending now. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 3 +- .../VideoCommon/Src/PixelShaderManager.cpp | 38 ++++++++++--------- .../Src/TextureConversionShader.cpp | 10 ++--- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 12 ++++-- .../VideoCommon/Src/VertexShaderManager.cpp | 24 ++++++------ .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 5 ++- 6 files changed, 52 insertions(+), 40 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 3d328ed70c..584254e371 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -891,7 +891,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { if(DepthTextureEnable) - WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragData[0] = ocol0;\n"); } } diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 4f6cd8da2d..3d4ddd2f35 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -85,37 +85,39 @@ void PixelShaderManager::Shutdown() void PixelShaderManager::SetConstants() { + if (g_ActiveConfig.bUseGLSL) + Dirty(); for (int i = 0; i < 2; ++i) { - if (s_nColorsChanged[i] || g_ActiveConfig.bUseGLSL) + if (s_nColorsChanged[i]) { int baseind = i ? C_KCOLORS : C_COLORS; for (int j = 0; j < 4; ++j) { - if (s_nColorsChanged[i] & (1 << j) || g_ActiveConfig.bUseGLSL) + if (s_nColorsChanged[i] & (1 << j)) SetPSConstant4fv(baseind+j, &lastRGBAfull[i][j][0]); } s_nColorsChanged[i] = 0; } } - if (s_nTexDimsChanged || g_ActiveConfig.bUseGLSL) + if (s_nTexDimsChanged) { for (int i = 0; i < 8; ++i) { - if (s_nTexDimsChanged & (1<>8)&0xff)/255.0f, 0, ((lastAlpha>>16)&0xff)/255.0f); s_bAlphaChanged = false; } - if (s_bZTextureTypeChanged || g_ActiveConfig.bUseGLSL) + if (s_bZTextureTypeChanged) { float ftemp[4]; switch (bpmem.ztex2.type) @@ -137,7 +139,7 @@ void PixelShaderManager::SetConstants() s_bZTextureTypeChanged = false; } - if (s_bZBiasChanged || s_bDepthRangeChanged || g_ActiveConfig.bUseGLSL) + if (s_bZBiasChanged || s_bDepthRangeChanged) { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -153,12 +155,12 @@ void PixelShaderManager::SetConstants() } // indirect incoming texture scales - if (s_nIndTexScaleChanged || g_ActiveConfig.bUseGLSL) + if (s_nIndTexScaleChanged) { // set as two sets of vec4s, each containing S and T of two ind stages. float f[8]; - if (s_nIndTexScaleChanged & 0x03 || g_ActiveConfig.bUseGLSL) + if (s_nIndTexScaleChanged & 0x03) { for (u32 i = 0; i < 2; ++i) { @@ -169,7 +171,7 @@ void PixelShaderManager::SetConstants() SetPSConstant4fv(C_INDTEXSCALE, f); } - if (s_nIndTexScaleChanged & 0x0c || g_ActiveConfig.bUseGLSL) { + if (s_nIndTexScaleChanged & 0x0c) { for (u32 i = 2; i < 4; ++i) { f[2 * i] = bpmem.texscale[1].getScaleS(i & 1); f[2 * i + 1] = bpmem.texscale[1].getScaleT(i & 1); @@ -181,11 +183,11 @@ void PixelShaderManager::SetConstants() s_nIndTexScaleChanged = 0; } - if (s_nIndTexMtxChanged || g_ActiveConfig.bUseGLSL) + if (s_nIndTexMtxChanged) { for (int i = 0; i < 3; ++i) { - if (s_nIndTexMtxChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (s_nIndTexMtxChanged & (1 << i)) { int scale = ((u32)bpmem.indmtx[i].col0.s0 << 0) | ((u32)bpmem.indmtx[i].col1.s1 << 2) | @@ -215,13 +217,13 @@ void PixelShaderManager::SetConstants() s_nIndTexMtxChanged = 0; } - if (s_bFogColorChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogColorChanged) { SetPSConstant4f(C_FOG, bpmem.fog.color.r / 255.0f, bpmem.fog.color.g / 255.0f, bpmem.fog.color.b / 255.0f, 0); s_bFogColorChanged = false; } - if (s_bFogParamChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogParamChanged) { if(!g_ActiveConfig.bDisableFog) { @@ -237,7 +239,7 @@ void PixelShaderManager::SetConstants() s_bFogParamChanged = false; } - if (s_bFogRangeAdjustChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogRangeAdjustChanged) { if(!g_ActiveConfig.bDisableFog && bpmem.fogRange.Base.Enabled == 1) { @@ -261,7 +263,7 @@ void PixelShaderManager::SetConstants() if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) // config check added because the code in here was crashing for me inside SetPSConstant4f { - if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nLightsChanged[0] >= 0) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -297,14 +299,14 @@ void PixelShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged & (1 << i)) { u32 data = *(xfregs.ambColor + i); diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 1be760a608..550fef2740 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -149,12 +149,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL) + if(ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -237,12 +237,12 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL) + if(ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -263,7 +263,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL || ApiType != API_GLSL) texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 78feff6541..2aceb5cda7 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -195,9 +195,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); } else + { WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -227,11 +233,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); if (components & VB_HAS_POSMTXIDX) - WRITE(p, "attribute float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); + WRITE(p, "ATTRIN float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); if (components & VB_HAS_NRM1) - WRITE(p, "attribute float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); + WRITE(p, "ATTRIN float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); if (components & VB_HAS_NRM2) - WRITE(p, "attribute float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); + WRITE(p, "ATTRIN float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); if (components & VB_HAS_COL0) WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 8fd53d128d..2b962c5a6b 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -173,7 +173,9 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (nTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) + Dirty(); + if (nTransformMatricesChanged[0] >= 0) { int startn = nTransformMatricesChanged[0] / 4; int endn = (nTransformMatricesChanged[1] + 3) / 4; @@ -181,7 +183,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_TRANSFORMMATRICES + startn, endn - startn, pstart); nTransformMatricesChanged[0] = nTransformMatricesChanged[1] = -1; } - if (nNormalMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nNormalMatricesChanged[0] >= 0) { int startn = nNormalMatricesChanged[0] / 3; int endn = (nNormalMatricesChanged[1] + 2) / 3; @@ -190,7 +192,7 @@ void VertexShaderManager::SetConstants() nNormalMatricesChanged[0] = nNormalMatricesChanged[1] = -1; } - if (nPostTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nPostTransformMatricesChanged[0] >= 0) { int startn = nPostTransformMatricesChanged[0] / 4; int endn = (nPostTransformMatricesChanged[1] + 3 ) / 4; @@ -198,7 +200,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_POSTTRANSFORMMATRICES + startn, endn - startn, pstart); } - if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nLightsChanged[0] >= 0) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -234,14 +236,14 @@ void VertexShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged & (1 << i)) { u32 data = *(xfregs.ambColor + i); @@ -257,7 +259,7 @@ void VertexShaderManager::SetConstants() nMaterialsChanged = 0; } - if (bPosNormalMatrixChanged || g_ActiveConfig.bUseGLSL) + if (bPosNormalMatrixChanged) { bPosNormalMatrixChanged = false; @@ -268,7 +270,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant3fv(C_POSNORMALMATRIX + 3, 3, norm); } - if (bTexMatricesChanged[0] || g_ActiveConfig.bUseGLSL) + if (bTexMatricesChanged[0]) { bTexMatricesChanged[0] = false; const float *fptrs[] = @@ -283,7 +285,7 @@ void VertexShaderManager::SetConstants() } } - if (bTexMatricesChanged[1] || g_ActiveConfig.bUseGLSL) + if (bTexMatricesChanged[1]) { bTexMatricesChanged[1] = false; const float *fptrs[] = { @@ -297,7 +299,7 @@ void VertexShaderManager::SetConstants() } } - if (bViewportChanged || g_ActiveConfig.bUseGLSL) + if (bViewportChanged) { bViewportChanged = false; SetVSConstant4f(C_DEPTHPARAMS,xfregs.viewport.farZ / 16777216.0f,xfregs.viewport.zRange / 16777216.0f,0.0f,0.0f); @@ -306,7 +308,7 @@ void VertexShaderManager::SetConstants() bProjectionChanged = true; } - if (bProjectionChanged || g_ActiveConfig.bUseGLSL) + if (bProjectionChanged) { bProjectionChanged = false; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 5ee839676c..f4f9a46e72 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -80,10 +80,11 @@ void PixelShaderCache::Init() pCompilePixelShader = CompileGLSLPixelShader; // Should this be set here? if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_ActiveConfig.backend_info.bSupportsGLSLBinding = true; + g_Config.backend_info.bSupportsGLSLBinding = true; // This bit doesn't quite work yet, always set to false //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) - g_ActiveConfig.backend_info.bSupportsGLSLLocation = false; + g_Config.backend_info.bSupportsGLSLLocation = false; + UpdateActiveConfig(); } else { From 62b9a779c152df45a723d4fbd8c1d75d8d6fc8e3 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 04:11:30 -0600 Subject: [PATCH 017/625] Playing through SSBM story made me find this. --- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 2aceb5cda7..7463f5d5fc 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -332,7 +332,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & VB_HAS_NRM1) WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); if (components & VB_HAS_NRM2) - WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX".[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); + WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); } if (!(components & VB_HAS_NRM0)) From 0ccba2b581bedc564aa8052d6545e946768d4c70 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 05:09:48 -0600 Subject: [PATCH 018/625] Support Dual Source Blending in OGL plugin with GLSL. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 23 +++++++++++++------ .../Plugin_VideoOGL/Src/VertexManager.cpp | 8 ++----- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 584254e371..4c402e0a9f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -675,10 +675,18 @@ 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. - - WRITE(p, " float4 ocol0;\n"); + + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, " float4 ocol1;\n"); // Will be supported later + { + // 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 + } + else + { + WRITE(p, " float4 ocol0;\n"); + } if(DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? WRITE(p, " float4 rawpos = gl_FragCoord;\n"); @@ -721,7 +729,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // alpha test will always fail, so restart the shader and just make it an empty function WRITE(p, "ocol0 = float4(0);\n"); WRITE(p, "discard;\n"); - if(ApiType == API_GLSL) + if(ApiType == API_GLSL && dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "gl_FragData[0] = ocol0;\n"); if(ApiType != API_D3D11) WRITE(p, "return;\n"); @@ -833,7 +841,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { // Once we switch to GLSL 1.3 and bind variables, we won't need to do this - WRITE(p, "gl_FragData[0] = ocol0;\n"); + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); if(DepthTextureEnable) WRITE(p, "gl_FragDepth = depth;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) @@ -892,8 +901,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { if(DepthTextureEnable) WRITE(p, "gl_FragDepth = depth;\n"); - - WRITE(p, "gl_FragData[0] = ocol0;\n"); + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); } } WRITE(p, "}\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index ebca599fe8..e2723c0c98 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -177,8 +177,8 @@ void VertexManager::vFlush() bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; -#ifdef USE_DUAL_SOURCE_BLEND - bool dualSourcePossible = GLEW_ARB_blend_func_extended; + // Makes sure we can actually do Dual source blending + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; // finally bind FRAGMENTSHADER* ps; @@ -201,10 +201,6 @@ void VertexManager::vFlush() { ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); } -#else - bool dualSourcePossible = false; - FRAGMENTSHADER* ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); -#endif VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); if(g_ActiveConfig.bUseGLSL) From c89c484dd0269c44d88a63e3796ad6e34d927d35 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 05:32:17 -0600 Subject: [PATCH 019/625] Few compiler errors that got exposed once I got Dual Source Blending working. Seems it isn't working quite 100% either. Good chance I missed something anyway. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 4c402e0a9f..9071747526 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -833,20 +833,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { // alpha test will always fail, so restart the shader and just make it an empty function p = pmainstart; - WRITE(p, "ocol0 = 0;\n"); + WRITE(p, "ocol0 = vec4(0.0f);\n"); if(DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "ocol1 = 0;\n"); + WRITE(p, "ocol1 = vec4(0.0f);\n"); if(ApiType == API_GLSL) { - // Once we switch to GLSL 1.3 and bind variables, we won't need to do this - if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "gl_FragData[0] = ocol0;\n"); - if(DepthTextureEnable) - WRITE(p, "gl_FragDepth = depth;\n"); - if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - ; // TODO: Will do this later + // Once we switch to GLSL 1.3 and bind variables, we won't need to do this + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); } WRITE(p, "discard;\n"); if(ApiType != API_D3D11) @@ -1011,10 +1009,10 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) WRITE(p, "float2 indtevtrans%d = "I_INDTEXMTX"[%d].ww * uv%d.xy * indtevcrd%d.yy;\n", n, mtxidx, texcoord, n); } else - WRITE(p, "float2 indtevtrans%d = 0;\n", n); + WRITE(p, "float2 indtevtrans%d = float2(0.0f);\n", n); } else - WRITE(p, "float2 indtevtrans%d = 0;\n", n); + WRITE(p, "float2 indtevtrans%d = float2(0.0f);\n", n); // --------- // Wrapping @@ -1304,8 +1302,8 @@ static bool WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode compindex = bpmem.alphaFunc.comp1 % 8; WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table - WRITE(p, ")){ocol0 = float4(0.0);%s%s discard;%s}\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = 0;" : "", + WRITE(p, ")){ocol0 = float4(0.0f);%s%s discard;%s}\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = vec4(0.0f);" : "", DepthTextureEnable ? "depth = 1.f;" : "", (ApiType != API_D3D11) ? "return;" : ""); return true; From 9119399547b44f9c9068fa52812a9e90ab367d8d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 16:13:04 -0600 Subject: [PATCH 020/625] Put Vertex Uniforms in to the correct places to get ready for UBOs. --- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 7463f5d5fc..a66f3685e3 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -215,14 +215,14 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); p = GenerateVSOutputStruct(p, components, ApiType); From 87c3c37ba71e297ceb037fd9c00117ed26b935ab Mon Sep 17 00:00:00 2001 From: LPFaint99 Date: Fri, 9 Dec 2011 14:28:59 -0800 Subject: [PATCH 021/625] add ProgramShaderCache.* to visual studio project files --- Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj | 2 ++ .../Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj index f782fd2c93..f70f8b9d0e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj @@ -202,6 +202,7 @@ + @@ -224,6 +225,7 @@ + diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters index ed581ff963..9e7816de46 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters @@ -27,6 +27,9 @@ Render + + Render + Render @@ -63,6 +66,9 @@ Render + + Render + Render From 8e5bb59cb692bae1bf4a94797a7c153e9bbd2d3d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 17:30:05 -0600 Subject: [PATCH 022/625] Add in UBOs, doesn't work yet. Still debugging here. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 33 +++++++------ .../VideoCommon/Src/PixelShaderManager.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 25 ++++++---- Source/Core/VideoCommon/Src/VertexShaderGen.h | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- Source/Core/VideoCommon/Src/VideoConfig.h | 2 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 48 +++++++++++++------ .../Src/ProgramShaderCache.cpp | 39 ++++++++++++--- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 8 +++- .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ++++++++ Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 3 ++ 12 files changed, 138 insertions(+), 49 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 9071747526..8d62858ecc 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -610,21 +610,24 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } WRITE(p, "\n"); - - WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); - - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - { - WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); - } + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + + WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); + + // Compiler will optimize these out by itself. + WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); if(ApiType != API_GLSL) { diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 3d4ddd2f35..e9eabb4040 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -85,7 +85,7 @@ void PixelShaderManager::Shutdown() void PixelShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); for (int i = 0; i < 2; ++i) { diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index a66f3685e3..f2559d929c 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -214,16 +214,23 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } + // uniforms - WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); + + WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); p = GenerateVSOutputStruct(p, components, ApiType); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 0d4eeeb1c5..a3364c2982 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -46,7 +46,7 @@ #define C_NORMALMATRICES (C_TRANSFORMMATRICES + 64) #define C_POSTTRANSFORMMATRICES (C_NORMALMATRICES + 32) #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) -#define C_VENVCONST_END (C_DEPTHPARAMS + 4) +#define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, {I_PROJECTION , C_PROJECTION, 4 }, {I_MATERIALS, C_MATERIALS, 4 }, diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 2b962c5a6b..5a12392ed2 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -173,7 +173,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 414086ed15..a8d3a9af27 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -167,9 +167,11 @@ struct VideoConfig bool bSupportsDualSourceBlend; // only supported by D3D11 and OpenGL bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; + bool bSupportsGLSL; bool bSupportsGLSLBinding; bool bSupportsGLSLLocation; + bool bSupportsGLSLUBO; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index f4f9a46e72..978357e18f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -82,8 +82,13 @@ void PixelShaderCache::Init() if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; // This bit doesn't quite work yet, always set to false + // TODO: Probably just drop this entirely in favour of UBOS //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) g_Config.backend_info.bSupportsGLSLLocation = false; + + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) + g_Config.backend_info.bSupportsGLSLUBO = true; + UpdateActiveConfig(); } else @@ -466,11 +471,11 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + for (int a = 0; a < NUM_UNIFORMS; ++a) + if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) return; @@ -484,8 +489,8 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + for (int a = 0; a < NUM_UNIFORMS; ++a) + if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) return; @@ -500,14 +505,19 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 { float f[4] = { f1, f2, f3, f4 }; - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, 1, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); @@ -518,14 +528,19 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, 1, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); @@ -536,14 +551,19 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, count, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f, count); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index fc056aed63..776280103e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -14,12 +14,15 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ + #include "ProgramShaderCache.h" +#include namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; + GLuint ProgramShaderCache::UBOBuffers[2]; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -85,12 +88,14 @@ namespace OGL // Let's attach everything if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out glAttachShader(entry.program.glprogid, entry.program.vsid); + glAttachShader(entry.program.glprogid, entry.program.psid); + glLinkProgram(entry.program.glprogid); - //checkForGLError("linking program"); - glUseProgram(entry.program.glprogid); - //checkForGLError("using program"); + glUseProgram(entry.program.glprogid); + + // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 // We can remove this @@ -122,18 +127,40 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - + void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + { + assert(Buffer > 1); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); + // glBufferSubData expects data in bytes, so multiply count by four + // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4, (void*)&f[0]); + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) { return pshaders[CurrentShaderProgram].program.attrLoc[num]; } - PROGRAMSHADER ProgramShaderCache::GetShaderProgram() + PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { return pshaders[CurrentShaderProgram].program; } - + void ProgramShaderCache::Init(void) + { + glGenBuffers(2, UBOBuffers); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); + // We multiply by *4*4 because we need to get down to basic machine units. + // So multiply by four to get how many floats we have from vec4s + // Then once more to get bytes + glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + // Now bind the buffer to the index point + // We know PS is 0 since we have it statically set in the shader + glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + // Repeat for VS shader + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, C_VENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[1]); + } void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 53abe440f5..a5ff097af6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -94,11 +94,17 @@ class ProgramShaderCache static PCache pshaders; static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; + + // For UBOS + static GLuint UBOBuffers[2]; // PS is 0, VS is 1 public: - static PROGRAMSHADER GetShaderProgram(); + static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); + static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void Init(void); static void Shutdown(void); }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index e2723c0c98..fff8263569 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -239,7 +239,8 @@ void VertexManager::vFlush() if(g_ActiveConfig.bUseGLSL) { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); - PixelShaderManager::SetConstants(); // Need to set these again + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); for (int i = 0; i < 8; i++) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 143340277e..dfa3293a46 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -252,6 +252,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 glUniform4fv(const_number, 1, buf); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -270,6 +275,11 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) glUniform4fv(const_number, 1, f); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -288,6 +298,11 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co glUniform4fv(const_number, count, f); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, f, count); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -314,6 +329,11 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co glUniform4fv(const_number, count, buf); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 0d1c3fc35a..c4e2a8f0ea 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -83,6 +83,7 @@ Make AA apply instantly during gameplay if possible #include "PixelShaderManager.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "CommandProcessor.h" #include "PixelEngine.h" #include "TextureConverter.h" @@ -199,6 +200,7 @@ void VideoBackend::Video_Prepare() VertexShaderManager::Init(); PixelShaderCache::Init(); PixelShaderManager::Init(); + ProgramShaderCache::Init(); PostProcessing::Init(); GL_REPORT_ERRORD(); VertexLoaderManager::Init(); @@ -226,6 +228,7 @@ void VideoBackend::Shutdown() // And need to be called from the video thread TextureConverter::Shutdown(); VertexLoaderManager::Shutdown(); + ProgramShaderCache::Shutdown(); VertexShaderCache::Shutdown(); VertexShaderManager::Shutdown(); PixelShaderManager::Shutdown(); From e8087aa1a9f3471be92af06d6f35917eb835642c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 19:14:02 -0600 Subject: [PATCH 023/625] Remove bSupportsGLSLLocation since it won't work how I expect it. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 34 +++++++------------ .../Core/VideoCommon/Src/VertexShaderGen.cpp | 25 +++++++------- Source/Core/VideoCommon/Src/VideoConfig.h | 1 - .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 20 ----------- .../Src/ProgramShaderCache.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ----------- 6 files changed, 26 insertions(+), 76 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 8d62858ecc..cd7ecd3461 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -516,14 +516,6 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) sprintf(result, "layout(binding = %d) ", num); return result; } -const char* WriteLocation(API_TYPE ApiType, const u32 num) -{ - if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLLocation) - return ""; - static char result[64]; - sprintf(result, "layout(location = %d) ", num); - return result; -} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { @@ -553,13 +545,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); } else WRITE(p, "#version 120\n"); @@ -613,18 +605,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); - WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); // Compiler will optimize these out by itself. - WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index f2559d929c..770208552b 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -165,7 +165,6 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); -extern const char* WriteLocation(API_TYPE ApiType, const u32 num); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -188,13 +187,13 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); } @@ -219,15 +218,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); - WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index a8d3a9af27..84c71c0497 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -170,7 +170,6 @@ struct VideoConfig bool bSupportsGLSL; bool bSupportsGLSLBinding; - bool bSupportsGLSLLocation; bool bSupportsGLSLUBO; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 978357e18f..7e18e54c7b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -81,11 +81,6 @@ void PixelShaderCache::Init() // Should this be set here? if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - // This bit doesn't quite work yet, always set to false - // TODO: Probably just drop this entirely in favour of UBOS - //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) - g_Config.backend_info.bSupportsGLSLLocation = false; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; @@ -505,11 +500,6 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 { float f[4] = { f1, f2, f3, f4 }; - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); @@ -528,11 +518,6 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); @@ -551,11 +536,6 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 776280103e..c7c8624069 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -92,7 +92,7 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); - + glUseProgram(entry.program.glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index dfa3293a46..d0fb9ec189 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -247,11 +247,6 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[1] = f2; buf[2] = f3; buf[3] = f4; - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, buf); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf); @@ -270,11 +265,6 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f); @@ -293,11 +283,6 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f, count); @@ -324,11 +309,6 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co buf[4*i+2] = *f++; buf[4*i+3] = 0.f; } - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, buf); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); From 54a90d08cec61253634c06e7dfc494c19f2cc253 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 21:15:15 -0600 Subject: [PATCH 024/625] Fix one error. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 28 ++++++++++++------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 19 +++++++------ .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 6 ++-- .../Src/ProgramShaderCache.cpp | 1 - .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 8 +++--- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index cd7ecd3461..e88a8ca11f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -516,6 +516,14 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) sprintf(result, "layout(binding = %d) ", num); return result; } +const char *WriteLocation(API_TYPE ApiType) +{ + static char result[64]; + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + return ""; + sprintf(result, "uniform "); + return result; +} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { @@ -605,18 +613,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); - WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%sfloat4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%sfloat4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%sfloat4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%sfloat4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%sfloat4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%sfloat4 "I_FOG"[3] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_FOG)); // Compiler will optimize these out by itself. - WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "%sfloat4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%sfloat4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 770208552b..c04a2ba1f1 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -165,6 +165,7 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); +const char *WriteLocation(API_TYPE ApiType); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -218,15 +219,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); - WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 7e18e54c7b..50382cc0dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -503,7 +503,7 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -521,7 +521,7 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -539,7 +539,7 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c7c8624069..9fd3479e1d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -94,7 +94,6 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index d0fb9ec189..e22a2f3be2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -250,7 +250,7 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -268,7 +268,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -286,7 +286,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f, count); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -312,7 +312,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { From 126dfa073b70e91aa9482fac1052f71d7be1bcc2 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 01:56:37 -0600 Subject: [PATCH 025/625] Firin ma lazer --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- .../Src/ProgramShaderCache.cpp | 22 ++++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index e88a8ca11f..2a5ab11ee6 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -611,7 +611,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 4) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index c04a2ba1f1..caefa15bc4 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -217,7 +217,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); + WRITE(p, "layout(std140, binding = 5) uniform VSBlock {\n"); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 9fd3479e1d..b2bb6b6351 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -94,7 +94,15 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - + + GLint Info = -1; + GLuint Indice = 1; + //glGetIntegeri_v(GL_UNIFORM_BLOCK_DATA_SIZE, 4, &Info); + //glGetIntegerv(GL_UNIFORM_BLOCK_DATA_SIZE, &Info); + glGetActiveUniformsiv(entry.program.glprogid, 1, &Indice, + GL_UNIFORM_SIZE, &Info); + printf("Minimum size: %d\n", Info); + // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 // We can remove this @@ -132,7 +140,8 @@ namespace OGL glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4, (void*)&f[0]); + glBufferSubData(GL_UNIFORM_BUFFER_EXT, offset * 4 * 4, count * 4 * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -151,14 +160,15 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 *1024 *1024, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + glBindBufferRange(GL_UNIFORM_BUFFER, 4, UBOBuffers[0], 0, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % 256) + 256); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, C_VENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferRange(GL_UNIFORM_BUFFER, 5, UBOBuffers[1], 0, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % 256) + 256); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } void ProgramShaderCache::Shutdown(void) { From 24336171f1f9803a4b98aff7227c5018b7981a55 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 01:57:27 -0600 Subject: [PATCH 026/625] Firin ma lazer --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b2bb6b6351..322950edf0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -140,7 +140,7 @@ namespace OGL glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER_EXT, offset * 4 * 4, count * 4 * 4, f); + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } From 49664bff61d26d8120daa31b2e0afb2090e7474a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 02:02:22 -0600 Subject: [PATCH 027/625] More for Billiard <3 --- .../Src/ProgramShaderCache.cpp | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 322950edf0..e174cf2641 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,7 +17,13 @@ #include "ProgramShaderCache.h" #include - +static GLenum checkForGLError(const char * situation) +{ + GLenum error = glGetError(); + if (error != GL_NO_ERROR) + printf("Error: %d -- %s\n", error, situation); + return error; +} namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; @@ -94,14 +100,8 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); + checkForGLError("User"); - GLint Info = -1; - GLuint Indice = 1; - //glGetIntegeri_v(GL_UNIFORM_BLOCK_DATA_SIZE, 4, &Info); - //glGetIntegerv(GL_UNIFORM_BLOCK_DATA_SIZE, &Info); - glGetActiveUniformsiv(entry.program.glprogid, 1, &Indice, - GL_UNIFORM_SIZE, &Info); - printf("Minimum size: %d\n", Info); // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -160,15 +160,16 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, 1024 *1024 *1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 *1024, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferRange(GL_UNIFORM_BUFFER, 4, UBOBuffers[0], 0, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % 256) + 256); + glBindBufferBase(GL_UNIFORM_BUFFER, 4, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024*1024, NULL, GL_DYNAMIC_DRAW); - glBindBufferRange(GL_UNIFORM_BUFFER, 5, UBOBuffers[1], 0, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % 256) + 256); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 5, UBOBuffers[1]); glBindBuffer(GL_UNIFORM_BUFFER, 0); + checkForGLError("Init"); } void ProgramShaderCache::Shutdown(void) { From 7ab38cff68e411bf104ebc55373ca6f2b2ad9c66 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 07:38:30 -0600 Subject: [PATCH 028/625] 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. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 14 +- Source/Core/VideoCommon/Src/PixelShaderGen.h | 4 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 33 +++-- Source/Core/VideoCommon/Src/VertexShaderGen.h | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 13 +- .../Src/ProgramShaderCache.cpp | 56 +++++--- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 133 ++++++++++++------ .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 7 +- 9 files changed, 176 insertions(+), 88 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 2a5ab11ee6..b963912443 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -502,11 +502,11 @@ static void BuildSwapModeTable() const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) - return ""; // Nothing to do here - static char result[64]; - sprintf(result, " : register(%s%d)", prefix, num); - return result; + if(ApiType == API_GLSL) + return ""; // Nothing to do here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; } const char* WriteBinding(API_TYPE ApiType, const u32 num) { @@ -518,9 +518,9 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - static char result[64]; if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; + static char result[64]; sprintf(result, "uniform "); return result; } @@ -611,7 +611,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 4) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 589fc927bc..b32b7408c3 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -28,8 +28,8 @@ #define I_INDTEXSCALE "cindscale" #define I_INDTEXMTX "cindmtx" #define I_FOG "cfog" -#define I_PLIGHTS "cLights" -#define I_PMATERIALS "cmtrl" +#define I_PLIGHTS "cPLights" +#define I_PMATERIALS "cPmtrl" #define C_COLORMATRIX 0 // 0 #define C_COLORS 0 // 0 diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index caefa15bc4..c693a7b06b 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -166,6 +166,12 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); const char *WriteLocation(API_TYPE ApiType); +const char *WriteLocation2(API_TYPE ApiType) +{ + static char result[64]; + sprintf(result, "uniform "); + return result; +} const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -216,21 +222,22 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } // uniforms - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 5) uniform VSBlock {\n"); + //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //WRITE(p, "};\n"); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "};\n"); p = GenerateVSOutputStruct(p, components, ApiType); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index a3364c2982..c711aa7876 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -55,7 +55,7 @@ const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 4 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, }; template class _VERTEXSHADERUID diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 5a12392ed2..939e751f55 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -173,7 +173,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 50382cc0dd..c957ccd894 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -496,14 +496,15 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float } } } + void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f); + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -520,8 +521,8 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f); + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -538,8 +539,8 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f, count); + //return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index e174cf2641..4b1f8b28d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,12 +17,15 @@ #include "ProgramShaderCache.h" #include -static GLenum checkForGLError(const char * situation) +GLuint GLERR(const char *function) { - GLenum error = glGetError(); - if (error != GL_NO_ERROR) - printf("Error: %d -- %s\n", error, situation); - return error; + GLint err = glGetError(); + if (err != GL_NO_ERROR) + { + printf( "(%s) OpenGL error 0x%x - %s\n", + function, err, gluErrorString(err)); + } + return err; } namespace OGL { @@ -98,10 +101,19 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); + GLsizei length = 0; + + glGetProgramiv(entry.program.glprogid, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetProgramInfoLog(entry.program.glprogid, length, &charsWritten, infoLog); + printf("Program info log:\n%s", infoLog); + delete[] infoLog; + } glUseProgram(entry.program.glprogid); - checkForGLError("User"); - // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -136,12 +148,22 @@ namespace OGL } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { + GLERR(""); assert(Buffer > 1); - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); + static int _Buffer = -1; + if(_Buffer != Buffer) + { + _Buffer = Buffer; + GLERR("bind"); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); + } + // Query for the offsets of each block variable + // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + GLERR("sub"); + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -156,20 +178,22 @@ namespace OGL void ProgramShaderCache::Init(void) { glGenBuffers(2, UBOBuffers); + + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, 1024 *1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 4, UBOBuffers[0]); + glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + // Repeat for VS shader - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 5, UBOBuffers[1]); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - checkForGLError("Init"); + //glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + //glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + //glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); + GLERR("init"); } void ProgramShaderCache::Shutdown(void) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index e1439d621c..6e2c46c95c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -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 { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index e22a2f3be2..0550e99b18 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -240,6 +240,7 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } } } +#define MAX_UNIFORM 0 void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float buf[4]; @@ -249,7 +250,8 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[3] = f4; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf); + if(const_number < MAX_UNIFORM) + ProgramShaderCache::SetUniformObjects(1, const_number, buf); //return; } for( unsigned int a = 0; a < 9; ++a) @@ -267,6 +269,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f); //return; } @@ -285,6 +288,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f, count); //return; } @@ -311,6 +315,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); //return; } From 5925feb6e05219be8abb43576fa7e0b639c049f7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 08:07:13 -0600 Subject: [PATCH 029/625] yay, UBOs work 100% now. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 4 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 33 +++++------- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 35 +++++++------ .../Src/ProgramShaderCache.cpp | 40 ++++----------- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 51 ++++++++----------- 6 files changed, 66 insertions(+), 99 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index b963912443..977de656d6 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -518,7 +518,7 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if(ApiType == API_GLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -611,7 +611,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 1) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index c693a7b06b..8b945af530 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -166,12 +166,6 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); const char *WriteLocation(API_TYPE ApiType); -const char *WriteLocation2(API_TYPE ApiType) -{ - static char result[64]; - sprintf(result, "uniform "); - return result; -} const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -222,20 +216,21 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } // uniforms - //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - //WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - //WRITE(p, "};\n"); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 939e751f55..5a12392ed2 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -173,7 +173,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - //if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index c957ccd894..4172237bb2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -429,24 +429,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) glShaderSource(result, 1, &pstrprogram, NULL); glCompileShader(result); - GLsizei length = 0; - - glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "ps_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) - exit(0); - delete[] infoLog; - } GLint compileStatus; glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); @@ -454,6 +436,23 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { // Compile failed ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + + GLsizei length = 0; + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + delete[] infoLog; + } // Don't try to use this shader glDeleteShader(result); return false; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 4b1f8b28d2..073e8b430c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,16 +17,6 @@ #include "ProgramShaderCache.h" #include -GLuint GLERR(const char *function) -{ - GLint err = glGetError(); - if (err != GL_NO_ERROR) - { - printf( "(%s) OpenGL error 0x%x - %s\n", - function, err, gluErrorString(err)); - } - return err; -} namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; @@ -101,19 +91,14 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); - GLsizei length = 0; - - glGetProgramiv(entry.program.glprogid, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetProgramInfoLog(entry.program.glprogid, length, &charsWritten, infoLog); - printf("Program info log:\n%s", infoLog); - delete[] infoLog; - } glUseProgram(entry.program.glprogid); + + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -148,13 +133,11 @@ namespace OGL } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { - GLERR(""); assert(Buffer > 1); static int _Buffer = -1; if(_Buffer != Buffer) { _Buffer = Buffer; - GLERR("bind"); glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); } // Query for the offsets of each block variable @@ -162,7 +145,6 @@ namespace OGL // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - GLERR("sub"); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -179,7 +161,6 @@ namespace OGL { glGenBuffers(2, UBOBuffers); - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s @@ -187,13 +168,12 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader - //glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - //glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); - //glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); - GLERR("init"); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 0550e99b18..97dfc9a3bb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -189,25 +189,6 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) glShaderSource(result, 1, &pstrprogram, NULL); glCompileShader(result); - GLsizei length = 0; - - glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) - exit(0); - delete[] infoLog; - } GLint compileStatus; glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); @@ -215,6 +196,23 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { // Compile failed ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + + GLsizei length = 0; + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + delete[] infoLog; + } // Don't try to use this shader glDeleteShader(result); return false; @@ -240,7 +238,6 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } } } -#define MAX_UNIFORM 0 void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float buf[4]; @@ -250,9 +247,8 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[3] = f4; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) - ProgramShaderCache::SetUniformObjects(1, const_number, buf); - //return; + ProgramShaderCache::SetUniformObjects(1, const_number, buf); + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -269,9 +265,8 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -288,9 +283,8 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f, count); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -315,9 +309,8 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { From c72a244809ee9e8a645bd1f200138af727d0474b Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 14:35:37 -0600 Subject: [PATCH 030/625] Make sure to support everything even if GPU doesn't. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 5 +++-- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 8 ++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 977de656d6..940a34f537 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -518,7 +518,7 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -572,6 +572,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#define frac(x) fract(x)\n"); WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + for (int i = 0; i < 8; ++i) WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); @@ -611,7 +612,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 1) uniform PSBlock {\n"); + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 8b945af530..67700dd647 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -217,7 +217,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); + WRITE(p, "layout(std140%s) uniform VSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 2" : ""); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 073e8b430c..37923d2f47 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -96,9 +96,13 @@ namespace OGL // Dunno why this is needed when I have the binding // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 From 97c3c156e61b9e8c4882ead53647b554f606dd16 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:40:10 -0600 Subject: [PATCH 031/625] Use UBOs in every shader. I had missed a few. Only cache Uniform locations if we aren't using UBOs. --- .../Src/TextureConversionShader.cpp | 29 ++++++++-- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 54 +++++++++++++------ .../Src/ProgramShaderCache.cpp | 8 +-- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 6 ++- 4 files changed, 73 insertions(+), 24 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 550fef2740..262b2cee87 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -74,6 +74,14 @@ const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) sprintf(result, " : register(%s%d)", prefix, num); return result; } +const char *WriteLocation(API_TYPE ApiType) +{ + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + return ""; + static char result[64]; + sprintf(result, "uniform "); + return result; +} // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset @@ -82,7 +90,13 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + + WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -168,7 +182,11 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -839,10 +857,13 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); - WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); } else WRITE(p, "#version 120\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 4172237bb2..47df4bb6d7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -120,7 +120,9 @@ void PixelShaderCache::Init() "#extension GL_ARB_texture_rectangle : enable\n" "#extension GL_ARB_shading_language_420pack : enable\n" "layout(binding = 0) uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" "void main(){\n" "vec4 Temp0, Temp1;\n" "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" @@ -134,14 +136,20 @@ void PixelShaderCache::Init() "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } else { sprintf(pmatrixprog, "#version 120\n" "#extension GL_ARB_texture_rectangle : enable\n" "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" "void main(){\n" "vec4 Temp0, Temp1;\n" "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" @@ -155,9 +163,13 @@ void PixelShaderCache::Init() "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } - if (!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); @@ -168,7 +180,9 @@ void PixelShaderCache::Init() "#extension GL_ARB_texture_rectangle : enable\n" "#extension GL_ARB_shading_language_420pack : enable\n" "layout(binding = 0) uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" "void main(){\n" "vec4 R0, R1, R2;\n" "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" @@ -192,14 +206,20 @@ void PixelShaderCache::Init() "R1.z = dot(R0, "I_COLORS"[%d]);\n" "R1.w = dot(R0, "I_COLORS"[%d]);\n" "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } else { sprintf(pmatrixprog, "#version 120\n" "#extension GL_ARB_texture_rectangle : enable\n" "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" "void main(){\n" "vec4 R0, R1, R2;\n" "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" @@ -223,9 +243,13 @@ void PixelShaderCache::Init() "R1.z = dot(R0, "I_COLORS"[%d]);\n" "R1.w = dot(R0, "I_COLORS"[%d]);\n" "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } - if (!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); s_DepthMatrixProgram.Destroy(); @@ -444,9 +468,9 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); + sprintf(szTemp, "ps_%d.txt", result); FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); @@ -503,7 +527,7 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -521,7 +545,7 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -539,7 +563,7 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 37923d2f47..562843ebb1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -111,8 +111,9 @@ namespace OGL //For some reason this fails on my hardware //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. - for(int a = 0; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader @@ -176,7 +177,7 @@ namespace OGL // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 * 1024, NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) @@ -185,6 +186,7 @@ namespace OGL for (; iter != pshaders.end(); iter++) iter->second.Destroy(); pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 6e2c46c95c..f89ca38b05 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -579,8 +579,10 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur } glViewport(0, 0, srcWidth, srcHeight); - - PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(s_yuyvToRgbProgram.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); GL_REPORT_ERRORD(); From c678172f3212b90ac394359b2be732e76a2bc39c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:52:20 -0600 Subject: [PATCH 032/625] Make sure our UBO buffers are always aligned correctly. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 562843ebb1..c62016a853 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -164,20 +164,26 @@ namespace OGL } void ProgramShaderCache::Init(void) { + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + GLint Align; + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + glGenBuffers(2, UBOBuffers); glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024 * 1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) From 2907ffd72c45334974c96df3e947d90b70668893 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:58:44 -0600 Subject: [PATCH 033/625] Make this pretty --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c62016a853..d66fd9ec19 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -16,6 +16,8 @@ // http://code.google.com/p/dolphin-emu/ #include "ProgramShaderCache.h" +#include "MathUtil.h" + #include namespace OGL { @@ -176,14 +178,14 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) From 1724385c8c52769c350d626b9b35b3bfd788522a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 03:10:03 -0600 Subject: [PATCH 034/625] Actually have Dual Source blending work for people. Forgot about this change. --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 7 ++++++- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index 23c31a1bb7..7d309dee38 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -124,6 +124,11 @@ extern CGprofile g_cgvProf, g_cgfProf; // XXX: Dual-source blending in OpenGL does not work correctly yet. To make it // work, we may need to use glBindFragDataLocation. To use that, we need to // use GLSL shaders across the whole pipeline. Yikes! -//#define USE_DUAL_SOURCE_BLEND +#define USE_DUAL_SOURCE_BLEND + +// Can't get defined on my system for some reason... +#ifndef GL_ONE_MINUS_SRC1_ALPHA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#endif #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 1dae8d0752..86452adebd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -940,8 +940,8 @@ void Renderer::SetBlendMode(bool forceUpdate) #ifdef USE_DUAL_SOURCE_BLEND bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate - && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = useDstAlpha && GLEW_ARB_blend_func_extended; + && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; + bool useDualSource = useDstAlpha; #endif if (changes & 1) From 014c474024e28e77d2bb72e0af7acb31850fba64 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 11 Dec 2011 11:08:18 +0100 Subject: [PATCH 035/625] 8 spaces indentation -> tabs --- Source/Core/VideoCommon/Src/PixelShaderGen.h | 20 +- .../Src/TextureConversionShader.cpp | 22 +- Source/Core/VideoCommon/Src/VertexShaderGen.h | 18 +- Source/Core/VideoCommon/Src/VideoCommon.h | 6 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 234 ++++++++--------- .../Src/ProgramShaderCache.cpp | 238 ++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 108 ++++---- .../Plugin_VideoOGL/Src/TextureCache.cpp | 8 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 246 +++++++++--------- Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 34 +-- 11 files changed, 468 insertions(+), 468 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index b32b7408c3..3228d50b99 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -49,16 +49,16 @@ // Annoying sure, can be removed once we get up to GLSL ~1.3 const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, - {I_KCOLORS, C_KCOLORS, 4 }, - {I_ALPHA, C_ALPHA, 1 }, - {I_TEXDIMS, C_TEXDIMS, 8 }, - {I_ZBIAS , C_ZBIAS, 2 }, - {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, - {I_INDTEXMTX, C_INDTEXMTX, 6 }, - {I_FOG, C_FOG, 3 }, - {I_PLIGHTS, C_PLIGHTS, 40 }, - {I_PMATERIALS, C_PMATERIALS, 4 }, - }; + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; // DO NOT make anything in this class virtual. template diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 262b2cee87..2f21c816b7 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -68,11 +68,11 @@ u16 GetEncodedSampleCount(u32 format) } const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) - return ""; // Once we switch to GLSL 1.3 we can do something here - static char result[64]; - sprintf(result, " : register(%s%d)", prefix, num); - return result; + if(ApiType == API_GLSL) + return ""; // Once we switch to GLSL 1.3 we can do something here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; } const char *WriteLocation(API_TYPE ApiType) { @@ -821,13 +821,13 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) for (int i = 0; i < 2; i++) { - WRITE(p, " depth%i *= 16777215.0f;\n", i); + WRITE(p, " depth%i *= 16777215.0f;\n", i); - WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); - WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); - WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); - WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); - WRITE(p, " expanded%i.b = depth%i;\n", i, i); + WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); + WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); + WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); + WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); + WRITE(p, " expanded%i.b = depth%i;\n", i, i); } WRITE(p, " if(cl > 0.5f) {\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index c711aa7876..5cfb9f801d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -48,15 +48,15 @@ #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) #define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, - {I_PROJECTION , C_PROJECTION, 4 }, - {I_MATERIALS, C_MATERIALS, 4 }, - {I_LIGHTS, C_LIGHTS, 40 }, - {I_TEXMATRICES, C_TEXMATRICES, 24 }, - {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, - {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, - {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, - }; + {I_PROJECTION , C_PROJECTION, 4 }, + {I_MATERIALS, C_MATERIALS, 4 }, + {I_LIGHTS, C_LIGHTS, 40 }, + {I_TEXMATRICES, C_TEXMATRICES, 24 }, + {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, + {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, + {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, + }; template class _VERTEXSHADERUID { diff --git a/Source/Core/VideoCommon/Src/VideoCommon.h b/Source/Core/VideoCommon/Src/VideoCommon.h index f87cb7e9b1..9d9148ec7b 100644 --- a/Source/Core/VideoCommon/Src/VideoCommon.h +++ b/Source/Core/VideoCommon/Src/VideoCommon.h @@ -154,9 +154,9 @@ inline unsigned int GetPow2(unsigned int val) } struct s_svar { - const char *name; - const unsigned int reg; - const unsigned int size; + const char *name; + const unsigned int reg; + const unsigned int size; }; #endif // _VIDEOCOMMON_H diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 47df4bb6d7..db41f34024 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -74,12 +74,12 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetPSConstant4f = SetGLSLPSConstant4f; - pSetPSConstant4fv = SetGLSLPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; - pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; @@ -88,22 +88,22 @@ void PixelShaderCache::Init() } else { - pSetPSConstant4f = SetCGPSConstant4f; - pSetPSConstant4fv = SetCGPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; - pCompilePixelShader = CompileCGPixelShader; - glEnable(GL_FRAGMENT_PROGRAM_ARB); + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; + s_nMaxPixelInstructions = 4096; if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) { - s_nMaxPixelInstructions = 4096; + s_nMaxPixelInstructions = 4096; } #endif @@ -347,7 +347,7 @@ void PixelShaderCache::Shutdown() s_DepthMatrixProgram.Destroy(); PSCache::iterator iter = PixelShaders.begin(); for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); + iter->second.Destroy(); PixelShaders.clear(); } @@ -359,12 +359,12 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Check if the shader is already set if (last_entry) { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } } last_uid = uid; @@ -372,12 +372,12 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp PSCache::iterator iter = PixelShaders.find(uid); if (iter != PixelShaders.end()) { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + PSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; } // Make an entry in the table @@ -387,23 +387,23 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp if (g_ActiveConfig.bEnableShaderDebugging && code) { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; } #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); + SaveData(szTemp, code); } #endif if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; } INCSTAT(stats.numPixelShadersCreated); @@ -424,8 +424,8 @@ void PixelShaderCache::DisableShader() assert(true); if(ShaderEnabled) { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; } } @@ -436,14 +436,14 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) assert(true); if(!ShaderEnabled) { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; } if(CurrentShader != Shader) { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); } } // GLSL Specific @@ -493,31 +493,31 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform1i(tmp.UniformLocations[a], Tex); - return; - } - } + if (!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform1i(tmp.UniformLocations[a], Tex); + return; + } + } } void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } - } + if (!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) @@ -531,12 +531,12 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 } for (unsigned int a = 0; a < 10; ++a) { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; - } + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } } @@ -549,12 +549,12 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) } for (unsigned int a = 0; a < 10; ++a) { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; - } + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } } @@ -567,12 +567,12 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co } for (unsigned int a = 0; a < 10; ++a) { - if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); - return; - } + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } } } // CG Specific @@ -582,7 +582,7 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLenum err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); + ERROR_LOG(VIDEO, "glError %08x before PS!", err); } #if defined HAVE_CG && HAVE_CG @@ -591,28 +591,28 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) // handle errors if (!cgIsProgram(tempprog)) { - cgDestroyProgram(tempprog); + cgDestroyProgram(tempprog); - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - return false; + return false; } // handle warnings if (cgGetError() != CG_NO_ERROR) { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); } // This looks evil - we modify the program through the const char * we got from cgGetProgramString! @@ -621,9 +621,9 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) char *plocal = strstr(pcompiledprog, "program.local"); while (plocal != NULL) { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); } glGenProgramsARB(1, &ps.glprogid); @@ -634,23 +634,23 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO - } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); } cgDestroyProgram(tempprog); @@ -672,21 +672,21 @@ void SetCGPSConstant4fv(unsigned int const_number, const float *f) void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); } // Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - pSetPSConstant4f(const_number, f1, f2, f3, f4); + pSetPSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetPSConstant4fv(unsigned int const_number, const float *f) { - pSetPSConstant4fv(const_number, f); + pSetPSConstant4fv(const_number, f); } void Renderer::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiPSConstant4fv(const_number, count, f); + pSetMultiPSConstant4fv(const_number, count, f); } } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d66fd9ec19..15a5ff42a8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -21,123 +21,123 @@ #include namespace OGL { - GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; - ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::UBOBuffers[2]; + GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; + ProgramShaderCache::PCache ProgramShaderCache::pshaders; + GLuint ProgramShaderCache::UBOBuffers[2]; - std::pair ProgramShaderCache::CurrentShaderProgram; - const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; + std::pair ProgramShaderCache::CurrentShaderProgram; + const char *UniformNames[NUM_UNIFORMS] = { + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; - void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) - { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + { + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.glprogid = glCreateProgram(); + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); - } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - } + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { assert(Buffer > 1); @@ -154,16 +154,16 @@ namespace OGL glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); } - GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - GLint ProgramShaderCache::GetAttr(int num) - { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; - } - PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) - { - return pshaders[CurrentShaderProgram].program; - } + GLint ProgramShaderCache::GetAttr(int num) + { + return pshaders[CurrentShaderProgram].program.attrLoc[num]; + } + PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) + { + return pshaders[CurrentShaderProgram].program; + } void ProgramShaderCache::Init(void) { // We have to get the UBO alignment here because @@ -188,18 +188,18 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } - void ProgramShaderCache::Shutdown(void) - { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) - iter->second.Destroy(); - pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); - } + void ProgramShaderCache::Shutdown(void) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); + } } void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) { - uid->uid.vsid = _v; - uid->uid.psid = _p; + uid->uid.vsid = _v; + uid->uid.psid = _p; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index a5ff097af6..1c114551b8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -25,39 +25,39 @@ #include "PixelShaderGen.h" #include "VertexShaderGen.h" - union PID - { - struct { - GLuint vsid, psid; - }; - u64 id; - }; + union PID + { + struct { + GLuint vsid, psid; + }; + u64 id; + }; class PROGRAMUID { public: - PID uid; + PID uid; - PROGRAMUID() - { - uid.id = 0; - } + PROGRAMUID() + { + uid.id = 0; + } - PROGRAMUID(const PROGRAMUID& r) - { - uid.id = r.uid.id; - } - PROGRAMUID(GLuint _v, GLuint _p) - { - uid.vsid = _v; - uid.psid = _p; - } + PROGRAMUID(const PROGRAMUID& r) + { + uid.id = r.uid.id; + } + PROGRAMUID(GLuint _v, GLuint _p) + { + uid.vsid = _v; + uid.psid = _p; + } - int GetNumValues() const - { - return uid.id; - } + int GetNumValues() const + { + return uid.id; + } }; void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); @@ -69,43 +69,43 @@ extern const char *UniformNames[NUM_UNIFORMS]; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} - GLuint glprogid; // opengl program id - GLuint vsid, psid; - GLint attrLoc[3]; - GLint UniformLocations[NUM_UNIFORMS]; + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + GLuint glprogid; // opengl program id + GLuint vsid, psid; + GLint attrLoc[3]; + GLint UniformLocations[NUM_UNIFORMS]; }; class ProgramShaderCache { - struct PCacheEntry - { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} - void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; - } - }; - typedef std::map, PCacheEntry> PCache; + struct PCacheEntry + { + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } + }; + typedef std::map, PCacheEntry> PCache; - static PCache pshaders; - static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static std::pair CurrentShaderProgram; - // For UBOS - static GLuint UBOBuffers[2]; // PS is 0, VS is 1 + // For UBOS + static GLuint UBOBuffers[2]; // PS is 0, VS is 1 public: - static PROGRAMSHADER GetShaderProgram(void); - static GLint GetAttr(int num); - static void SetBothShaders(GLuint PS, GLuint VS); - static GLuint GetCurrentProgram(void); - static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); - - static void Init(void); - static void Shutdown(void); + static PROGRAMSHADER GetShaderProgram(void); + static GLint GetAttr(int num); + static void SetBothShaders(GLuint PS, GLuint VS); + static GLuint GetCurrentProgram(void); + static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void Init(void); + static void Shutdown(void); }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index d3a1283627..2fc02d867a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -208,7 +208,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, if (pcfmt != PC_TEX_FMT_DXT1) { if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); + glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); if (bHaveMipMaps && autogen_mips) { @@ -222,7 +222,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, } if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } else { @@ -385,8 +385,8 @@ TextureCache::~TextureCache() { if (s_TempFramebuffer) { - glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); - s_TempFramebuffer = 0; + glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); + s_TempFramebuffer = 0; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index f89ca38b05..ff4ecab624 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -407,7 +407,7 @@ void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyf scaledSource.right = expandedWidth / samples; int cacheBytes = 32; if ((format & 0x0f) == 6) - cacheBytes = 64; + cacheBytes = 64; int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); g_renderer->ResetAPIState(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 97dfc9a3bb..b665aeae98 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -61,20 +61,20 @@ void VertexShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetVSConstant4f = SetGLSLVSConstant4f; - pSetVSConstant4fv = SetGLSLVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } else { - pSetVSConstant4f = SetCGVSConstant4f; - pSetVSConstant4fv = SetCGVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileCGVertexShader; - glEnable(GL_VERTEX_PROGRAM_ARB); + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -82,7 +82,7 @@ void VertexShaderCache::Init() #if CG_VERSION_NUM == 2100 if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) { - s_nMaxVertexInstructions = 4096; + s_nMaxVertexInstructions = 4096; } #endif } @@ -90,7 +90,7 @@ void VertexShaderCache::Init() void VertexShaderCache::Shutdown() { for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); + iter->second.Destroy(); vshaders.clear(); } @@ -101,12 +101,12 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) GetVertexShaderId(&uid, components); if (last_entry) { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; - } + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } } last_uid = uid; @@ -114,12 +114,12 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) VSCache::iterator iter = vshaders.find(uid); if (iter != vshaders.end()) { - VSCacheEntry &entry = iter->second; - last_entry = &entry; + VSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; } // Make an entry in the table @@ -130,17 +130,17 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); + SaveData(szTemp, code); } #endif if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; } INCSTAT(stats.numVertexShadersCreated); @@ -160,8 +160,8 @@ void VertexShaderCache::DisableShader() assert(true); if (ShaderEnabled) { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; } } @@ -172,14 +172,14 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) assert(true); if (!ShaderEnabled) { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; } if (CurrentShader != Shader) { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); } } // GLSL Specific @@ -227,16 +227,16 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } - } + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { @@ -252,12 +252,12 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } } } @@ -270,12 +270,12 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } } } @@ -288,12 +288,12 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } } } @@ -302,10 +302,10 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co float buf[4 * C_VENVCONST_END]; for (unsigned int i = 0; i < count; i++) { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { @@ -314,12 +314,12 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } } } @@ -330,34 +330,34 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLenum err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); + ERROR_LOG(VIDEO, "glError %08x before VS!", err); } #if defined HAVE_CG && HAVE_CG CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; } if (cgGetError() != CG_NO_ERROR) { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); } // This looks evil - we modify the program through the const char * we got from cgGetProgramString! @@ -365,9 +365,9 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); char *plocal = strstr(pcompiledprog, "program.local"); while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); } glGenProgramsARB(1, &vs.glprogid); vs.bGLSL = false; @@ -376,15 +376,15 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); } cgDestroyProgram(tempprog); #endif if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + vs.strprog = pstrprogram; return true; } @@ -402,12 +402,12 @@ void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, cons { if(GLEW_EXT_gpu_program_parameters) { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); } else { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); } } @@ -415,49 +415,49 @@ void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, cons { if(GLEW_EXT_gpu_program_parameters) { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } else { - for (unsigned int i = 0; i < count; i++) - { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); - } + for (unsigned int i = 0; i < count; i++) + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } } // Renderer Functions void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - pSetVSConstant4f(const_number, f1, f2, f3, f4); + pSetVSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) { - pSetVSConstant4fv(const_number, f); + pSetVSConstant4fv(const_number, f); } void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiVSConstant4fv(const_number, count, f); + pSetMultiVSConstant4fv(const_number, count, f); } void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiVSConstant3fv(const_number, count, f); + pSetMultiVSConstant3fv(const_number, count, f); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index c4e2a8f0ea..8b25d5c47c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -109,23 +109,23 @@ std::string VideoBackend::GetName() void GetShaders(std::vector &shaders) { - shaders.clear(); - if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) - { - File::FSTEntry entry; - File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); - for (u32 i = 0; i < entry.children.size(); i++) - { - std::string name = entry.children[i].virtualName.c_str(); - if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) - name = name.substr(0, name.size() - 4); - shaders.push_back(name); - } - } - else - { - File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); - } + shaders.clear(); + if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) + { + File::FSTEntry entry; + File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); + for (u32 i = 0; i < entry.children.size(); i++) + { + std::string name = entry.children[i].virtualName.c_str(); + if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) + name = name.substr(0, name.size() - 4); + shaders.push_back(name); + } + } + else + { + File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); + } } void InitBackendInfo() From df283a56a0bc09a455e50ada1aa7e9116a276b44 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 11 Dec 2011 11:14:02 +0100 Subject: [PATCH 036/625] More coding style fixes because I suck at sed --- Source/Core/VideoCommon/Src/PixelShaderGen.h | 20 +- .../Src/TextureConversionShader.cpp | 2 +- Source/Core/VideoCommon/Src/VertexShaderGen.h | 18 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 18 +- .../Src/ProgramShaderCache.cpp | 198 +++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 32 +-- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 20 +- 8 files changed, 155 insertions(+), 155 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 3228d50b99..1a70a3664b 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -49,16 +49,16 @@ // Annoying sure, can be removed once we get up to GLSL ~1.3 const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, - {I_KCOLORS, C_KCOLORS, 4 }, - {I_ALPHA, C_ALPHA, 1 }, - {I_TEXDIMS, C_TEXDIMS, 8 }, - {I_ZBIAS , C_ZBIAS, 2 }, - {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, - {I_INDTEXMTX, C_INDTEXMTX, 6 }, - {I_FOG, C_FOG, 3 }, - {I_PLIGHTS, C_PLIGHTS, 40 }, - {I_PMATERIALS, C_PMATERIALS, 4 }, - }; + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; // DO NOT make anything in this class virtual. template diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 2f21c816b7..2d3b642593 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -69,7 +69,7 @@ u16 GetEncodedSampleCount(u32 format) const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { if(ApiType == API_GLSL) - return ""; // Once we switch to GLSL 1.3 we can do something here + return ""; // Once we switch to GLSL 1.3 we can do something here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 5cfb9f801d..afd49c65d4 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -48,15 +48,15 @@ #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) #define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, - {I_PROJECTION , C_PROJECTION, 4 }, - {I_MATERIALS, C_MATERIALS, 4 }, - {I_LIGHTS, C_LIGHTS, 40 }, - {I_TEXMATRICES, C_TEXMATRICES, 24 }, - {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, - {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, - {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, - }; + {I_PROJECTION , C_PROJECTION, 4 }, + {I_MATERIALS, C_MATERIALS, 4 }, + {I_LIGHTS, C_LIGHTS, 40 }, + {I_TEXMATRICES, C_TEXMATRICES, 24 }, + {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, + {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, + {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, + }; template class _VERTEXSHADERUID { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index db41f34024..452ff506c3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -496,11 +496,11 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) - return; + return; else { - glUniform1i(tmp.UniformLocations[a], Tex); - return; + glUniform1i(tmp.UniformLocations[a], Tex); + return; } } } @@ -511,11 +511,11 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) - return; + return; else { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; } } } @@ -601,9 +601,9 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) file.close(); PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); return false; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 15a5ff42a8..e43dfa9798 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -27,116 +27,116 @@ namespace OGL std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.glprogid = glCreateProgram(); + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); - } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { @@ -158,11 +158,11 @@ namespace OGL GLint ProgramShaderCache::GetAttr(int num) { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; + return pshaders[CurrentShaderProgram].program.attrLoc[num]; } PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { - return pshaders[CurrentShaderProgram].program; + return pshaders[CurrentShaderProgram].program; } void ProgramShaderCache::Init(void) { @@ -190,11 +190,11 @@ namespace OGL } void ProgramShaderCache::Shutdown(void) { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) - iter->second.Destroy(); - pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 1c114551b8..4c356f52d5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -27,10 +27,10 @@ union PID { - struct { - GLuint vsid, psid; - }; - u64 id; + struct { + GLuint vsid, psid; + }; + u64 id; }; class PROGRAMUID @@ -41,22 +41,22 @@ public: PROGRAMUID() { - uid.id = 0; + uid.id = 0; } PROGRAMUID(const PROGRAMUID& r) { - uid.id = r.uid.id; + uid.id = r.uid.id; } PROGRAMUID(GLuint _v, GLuint _p) { - uid.vsid = _v; - uid.psid = _p; + uid.vsid = _v; + uid.psid = _p; } int GetNumValues() const { - return uid.id; + return uid.id; } }; void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); @@ -81,13 +81,13 @@ class ProgramShaderCache { struct PCacheEntry { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} - void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; - } + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } }; typedef std::map, PCacheEntry> PCache; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index ff4ecab624..213d92098a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -281,7 +281,7 @@ void Shutdown() } void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, - u8* destAddr, int dstWidth, int dstHeight, int readStride, + u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 8b25d5c47c..c7a4c0d42f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -112,19 +112,19 @@ void GetShaders(std::vector &shaders) shaders.clear(); if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) { - File::FSTEntry entry; - File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); - for (u32 i = 0; i < entry.children.size(); i++) - { - std::string name = entry.children[i].virtualName.c_str(); - if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) - name = name.substr(0, name.size() - 4); - shaders.push_back(name); - } + File::FSTEntry entry; + File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); + for (u32 i = 0; i < entry.children.size(); i++) + { + std::string name = entry.children[i].virtualName.c_str(); + if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) + name = name.substr(0, name.size() - 4); + shaders.push_back(name); + } } else { - File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); + File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); } } From fbef258dab883492d306fc29823229616a090b41 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 04:19:11 -0600 Subject: [PATCH 037/625] Disable UBO buffer generation if hardware doesn't support it. --- .../Src/ProgramShaderCache.cpp | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index e43dfa9798..adaa4babc3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -102,9 +102,9 @@ namespace OGL // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -114,8 +114,8 @@ namespace OGL //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 0; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader @@ -138,22 +138,22 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + { + assert(Buffer > 1); + static int _Buffer = -1; + if(_Buffer != Buffer) { - assert(Buffer > 1); - static int _Buffer = -1; - if(_Buffer != Buffer) - { - _Buffer = Buffer; - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); - } - // Query for the offsets of each block variable - - // glBufferSubData expects data in bytes, so multiply count by four - // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - + _Buffer = Buffer; + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); } + // Query for the offsets of each block variable + + // glBufferSubData expects data in bytes, so multiply count by four + // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); + + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -164,11 +164,13 @@ namespace OGL { return pshaders[CurrentShaderProgram].program; } - void ProgramShaderCache::Init(void) + void ProgramShaderCache::Init(void) + { + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - // We have to get the UBO alignment here because - // if we generate a buffer that isn't aligned - // then the UBO will fail. GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); @@ -188,13 +190,15 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } + } void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); iter++) iter->second.Destroy(); pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + glDeleteBuffers(2, UBOBuffers); } } From 031c523fbab44d92fbd01993c1d44a0e8713139e Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 04:11:57 -0600 Subject: [PATCH 038/625] have separate variables/functions for VS/PS ubo stuff, array was confusing. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 14 ++--- .../Src/ProgramShaderCache.cpp | 57 ++++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 7 ++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 15 ++--- 4 files changed, 47 insertions(+), 46 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 452ff506c3..726dbe7a66 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -522,12 +522,12 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; + float const f[4] = {f1, f2, f3, f4}; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -544,8 +544,8 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -562,8 +562,8 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, count); + return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index adaa4babc3..3be1e76aff 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,7 +23,8 @@ namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::UBOBuffers[2]; + GLuint ProgramShaderCache::s_ps_ubo; + GLuint ProgramShaderCache::s_vs_ubo; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -138,22 +139,21 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) - { - assert(Buffer > 1); - static int _Buffer = -1; - if(_Buffer != Buffer) + + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - _Buffer = Buffer; - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } - // Query for the offsets of each block variable - - // glBufferSubData expects data in bytes, so multiply count by four - // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - + + void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -173,32 +173,35 @@ namespace OGL { GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); - - glGenBuffers(2, UBOBuffers); - - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); + // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); + glGenBuffers(1, &s_ps_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); + glGenBuffers(1, &s_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); + + glBindBuffer(GL_UNIFORM_BUFFER, 0); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); - // Repeat for VS shader - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, s_ps_ubo); + glBindBufferBase(GL_UNIFORM_BUFFER, 2, s_vs_ubo); } } + void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) + for (; iter != pshaders.end(); ++iter) iter->second.Destroy(); pshaders.clear(); - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - glDeleteBuffers(2, UBOBuffers); + + glDeleteBuffers(1, &s_ps_ubo); + glDeleteBuffers(1, &s_ps_ubo); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 4c356f52d5..03bb58ce55 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -95,14 +95,15 @@ class ProgramShaderCache static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; - // For UBOS - static GLuint UBOBuffers[2]; // PS is 0, VS is 1 + static GLuint s_ps_ubo, s_vs_ubo; public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); - static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); + static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index b665aeae98..a88867095a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -240,14 +240,11 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float buf[4]; - buf[0] = f1; - buf[1] = f2; - buf[2] = f3; - buf[3] = f4; + float const buf[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, 1); return; } for( unsigned int a = 0; a < 9; ++a) @@ -265,7 +262,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, f); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, 1); return; } for( unsigned int a = 0; a < 9; ++a) @@ -283,7 +280,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, f, count); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, count); return; } for( unsigned int a = 0; a < 9; ++a) @@ -309,7 +306,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, count); return; } for( unsigned int a = 0; a < 9; ++a) From bcb2abbcf18018b339faea58a7d8e65114986ca0 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 04:32:57 -0600 Subject: [PATCH 039/625] fix stupid indentation --- .../Src/ProgramShaderCache.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 3be1e76aff..dd4fd6923f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -140,18 +140,18 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - } - - void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + } + + void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } From 16b58a8825cae61d9f48aebfaa29182f0c687538 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 05:15:08 -0600 Subject: [PATCH 040/625] Show a bit of information when using GLSL shaders. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 726dbe7a66..9556c12995 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -31,6 +31,8 @@ #include "ProgramShaderCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" +#include "OnScreenDisplay.h" +#include "StringUtil.h" #include "FileUtil.h" #include "Debugger.h" @@ -74,25 +76,28 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetPSConstant4f = SetGLSLPSConstant4f; - pSetPSConstant4fv = SetGLSLPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; - pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); } else { - pSetPSConstant4f = SetCGPSConstant4f; - pSetPSConstant4fv = SetCGPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; - pCompilePixelShader = CompileCGPixelShader; - glEnable(GL_FRAGMENT_PROGRAM_ARB); + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); From 5ae1f674f56851466b57ad9986a835e85eb3909c Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 05:13:05 -0600 Subject: [PATCH 041/625] make use of glMapBuffer to set ubo data --- .../Src/ProgramShaderCache.cpp | 56 ++++++++++++++++--- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 3 + .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 + 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index dd4fd6923f..df01055e65 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,6 +25,8 @@ namespace OGL ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_ubo; GLuint ProgramShaderCache::s_vs_ubo; + float* ProgramShaderCache::s_ps_mapped_data; + float* ProgramShaderCache::s_vs_mapped_data; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -142,18 +144,55 @@ namespace OGL void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + if (!s_ps_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + s_ps_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + + if (!s_ps_mapped_data) + PanicAlert("glMapBuffer"); + } + + std::copy(f, f + count * 4, s_ps_mapped_data + offset * 4); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + if (!s_vs_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + s_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + + if (!s_vs_mapped_data) + PanicAlert("glMapBuffer"); + } + + std::copy(f, f + count * 4, s_vs_mapped_data + offset * 4); + } + + void ProgramShaderCache::FlushConstants() + { + if (s_ps_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) + PanicAlert("glUnmapBuffer"); + s_ps_mapped_data = NULL; + } + + if (s_vs_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) + PanicAlert("glUnmapBuffer"); + s_vs_mapped_data = NULL; + } + glBindBuffer(GL_UNIFORM_BUFFER, 0); } - + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -200,8 +239,11 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); + // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" glDeleteBuffers(1, &s_ps_ubo); - glDeleteBuffers(1, &s_ps_ubo); + glDeleteBuffers(1, &s_vs_ubo); + s_ps_ubo = s_vs_ubo = 0; + s_ps_mapped_data = s_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 03bb58ce55..56026a5c4d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -96,6 +96,7 @@ class ProgramShaderCache static std::pair CurrentShaderProgram; static GLuint s_ps_ubo, s_vs_ubo; + static float *s_ps_mapped_data, *s_vs_mapped_data; public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); @@ -104,6 +105,8 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); + + static void FlushConstants(); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index fff8263569..7d7bc651a0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -214,6 +214,9 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); + + if(g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + ProgramShaderCache::FlushConstants(); // setup the pointers if (g_nativeVertexFmt) From a613012d084e4913c3eb3eafe6e24adafe99dfaa Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 06:02:04 -0600 Subject: [PATCH 042/625] try combining vs/ps ubo --- .../Src/ProgramShaderCache.cpp | 80 ++++++++----------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 8 +- 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index df01055e65..bff25a5a65 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,10 +23,9 @@ namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::s_ps_ubo; - GLuint ProgramShaderCache::s_vs_ubo; - float* ProgramShaderCache::s_ps_mapped_data; - float* ProgramShaderCache::s_vs_mapped_data; + GLuint ProgramShaderCache::s_ps_vs_ubo; + float* ProgramShaderCache::s_ps_vs_mapped_data; + GLintptr ProgramShaderCache::s_vs_data_offset; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -142,55 +141,40 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + void ProgramShaderCache::MapBuffer() { - if (!s_ps_mapped_data) + if (!s_ps_vs_mapped_data) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - s_ps_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + s_ps_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - if (!s_ps_mapped_data) + if (!s_ps_vs_mapped_data) PanicAlert("glMapBuffer"); } + } - std::copy(f, f + count * 4, s_ps_mapped_data + offset * 4); + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + MapBuffer(); + + std::copy(f, f + count * 4, s_ps_vs_mapped_data + offset * 4); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - if (!s_vs_mapped_data) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - s_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + MapBuffer(); - if (!s_vs_mapped_data) - PanicAlert("glMapBuffer"); - } - - std::copy(f, f + count * 4, s_vs_mapped_data + offset * 4); + // TODO: division = hax + std::copy(f, f + count * 4, s_ps_vs_mapped_data + (s_vs_data_offset / sizeof(float)) + offset * 4); } void ProgramShaderCache::FlushConstants() { - if (s_ps_mapped_data) + if (s_ps_vs_mapped_data) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) PanicAlert("glUnmapBuffer"); - s_ps_mapped_data = NULL; + s_ps_vs_mapped_data = NULL; } - - if (s_vs_mapped_data) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) - PanicAlert("glUnmapBuffer"); - s_vs_mapped_data = NULL; - } - - glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -212,23 +196,23 @@ namespace OGL { GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + + GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); + GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); + s_vs_data_offset = ps_data_size; // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glGenBuffers(1, &s_ps_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); - glGenBuffers(1, &s_vs_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); - - glBindBuffer(GL_UNIFORM_BUFFER, 0); + glGenBuffers(1, &s_ps_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); + // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader // Repeat for VS shader - glBindBufferBase(GL_UNIFORM_BUFFER, 1, s_ps_ubo); - glBindBufferBase(GL_UNIFORM_BUFFER, 2, s_vs_ubo); + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } } @@ -239,11 +223,11 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); + glBindBuffer(GL_UNIFORM_BUFFER, 0); // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" - glDeleteBuffers(1, &s_ps_ubo); - glDeleteBuffers(1, &s_vs_ubo); - s_ps_ubo = s_vs_ubo = 0; - s_ps_mapped_data = s_vs_mapped_data = NULL; + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + s_ps_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 56026a5c4d..20a33f184b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -95,8 +95,12 @@ class ProgramShaderCache static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; - static GLuint s_ps_ubo, s_vs_ubo; - static float *s_ps_mapped_data, *s_vs_mapped_data; + static GLuint s_ps_vs_ubo; + static float* s_ps_vs_mapped_data; + static GLintptr s_vs_data_offset; + + static void MapBuffer(); + public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); From c908e1173d9a1d54645249f8a942d18203cd7244 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 06:11:38 -0600 Subject: [PATCH 043/625] glMapBuffer was slow, go back to glBufferSubData, single combined ps/vs ubo now --- .../Src/ProgramShaderCache.cpp | 37 +++---------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 5 --- .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 -- 3 files changed, 5 insertions(+), 40 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index bff25a5a65..10c15aae36 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -24,7 +24,6 @@ namespace OGL GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; - float* ProgramShaderCache::s_ps_vs_mapped_data; GLintptr ProgramShaderCache::s_vs_data_offset; std::pair ProgramShaderCache::CurrentShaderProgram; @@ -141,42 +140,18 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::MapBuffer() - { - if (!s_ps_vs_mapped_data) - { - s_ps_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - - if (!s_ps_vs_mapped_data) - PanicAlert("glMapBuffer"); - } - } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - MapBuffer(); - - std::copy(f, f + count * 4, s_ps_vs_mapped_data + offset * 4); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - MapBuffer(); - - // TODO: division = hax - std::copy(f, f + count * 4, s_ps_vs_mapped_data + (s_vs_data_offset / sizeof(float)) + offset * 4); + glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); } - - void ProgramShaderCache::FlushConstants() - { - if (s_ps_vs_mapped_data) - { - if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) - PanicAlert("glUnmapBuffer"); - s_ps_vs_mapped_data = NULL; - } - } - + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -224,10 +199,8 @@ namespace OGL pshaders.clear(); glBindBuffer(GL_UNIFORM_BUFFER, 0); - // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" glDeleteBuffers(1, &s_ps_vs_ubo); s_ps_vs_ubo = 0; - s_ps_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 20a33f184b..26d5735ce6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -96,10 +96,7 @@ class ProgramShaderCache static std::pair CurrentShaderProgram; static GLuint s_ps_vs_ubo; - static float* s_ps_vs_mapped_data; static GLintptr s_vs_data_offset; - - static void MapBuffer(); public: static PROGRAMSHADER GetShaderProgram(void); @@ -109,8 +106,6 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); - - static void FlushConstants(); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 7d7bc651a0..fff8263569 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -214,9 +214,6 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); - - if(g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - ProgramShaderCache::FlushConstants(); // setup the pointers if (g_nativeVertexFmt) From ad13f2d23d8dd809e5f5246a7ea45bbcb0b3fc70 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 06:18:01 -0600 Subject: [PATCH 044/625] Instead of querying the vertex attribute location. Let's bind it to where CG expects it to be as well. Was causing problems when we were trying to activate the components below and they weren't available. This fixes cubivore with GLSL shader. Also any other game that uses 3 normal pointers. --- .../Plugin_VideoOGL/Src/NativeVertexFormat.cpp | 17 +++-------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 18 +++--------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 -- 3 files changed, 6 insertions(+), 31 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index c83c976fb2..d42b2a7222 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -192,15 +192,8 @@ void GLVertexFormat::SetupVertexPointers() { if (vtx_decl.num_normals >= 1) { glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); if (vtx_decl.num_normals == 3) { - GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB; - if(g_ActiveConfig.bUseGLSL){ - varLocation1 = OGL::ProgramShaderCache::GetAttr(0); - varLocation2 = OGL::ProgramShaderCache::GetAttr(1); - } - if(varLocation1 > 0) - glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - if(varLocation2 > 0) - glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); + glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); + glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); } } @@ -224,11 +217,7 @@ void GLVertexFormat::SetupVertexPointers() { } if (vtx_decl.posmtx_offset != -1) { - GLint varLocation = SHADER_POSMTX_ATTRIB; - if(g_ActiveConfig.bUseGLSL) - varLocation = OGL::ProgramShaderCache::GetAttr(2); - if(varLocation > 0) - glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); + glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); } #endif } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 10c15aae36..2f6aa691de 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -121,18 +121,10 @@ namespace OGL // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; pshaders[ShaderPair] = entry; @@ -154,10 +146,6 @@ namespace OGL GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - GLint ProgramShaderCache::GetAttr(int num) - { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; - } PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { return pshaders[CurrentShaderProgram].program; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 26d5735ce6..4830f28849 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -72,7 +72,6 @@ struct PROGRAMSHADER PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; - GLint attrLoc[3]; GLint UniformLocations[NUM_UNIFORMS]; }; @@ -100,7 +99,6 @@ class ProgramShaderCache public: static PROGRAMSHADER GetShaderProgram(void); - static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); From e85a3d68b02b61f607637dddffd575ab99ba2898 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 07:02:13 -0600 Subject: [PATCH 045/625] Looks like we make use of fmod, make a GLSL function for it! --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 940a34f537..5f66dfb6e9 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -573,6 +573,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + // A function here + // Fmod implementation gleaned from Nvidia + // At http://http.developer.nvidia.com/Cg/fmod.html + WRITE(p, "float fmod( float x, float y )\n"); + WRITE(p, "{\n"); + WRITE(p, "float z = fract( abs( x / y) ) * abs( y );\n"); + WRITE(p, "return (x < 0) ? -z : z;\n"); + WRITE(p, "}\n"); + for (int i = 0; i < 8; ++i) WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); From 9ff48ac6eb92a7a9d46705c672097ac29a8c4e69 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 15 Dec 2011 15:48:21 -0600 Subject: [PATCH 046/625] Make sure not to try and bind UBO locations when it isn't supported --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 2f6aa691de..5d00ce2529 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -101,7 +101,7 @@ namespace OGL // points statically set in the shader source // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); From 800e1c9e098adb030180bda9e12420a352ad8750 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 16 Dec 2011 00:00:08 -0600 Subject: [PATCH 047/625] Let compiling work on OSX. --- Source/Plugins/Plugin_VideoOGL/SConscript | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Plugins/Plugin_VideoOGL/SConscript b/Source/Plugins/Plugin_VideoOGL/SConscript index 4b601fca83..46c07d6266 100644 --- a/Source/Plugins/Plugin_VideoOGL/SConscript +++ b/Source/Plugins/Plugin_VideoOGL/SConscript @@ -10,6 +10,7 @@ files = [ 'Src/NativeVertexFormat.cpp', 'Src/PixelShaderCache.cpp', 'Src/PostProcessing.cpp', + 'Src/ProgramShaderCache.cpp', 'Src/RasterFont.cpp', 'Src/Render.cpp', 'Src/TextureCache.cpp', From fe6fb553896ff47cfdebeae9db29d212b6938082 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 16 Dec 2011 23:18:24 -0600 Subject: [PATCH 048/625] Add a GUI option to use GLSL shaders. Also fix a small typo. --- Source/Core/DolphinWX/Src/VideoConfigDiag.cpp | 12 ++++++++++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 45e239a835..618831ee81 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -118,6 +118,7 @@ wxString use_ffv1_desc = wxTRANSLATE("Encode frame dumps using the FFV1 codec.\n #endif wxString free_look_desc = wxTRANSLATE("This feature allows you to change the game's camera.\nHold the right mouse button and move the mouse to pan the camera around. Hold SHIFT and press one of the WASD keys to move the camera by a certain step distance (SHIFT+0 to move faster and SHIFT+9 to move slower). Press SHIFT+R to reset the camera.\n\nIf unsure, leave this unchecked."); wxString crop_desc = wxTRANSLATE("Crop the picture from 4:3 to 5:4 or from 16:9 to 16:10.\n\nIf unsure, leave this unchecked."); +wxString GLSL_desc = wxTRANSLATE("Uses GLSL shaders in place of Nvidia CG Shaders\n\nIf unsure, leave this unchecked."); wxString opencl_desc = wxTRANSLATE("[EXPERIMENTAL]\nAims to speed up emulation by offloading texture decoding to the GPU using the OpenCL framework.\nHowever, right now it's known to cause texture defects in various games. Also it's slower than regular CPU texture decoding in most cases.\n\nIf unsure, leave this unchecked."); wxString dlc_desc = wxTRANSLATE("[EXPERIMENTAL]\nSpeeds up emulation a bit by caching display lists.\nPossibly causes issues though.\n\nIf unsure, leave this unchecked."); wxString omp_desc = wxTRANSLATE("Use multiple threads to decode textures.\nMight result in a speedup (especially on CPUs with more than two cores).\n\nIf unsure, leave this unchecked."); @@ -578,6 +579,17 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con szr_misc->Add(cb_prog_scan); } + // GLSL Option + { + if(strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) + { + wxCheckBox* const cb_GLSL = CreateCheckBox(page_advanced, _("Use GLSL Shaders"), wxGetTranslation(GLSL_desc), vconfig.bUseGLSL); + szr_misc->Add(cb_GLSL); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + cb_GLSL->Disable(); + } + } + wxStaticBoxSizer* const group_misc = new wxStaticBoxSizer(wxVERTICAL, page_advanced, _("Misc")); szr_advanced->Add(group_misc, 0, wxEXPAND | wxALL, 5); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 5d00ce2529..98efbb000b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -101,7 +101,7 @@ namespace OGL // points statically set in the shader source // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); From 73c3f198f4188629eb3bcac123f8516135a86a4c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 16 Dec 2011 23:37:22 -0600 Subject: [PATCH 049/625] Only delete this buffer if we support it. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 98efbb000b..c90f151421 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -186,9 +186,12 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - glDeleteBuffers(1, &s_ps_vs_ubo); - s_ps_vs_ubo = 0; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glBindBuffer(GL_UNIFORM_BUFFER, 0); + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + } } } From b837ae25fc9db2ae2fa9708038b1db8733a13020 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 17 Dec 2011 01:06:55 -0600 Subject: [PATCH 050/625] Set Sampler values at program make time instead of every frame. Fix an issue when The user had UBO support but not Binding support. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 217 ++++++------------ .../Plugin_VideoOGL/Src/PixelShaderCache.h | 4 - .../Src/ProgramShaderCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 3 - .../Plugin_VideoOGL/Src/TextureConverter.cpp | 2 - .../Plugin_VideoOGL/Src/VertexManager.cpp | 19 -- 6 files changed, 79 insertions(+), 176 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 9556c12995..6b171a3f03 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -119,141 +119,81 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { - sprintf(pmatrixprog, "#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" - "%s\n" - "%svec4 "I_COLORS"[7];\n" - "%s\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } - else - { - sprintf(pmatrixprog, "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "%s\n" - "%svec4 "I_COLORS"[7];\n" - "%s\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } + sprintf(pmatrixprog, "#version %s\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "%s\n" + "%suniform sampler2DRect samp0;\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", + (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "layout(binding = 0) " : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { - sprintf(pmatrixprog, "#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" - "%s\n" - "%svec4 "I_COLORS"[5];\n" - "%s\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } - else - { - sprintf(pmatrixprog, "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "%s\n" - "%svec4 "I_COLORS"[5];\n" - "%s\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } + + sprintf(pmatrixprog, "#version %s\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "%s\n" + "%suniform sampler2DRect samp0;\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", + (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "layout(binding = 0) " : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); @@ -492,23 +432,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) ps.bGLSL = true; return true; } -void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) -{ - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - return; - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform1i(tmp.UniformLocations[a], Tex); - return; - } - } -} void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 6547b95234..b0328f336c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -78,8 +78,6 @@ class PixelShaderCache public: static void Init(); static void Shutdown(); - // This is a GLSL only function - static void SetPSSampler(const char * name, unsigned int Tex); static FRAGMENTSHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 components); static bool CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); @@ -88,8 +86,6 @@ public: static GLuint GetDepthMatrixProgram(); - static bool SupportsBinding(); - static void SetCurrentShader(GLuint Shader); static void DisableShader(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c90f151421..14542bf68f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -114,9 +114,17 @@ namespace OGL //For some reason this fails on my hardware //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + else if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 2fc02d867a..1a4b8bb55f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -298,10 +298,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtualW, virtualH); if(g_ActiveConfig.bUseGLSL) - { ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); - PixelShaderCache::SetPSSampler("samp0", 0); - } else PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); PixelShaderManager::SetColorMatrix(colmat); // set transformation diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 213d92098a..0b0cae3aa3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -314,8 +314,6 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, } GL_REPORT_ERRORD(); - if(g_ActiveConfig.bUseGLSL) - PixelShaderCache::SetPSSampler("samp0", 0); glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index fff8263569..cb8e010794 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -219,16 +219,6 @@ void VertexManager::vFlush() if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); GL_REPORT_ERRORD(); - if(g_ActiveConfig.bUseGLSL) - for (int i = 0; i < 8; i++) - { - if (usedtextures & (1 << i)) - { - char tmp[16]; - sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? - PixelShaderCache::SetPSSampler(tmp, i); - } - } Draw(); @@ -243,15 +233,6 @@ void VertexManager::vFlush() PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); - for (int i = 0; i < 8; i++) - { - if (usedtextures & (1 << i)) - { - char tmp[16]; - sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? - PixelShaderCache::SetPSSampler(tmp, i); - } - } } else if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); From 4342efe71231bbf7155f6ed3df1b117a137f3f0d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 17 Dec 2011 01:17:11 -0600 Subject: [PATCH 051/625] Some shader programs don't come with Vertex shaders attached, don't try to bind a Vertex Uniform block then. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 14542bf68f..7ae733bcf1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -104,7 +104,8 @@ namespace OGL if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + if(uid.uid.vsid != 0) // Some things have no vertex shader + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } // We cache our uniform locations for now From 636d6a915d889ca2397d56c54659ec2b8c823248 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 01:51:15 -0600 Subject: [PATCH 052/625] Remove this silliness --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 10 ---------- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 10 ---------- 2 files changed, 20 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index 7d309dee38..b81d051a0f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -121,14 +121,4 @@ extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif -// XXX: Dual-source blending in OpenGL does not work correctly yet. To make it -// work, we may need to use glBindFragDataLocation. To use that, we need to -// use GLSL shaders across the whole pipeline. Yikes! -#define USE_DUAL_SOURCE_BLEND - -// Can't get defined on my system for some reason... -#ifndef GL_ONE_MINUS_SRC1_ALPHA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#endif - #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 86452adebd..78b422eed2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -938,11 +938,9 @@ void Renderer::SetBlendMode(bool forceUpdate) u32 changes = forceUpdate ? 0xFFFFFFFF : newval ^ s_blendMode; -#ifdef USE_DUAL_SOURCE_BLEND bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; bool useDualSource = useDstAlpha; -#endif if (changes & 1) // blend enable change @@ -950,19 +948,14 @@ void Renderer::SetBlendMode(bool forceUpdate) if (changes & 4) { -#ifdef USE_DUAL_SOURCE_BLEND // subtract enable change GLenum equation = newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD; GLenum equationAlpha = useDualSource ? GL_FUNC_ADD : equation; glBlendEquationSeparate(equation, equationAlpha); -#else - glBlendEquation(newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD); -#endif } if (changes & 0x1F8) { -#ifdef USE_DUAL_SOURCE_BLEND GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; GLenum srcFactorAlpha = srcFactor; GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; @@ -985,9 +978,6 @@ void Renderer::SetBlendMode(bool forceUpdate) // blend RGB change glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); -#else - glBlendFunc(glSrcFactors[(newval >> 3) & 7], glDestFactors[(newval >> 6) & 7]); -#endif } s_blendMode = newval; From 3513dd7115d95331e294d03299b806227b2ee458 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 21:06:28 -0600 Subject: [PATCH 053/625] Looky, OSX found an issue for me. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 5f66dfb6e9..c376f55e6f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -721,13 +721,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // wpos is in w of first 4 texcoords if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - for (int i = 0; i < 8; ++i) - WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + for (int i = 0; i < 8; ++i) + WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); } else { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? ".xyz" : ""); + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? "" : ".xyz"); } } WRITE(p, "void main()\n{\n"); From 768a683f04cb17b5c668a8b55d7ab084686e845d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 23:31:00 -0600 Subject: [PATCH 054/625] This thing fails when we don't support binding. Not 100% sure why I need to set this multiple times. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 7ae733bcf1..b83e4cf0ac 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -77,6 +77,13 @@ namespace OGL { PCacheEntry &entry = iter->second; glUseProgram(entry.program.glprogid); + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Why do we need to set this again here when we don't support binding? + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; return; From 9ce17a43ec44430449034034335b6c9f96aab42d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 19 Dec 2011 00:15:07 -0600 Subject: [PATCH 055/625] There we go, actually found the issue. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b83e4cf0ac..d38a4607e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -77,13 +77,6 @@ namespace OGL { PCacheEntry &entry = iter->second; glUseProgram(entry.program.glprogid); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Why do we need to set this again here when we don't support binding? - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; return; @@ -125,11 +118,10 @@ namespace OGL if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - else if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) for(int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if(entry.program.UniformLocations[a] != -1) glUniform1i(entry.program.UniformLocations[a], a); } From f6b33cf0be7420c9dc09010ecd743d7d9a7004b5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 19 Dec 2011 19:10:05 -0600 Subject: [PATCH 056/625] Add a define back so we work without GLEW 1.6, Also I missed a line when I was fixing binding sampler locations last night when I was tired. --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 5 +++++ Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index b81d051a0f..bfde884ccd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -121,4 +121,9 @@ extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif +// Isn't defined if we aren't using GLEW 1.6 +#ifndef GL_ONE_MINUS_SRC1_ALPHA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#endif + #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d38a4607e4..dc4b4e9822 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -116,12 +116,13 @@ namespace OGL //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 0; a < NUM_UNIFORMS; ++a) + for(int a = 8; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) for(int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if(entry.program.UniformLocations[a] != -1) glUniform1i(entry.program.UniformLocations[a], a); } From dc134b9bacefb7eb2ba8d5b9a66f1c0c2b423238 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 20 Dec 2011 21:55:11 -0600 Subject: [PATCH 057/625] Move the GLSL extension checks over here so it is nicer. --- .../Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp | 10 ---------- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 11 +++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6b171a3f03..9c7463442a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -80,16 +80,6 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) - g_Config.backend_info.bSupportsGLSLUBO = true; - - UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", - g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); } else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 78b422eed2..2e17429910 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -312,6 +312,17 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; + + if (glewIsSupported("GL_ARB_shading_language_420pack")) + g_Config.backend_info.bSupportsGLSLBinding = true; + if (glewIsSupported("GL_ARB_uniform_buffer_object")) + g_Config.backend_info.bSupportsGLSLUBO = true; + + UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); + s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); s_MSAACoverageSamples = GetNumMSAACoverageSamples(s_LastMultisampleMode); From 31a9b6c322b89ff64f5a1fe758259e3845879e20 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 20 Dec 2011 23:07:42 -0600 Subject: [PATCH 058/625] Go back to using glGetString with GL_EXTENSIONS because glew 1.7 is required to check for newer 4.2 extensions that way. --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 2e17429910..bb935e09b7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -313,9 +313,9 @@ Renderer::Renderer() s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - if (glewIsSupported("GL_ARB_shading_language_420pack")) + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - if (glewIsSupported("GL_ARB_uniform_buffer_object")) + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; UpdateActiveConfig(); From a10656b1b2a9c464db122460fd57038c313ee5ef Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 21 Dec 2011 00:15:48 -0600 Subject: [PATCH 059/625] Implement Program shaders cache. Seems to reduce a small amount of stuttering when F-Zero starts. Did it because I can :| --- Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Src/ProgramShaderCache.cpp | 112 ++++++++++++------ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 59 ++++++++- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 9 +- 4 files changed, 139 insertions(+), 42 deletions(-) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 84c71c0497..2e2b08319d 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -171,6 +171,7 @@ struct VideoConfig bool bSupportsGLSL; bool bSupportsGLSLBinding; bool bSupportsGLSLUBO; + bool bSupportsGLSLCache; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index dc4b4e9822..70655294c7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -26,6 +26,9 @@ namespace OGL GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; + LinearDiskCache g_program_disk_cache; + GLenum ProgramFormat; + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { // SAMPLERS @@ -53,6 +56,48 @@ namespace OGL I_DEPTHPARAMS, }; + void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) + { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + if(uid.uid.vsid != 0) // Some things have no vertex shader + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } + + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for(int a = 8; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } + + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + } + } + + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { PROGRAMUID uid; @@ -92,49 +137,19 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.vsid); glAttachShader(entry.program.glprogid, entry.program.psid); + + + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - if(uid.uid.vsid != 0) // Some things have no vertex shader - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } - - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } - - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); - } + SetProgramVariables(entry, uid); + // Add it to our cache + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + g_program_disk_cache.Append(uid, entry.Data(), entry.Size()); pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; @@ -186,10 +201,33 @@ namespace OGL glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } + + // Read our shader cache, only if supported + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + char cache_filename[MAX_PATH]; + sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; + g_program_disk_cache.OpenAndRead(cache_filename, inserter); + + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint Formats[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + ProgramFormat = (GLenum)Formats[0]; // We don't really care about format + } } void ProgramShaderCache::Shutdown(void) { + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + g_program_disk_cache.Sync(); + g_program_disk_cache.Close(); + } + PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) iter->second.Destroy(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 4830f28849..f2987965dc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -25,6 +25,9 @@ #include "PixelShaderGen.h" #include "VertexShaderGen.h" +#include "LinearDiskCache.h" +#include "ConfigManager.h" + union PID { struct { @@ -65,14 +68,28 @@ namespace OGL { #define NUM_UNIFORMS 27 extern const char *UniformNames[NUM_UNIFORMS]; - +extern GLenum ProgramFormat; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; GLint UniformLocations[NUM_UNIFORMS]; + GLint binaryLength; + u8 *Data() + { + glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); + u8* binary = (u8*)malloc(binaryLength); + glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); + return binary; + } + GLint Size() + { + if(!binaryLength) + glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); + return binaryLength; + } }; @@ -87,7 +104,44 @@ class ProgramShaderCache glDeleteProgram(program.glprogid); program.glprogid = 0; } + u8* Data() + { + return program.Data(); + } + GLint Size() + { + return program.Size(); + } }; + + class ProgramShaderCacheInserter : public LinearDiskCacheReader + { + public: + void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + { + PCacheEntry entry; + + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + entry.program.vsid = key.uid.vsid; + entry.program.psid = key.uid.psid; + + entry.program.glprogid = glCreateProgram(); + + glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); + + GLint success; + glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); + + if (success) + { + pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; + glUseProgram(entry.program.glprogid); + SetProgramVariables(entry, key); + } + } + }; + typedef std::map, PCacheEntry> PCache; static PCache pshaders; @@ -96,6 +150,7 @@ class ProgramShaderCache static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; + static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); public: static PROGRAMSHADER GetShaderProgram(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index bb935e09b7..5583619d38 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -312,16 +312,19 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - + // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) + g_Config.backend_info.bSupportsGLSLCache = true; UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); From 8e0172374c172b507d3fb7a3f829c101c9dd6230 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 21 Dec 2011 01:29:29 -0600 Subject: [PATCH 060/625] Give OSX users more of a chance of supporting Single pass DSB in the future. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 5 ++- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 32 +++++++++++++------ Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Src/ProgramShaderCache.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 ++ .../Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index c376f55e6f..ef27629246 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -563,6 +563,9 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } else WRITE(p, "#version 120\n"); + + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -621,7 +624,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + WRITE(p, "layout(std140) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 67700dd647..7585597d43 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -204,6 +204,8 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define ATTRIN attribute\n"); WRITE(p, "#define ATTROUT attribute\n"); } + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -217,7 +219,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140%s) uniform VSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 2" : ""); + WRITE(p, "layout(std140) uniform VSBlock {\n"); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); @@ -241,21 +243,33 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & VB_HAS_NRM0) WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); - if (components & VB_HAS_POSMTXIDX) + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + { + if (components & VB_HAS_POSMTXIDX) + WRITE(p, "layout(location = %d) ATTRIN float fposmtx;\n", SHADER_POSMTX_ATTRIB); + if (components & VB_HAS_NRM1) + WRITE(p, "layout(location = %d) ATTRIN float3 rawnorm1;\n", SHADER_NORM1_ATTRIB); + if (components & VB_HAS_NRM2) + WRITE(p, "layout(location = %d) ATTRIN float3 rawnorm2;\n", SHADER_NORM2_ATTRIB); + } + else + { + if (components & VB_HAS_POSMTXIDX) WRITE(p, "ATTRIN float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); - if (components & VB_HAS_NRM1) + if (components & VB_HAS_NRM1) WRITE(p, "ATTRIN float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); - if (components & VB_HAS_NRM2) + if (components & VB_HAS_NRM2) WRITE(p, "ATTRIN float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); + } if (components & VB_HAS_COL0) - WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); + WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); if (components & VB_HAS_COL1) - WRITE(p, " float4 color1 = gl_SecondaryColor; // COLOR1,\n"); + WRITE(p, " float4 color1 = gl_SecondaryColor; // COLOR1,\n"); for (int i = 0; i < 8; ++i) { - u32 hastexmtx = (components & (VB_HAS_TEXMTXIDX0< Date: Wed, 21 Dec 2011 22:33:33 +0000 Subject: [PATCH 061/625] Missed a if, don't want people crashing now do we? --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 5c143c010c..0429b89e30 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -138,8 +138,8 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); - - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); glLinkProgram(entry.program.glprogid); From 9bc6b83fd0bd7f54b8cbefe762eaf59e9ec522b9 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 00:24:13 -0600 Subject: [PATCH 062/625] If CG isn't available, still compile and fallback on GLSL --- CMakeLists.txt | 6 ++++++ Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 2 +- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 3 +-- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 5 +++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e870304dc4..a22e017107 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -372,6 +372,12 @@ else() check_lib(CG Cg Cg/cg.h) check_lib(CGGL CgGL Cg/cgGL.h) + if(NOT CG_FOUND) + message("CG not found, Building without") + add_definitions(-DHAVE_CG=0) + else() + add_definitions(-DHAVE_CG=1) + endif() endif() if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") diff --git a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt index 6a49269c6c..86f48d2fc3 100644 --- a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt +++ b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt @@ -23,7 +23,7 @@ if(wxWidgets_FOUND) set(LIBS ${LIBS} ${wxWidgets_LIBRARIES}) endif(wxWidgets_FOUND) -if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if(HAVE_CG AND (APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")) set(LIBS ${LIBS} Cg CgGL) endif() diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index bfde884ccd..db7cf822e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -113,10 +113,9 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line); #define GL_REPORT_PROGRAM_ERROR() (void)0 #endif -#if defined __APPLE__ || defined __linux__ || defined _WIN32 +#if HAVE_CG && (defined __APPLE__ || defined __linux__ || defined _WIN32) #include #include -#define HAVE_CG 1 extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index bbb80bcbbd..6d1d4dd23b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -435,6 +435,11 @@ Renderer::Renderer() cgGLSetOptimalOptions(g_cgfProf); } } +#else + // If we don't have Nvidia CG, we HAVE to use GLSL + g_Config.bUseGLSL = true; + + UpdateActiveConfig(); #endif // HAVE_CG int nenvvertparams, nenvfragparams, naddrregisters[2]; From b90fa37c608737ffff653b0d7ff6ac80fb533541 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 00:37:13 -0600 Subject: [PATCH 063/625] If user doesn't compile with glew 1.6, cut out program binaries so everything still compiles. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 ++++-- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 0429b89e30..628cbae865 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -137,9 +137,10 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.vsid); glAttachShader(entry.program.glprogid, entry.program.psid); - + #ifdef GLEW_VERSION_4_0 if (g_ActiveConfig.backend_info.bSupportsGLSLCache) glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + #endif glLinkProgram(entry.program.glprogid); @@ -201,7 +202,7 @@ namespace OGL glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } - + #ifdef GLEW_VERSION_4_0 // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { @@ -218,6 +219,7 @@ namespace OGL glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); ProgramFormat = (GLenum)Formats[0]; // We don't really care about format } + #endif } void ProgramShaderCache::Shutdown(void) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index f2987965dc..51638cc1e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -79,16 +79,24 @@ struct PROGRAMSHADER GLint binaryLength; u8 *Data() { + #ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); u8* binary = (u8*)malloc(binaryLength); glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); return binary; + #else + return NULL; + #endif } GLint Size() { + #ifdef GLEW_VERSION_4_0 if(!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; + #else + return 0; + #endif } }; @@ -119,6 +127,7 @@ class ProgramShaderCache public: void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) { + #ifdef GLEW_VERSION_4_0 PCacheEntry entry; // The two shaders might not even exist anymore @@ -139,6 +148,7 @@ class ProgramShaderCache glUseProgram(entry.program.glprogid); SetProgramVariables(entry, key); } + #endif } }; From aa2032af2cc444fc0387d5aebcdd4b34b39d5277 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 02:19:30 -0600 Subject: [PATCH 064/625] Write all shaders to disk on emulator stop instead of constantly. Also change pair from u64 to u32. --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 13 +++++++------ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 628cbae865..6514e1e775 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -29,7 +29,7 @@ namespace OGL LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; - std::pair ProgramShaderCache::CurrentShaderProgram; + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { // SAMPLERS "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", @@ -116,7 +116,7 @@ namespace OGL // Fragment shaders can survive without Vertex Shaders // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); PCache::iterator iter = pshaders.find(ShaderPair); if (iter != pshaders.end()) { @@ -129,6 +129,7 @@ namespace OGL PCacheEntry entry; entry.program.vsid = CurrentVShader; entry.program.psid = CurrentFShader; + entry.program.uid = uid; entry.program.glprogid = glCreateProgram(); // Right, the program is created now @@ -148,10 +149,6 @@ namespace OGL SetProgramVariables(entry, uid); - // Add it to our cache - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - g_program_disk_cache.Append(uid, entry.Data(), entry.Size()); - pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; @@ -226,6 +223,10 @@ namespace OGL { if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + g_program_disk_cache.Sync(); g_program_disk_cache.Close(); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 51638cc1e4..59bcc8e295 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -75,6 +75,7 @@ struct PROGRAMSHADER PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; + PROGRAMUID uid; GLint UniformLocations[NUM_UNIFORMS]; GLint binaryLength; u8 *Data() @@ -152,11 +153,11 @@ class ProgramShaderCache } }; - typedef std::map, PCacheEntry> PCache; + typedef std::map, PCacheEntry> PCache; static PCache pshaders; static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; + static std::pair CurrentShaderProgram; static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; From 8349cc2551ca89006120cdf4c5fd296edee25445 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 08:58:51 -0600 Subject: [PATCH 065/625] Only use explicit attribute locations when we are supporting GLSL > 1.2 since we need in/out instead of attribute variable types. This was brought to my attention from MESA. MESA supports GL_ARB_explicit_attrib_location, but yets to support GLSL 1.3, so basically useless extension to MESA right now? --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 6d1d4dd23b..fa270f051e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -315,10 +315,10 @@ Renderer::Renderer() // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) - g_Config.backend_info.bSupportsGLSLATTRBind = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; + if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) + g_Config.backend_info.bSupportsGLSLATTRBind = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) g_Config.backend_info.bSupportsGLSLCache = true; From b607695103ce9d2b40e3e60980b88fb388f5d121 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 25 Dec 2011 12:21:31 -0600 Subject: [PATCH 066/625] Add in the Windows fix. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 6514e1e775..a422f80079 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -212,9 +212,10 @@ namespace OGL GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - GLint Formats[Supported]; + GLint *Formats = new GLint[Supported]; glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); ProgramFormat = (GLenum)Formats[0]; // We don't really care about format + delete[] Formats; } #endif } From 8266a564863e530169101e35a8e82fc346b61a59 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 25 Dec 2011 12:44:31 -0600 Subject: [PATCH 067/625] Missed a line here --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a22e017107..1eac2b2cd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -375,8 +375,10 @@ else() if(NOT CG_FOUND) message("CG not found, Building without") add_definitions(-DHAVE_CG=0) + set(HAVE_CG 0) else() add_definitions(-DHAVE_CG=1) + set(HAVE_CG 1) endif() endif() From f59063c8e7ec48992cdb0e7b2952ffc801daeefd Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sun, 25 Dec 2011 22:00:24 -0500 Subject: [PATCH 068/625] default to GLSL instead of Cg --- Source/Core/VideoCommon/Src/VideoConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index 69c1c4ce1c..21c71f5dfc 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -93,7 +93,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Settings", "DisableLighting", &bDisableLighting, 0); iniFile.Get("Settings", "DisableTexturing", &bDisableTexturing, 0); iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); - iniFile.Get("Settings", "UseGLSL", &bUseGLSL, 0); + iniFile.Get("Settings", "UseGLSL", &bUseGLSL, true); iniFile.Get("Settings", "EnableOpenCL", &bEnableOpenCL, false); iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); From 4bc14c347338f951b3b87de23a3fa19d7118a629 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 00:15:54 -0500 Subject: [PATCH 069/625] fix formatting uglies introduced in glsl-master branch --- Source/Core/DolphinWX/Src/VideoConfigDiag.cpp | 2 +- Source/Core/DolphinWX/Src/VideoConfigDiag.h | 2 +- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 89 +-- .../Src/TextureConversionShader.cpp | 315 +++++------ .../Core/VideoCommon/Src/VertexShaderGen.cpp | 129 ++--- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 532 +++++++++--------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 +- .../Src/ProgramShaderCache.cpp | 439 ++++++++------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 116 ++-- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 18 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 6 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 457 ++++++++------- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 2 +- 15 files changed, 1069 insertions(+), 1054 deletions(-) diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 618831ee81..2fc8ea5ba4 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -581,7 +581,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con // GLSL Option { - if(strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) + if (strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) { wxCheckBox* const cb_GLSL = CreateCheckBox(page_advanced, _("Use GLSL Shaders"), wxGetTranslation(GLSL_desc), vconfig.bUseGLSL); szr_misc->Add(cb_GLSL); diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.h b/Source/Core/DolphinWX/Src/VideoConfigDiag.h index 5765524f03..ebcc3b9454 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.h +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.h @@ -112,7 +112,7 @@ protected: void Event_ProgressiveScan(wxCommandEvent &ev) { SConfig::GetInstance().m_SYSCONF->SetData("IPL.PGS", ev.GetInt()); - SConfig::GetInstance().m_LocalCoreStartupParameter.bProgressive = ev.GetInt(); + SConfig::GetInstance().m_LocalCoreStartupParameter.bProgressive = !!ev.GetInt(); ev.Skip(); } diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index ef27629246..7eb3999fbc 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -502,23 +502,25 @@ static void BuildSwapModeTable() const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) return ""; // Nothing to do here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; } + const char* WriteBinding(API_TYPE ApiType, const u32 num) { - if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) return ""; static char result[64]; sprintf(result, "layout(binding = %d) ", num); return result; } + const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -550,7 +552,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } DepthTextureEnable = (bpmem.ztex2.op != ZTEXTURE_DISABLE && !bpmem.zcontrol.zcomploc && bpmem.zmode.testenable && bpmem.zmode.updateenable) || g_ActiveConfig.bEnablePerPixelDepth ; - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) @@ -564,7 +566,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType else WRITE(p, "#version 120\n"); - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); @@ -593,7 +595,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { // Declare samplers - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p, "uniform sampler2D "); } @@ -609,7 +611,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType bfirst = false; } WRITE(p, ";\n"); - if(ApiType == API_D3D11) + if (ApiType == API_D3D11) { WRITE(p, "Texture2D "); bfirst = true; @@ -623,7 +625,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } WRITE(p, "\n"); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); @@ -639,13 +641,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "%sfloat4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); WRITE(p, "%sfloat4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); - if(ApiType != API_GLSL) + if (ApiType != API_GLSL) { WRITE(p, "void main(\n"); - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", @@ -693,7 +695,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // Once we switch to GLSL 1.3 we will bind a lot of these. - if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + 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"); @@ -703,7 +705,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { WRITE(p, " float4 ocol0;\n"); } - if(DepthTextureEnable) + if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? WRITE(p, " float4 rawpos = gl_FragCoord;\n"); @@ -716,13 +718,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType for (int i = 0; i < numTexgen; ++i) WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); } else { // wpos is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); @@ -767,7 +769,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType " float4 cc2=float4(0.0f,0.0f,0.0f,0.0f), cprev=float4(0.0f,0.0f,0.0f,0.0f);\n" " float4 crastemp=float4(0.0f,0.0f,0.0f,0.0f),ckonsttemp=float4(0.0f,0.0f,0.0f,0.0f);\n\n"); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { if (xfregs.numTexGen.numTexGens < 7) { @@ -814,7 +816,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } // indirect texture map lookup - for(u32 i = 0; i < bpmem.genMode.numindstages; ++i) + for (u32 i = 0; i < bpmem.genMode.numindstages; ++i) { if (nIndirectStagesUsed & (1< 7 || ka > 7) + if (kc > 7 || ka > 7) { WRITE(p, "ckonsttemp = frac(konsttemp * (255.0f/256.0f)) * (256.0f/255.0f);\n"); } @@ -1110,9 +1112,9 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) } if(cc.a == TEVCOLORARG_CPREV || cc.a == TEVCOLORARG_APREV - || cc.b == TEVCOLORARG_CPREV || cc.b == TEVCOLORARG_APREV - || cc.c == TEVCOLORARG_CPREV || cc.c == TEVCOLORARG_APREV - || ac.a == TEVALPHAARG_APREV || ac.b == TEVALPHAARG_APREV || ac.c == TEVALPHAARG_APREV) + || cc.b == TEVCOLORARG_CPREV || cc.b == TEVCOLORARG_APREV + || cc.c == TEVCOLORARG_CPREV || cc.c == TEVCOLORARG_APREV + || ac.a == TEVALPHAARG_APREV || ac.b == TEVALPHAARG_APREV || ac.c == TEVALPHAARG_APREV) WRITE(p, "cprev = frac(prev * (255.0f/256.0f)) * (256.0f/255.0f);\n"); @@ -1150,7 +1152,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) if (cc.shift > TEVSCALE_1) WRITE(p, "%s*(", tevScaleTable[cc.shift]); - if(!(cc.d == TEVCOLORARG_ZERO && cc.op == TEVOP_ADD)) + if (!(cc.d == TEVCOLORARG_ZERO && cc.op == TEVOP_ADD)) WRITE(p, "%s%s", tevCInputTable[cc.d], tevOpTable[cc.op]); if (cc.a == cc.b) @@ -1197,7 +1199,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) if (ac.shift > TEVSCALE_1) WRITE(p, "%s*(", tevScaleTable[ac.shift]); - if(!(ac.d == TEVALPHAARG_ZERO && ac.op == TEVOP_ADD)) + if (!(ac.d == TEVALPHAARG_ZERO && ac.op == TEVOP_ADD)) WRITE(p, "%s.a%s", tevAInputTable[ac.d], tevOpTable[ac.op]); if (ac.a == ac.b) @@ -1213,7 +1215,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) WRITE(p, "%s",tevBiasTable[ac.bias]); - if (ac.shift>0) + if (ac.shift > 0) WRITE(p, ")"); } @@ -1303,7 +1305,7 @@ static bool WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode }; int Pretest = AlphaPreTest(); - if(Pretest >= 0) + if (Pretest >= 0) { return Pretest != 0; } @@ -1339,7 +1341,8 @@ static const char *tevFogFuncsTable[] = static void WriteFog(char *&p) { - if(bpmem.fog.c_proj_fsel.fsel == 0)return;//no Fog + if (bpmem.fog.c_proj_fsel.fsel == 0) + return; // no Fog if (bpmem.fog.c_proj_fsel.proj == 0) { @@ -1357,7 +1360,7 @@ static void WriteFog(char *&p) // x_adjust = sqrt((x-center)^2 + k^2)/k // ze *= x_adjust //this is complitly teorical as the real hard seems to use a table intead of calculate the values. - if(bpmem.fogRange.Base.Enabled) + if (bpmem.fogRange.Base.Enabled) { WRITE (p, " float x_adjust = (2.0f * (clipPos.x / "I_FOG"[2].y)) - 1.0f - "I_FOG"[2].x;\n"); WRITE (p, " x_adjust = sqrt(x_adjust * x_adjust + "I_FOG"[2].z * "I_FOG"[2].z) / "I_FOG"[2].z;\n"); @@ -1366,17 +1369,15 @@ static void WriteFog(char *&p) WRITE (p, " float fog = saturate(ze - "I_FOG"[1].z);\n"); - if(bpmem.fog.c_proj_fsel.fsel > 3) + if (bpmem.fog.c_proj_fsel.fsel > 3) { WRITE(p, "%s", tevFogFuncsTable[bpmem.fog.c_proj_fsel.fsel]); } else { - if(bpmem.fog.c_proj_fsel.fsel != 2) + if (bpmem.fog.c_proj_fsel.fsel != 2) WARN_LOG(VIDEO, "Unknown Fog Type! %08x", bpmem.fog.c_proj_fsel.fsel); } WRITE(p, " prev.rgb = lerp(prev.rgb,"I_FOG"[0].rgb,fog);\n"); - - } diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 2d3b642593..3fc83ddb7c 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -66,17 +66,19 @@ u16 GetEncodedSampleCount(u32 format) default: return 1; } } + const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) return ""; // Once we switch to GLSL 1.3 we can do something here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; } + const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -90,12 +92,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); @@ -122,7 +124,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { WRITE(p, " float4 ocol0;\n"); WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); @@ -131,7 +133,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) else { WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p," out float4 ocol0 : COLOR0,\n"); } @@ -163,12 +165,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL || ApiType == API_GLSL) + if (ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL && ApiType != API_GLSL) + if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -182,17 +184,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); // 32 bit textures (RGBA8 and Z24) are store in 2 cache line increments - if(ApiType == API_OPENGL) + if (ApiType == API_OPENGL) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } @@ -212,7 +214,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, "Texture2D Tex0 : register(t0);\n"); } - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { WRITE(p, " float4 ocol0;\n"); WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); @@ -249,18 +251,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float xl = floor(x2 / %f);\n", blkW); WRITE(p, " float xib = x2 - (xl * %f);\n", blkW); WRITE(p, " float halfxb = floor(xb / 2);\n"); - WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL || ApiType == API_GLSL) + if (ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL && ApiType != API_GLSL) + if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -281,7 +282,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; - if(ApiType != API_OPENGL || ApiType != API_GLSL) + if (ApiType != API_OPENGL || ApiType != API_GLSL) texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; @@ -292,7 +293,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP void WriteColorToIntensity(char*& p, const char* src, const char* dest) { - if(!IntensityConstantAdded) + if (!IntensityConstantAdded) { WRITE(p, " float4 IntensityConst = float4(0.257f,0.504f,0.098f,0.0625f);\n"); IntensityConstantAdded = true; @@ -328,7 +329,7 @@ void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest) void WriteEncoderEnd(char* p, API_TYPE ApiType) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) WRITE(p, "gl_FragData[0] = ocol0;\n"); WRITE(p, "}\n"); IntensityConstantAdded = false; @@ -337,22 +338,22 @@ void WriteEncoderEnd(char* p, API_TYPE ApiType) void WriteI8Encoder(char* p, API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_I8,ApiType); + WriteSwizzler(p, GX_TF_I8, ApiType); WRITE(p, " float3 texSample;\n"); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.a"); WRITE(p, " ocol0.rgba += IntensityConst.aaaa;\n"); // see WriteColorToIntensity @@ -362,40 +363,40 @@ void WriteI8Encoder(char* p, API_TYPE ApiType) void WriteI4Encoder(char* p, API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_I4,ApiType); + WriteSwizzler(p, GX_TF_I4, ApiType); WRITE(p, " float3 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.a"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.a"); WRITE(p, " color0.rgba += IntensityConst.aaaa;\n"); @@ -410,15 +411,15 @@ void WriteI4Encoder(char* p, API_TYPE ApiType) void WriteIA8Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_IA8,ApiType); + WriteSwizzler(p, GX_TF_IA8, ApiType); WRITE(p, " float4 texSample;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.b = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "ocol0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.r = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "ocol0.a"); @@ -429,27 +430,27 @@ void WriteIA8Encoder(char* p,API_TYPE ApiType) void WriteIA4Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_IA4,ApiType); + WriteSwizzler(p, GX_TF_IA4, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.b = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.g = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.r = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.a = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.a"); @@ -464,11 +465,11 @@ void WriteIA4Encoder(char* p,API_TYPE ApiType) void WriteRGB565Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB565,ApiType); + WriteSwizzler(p, GX_TF_RGB565, ApiType); - WriteSampleColor(p, "rgb", "float3 texSample0",ApiType); - WriteIncrementSampleX(p,ApiType); - WriteSampleColor(p, "rgb", "float3 texSample1",ApiType); + WriteSampleColor(p, "rgb", "float3 texSample0", ApiType); + WriteIncrementSampleX(p, ApiType); + WriteSampleColor(p, "rgb", "float3 texSample1", ApiType); WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n"); WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n"); WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n"); @@ -488,14 +489,14 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB5A3,ApiType); + WriteSwizzler(p, GX_TF_RGB5A3, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float color0;\n"); WRITE(p, " float gUpper;\n"); WRITE(p, " float gLower;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); // 0.8784 = 224 / 255 which is the maximum alpha value that can be represented in 3 bits WRITE(p, "if(texSample.a > 0.878f) {\n"); @@ -522,9 +523,9 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) WRITE(p, "}\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, "if(texSample.a > 0.878f) {\n"); @@ -555,21 +556,21 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB5A3,ApiType); + WriteSwizzler(p, GX_TF_RGB5A3, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WriteToBitDepth(p, 3, "texSample.a", "color0.b"); WriteToBitDepth(p, 4, "texSample.r", "color1.b"); WriteToBitDepth(p, 4, "texSample.g", "color0.g"); WriteToBitDepth(p, 4, "texSample.b", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WriteToBitDepth(p, 3, "texSample.a", "color0.r"); WriteToBitDepth(p, 4, "texSample.r", "color1.r"); WriteToBitDepth(p, 4, "texSample.g", "color0.a"); @@ -581,7 +582,7 @@ void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) void WriteRGBA8Encoder(char* p,API_TYPE ApiType) { - Write32BitSwizzler(p, GX_TF_RGBA8,ApiType); + Write32BitSwizzler(p, GX_TF_RGBA8, ApiType); WRITE(p, " float cl1 = xb - (halfxb * 2);\n"); WRITE(p, " float cl0 = 1.0f - cl1;\n"); @@ -590,15 +591,15 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.b = texSample.a;\n"); WRITE(p, " color0.g = texSample.r;\n"); WRITE(p, " color1.b = texSample.g;\n"); WRITE(p, " color1.g = texSample.b;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.r = texSample.a;\n"); WRITE(p, " color0.a = texSample.r;\n"); WRITE(p, " color1.r = texSample.g;\n"); @@ -611,32 +612,32 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_R4,ApiType); + WriteSwizzler(p, GX_CTF_R4, ApiType); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, comp, "color0.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.a",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.a", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.a",ApiType); + WriteSampleColor(p, comp, "color1.a", ApiType); WriteToBitDepth(p, 4, "color0", "color0"); WriteToBitDepth(p, 4, "color1", "color1"); @@ -647,45 +648,45 @@ void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_R8,ApiType); + WriteSwizzler(p, GX_CTF_R8, ApiType); - WriteSampleColor(p, comp, "ocol0.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.a",ApiType); + WriteSampleColor(p, comp, "ocol0.a", ApiType); WriteEncoderEnd(p, ApiType); } void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_RA4,ApiType); + WriteSwizzler(p, GX_CTF_RA4, ApiType); WRITE(p, " float2 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.b = texSample.x;\n"); WRITE(p, " color1.b = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.g = texSample.x;\n"); WRITE(p, " color1.g = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.r = texSample.x;\n"); WRITE(p, " color1.r = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.a = texSample.x;\n"); WRITE(p, " color1.a = texSample.y;\n"); @@ -698,35 +699,35 @@ void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_RA8,ApiType); + WriteSwizzler(p, GX_CTF_RA8, ApiType); - WriteSampleColor(p, comp, "ocol0.bg",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.bg", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.ra",ApiType); + WriteSampleColor(p, comp, "ocol0.ra", ApiType); WriteEncoderEnd(p, ApiType); } void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_Z8M,ApiType); + WriteSwizzler(p, GX_CTF_Z8M, ApiType); WRITE(p, " float depth;\n"); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.b = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.g = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.r = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.a = frac(depth * %s);\n", multiplier); WriteEncoderEnd(p, ApiType); @@ -734,14 +735,14 @@ void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) void WriteZ16Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_Z16,ApiType); + WriteSwizzler(p, GX_TF_Z16, ApiType); WRITE(p, " float depth;\n"); WRITE(p, " float3 expanded;\n"); // byte order is reversed - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -751,9 +752,9 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.b = expanded.g / 255;\n"); WRITE(p, " ocol0.g = expanded.r / 255;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -768,14 +769,14 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) void WriteZ16LEncoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_Z16L,ApiType); + WriteSwizzler(p, GX_CTF_Z16L, ApiType); WRITE(p, " float depth;\n"); WRITE(p, " float3 expanded;\n"); // byte order is reversed - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -787,9 +788,9 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.b = expanded.b / 255;\n"); WRITE(p, " ocol0.g = expanded.g / 255;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -806,7 +807,7 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) void WriteZ24Encoder(char* p, API_TYPE ApiType) { - Write32BitSwizzler(p, GX_TF_Z24X8,ApiType); + Write32BitSwizzler(p, GX_TF_Z24X8, ApiType); WRITE(p, " float cl = xb - (halfxb * 2);\n"); @@ -815,19 +816,19 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) WRITE(p, " float3 expanded0;\n"); WRITE(p, " float3 expanded1;\n"); - WriteSampleColor(p, "b", "depth0",ApiType); - WriteIncrementSampleX(p,ApiType); - WriteSampleColor(p, "b", "depth1",ApiType); + WriteSampleColor(p, "b", "depth0", ApiType); + WriteIncrementSampleX(p, ApiType); + WriteSampleColor(p, "b", "depth1", ApiType); for (int i = 0; i < 2; i++) { - WRITE(p, " depth%i *= 16777215.0f;\n", i); + WRITE(p, " depth%i *= 16777215.0f;\n", i); - WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); - WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); - WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); - WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); - WRITE(p, " expanded%i.b = depth%i;\n", i, i); + WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); + WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); + WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); + WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); + WRITE(p, " expanded%i.b = depth%i;\n", i, i); } WRITE(p, " if(cl > 0.5f) {\n"); @@ -854,7 +855,7 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) char *p = text; - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) @@ -881,76 +882,76 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) WRITE(p, "#ifdef GL_ARB_texture_rectangle\n #extension GL_ARB_texture_rectangle : require\n#endif\n"); } - switch(format) + switch (format) { case GX_TF_I4: - WriteI4Encoder(p,ApiType); + WriteI4Encoder(p, ApiType); break; case GX_TF_I8: - WriteI8Encoder(p,ApiType); + WriteI8Encoder(p, ApiType); break; case GX_TF_IA4: - WriteIA4Encoder(p,ApiType); + WriteIA4Encoder(p, ApiType); break; case GX_TF_IA8: - WriteIA8Encoder(p,ApiType); + WriteIA8Encoder(p, ApiType); break; case GX_TF_RGB565: - WriteRGB565Encoder(p,ApiType); + WriteRGB565Encoder(p, ApiType); break; case GX_TF_RGB5A3: - WriteRGB5A3Encoder(p,ApiType); + WriteRGB5A3Encoder(p, ApiType); break; case GX_TF_RGBA8: - WriteRGBA8Encoder(p,ApiType); + WriteRGBA8Encoder(p, ApiType); break; case GX_CTF_R4: - WriteC4Encoder(p, "r",ApiType); + WriteC4Encoder(p, "r", ApiType); break; case GX_CTF_RA4: - WriteCC4Encoder(p, "ar",ApiType); + WriteCC4Encoder(p, "ar", ApiType); break; case GX_CTF_RA8: - WriteCC8Encoder(p, "ar",ApiType); + WriteCC8Encoder(p, "ar", ApiType); break; case GX_CTF_A8: - WriteC8Encoder(p, "a",ApiType); + WriteC8Encoder(p, "a", ApiType); break; case GX_CTF_R8: - WriteC8Encoder(p, "r",ApiType); + WriteC8Encoder(p, "r", ApiType); break; case GX_CTF_G8: - WriteC8Encoder(p, "g",ApiType); + WriteC8Encoder(p, "g", ApiType); break; case GX_CTF_B8: - WriteC8Encoder(p, "b",ApiType); + WriteC8Encoder(p, "b", ApiType); break; case GX_CTF_RG8: - WriteCC8Encoder(p, "rg",ApiType); + WriteCC8Encoder(p, "rg", ApiType); break; case GX_CTF_GB8: - WriteCC8Encoder(p, "gb",ApiType); + WriteCC8Encoder(p, "gb", ApiType); break; case GX_TF_Z8: - WriteC8Encoder(p, "b",ApiType); + WriteC8Encoder(p, "b", ApiType); break; case GX_TF_Z16: - WriteZ16Encoder(p,ApiType); + WriteZ16Encoder(p, ApiType); break; case GX_TF_Z24X8: - WriteZ24Encoder(p,ApiType); + WriteZ24Encoder(p, ApiType); break; case GX_CTF_Z4: - WriteC4Encoder(p, "b",ApiType); + WriteC4Encoder(p, "b", ApiType); break; case GX_CTF_Z8M: - WriteZ8Encoder(p, "256.0f",ApiType); + WriteZ8Encoder(p, "256.0f", ApiType); break; case GX_CTF_Z8L: - WriteZ8Encoder(p, "65536.0f" ,ApiType); + WriteZ8Encoder(p, "65536.0f" , ApiType); break; case GX_CTF_Z16L: - WriteZ16LEncoder(p,ApiType); + WriteZ16LEncoder(p, ApiType); break; default: PanicAlert("Unknown texture copy format: 0x%x\n", format); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 7585597d43..9f945f1b95 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -185,65 +185,64 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) char *p = text; WRITE(p, "//Vertex Shader: comp:%x, \n", components); - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { - // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - WRITE(p, "#version 330 compatibility\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); - WRITE(p, "#define ATTRIN in\n"); - WRITE(p, "#define ATTROUT out\n"); - } - else - { - WRITE(p, "#version 120\n"); - WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); - } - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) - WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); - // Silly differences - WRITE(p, "#define float2 vec2\n"); - WRITE(p, "#define float3 vec3\n"); - WRITE(p, "#define float4 vec4\n"); + // A few required defines and ones that will make our lives a lot easier + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); + } + else + { + WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); - // cg to glsl function translation - WRITE(p, "#define frac(x) fract(x)\n"); - WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); - WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); - p = GenerateVSOutputStruct(p, components, ApiType); - if(ApiType == API_GLSL) + if(ApiType == API_GLSL) { if (components & VB_HAS_NRM0) - WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); + WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { if (components & VB_HAS_POSMTXIDX) WRITE(p, "layout(location = %d) ATTRIN float fposmtx;\n", SHADER_POSMTX_ATTRIB); @@ -277,7 +276,6 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "VS_OUTPUT main(\n"); // inputs @@ -306,9 +304,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } if (components & VB_HAS_POSMTXIDX) { if (is_d3d) - { WRITE(p, " float4 blend_indices : BLENDINDICES,\n"); - } else WRITE(p, " float fposmtx : ATTR%d,\n", SHADER_POSMTX_ATTRIB); } @@ -369,7 +365,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) "float3 ldir, h;\n" "float dist, dist2, attn;\n"); - if(xfregs.numChan.numColorChans == 0) + if (xfregs.numChan.numColorChans == 0) { if (components & VB_HAS_COL0) WRITE(p, "o.colors_0 = color0;\n"); @@ -380,7 +376,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // TODO: This probably isn't necessary if pixel lighting is enabled. p = GenerateLightingShader(p, components, I_MATERIALS, I_LIGHTS, "color", "o.colors_"); - if(xfregs.numChan.numColorChans < 2) + if (xfregs.numChan.numColorChans < 2) { if (components & VB_HAS_COL1) WRITE(p, "o.colors_1 = color1;\n"); @@ -570,30 +566,30 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) //seems to get rather complicated } - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { // Bit ugly here // Will look better when we bind uniforms in GLSL 1.3 // clipPos/w needs to be done in pixel shader, not here if (xfregs.numTexGen.numTexGens < 7) { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " gl_TexCoord[%d].xyz = o.tex%d;\n", i, i); - WRITE(p, " gl_TexCoord[%d] = o.clipPos;\n", xfregs.numTexGen.numTexGens); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " gl_TexCoord[%d] = o.Normal;\n", xfregs.numTexGen.numTexGens + 1); + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " gl_TexCoord[%d].xyz = o.tex%d;\n", i, i); + WRITE(p, " gl_TexCoord[%d] = o.clipPos;\n", xfregs.numTexGen.numTexGens); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, " gl_TexCoord[%d] = o.Normal;\n", xfregs.numTexGen.numTexGens + 1); } else { - // clip position is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - { - for (int i = 0; i < 8; ++i) - WRITE(p, " gl_TexCoord[%d] = o.tex%d;\n", i, i); - } - else - { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " gl_TexCoord[%d]%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); - } + // clip position is in w of first 4 texcoords + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, " gl_TexCoord[%d] = o.tex%d;\n", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " gl_TexCoord[%d]%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); + } } WRITE(p, "gl_FrontColor = o.colors_0;\n"); WRITE(p, "gl_FrontSecondaryColor = o.colors_1;\n"); @@ -601,8 +597,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "}\n"); } else - WRITE(p, "return o;\n}\n"); - + WRITE(p, "return o;\n}\n"); if (text[sizeof(text) - 1] != 0x7C) PanicAlert("VertexShader generator - buffer too small, canary has been eaten!"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 9c7463442a..345aa79115 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -20,7 +20,6 @@ #include "GLUtil.h" #include -#include #include "Statistics.h" #include "VideoConfig.h" @@ -51,62 +50,63 @@ bool PixelShaderCache::ShaderEnabled; PixelShaderCache::PSCacheEntry* PixelShaderCache::last_entry = NULL; PIXELSHADERUID PixelShaderCache::last_uid; -void(*pSetPSConstant4f)(unsigned int, float, float, float, float); -void(*pSetPSConstant4fv)(unsigned int, const float*); -void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); +void (*pSetPSConstant4f)(unsigned int, float, float, float, float); +void (*pSetPSConstant4fv)(unsigned int, const float*); +void (*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram.glprogid; + return s_DepthMatrixProgram.glprogid; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram.glprogid; + return s_ColorMatrixProgram.glprogid; } + void PixelShaderCache::Init() { - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; - GL_REPORT_ERRORD(); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; + GL_REPORT_ERRORD(); - s_displayCompileAlert = true; + s_displayCompileAlert = true; - if(g_ActiveConfig.bUseGLSL) - { + if (g_ActiveConfig.bUseGLSL) + { pSetPSConstant4f = SetGLSLPSConstant4f; pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; - } - else - { + } + else + { pSetPSConstant4f = SetCGPSConstant4f; pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; pCompilePixelShader = CompileCGPixelShader; glEnable(GL_FRAGMENT_PROGRAM_ARB); - } + } - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); - if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; + if (s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. + s_nMaxPixelInstructions = 4096; + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxPixelInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxPixelInstructions = 4096; + } #endif - int maxinst, maxattribs; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); - INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - if(g_ActiveConfig.bUseGLSL) + int maxinst, maxattribs; + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); + INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); + if (g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; sprintf(pmatrixprog, "#version %s\n" @@ -137,14 +137,14 @@ void PixelShaderCache::Init() g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - - + + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - + sprintf(pmatrixprog, "#version %s\n" "#extension GL_ARB_texture_rectangle : enable\n" "%s\n" @@ -183,7 +183,7 @@ void PixelShaderCache::Init() g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); @@ -194,20 +194,20 @@ void PixelShaderCache::Init() { char pmatrixprog[2048]; sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); glGenProgramsARB(1, &s_ColorMatrixProgram.glprogid); SetCurrentShader(s_ColorMatrixProgram.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); @@ -219,50 +219,50 @@ void PixelShaderCache::Init() } sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - "FLR R0.x,R0;\n" //bits 31..24 + "FLR R0.x,R0;\n" //bits 31..24 - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "MUL R0,R0,K0.y;\n" // /255 + "MUL R0,R0,K0.y;\n" // /255 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); glGenProgramsARB(1, &s_DepthMatrixProgram.glprogid); SetCurrentShader(s_DepthMatrixProgram.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); @@ -280,71 +280,71 @@ void PixelShaderCache::Shutdown() { s_ColorMatrixProgram.Destroy(); s_DepthMatrixProgram.Destroy(); - PSCache::iterator iter = PixelShaders.begin(); - for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); - PixelShaders.clear(); + PSCache::iterator iter = PixelShaders.begin(); + for (; iter != PixelShaders.end(); iter++) + iter->second.Destroy(); + PixelShaders.clear(); } FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components) { - PIXELSHADERUID uid; - GetPixelShaderId(&uid, dstAlphaMode, components); + PIXELSHADERUID uid; + GetPixelShaderId(&uid, dstAlphaMode, components); - // Check if the shader is already set - if (last_entry) - { - if (uid == last_uid) + // Check if the shader is already set + if (last_entry) { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } } - } - last_uid = uid; + last_uid = uid; - PSCache::iterator iter = PixelShaders.find(uid); - if (iter != PixelShaders.end()) - { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + PSCache::iterator iter = PixelShaders.find(uid); + if (iter != PixelShaders.end()) + { + PSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } - // Make an entry in the table - PSCacheEntry& newentry = PixelShaders[uid]; - last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); + // Make an entry in the table + PSCacheEntry& newentry = PixelShaders[uid]; + last_entry = &newentry; + const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); - if (g_ActiveConfig.bEnableShaderDebugging && code) - { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; - } + if (g_ActiveConfig.bEnableShaderDebugging && code) + { + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; + } #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !CompilePixelShader(newentry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numPixelShadersCreated); - SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numPixelShadersCreated); + SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + return &last_entry->shader; } bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) @@ -352,35 +352,32 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr return pCompilePixelShader(ps, pstrprogram); } -//Disable Fragment programs and reset the selected Program +// Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if(ShaderEnabled) - { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; + } } -//bind a program if is diferent from the binded oone +// bind a program if is different from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if(!ShaderEnabled) - { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - } - if(CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + } + if (CurrentShader != Shader) + { + if (Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + } } + // GLSL Specific bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { @@ -404,12 +401,12 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "ps_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - + char szTemp[MAX_PATH]; + sprintf(szTemp, "ps_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + delete[] infoLog; } // Don't try to use this shader @@ -422,40 +419,43 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) ps.bGLSL = true; return true; } + void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for (int a = 0; a < NUM_UNIFORMS; ++a) { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } + if (!strcmp(name, UniformNames[a])) + { + if (tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } } void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float const f[4] = {f1, f2, f3, f4}; - + float const f[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } - } } void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) @@ -465,15 +465,15 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } - } } void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) @@ -483,115 +483,117 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, count); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } } - } } -// CG Specific +// CG Specific bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } #if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); - // handle errors - if (!cgIsProgram(tempprog)) - { - cgDestroyProgram(tempprog); + // handle errors + if (!cgIsProgram(tempprog)) + { + cgDestroyProgram(tempprog); - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - return false; - } - - // handle warnings - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) - { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); - } - - glGenProgramsARB(1, &ps.glprogid); - ps.bGLSL = false; - PixelShaderCache::SetCurrentShader(ps.glprogid); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO + return false; } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - cgDestroyProgram(tempprog); + // handle warnings + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) + { + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); + } + + glGenProgramsARB(1, &ps.glprogid); + ps.bGLSL = false; + PixelShaderCache::SetCurrentShader(ps.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); #endif - return true; + return true; } + void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + float f[4] = { f1, f2, f3, f4 }; + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); } void SetCGPSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); } void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); } + // Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index b0328f336c..c9a6ca6791 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -34,7 +34,7 @@ struct FRAGMENTSHADER { if (glprogid) { - if(bGLSL) + if (bGLSL) glDeleteShader(glprogid); else glDeleteProgramsARB(1, &glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index a422f80079..008a4a679e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -18,234 +18,247 @@ #include "ProgramShaderCache.h" #include "MathUtil.h" -#include namespace OGL { - GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; - ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::s_ps_vs_ubo; - GLintptr ProgramShaderCache::s_vs_data_offset; - LinearDiskCache g_program_disk_cache; - GLenum ProgramFormat; +GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; +ProgramShaderCache::PCache ProgramShaderCache::pshaders; +GLuint ProgramShaderCache::s_ps_vs_ubo; +GLintptr ProgramShaderCache::s_vs_data_offset; - std::pair ProgramShaderCache::CurrentShaderProgram; - const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; +LinearDiskCache g_program_disk_cache; +GLenum ProgramFormat; - void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +std::pair ProgramShaderCache::CurrentShaderProgram; +const char *UniformNames[NUM_UNIFORMS] = +{ + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, +}; + +void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +{ + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - if(uid.uid.vsid != 0) // Some things have no vertex shader - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } - - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } + glUniformBlockBinding(entry.program.glprogid, 0, 1); + // Some things have no vertex shader + if (uid.uid.vsid != 0) + glUniformBlockBinding(entry.program.glprogid, 1, 2); + } - // Need to get some attribute locations - if(uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) // We have no vertex Shader + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + // (Sonicadvance): For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + // Got to do it this crappy way. + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for (int a = 8; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + for (int a = 0; a < 8; ++a) { - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if (entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); } } - - void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + // Need to get some attribute locations + if (uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; - - - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } - - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.uid = uid; - entry.program.glprogid = glCreateProgram(); - - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - #ifdef GLEW_VERSION_4_0 - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); - #endif - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); - - SetProgramVariables(entry, uid); - - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - } - - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, - count * sizeof(float) * 4, f); - } - - void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, - count * sizeof(float) * 4, f); - } - - GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - - PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) - { - return pshaders[CurrentShaderProgram].program; - } - void ProgramShaderCache::Init(void) - { - // We have to get the UBO alignment here because - // if we generate a buffer that isn't aligned - // then the UBO will fail. - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - GLint Align; - glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); - - GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); - GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); - s_vs_data_offset = ps_data_size; - - // We multiply by *4*4 because we need to get down to basic machine units. - // So multiply by four to get how many floats we have from vec4s - // Then once more to get bytes - glGenBuffers(1, &s_ps_vs_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); - glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); - - // Now bind the buffer to the index point - // We know PS is 0 since we have it statically set in the shader - // Repeat for VS shader - glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); - glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); - } - #ifdef GLEW_VERSION_4_0 - // Read our shader cache, only if supported - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - { - char cache_filename[MAX_PATH]; - sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), - SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); - ProgramShaderCacheInserter inserter; - g_program_disk_cache.OpenAndRead(cache_filename, inserter); - - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - ProgramFormat = (GLenum)Formats[0]; // We don't really care about format - delete[] Formats; - } - #endif - } - - void ProgramShaderCache::Shutdown(void) - { - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); ++iter) - g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); - - g_program_disk_cache.Sync(); - g_program_disk_cache.Close(); - } - - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); ++iter) - iter->second.Destroy(); - pshaders.clear(); - - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glBindBuffer(GL_UNIFORM_BUFFER, 0); - glDeleteBuffers(1, &s_ps_vs_ubo); - s_ps_vs_ubo = 0; - } + // We have no vertex Shader + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); } } +void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) +{ + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; + + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + + if (uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } + + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.uid = uid; + entry.program.glprogid = glCreateProgram(); + + // Right, the program is created now + // Let's attach everything + if (entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + +#ifdef GLEW_VERSION_4_0 + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); +#endif + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); + + SetProgramVariables(entry, uid); + + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; +} + +void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) +{ + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); +} + +void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) +{ + glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); +} + +GLuint ProgramShaderCache::GetCurrentProgram(void) +{ + return CurrentProgram; +} + +PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) +{ + return pshaders[CurrentShaderProgram].program; +} + +void ProgramShaderCache::Init(void) +{ + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + GLint Align; + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + + GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); + GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); + s_vs_data_offset = ps_data_size; + + // We multiply by *4*4 because we need to get down to basic machine units. + // So multiply by four to get how many floats we have from vec4s + // Then once more to get bytes + glGenBuffers(1, &s_ps_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); + + // Now bind the buffer to the index point + // We know PS is 0 since we have it statically set in the shader + // Repeat for VS shader + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); + } + +#ifdef GLEW_VERSION_4_0 + // Read our shader cache, only if supported + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + char cache_filename[MAX_PATH]; + sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; + g_program_disk_cache.OpenAndRead(cache_filename, inserter); + + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + ProgramFormat = (GLenum)Formats[0]; + delete[] Formats; + } +#endif +} + +void ProgramShaderCache::Shutdown(void) +{ + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + + g_program_disk_cache.Sync(); + g_program_disk_cache.Close(); + } + + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + iter->second.Destroy(); + pshaders.clear(); + + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glBindBuffer(GL_UNIFORM_BUFFER, 0); + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + } +} + +} // namespace OGL + void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) { uid->uid.vsid = _v; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 59bcc8e295..e34ca1c086 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -15,8 +15,7 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#ifndef _ProgramShaderCache_H_ -#define _ProgramShaderCache_H_ +#pragma once #include "GLUtil.h" @@ -28,18 +27,18 @@ #include "LinearDiskCache.h" #include "ConfigManager.h" - union PID +union PID +{ + struct { - struct { GLuint vsid, psid; - }; - u64 id; }; + u64 id; +}; class PROGRAMUID { public: - PID uid; PROGRAMUID() @@ -51,57 +50,63 @@ public: { uid.id = r.uid.id; } + PROGRAMUID(GLuint _v, GLuint _p) { uid.vsid = _v; uid.psid = _p; } - int GetNumValues() const + u64 GetNumValues() const { return uid.id; } }; + void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); namespace OGL { -#define NUM_UNIFORMS 27 + +const int NUM_UNIFORMS = 27; extern const char *UniformNames[NUM_UNIFORMS]; extern GLenum ProgramFormat; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} - GLuint glprogid; // opengl program id + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0) {} + // opengl program id + GLuint glprogid; GLuint vsid, psid; PROGRAMUID uid; GLint UniformLocations[NUM_UNIFORMS]; GLint binaryLength; + + // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... u8 *Data() { - #ifdef GLEW_VERSION_4_0 +#ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - u8* binary = (u8*)malloc(binaryLength); - glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); - return binary; - #else - return NULL; - #endif + u8* binary = (u8*)malloc(binaryLength); + glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); + return binary; +#else + return NULL; +#endif } + GLint Size() { - #ifdef GLEW_VERSION_4_0 - if(!binaryLength) +#ifdef GLEW_VERSION_4_0 + if (!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; - #else +#else return 0; - #endif +#endif } }; - class ProgramShaderCache { struct PCacheEntry @@ -109,50 +114,54 @@ class ProgramShaderCache PROGRAMSHADER program; int frameCount; PCacheEntry() : frameCount(0) {} - void Destroy() { + + void Destroy() + { glDeleteProgram(program.glprogid); program.glprogid = 0; } + u8* Data() { return program.Data(); } + GLint Size() { return program.Size(); } }; - + class ProgramShaderCacheInserter : public LinearDiskCacheReader { - public: - void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + public: + void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + { +#ifdef GLEW_VERSION_4_0 + PCacheEntry entry; + + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + entry.program.vsid = key.uid.vsid; + entry.program.psid = key.uid.psid; + + entry.program.glprogid = glCreateProgram(); + + glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); + + GLint success; + glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); + + if (success) { - #ifdef GLEW_VERSION_4_0 - PCacheEntry entry; - - // The two shaders might not even exist anymore - // But it is fine, no need to worry about that - entry.program.vsid = key.uid.vsid; - entry.program.psid = key.uid.psid; - - entry.program.glprogid = glCreateProgram(); - - glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); - - GLint success; - glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); - - if (success) - { - pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; - glUseProgram(entry.program.glprogid); - SetProgramVariables(entry, key); - } - #endif + pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; + glUseProgram(entry.program.glprogid); + SetProgramVariables(entry, key); } +#endif + } }; - + typedef std::map, PCacheEntry> PCache; static PCache pshaders; @@ -162,7 +171,7 @@ class ProgramShaderCache static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); - + public: static PROGRAMSHADER GetShaderProgram(void); static void SetBothShaders(GLuint PS, GLuint VS); @@ -170,12 +179,9 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); - + static void Init(void); static void Shutdown(void); - }; } // namespace OGL - -#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index fa270f051e..a54a8a83b3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -1439,7 +1439,7 @@ void Renderer::ResetAPIState() { // Gets us to a reasonably sane state where it's possible to do things like // image copies with textured quads, etc. - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(0, 0); else { @@ -1471,7 +1471,7 @@ void Renderer::RestoreAPIState() if (g_ActiveConfig.bWireFrame) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(0, 0); else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 1a4b8bb55f..61cedd0f9a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -208,7 +208,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, if (pcfmt != PC_TEX_FMT_DXT1) { if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); + glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); if (bHaveMipMaps && autogen_mips) { @@ -222,7 +222,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, } if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } else { @@ -297,7 +297,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtualW, virtualH); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); else PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); @@ -382,8 +382,8 @@ TextureCache::~TextureCache() { if (s_TempFramebuffer) { - glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); - s_TempFramebuffer = 0; + glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); + s_TempFramebuffer = 0; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 0b0cae3aa3..b4dc0a2e80 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -61,9 +61,9 @@ static FRAGMENTSHADER s_encodingPrograms[NUM_ENCODING_PROGRAMS]; void CreateRgbToYuyvProgram() { // Output is BGRA because that is slightly faster than RGBA. - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) { const char *FProgram = "#version 330 compatibility\n" @@ -132,9 +132,9 @@ void CreateRgbToYuyvProgram() void CreateYuyvToRgbProgram() { - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) { const char *FProgram = "#version 330 compatibility\n" @@ -410,7 +410,7 @@ void EncodeToRam(u32 address, bool bFromZBuffer, bool bIsIntensityFmt, u32 copyf int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); g_renderer->ResetAPIState(); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); else PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); @@ -470,7 +470,7 @@ u64 EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, s32 expandedWidth = (width + blkW) & (~blkW); s32 expandedHeight = (height + blkH) & (~blkH); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); else PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); @@ -516,7 +516,7 @@ void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* des { g_renderer->ResetAPIState(); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(s_rgbToYuyvProgram.glprogid, 0); else PixelShaderCache::SetCurrentShader(s_rgbToYuyvProgram.glprogid); @@ -563,7 +563,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur glBindTexture(GL_TEXTURE_RECTANGLE_ARB, s_srcTexture); // TODO: make this less slow. (How?) - if((GLsizei)s_srcTextureWidth == (GLsizei)srcFmtWidth && (GLsizei)s_srcTextureHeight == (GLsizei)srcHeight) + if ((GLsizei)s_srcTextureWidth == (GLsizei)srcFmtWidth && (GLsizei)s_srcTextureHeight == (GLsizei)srcHeight) { glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 0,0,0,s_srcTextureWidth, s_srcTextureHeight, GL_BGRA, GL_UNSIGNED_BYTE, srcAddr); @@ -577,7 +577,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur } glViewport(0, 0, srcWidth, srcHeight); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(s_yuyvToRgbProgram.glprogid, 0); else PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 1660e39ed4..3913785407 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -203,7 +203,7 @@ void VertexManager::vFlush() } VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(ps->glprogid, vs->glprogid); else { @@ -226,10 +226,10 @@ void VertexManager::vFlush() if (useDstAlpha && !dualSourcePossible) { ps = PixelShaderCache::SetShader(DSTALPHA_ALPHA_PASS,g_nativeVertexFmt->m_components); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index a88867095a..59fcd6582e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -16,7 +16,6 @@ // http://code.google.com/p/dolphin-emu/ #include -#include #include "Globals.h" #include "VideoConfig.h" @@ -55,98 +54,97 @@ bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; - if(g_ActiveConfig.bUseGLSL) - { - pSetVSConstant4f = SetGLSLVSConstant4f; - pSetVSConstant4fv = SetGLSLVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; - } - else - { - pSetVSConstant4f = SetCGVSConstant4f; - pSetVSConstant4fv = SetCGVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileCGVertexShader; - glEnable(GL_VERTEX_PROGRAM_ARB); - } + if (g_ActiveConfig.bUseGLSL) + { + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; + } + else + { + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); + } - glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; + glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxVertexInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxVertexInstructions = 4096; + } #endif } void VertexShaderCache::Shutdown() { - for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); - vshaders.clear(); + for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) + iter->second.Destroy(); + vshaders.clear(); } - VERTEXSHADER* VertexShaderCache::SetShader(u32 components) { - VERTEXSHADERUID uid; - GetVertexShaderId(&uid, components); - if (last_entry) - { - if (uid == last_uid) + VERTEXSHADERUID uid; + GetVertexShaderId(&uid, components); + if (last_entry) { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } } - } - last_uid = uid; + last_uid = uid; - VSCache::iterator iter = vshaders.find(uid); - if (iter != vshaders.end()) - { - VSCacheEntry &entry = iter->second; + VSCache::iterator iter = vshaders.find(uid); + if (iter != vshaders.end()) + { + VSCacheEntry &entry = iter->second; + last_entry = &entry; + + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; + } + + // Make an entry in the table + VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; - } - - // Make an entry in the table - VSCacheEntry& entry = vshaders[uid]; - last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); - GetSafeVertexShaderId(&entry.safe_uid, components); + const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); + GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numVertexShadersCreated); - SETSTAT(stats.numVertexShadersAlive, vshaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numVertexShadersCreated); + SETSTAT(stats.numVertexShadersAlive, vshaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + return &last_entry->shader; } bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) @@ -156,32 +154,28 @@ bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrpr void VertexShaderCache::DisableShader() { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if (ShaderEnabled) - { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; + } } - void VertexShaderCache::SetCurrentShader(GLuint Shader) { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if (!ShaderEnabled) - { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; - } - if (CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; + } + if (CurrentShader != Shader) + { + if (Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + } } + // GLSL Specific bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { @@ -205,12 +199,12 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + delete[] infoLog; } // Don't try to use this shader @@ -223,39 +217,43 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) vs.bGLSL = true; return true; } + void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for (int a = 0; a < NUM_UNIFORMS; ++a) { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } + if (!strcmp(name, UniformNames[a])) + { + if (tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } } + void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float const buf[4] = {f1, f2, f3, f4}; - + float const buf[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, 1); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } } - } } void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) @@ -265,15 +263,15 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, 1); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } } - } } void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) @@ -283,157 +281,157 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, count); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } } - } } void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, count); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } } - } } // CG Specific bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } #if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } + + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + vs.bGLSL = false; + VertexShaderCache::SetCurrentShader(vs.glprogid); + + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } - - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - vs.bGLSL = false; - VertexShaderCache::SetCurrentShader(vs.glprogid); - - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); #endif - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; - return true; + return true; } void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); + glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); } void SetCGVSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); } void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); - } - else - { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); - } + if (GLEW_EXT_gpu_program_parameters) + { + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + } + else + { + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); + } } void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) + if (GLEW_EXT_gpu_program_parameters) { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); - } - else - { - for (unsigned int i = 0; i < count; i++) + else { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + for (unsigned int i = 0; i < count; i++) + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } - } } // Renderer Functions @@ -457,5 +455,4 @@ void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int cou pSetMultiVSConstant3fv(const_number, count, f); } - } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index c3a6146b53..8922311613 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -32,7 +32,7 @@ struct VERTEXSHADER VERTEXSHADER() : glprogid(0), bGLSL(0) {} void Destroy() { - if(bGLSL) + if (bGLSL) glDeleteShader(glprogid); else glDeleteProgramsARB(1, &glprogid); From 16f9d8e06dfd872141a055dd422a1666da34cd2a Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 00:43:47 -0500 Subject: [PATCH 070/625] Checking GLEW_VERSION_4_0 is superfluous since we check GL_ARB_get_program_binary, and it's a runtime variable anyways. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 4 ---- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 10 ---------- 2 files changed, 14 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 008a4a679e..d25830566e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -144,10 +144,8 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) glAttachShader(entry.program.glprogid, entry.program.psid); -#ifdef GLEW_VERSION_4_0 if (g_ActiveConfig.backend_info.bSupportsGLSLCache) glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); -#endif glLinkProgram(entry.program.glprogid); @@ -210,7 +208,6 @@ void ProgramShaderCache::Init(void) glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } -#ifdef GLEW_VERSION_4_0 // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { @@ -229,7 +226,6 @@ void ProgramShaderCache::Init(void) ProgramFormat = (GLenum)Formats[0]; delete[] Formats; } -#endif } void ProgramShaderCache::Shutdown(void) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index e34ca1c086..34930ec027 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -85,25 +85,17 @@ struct PROGRAMSHADER // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... u8 *Data() { -#ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); u8* binary = (u8*)malloc(binaryLength); glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); return binary; -#else - return NULL; -#endif } GLint Size() { -#ifdef GLEW_VERSION_4_0 if (!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; -#else - return 0; -#endif } }; @@ -137,7 +129,6 @@ class ProgramShaderCache public: void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) { -#ifdef GLEW_VERSION_4_0 PCacheEntry entry; // The two shaders might not even exist anymore @@ -158,7 +149,6 @@ class ProgramShaderCache glUseProgram(entry.program.glprogid); SetProgramVariables(entry, key); } -#endif } }; From 5f296d0be7ef76f28bf6b0025c19c5a553177635 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 02:58:52 -0500 Subject: [PATCH 071/625] refactor ProgramShaderCache::PCacheEntry --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 2 +- .../Src/ProgramShaderCache.cpp | 81 +++---- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 209 ++++++++---------- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 +- 4 files changed, 127 insertions(+), 167 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 345aa79115..026d3ec037 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -422,7 +422,7 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + ProgramShaderCache::PCacheEntry tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) { if (!strcmp(name, UniformNames[a])) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d25830566e..387996a957 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -26,7 +26,7 @@ ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; -LinearDiskCache g_program_disk_cache; +LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; std::pair ProgramShaderCache::CurrentShaderProgram; @@ -57,7 +57,7 @@ const char *UniformNames[NUM_UNIFORMS] = I_DEPTHPARAMS, }; -void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry) { // Dunno why this is needed when I have the binding // points statically set in the shader source @@ -65,10 +65,10 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUI // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - glUniformBlockBinding(entry.program.glprogid, 0, 1); + glUniformBlockBinding(entry.prog_id, 0, 1); // Some things have no vertex shader - if (uid.uid.vsid != 0) - glUniformBlockBinding(entry.program.glprogid, 1, 2); + if (entry.vsid != 0) + glUniformBlockBinding(entry.prog_id, 1, 2); } // We cache our uniform locations for now @@ -76,42 +76,39 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUI // We can remove this // (Sonicadvance): For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //glGetUniformIndices(entry.prog_id, NUM_UNIFORMS, UniformNames, entry.UniformLocations); // Got to do it this crappy way. if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for (int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + entry.UniformLocations[a] = glGetUniformLocation(entry.prog_id, UniformNames[a]); if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) { for (int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); + entry.UniformLocations[a] = glGetUniformLocation(entry.prog_id, UniformNames[a]); + if (entry.UniformLocations[a] != -1) + glUniform1i(entry.UniformLocations[a], a); } } // Need to get some attribute locations - if (uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (entry.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { // We have no vertex Shader - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + glBindAttribLocation(entry.prog_id, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.prog_id, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.prog_id, SHADER_POSMTX_ATTRIB, "fposmtx"); } } void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { - PROGRAMUID uid; CurrentFShader = PS; CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - - if (uid.uid.id == 0) + if (CurrentFShader == 0 && CurrentVShader == 0) { CurrentProgram = 0; glUseProgram(0); @@ -120,42 +117,39 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) // Fragment shaders can survive without Vertex Shaders // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + std::pair ShaderPair = std::make_pair(CurrentFShader, CurrentVShader); PCache::iterator iter = pshaders.find(ShaderPair); if (iter != pshaders.end()) { PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); + glUseProgram(entry.prog_id); CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + CurrentProgram = entry.prog_id; return; } PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.uid = uid; - entry.program.glprogid = glCreateProgram(); + entry.Create(CurrentFShader, CurrentVShader); // Right, the program is created now // Let's attach everything - if (entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); + if (entry.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.prog_id, entry.vsid); - glAttachShader(entry.program.glprogid, entry.program.psid); + glAttachShader(entry.prog_id, entry.psid); if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + glProgramParameteri(entry.prog_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); - glLinkProgram(entry.program.glprogid); + glLinkProgram(entry.prog_id); - glUseProgram(entry.program.glprogid); + glUseProgram(entry.prog_id); - SetProgramVariables(entry, uid); + SetProgramVariables(entry); pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + CurrentProgram = entry.prog_id; } void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) @@ -175,9 +169,9 @@ GLuint ProgramShaderCache::GetCurrentProgram(void) return CurrentProgram; } -PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) +ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram(void) { - return pshaders[CurrentShaderProgram].program; + return pshaders[CurrentShaderProgram]; } void ProgramShaderCache::Init(void) @@ -216,15 +210,6 @@ void ProgramShaderCache::Init(void) SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); - - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - ProgramFormat = (GLenum)Formats[0]; - delete[] Formats; } } @@ -234,7 +219,7 @@ void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) - g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + g_program_disk_cache.Append(iter->second.uid, iter->second.GetProgram(), iter->second.Size()); g_program_disk_cache.Sync(); g_program_disk_cache.Close(); @@ -254,9 +239,3 @@ void ProgramShaderCache::Shutdown(void) } } // namespace OGL - -void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) -{ - uid->uid.vsid = _v; - uid->uid.psid = _p; -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 34930ec027..d10cb202a0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -27,143 +27,89 @@ #include "LinearDiskCache.h" #include "ConfigManager.h" -union PID -{ - struct - { - GLuint vsid, psid; - }; - u64 id; -}; - -class PROGRAMUID -{ -public: - PID uid; - - PROGRAMUID() - { - uid.id = 0; - } - - PROGRAMUID(const PROGRAMUID& r) - { - uid.id = r.uid.id; - } - - PROGRAMUID(GLuint _v, GLuint _p) - { - uid.vsid = _v; - uid.psid = _p; - } - - u64 GetNumValues() const - { - return uid.id; - } -}; - -void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); - namespace OGL { const int NUM_UNIFORMS = 27; extern const char *UniformNames[NUM_UNIFORMS]; -extern GLenum ProgramFormat; - -struct PROGRAMSHADER -{ - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0) {} - // opengl program id - GLuint glprogid; - GLuint vsid, psid; - PROGRAMUID uid; - GLint UniformLocations[NUM_UNIFORMS]; - GLint binaryLength; - - // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... - u8 *Data() - { - glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - u8* binary = (u8*)malloc(binaryLength); - glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); - return binary; - } - - GLint Size() - { - if (!binaryLength) - glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - return binaryLength; - } -}; class ProgramShaderCache { +public: + typedef std::pair ShaderUID; + struct PCacheEntry { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} + GLuint prog_id; + GLenum prog_format; + u8 *binary; + GLint binary_size; + GLuint vsid, psid; + ShaderUID uid; + GLint UniformLocations[NUM_UNIFORMS]; + + PCacheEntry() : prog_id(0), vsid(0), psid(0), binary(NULL), binary_size(0) { } + + ~PCacheEntry() + { + FreeProgram(); + } + + void Create(const GLuint pix_id, const GLuint vert_id) + { + psid = pix_id; + vsid = vert_id; + uid = std::make_pair(psid, vsid); + prog_id = glCreateProgram(); + } void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; + glDeleteProgram(prog_id); + prog_id = 0; } - u8* Data() + void UpdateSize() { - return program.Data(); + if (binary_size == 0) + glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); + } + + // No idea how necessary this is + void SetProgramFormat() + { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + prog_format = (GLenum)Formats[0]; + delete[] Formats; + } + + u8 *GetProgram() + { + UpdateSize(); + FreeProgram(); + binary = new u8[binary_size]; + glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); + return binary; + } + + void FreeProgram() + { + delete [] binary; } GLint Size() { - return program.Size(); + UpdateSize(); + return binary_size; } }; - class ProgramShaderCacheInserter : public LinearDiskCacheReader - { - public: - void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) - { - PCacheEntry entry; - - // The two shaders might not even exist anymore - // But it is fine, no need to worry about that - entry.program.vsid = key.uid.vsid; - entry.program.psid = key.uid.psid; - - entry.program.glprogid = glCreateProgram(); - - glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); - - GLint success; - glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); - - if (success) - { - pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; - glUseProgram(entry.program.glprogid); - SetProgramVariables(entry, key); - } - } - }; - - typedef std::map, PCacheEntry> PCache; - - static PCache pshaders; - static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; - - static GLuint s_ps_vs_ubo; - static GLintptr s_vs_data_offset; - static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); - -public: - static PROGRAMSHADER GetShaderProgram(void); + static PCacheEntry GetShaderProgram(void); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); @@ -172,6 +118,41 @@ public: static void Init(void); static void Shutdown(void); + +private: + class ProgramShaderCacheInserter : public LinearDiskCacheReader + { + public: + void Read(const ShaderUID &key, const u8 *value, u32 value_size) + { + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + PCacheEntry entry; + entry.Create(key.first, key.second); + + glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); + + GLint success; + glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); + + if (success) + { + pshaders[key] = entry; + glUseProgram(entry.prog_id); + SetProgramVariables(entry); + } + } + }; + + typedef std::map PCache; + + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static ShaderUID CurrentShaderProgram; + + static GLuint s_ps_vs_ubo; + static GLintptr s_vs_data_offset; + static void SetProgramVariables(PCacheEntry &entry); }; } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 59fcd6582e..f396e90078 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -220,7 +220,7 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + ProgramShaderCache::PCacheEntry tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) { if (!strcmp(name, UniformNames[a])) From 3773d29b6d2d4cd1f427bbbe8aac7d079b89e483 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 26 Dec 2011 03:54:44 -0600 Subject: [PATCH 072/625] Remove some warnings in ProgramShadercache, Was using wrong variable for checking dual source blending. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d10cb202a0..d0743326dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -48,7 +48,7 @@ public: ShaderUID uid; GLint UniformLocations[NUM_UNIFORMS]; - PCacheEntry() : prog_id(0), vsid(0), psid(0), binary(NULL), binary_size(0) { } + PCacheEntry() : prog_id(0), binary(NULL), binary_size(0), vsid(0), psid(0) { } ~PCacheEntry() { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index a54a8a83b3..ca641ff480 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -960,8 +960,8 @@ void Renderer::SetBlendMode(bool forceUpdate) u32 changes = forceUpdate ? 0xFFFFFFFF : newval ^ s_blendMode; bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate - && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; - bool useDualSource = useDstAlpha; + && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; + bool useDualSource = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; if (changes & 1) // blend enable change diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 3913785407..35e783337a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -178,7 +178,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLATTRBind; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; // finally bind FRAGMENTSHADER* ps; From 6f729f8cbfc704d562a737c85d2270bd1225ee2c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 26 Dec 2011 04:09:36 -0600 Subject: [PATCH 073/625] Woops, better not forget the ing --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index ca641ff480..6bf2a5cf65 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -961,7 +961,7 @@ void Renderer::SetBlendMode(bool forceUpdate) bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; + bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; if (changes & 1) // blend enable change diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 35e783337a..f931f50c78 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -178,7 +178,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; // finally bind FRAGMENTSHADER* ps; From c8d0c8e2172900ee36c6cb25553bb07d982aaad7 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 10:27:18 -0500 Subject: [PATCH 074/625] oops, forgot to make sure the gl program is actually free'd. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 +++ Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 1 + 2 files changed, 4 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 387996a957..eeb9614070 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -219,7 +219,10 @@ void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) + { g_program_disk_cache.Append(iter->second.uid, iter->second.GetProgram(), iter->second.Size()); + iter->second.FreeProgram(); + } g_program_disk_cache.Sync(); g_program_disk_cache.Close(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d0743326dd..6089f205e7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -100,6 +100,7 @@ public: void FreeProgram() { delete [] binary; + binary = NULL; } GLint Size() From 88d20f1a2b681a9e0f4214496ef274a0375c3013 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 27 Dec 2011 12:35:35 -0600 Subject: [PATCH 075/625] Had a few vec4 and float4(0) calls floating around. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 7eb3999fbc..277cd2e3e4 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -745,7 +745,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (!Pretest) { // alpha test will always fail, so restart the shader and just make it an empty function - WRITE(p, "ocol0 = float4(0);\n"); + WRITE(p, "ocol0 = float4(0.0f,0.0f,0.0f,0.0f);\n"); WRITE(p, "discard;\n"); if(ApiType == API_GLSL && dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "gl_FragData[0] = ocol0;\n"); @@ -851,11 +851,11 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { // alpha test will always fail, so restart the shader and just make it an empty function p = pmainstart; - WRITE(p, "ocol0 = vec4(0.0f);\n"); + WRITE(p, "ocol0 = float4(0.0f,0.0f,0.0f,0.0f);\n"); if (DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "ocol1 = vec4(0.0f);\n"); + WRITE(p, "ocol1 = float4(0.0f,0.0f,0.0f,0.0f);\n"); if (ApiType == API_GLSL) { // Once we switch to GLSL 1.3 and bind variables, we won't need to do this @@ -1320,8 +1320,8 @@ static bool WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode compindex = bpmem.alphaFunc.comp1 % 8; WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table - WRITE(p, ")){ocol0 = float4(0.0f);%s%s discard;%s}\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = vec4(0.0f);" : "", + WRITE(p, ")){ocol0 = float4(0.0f,0.0f,0.0f,0.0f);%s%s discard;%s}\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = float4(0.0f,0.0f,0.0f,0.0f);" : "", DepthTextureEnable ? "depth = 1.f;" : "", (ApiType != API_D3D11) ? "return;" : ""); return true; From fbbea9bb9b30b8957f2c9229660b6cbfc801933f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 00:01:50 -0600 Subject: [PATCH 076/625] These checks aren't needed when using CG. --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 6bf2a5cf65..494744a447 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -311,22 +311,24 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - - // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) - g_Config.backend_info.bSupportsGLSLUBO = true; - if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) - g_Config.backend_info.bSupportsGLSLATTRBind = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) - g_Config.backend_info.bSupportsGLSLCache = true; - - UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", - g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); + if(g_ActiveConfig.bUseGLSL) + { + // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + g_Config.backend_info.bSupportsGLSLBinding = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) + g_Config.backend_info.bSupportsGLSLUBO = true; + if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) + g_Config.backend_info.bSupportsGLSLATTRBind = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) + g_Config.backend_info.bSupportsGLSLCache = true; + + UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); + } s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); @@ -438,8 +440,8 @@ Renderer::Renderer() #else // If we don't have Nvidia CG, we HAVE to use GLSL g_Config.bUseGLSL = true; - UpdateActiveConfig(); + INFO_LOG(VIDEO, "CG not found, switching to GLSL"); #endif // HAVE_CG int nenvvertparams, nenvfragparams, naddrregisters[2]; From 8a48b42e4c79e1d55e28c4d2f67ed72e39057a14 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 00:32:06 -0600 Subject: [PATCH 077/625] 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. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 15 ++++-- Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 1 - .../Src/ProgramShaderCache.cpp | 8 +++ Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 51 +++++++++++-------- .../Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 - 7 files changed, 53 insertions(+), 27 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; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 026d3ec037..202f7dc58e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -406,7 +406,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - delete[] infoLog; } // Don't try to use this shader diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index eeb9614070..728e4e8a01 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -91,6 +91,14 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry) if (entry.UniformLocations[a] != -1) glUniform1i(entry.UniformLocations[a], a); } + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) + { + // So we don't support binding, but we do support extended blending + // So we need to set a few more things here. + // Bind our out locations + glBindFragDataLocationIndexed(entry.prog_id, 0, 0, "ocol0"); + glBindFragDataLocationIndexed(entry.prog_id, 0, 1, "ocol1"); + } } // Need to get some attribute locations diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 494744a447..5054bf7390 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -316,6 +316,8 @@ Renderer::Renderer() // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; + if (glewIsSupported("GL_ARB_blend_func_extended")) + g_Config.backend_info.bSupportsGLSLBlend = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) @@ -963,7 +965,7 @@ void Renderer::SetBlendMode(bool forceUpdate) bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; + bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBlend; if (changes & 1) // blend enable change @@ -974,33 +976,42 @@ void Renderer::SetBlendMode(bool forceUpdate) // subtract enable change GLenum equation = newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD; GLenum equationAlpha = useDualSource ? GL_FUNC_ADD : equation; - glBlendEquationSeparate(equation, equationAlpha); + + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) + glBlendEquationSeparate(equation, equationAlpha); + else + glBlendEquation(newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD); } if (changes & 0x1F8) { - GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; - GLenum srcFactorAlpha = srcFactor; - GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; - GLenum dstFactorAlpha = dstFactor; - if (useDualSource) + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) { - srcFactorAlpha = GL_ONE; - dstFactorAlpha = GL_ZERO; + GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; + GLenum srcFactorAlpha = srcFactor; + GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; + GLenum dstFactorAlpha = dstFactor; + if (useDualSource) + { + srcFactorAlpha = GL_ONE; + dstFactorAlpha = GL_ZERO; - if (srcFactor == GL_SRC_ALPHA) - srcFactor = GL_SRC1_ALPHA; - else if (srcFactor == GL_ONE_MINUS_SRC_ALPHA) - srcFactor = GL_ONE_MINUS_SRC1_ALPHA; + if (srcFactor == GL_SRC_ALPHA) + srcFactor = GL_SRC1_ALPHA; + else if (srcFactor == GL_ONE_MINUS_SRC_ALPHA) + srcFactor = GL_ONE_MINUS_SRC1_ALPHA; - if (dstFactor == GL_SRC_ALPHA) - dstFactor = GL_SRC1_ALPHA; - else if (dstFactor == GL_ONE_MINUS_SRC_ALPHA) - dstFactor = GL_ONE_MINUS_SRC1_ALPHA; + if (dstFactor == GL_SRC_ALPHA) + dstFactor = GL_SRC1_ALPHA; + else if (dstFactor == GL_ONE_MINUS_SRC_ALPHA) + dstFactor = GL_ONE_MINUS_SRC1_ALPHA; + } + + // blend RGB change + glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); } - - // blend RGB change - glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + else + glBlendFunc(glSrcFactors[(newval >> 3) & 7], glDestFactors[(newval >> 6) & 7]); } s_blendMode = newval; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index f931f50c78..5a76c34d56 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -178,7 +178,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBlend; // finally bind FRAGMENTSHADER* ps; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index f396e90078..810cd4c54a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -204,14 +204,12 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - delete[] infoLog; } // Don't try to use this shader glDeleteShader(result); return false; } - (void)GL_REPORT_ERROR(); vs.glprogid = result; vs.bGLSL = true; From 6a5b56d25f4340bb4341ae5782e934d397750a4b Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 01:35:50 -0600 Subject: [PATCH 078/625] Get the program binary type correctly or else ATI makes massive (~400MB) shader caches. Also, don't need the line in the PixelShaderGen. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 -- .../Src/ProgramShaderCache.cpp | 11 ++++++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 25 ++++++------------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 55a453c9b6..0b47a072ca 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -568,8 +568,6 @@ 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"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 728e4e8a01..57470959d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,6 +25,7 @@ GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShade ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; +GLenum ProgramShaderCache::prog_format; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; @@ -213,6 +214,16 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + // We just need the correct data type + prog_format = (GLenum)Formats[0]; + delete[] Formats; + char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 6089f205e7..6ea72c05dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -41,7 +41,6 @@ public: struct PCacheEntry { GLuint prog_id; - GLenum prog_format; u8 *binary; GLint binary_size; GLuint vsid, psid; @@ -75,25 +74,15 @@ public: glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); } - // No idea how necessary this is - void SetProgramFormat() - { - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - prog_format = (GLenum)Formats[0]; - delete[] Formats; - } - u8 *GetProgram() { UpdateSize(); FreeProgram(); binary = new u8[binary_size]; - glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); + GLenum _form; + glGetProgramBinary(prog_id, binary_size, NULL, &_form, binary); + if (_form != prog_format) + ERROR_LOG(VIDEO, "Returned format not the same as expected! %d vs %d", _form, prog_format); return binary; } @@ -130,8 +119,7 @@ private: // But it is fine, no need to worry about that PCacheEntry entry; entry.Create(key.first, key.second); - - glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); + glProgramBinary(entry.prog_id, prog_format, value, value_size); GLint success; glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); @@ -153,6 +141,9 @@ private: static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; + + static GLenum prog_format; + static void SetProgramVariables(PCacheEntry &entry); }; From bd5cf8868610a7fe5060a85d62da33a28eb9a22b Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Thu, 29 Dec 2011 16:25:03 +0100 Subject: [PATCH 079/625] let us try normal c++ static init instead... --- .../Src/ProgramShaderCache.cpp | 13 ++-------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 26 +++++++++++++------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 57470959d2..b178157a89 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,11 +25,12 @@ GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShade ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; -GLenum ProgramShaderCache::prog_format; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; +GLuint ProgramShaderCache::PCacheEntry::prog_format = ProgramShaderCache::PCacheEntry::SetProgramFormat(); + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -214,16 +215,6 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - // We just need the correct data type - prog_format = (GLenum)Formats[0]; - delete[] Formats; - char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 6ea72c05dd..07e77e3eae 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -41,6 +41,7 @@ public: struct PCacheEntry { GLuint prog_id; + static GLenum prog_format; u8 *binary; GLint binary_size; GLuint vsid, psid; @@ -74,15 +75,26 @@ public: glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); } + // No idea how necessary this is + static GLenum SetProgramFormat() + { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + GLenum prog_format = (GLenum)Formats[0]; + delete[] Formats; + return prog_format; + } + u8 *GetProgram() { UpdateSize(); FreeProgram(); binary = new u8[binary_size]; - GLenum _form; - glGetProgramBinary(prog_id, binary_size, NULL, &_form, binary); - if (_form != prog_format) - ERROR_LOG(VIDEO, "Returned format not the same as expected! %d vs %d", _form, prog_format); + glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); return binary; } @@ -119,7 +131,8 @@ private: // But it is fine, no need to worry about that PCacheEntry entry; entry.Create(key.first, key.second); - glProgramBinary(entry.prog_id, prog_format, value, value_size); + + glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); GLint success; glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); @@ -141,9 +154,6 @@ private: static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; - - static GLenum prog_format; - static void SetProgramVariables(PCacheEntry &entry); }; From 576955c145e0eb2a7965684b9ba3f950790ccbc1 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 11 Jan 2012 01:18:54 -0600 Subject: [PATCH 080/625] Change 'stuff' --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 40 ++++++++++++++----- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 34 +++++++++++++--- 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 0b47a072ca..8ba8fb0ce8 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -562,9 +562,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); - } - else - WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); + } + else + { + WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); @@ -720,13 +726,21 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); // compute window position if needed because binding semantic WPOS is not widely supported - if (numTexgen < 7) + // Let's set up attributes + if (xfregs.numTexGen.numTexGens < 7) { - for (int i = 0; i < numTexgen; ++i) - WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); - WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); + for (int i = 0; i < 8; ++i) + { + WRITE(p, "ATTRIN float3 uv%d_2;\n", i); + WRITE(p, " float3 uv%d = uv%d_2;\n", i, i); + } + WRITE(p, "ATTRIN float4 clipPos_2;\n"); + WRITE(p, " float4 clipPos = clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); + { + WRITE(p, "ATTRIN float4 Normal_2;\n"); + WRITE(p, " float4 Normal = Normal_2;\n"); + } } else { @@ -734,12 +748,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + { + WRITE(p, "ATTRIN float4 uv%d_2;\n", i); + WRITE(p, " float4 uv%d = uv%d_2;\n", i, i); + } } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? "" : ".xyz"); + { + WRITE(p, "ATTRIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, " float%d uv%d = uv%d_2;\n", i < 4 ? 4 : 3 , i, i); + } } } WRITE(p, "void main()\n{\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 9f945f1b95..003e498e06 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -270,6 +270,30 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if ((components & (VB_HAS_UV0< Date: Wed, 11 Jan 2012 04:10:43 -0600 Subject: [PATCH 081/625] More "stuff" for SS, also a small fix in the program shader cache cache setup." --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 18 +++++++++++------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 19 ++++++++++++------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 ++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 8ba8fb0ce8..e7dc8b73db 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -564,12 +564,16 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); + WRITE(p, "#define VARYIN in\n"); + WRITE(p, "#define VARYOUT out\n"); } else { WRITE(p, "#version 120\n"); WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); // Can't really be used, but provide it anyway + WRITE(p, "#define VARYIN varying\n"); + WRITE(p, "#define VARYOUT varying\n"); } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) @@ -720,7 +724,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? - WRITE(p, " float4 rawpos = gl_FragCoord;\n"); + WRITE(p, "VARYIN float4 rawpos;\n"); WRITE(p, " float4 colors_0 = gl_Color;\n"); WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); @@ -731,14 +735,14 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (int i = 0; i < 8; ++i) { - WRITE(p, "ATTRIN float3 uv%d_2;\n", i); + WRITE(p, "VARYIN float3 uv%d_2;\n", i); WRITE(p, " float3 uv%d = uv%d_2;\n", i, i); } - WRITE(p, "ATTRIN float4 clipPos_2;\n"); + WRITE(p, "VARYIN float4 clipPos_2;\n"); WRITE(p, " float4 clipPos = clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p, "ATTRIN float4 Normal_2;\n"); + WRITE(p, "VARYIN float4 Normal_2;\n"); WRITE(p, " float4 Normal = Normal_2;\n"); } } @@ -749,7 +753,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (int i = 0; i < 8; ++i) { - WRITE(p, "ATTRIN float4 uv%d_2;\n", i); + WRITE(p, "VARYIN float4 uv%d_2;\n", i); WRITE(p, " float4 uv%d = uv%d_2;\n", i, i); } } @@ -757,7 +761,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) { - WRITE(p, "ATTRIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, "VARYIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); WRITE(p, " float%d uv%d = uv%d_2;\n", i < 4 ? 4 : 3 , i, i); } } diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 003e498e06..a616d00674 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -197,12 +197,16 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); + WRITE(p, "#define VARYIN in\n"); + WRITE(p, "#define VARYOUT out\n"); } else { WRITE(p, "#version 120\n"); WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); // Can't really be used, but provide it anyway + WRITE(p, "#define VARYIN varying\n"); + WRITE(p, "#define VARYOUT varying\n"); } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); @@ -275,10 +279,10 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (xfregs.numTexGen.numTexGens < 7) { for (int i = 0; i < 8; ++i) - WRITE(p, "ATTROUT float3 uv%d_2;\n", i); - WRITE(p, "ATTROUT float4 clipPos_2;\n"); + WRITE(p, "VARYOUT float3 uv%d_2;\n", i); + WRITE(p, "VARYOUT float4 clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, "ATTROUT float4 Normal_2;\n"); + WRITE(p, "VARYOUT float4 Normal_2;\n"); } else { @@ -286,17 +290,18 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, "ATTROUT float4 uv%d_2;\n", i); + WRITE(p, "VARYOUT float4 uv%d_2;\n", i); } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, "ATTROUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, "VARYOUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); } } - WRITE(p, " float4 rawpos = gl_Vertex;\n") ; + WRITE(p, "VARYOUT float4 rawpos;\n") ; WRITE(p, "void main()\n{\n"); + WRITE(p, "rawpos = gl_Vertex;\n"); } else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 07e77e3eae..d4a12aac43 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -78,6 +78,8 @@ public: // No idea how necessary this is static GLenum SetProgramFormat() { + if(!g_ActiveConfig.backend_info.bSupportsGLSLCache) + return 0; GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); From d355ad70554ff2655b1e12a83663cd43f8483320 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 11 Jan 2012 16:00:30 -0600 Subject: [PATCH 082/625] More 'stuff' --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 8 +++++--- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 9 +++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index e7dc8b73db..6ce7fdd417 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -724,10 +724,12 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? - WRITE(p, "VARYIN float4 rawpos;\n"); + WRITE(p, " float4 rawpos = gl_FragCoord;\n"); - WRITE(p, " float4 colors_0 = gl_Color;\n"); - WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); + WRITE(p, "VARYIN float4 colors_02;\n"); + WRITE(p, "VARYIN float4 colors_12;\n"); + WRITE(p, " float4 colors_0 = colors_02;\n"); + WRITE(p, " float4 colors_1 = colors_12;\n"); // compute window position if needed because binding semantic WPOS is not widely supported // Let's set up attributes diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index a616d00674..e05e299a3a 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -298,10 +298,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "VARYOUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); } } - WRITE(p, "VARYOUT float4 rawpos;\n") ; + WRITE(p, " float4 rawpos = gl_Vertex;\n"); + WRITE(p, "VARYOUT float4 colors_02;\n"); + WRITE(p, "VARYOUT float4 colors_12;\n"); WRITE(p, "void main()\n{\n"); - WRITE(p, "rawpos = gl_Vertex;\n"); } else { @@ -620,8 +621,8 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, " uv%d_2%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); } } - WRITE(p, "gl_FrontColor = o.colors_0;\n"); - WRITE(p, "gl_FrontSecondaryColor = o.colors_1;\n"); + WRITE(p, "colors_02 = o.colors_0;\n"); + WRITE(p, "colors_12 = o.colors_1;\n"); WRITE(p, "gl_Position = o.pos;\n"); WRITE(p, "}\n"); } From f57f654b5997e7525f64a6241b84c6a7b13b21cf Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Wed, 18 Jan 2012 10:22:03 -0800 Subject: [PATCH 083/625] set ProgramShaderCache program format correctly. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 5 ++++- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 -- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b178157a89..8f3378dca8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -29,7 +29,7 @@ GLintptr ProgramShaderCache::s_vs_data_offset; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; -GLuint ProgramShaderCache::PCacheEntry::prog_format = ProgramShaderCache::PCacheEntry::SetProgramFormat(); +GLuint ProgramShaderCache::PCacheEntry::prog_format = 0; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = @@ -215,9 +215,12 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + PCacheEntry::prog_format = PCacheEntry::SetProgramFormat(); + char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d4a12aac43..07e77e3eae 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -78,8 +78,6 @@ public: // No idea how necessary this is static GLenum SetProgramFormat() { - if(!g_ActiveConfig.backend_info.bSupportsGLSLCache) - return 0; GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); From 4d8d86bd6a27e9eea5bbf1440cbf317f02320519 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Tue, 29 May 2012 13:54:20 +0200 Subject: [PATCH 084/625] D3D11: Implement some PE pixel performance metrics. Super Mario Sunshine is using a cool trick: To determine how much goop has been cleaned in ep. 6 of Sirena Beach, it counts the number of pixels that are input to the blending stage. For that it's using the PE performance registers ;) Fixes issue 1498. --- Source/Core/VideoCommon/Src/BPMemory.h | 2 +- Source/Core/VideoCommon/Src/BPStructs.cpp | 13 +- Source/Core/VideoCommon/Src/PixelEngine.cpp | 71 +++++++--- Source/Core/VideoCommon/Src/PixelEngine.h | 27 ++-- Source/Core/VideoCommon/Src/RenderBase.h | 14 ++ .../VideoCommon/Src/VertexManagerBase.cpp | 2 + Source/Core/VideoCommon/Src/VideoConfig.cpp | 5 + Source/Core/VideoCommon/Src/VideoConfig.h | 2 + .../Plugins/Plugin_VideoDX11/Src/Render.cpp | 133 ++++++++++++++++++ Source/Plugins/Plugin_VideoDX11/Src/Render.h | 6 + .../Plugin_VideoDX11/Src/VertexManager.cpp | 3 +- Source/Plugins/Plugin_VideoDX11/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoDX9/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 1 + 14 files changed, 245 insertions(+), 36 deletions(-) diff --git a/Source/Core/VideoCommon/Src/BPMemory.h b/Source/Core/VideoCommon/Src/BPMemory.h index 9284674aa1..ce65bcb824 100644 --- a/Source/Core/VideoCommon/Src/BPMemory.h +++ b/Source/Core/VideoCommon/Src/BPMemory.h @@ -62,7 +62,7 @@ #define BPMEM_COPYFILTER1 0x54 #define BPMEM_CLEARBBOX1 0x55 #define BPMEM_CLEARBBOX2 0x56 -#define BPMEM_UNKNOWN_57 0x57 +#define BPMEM_CLEAR_PIXEL_PERF 0x57 #define BPMEM_REVBITS 0x58 #define BPMEM_SCISSOROFFSET 0x59 #define BPMEM_PRELOAD_ADDR 0x60 diff --git a/Source/Core/VideoCommon/Src/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp index 179196e412..bc6de89bf2 100644 --- a/Source/Core/VideoCommon/Src/BPStructs.cpp +++ b/Source/Core/VideoCommon/Src/BPStructs.cpp @@ -62,7 +62,6 @@ void RenderToXFB(const BPCmd &bp, const EFBRectangle &rc, float yScale, float xf { Renderer::RenderToXFB(xfbAddr, dstWidth, dstHeight, rc, gamma); } - void BPWritten(const BPCmd& bp) { /* @@ -141,7 +140,8 @@ void BPWritten(const BPCmd& bp) || bp.address == BPMEM_LOADTLUT0 || bp.address == BPMEM_LOADTLUT1 || bp.address == BPMEM_TEXINVALIDATE - || bp.address == BPMEM_PRELOAD_MODE)) + || bp.address == BPMEM_PRELOAD_MODE + || bp.address == BPMEM_CLEAR_PIXEL_PERF)) { return; } @@ -265,6 +265,8 @@ void BPWritten(const BPCmd& bp) UPE_Copy PE_copy = bpmem.triggerEFBCopy; + g_renderer->ResumePixelPerf(true); + // Check if we are to copy from the EFB or draw to the XFB if (PE_copy.copy_to_xfb == 0) { @@ -303,6 +305,8 @@ void BPWritten(const BPCmd& bp) s_gammaLUT[PE_copy.gamma]); } + g_renderer->PausePixelPerf(true); + // Clear the rectangular region after copying it. if (PE_copy.clear) { @@ -481,8 +485,9 @@ void BPWritten(const BPCmd& bp) case BPMEM_REVBITS: // Always set to 0x0F when GX_InitRevBits() is called. break; - case BPMEM_UNKNOWN_57: // Sunshine alternates this register between values 0x000 and 0xAAA - DEBUG_LOG(VIDEO, "Unknown BP Reg 0x57: %08x", bp.newvalue); + case BPMEM_CLEAR_PIXEL_PERF: + // GXClearPixMetric writes 0xAAA here, Sunshine alternates this register between values 0x000 and 0xAAA + g_renderer->ResetPixelPerf(); break; case BPMEM_PRELOAD_ADDR: diff --git a/Source/Core/VideoCommon/Src/PixelEngine.cpp b/Source/Core/VideoCommon/Src/PixelEngine.cpp index a488e52b42..4aac3c2456 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.cpp +++ b/Source/Core/VideoCommon/Src/PixelEngine.cpp @@ -28,6 +28,7 @@ #include "ConfigManager.h" #include "PixelEngine.h" +#include "RenderBase.h" #include "CommandProcessor.h" #include "HW/ProcessorInterface.h" #include "DLCache.h" @@ -255,23 +256,59 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) break; } - case PE_PERF_0L: - case PE_PERF_0H: - case PE_PERF_1L: - case PE_PERF_1H: - case PE_PERF_2L: - case PE_PERF_2H: - case PE_PERF_3L: - case PE_PERF_3H: - case PE_PERF_4L: - case PE_PERF_4H: - case PE_PERF_5L: - case PE_PERF_5H: - INFO_LOG(PIXELENGINE, "(r16) perf counter @ %08x", _iAddress); - // git r90a2096a24f4 (svn r3663) added the PE_PERF cases, without setting - // _uReturnValue to anything, this reverts to the previous behaviour which allows - // The timer in SMS:Scrubbing Serena Beach to countdown correctly - _uReturnValue = 1; + // NOTE(neobrain): only PE_PERF_ZCOMP_OUTPUT is implemented in D3D11, but the other values shouldn't be contradictionary to the value of that register (i.e. INPUT registers should always be greater or equal to their corresponding OUTPUT registers). + case PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT_ZCOMPLOC) & 0xFFFF; + break; + + case PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT_ZCOMPLOC) >> 16; + break; + + case PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT_ZCOMPLOC) & 0xFFFF; + break; + + case PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT_ZCOMPLOC) >> 16; + break; + + case PE_PERF_ZCOMP_INPUT_L: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT) & 0xFFFF; + break; + + case PE_PERF_ZCOMP_INPUT_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT) >> 16; + break; + + case PE_PERF_ZCOMP_OUTPUT_L: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT) & 0xFFFF; + break; + + case PE_PERF_ZCOMP_OUTPUT_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT) >> 16; + break; + + case PE_PERF_BLEND_INPUT_L: + // Super Mario Sunshine uses this register in episode 6 of Sirena Beach: + // The amount of remaining goop is determined by checking how many pixels reach the blending stage. + // Once this register falls below a particular value (around 0x90), the game regards the challenge finished. + // In very old builds, Dolphin only returned 0. That caused the challenge to be immediately finished without any goop being cleaned (the timer just didn't even start counting from 3:00:00). + // Later builds returned 1 for the high register. That caused the timer to actually count down, but made the challenge unbeatable because the game always thought you didn't clear any goop at all. + // Note that currently this functionality is only implemented in the D3D11 backend. + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_BLEND_INPUT) & 0xFFFF; + break; + + case PE_PERF_BLEND_INPUT_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_BLEND_INPUT) >> 16; + break; + + case PE_PERF_EFB_COPY_CLOCKS_L: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_EFB_COPY_CLOCKS) & 0xFFFF; + break; + + case PE_PERF_EFB_COPY_CLOCKS_H: + _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_EFB_COPY_CLOCKS) >> 16; break; default: diff --git a/Source/Core/VideoCommon/Src/PixelEngine.h b/Source/Core/VideoCommon/Src/PixelEngine.h index 64f959009f..eaf55f0031 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.h +++ b/Source/Core/VideoCommon/Src/PixelEngine.h @@ -36,19 +36,20 @@ enum PE_BBOX_TOP = 0x14, // Flip Top PE_BBOX_BOTTOM = 0x16, // Flip Bottom - // These have not yet been RE:d. They are the perf counters. - PE_PERF_0L = 0x18, - PE_PERF_0H = 0x1a, - PE_PERF_1L = 0x1c, - PE_PERF_1H = 0x1e, - PE_PERF_2L = 0x20, - PE_PERF_2H = 0x22, - PE_PERF_3L = 0x24, - PE_PERF_3H = 0x26, - PE_PERF_4L = 0x28, - PE_PERF_4H = 0x2a, - PE_PERF_5L = 0x2c, - PE_PERF_5H = 0x2e, + // NOTE: Order not verified + // These indicate the number of quads that are being used as input/output for each particular stage + PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L = 0x18, + PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H = 0x1a, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L = 0x1c, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H = 0x1e, + PE_PERF_ZCOMP_INPUT_L = 0x20, + PE_PERF_ZCOMP_INPUT_H = 0x22, + PE_PERF_ZCOMP_OUTPUT_L = 0x24, + PE_PERF_ZCOMP_OUTPUT_H = 0x26, + PE_PERF_BLEND_INPUT_L = 0x28, + PE_PERF_BLEND_INPUT_H = 0x2a, + PE_PERF_EFB_COPY_CLOCKS_L = 0x2c, + PE_PERF_EFB_COPY_CLOCKS_H = 0x2e, }; namespace PixelEngine diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index e8d4c55a20..4d288143c0 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -52,6 +52,15 @@ public: Renderer(); virtual ~Renderer(); + enum PixelPerfQuery { + PP_ZCOMP_INPUT_ZCOMPLOC, + PP_ZCOMP_OUTPUT_ZCOMPLOC, + PP_ZCOMP_INPUT, + PP_ZCOMP_OUTPUT, + PP_BLEND_INPUT, + PP_EFB_COPY_CLOCKS + }; + virtual void SetColorMask() = 0; virtual void SetBlendMode(bool forceUpdate) = 0; virtual void SetScissorRect(const TargetRectangle& rc) = 0; @@ -119,6 +128,11 @@ public: static unsigned int GetPrevPixelFormat() { return prev_efb_format; } static void StorePixelFormat(unsigned int new_format) { prev_efb_format = new_format; } + virtual void ResetPixelPerf() {}; + virtual void ResumePixelPerf(bool efb_copies) {}; + virtual void PausePixelPerf(bool efb_copies) {}; + virtual u32 GetPixelPerfResult(PixelPerfQuery type) { return 0; }; + // TODO: doesn't belong here virtual void SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) = 0; virtual void SetPSConstant4fv(unsigned int const_number, const float *f) = 0; diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp index 4118e3dcbd..86dd891386 100644 --- a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp @@ -253,7 +253,9 @@ void VertexManager::Flush() //if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); + g_renderer->ResumePixelPerf(false); g_vertex_manager->Draw(stride, false); + g_renderer->PausePixelPerf(false); // run through vertex groups again to set alpha if (false == g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index c5628c19a1..5f464c3322 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -104,6 +104,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Hacks", "EFBScaledCopy", &bCopyEFBScaled, true); iniFile.Get("Hacks", "EFBCopyCacheEnable", &bEFBCopyCacheEnable, false); iniFile.Get("Hacks", "EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, false); + iniFile.Get("Hacks", "DisablePixelPerf", &bDisablePixelPerf, true); iniFile.Get("Hardware", "Adapter", &iAdapter, 0); @@ -153,6 +154,7 @@ void VideoConfig::GameIniLoad(const char *ini_file) iniFile.GetIfExists("Video_Hacks", "EFBScaledCopy", &bCopyEFBScaled); iniFile.GetIfExists("Video_Hacks", "EFBCopyCacheEnable", &bEFBCopyCacheEnable); iniFile.GetIfExists("Video_Hacks", "EFBEmulateFormatChanges", &bEFBEmulateFormatChanges); + iniFile.GetIfExists("Video_Hacks", "DisablePixelPerf", &bDisablePixelPerf); iniFile.GetIfExists("Video", "ProjectionHack", &iPhackvalue[0]); iniFile.GetIfExists("Video", "PH_SZNear", &iPhackvalue[1]); @@ -172,6 +174,7 @@ void VideoConfig::VerifyValidity() if (!backend_info.bSupports3DVision) b3DVision = false; if (!backend_info.bSupportsFormatReinterpretation) bEFBEmulateFormatChanges = false; if (!backend_info.bSupportsPixelLighting) bEnablePixelLighting = false; + if (!backend_info.bSupportsPixelPerfQuery) bDisablePixelPerf = true; } void VideoConfig::Save(const char *ini_file) @@ -231,6 +234,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Hacks", "EFBScaledCopy", bCopyEFBScaled); iniFile.Set("Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); iniFile.Set("Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); + iniFile.Set("Hacks", "DisablePixelPerf", bDisablePixelPerf); iniFile.Set("Hardware", "Adapter", iAdapter); @@ -287,6 +291,7 @@ void VideoConfig::GameIniSave(const char* default_ini, const char* game_ini) SET_IF_DIFFERS("Video_Hacks", "EFBScaledCopy", bCopyEFBScaled); SET_IF_DIFFERS("Video_Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); SET_IF_DIFFERS("Video_Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); + SET_IF_DIFFERS("Video_Hacks", "DisablePixelPerf", bDisablePixelPerf); iniFile.Save(game_ini); } diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 7653972ec8..8593de4fd7 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -133,6 +133,7 @@ struct VideoConfig bool bUseBBox; bool bEnablePixelLighting; bool bEnablePerPixelDepth; + bool bDisablePixelPerf; int iLog; // CONF_ bits int iSaveTargetId; // TODO: Should be dropped @@ -161,6 +162,7 @@ struct VideoConfig bool bSupportsDualSourceBlend; // only supported by D3D11 and OpenGL bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; + bool bSupportsPixelPerfQuery; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp index 3a725452e7..3f88d7f99d 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp @@ -65,6 +65,19 @@ ID3D11RasterizerState* resetraststate = NULL; static ID3D11Texture2D* s_screenshot_texture = NULL; +// Using a vector of query objects to avoid flushing the gpu pipeline all the time +// TODO: Could probably optimized further by using a ring buffer or something +#define MAX_PIXEL_PERF_QUERIES 20 // 20 is an arbitrary guess +std::vector pixel_perf_queries; +static int pixel_perf_query_index = 0; + +static u64 pixel_perf = 0; +static bool pixel_perf_active = false; +static bool pixel_perf_dirty = false; + +ID3D11Query* gpu_finished_query = NULL; + + // GX pipeline state struct { @@ -302,6 +315,9 @@ void SetupDeviceObjects() D3D::SetDebugObjectName((ID3D11DeviceChild*)resetraststate, "rasterizer state for Renderer::ResetAPIState"); s_screenshot_texture = NULL; + + D3D11_QUERY_DESC qdesc = CD3D11_QUERY_DESC(D3D11_QUERY_EVENT, 0); + D3D::device->CreateQuery(&qdesc, &gpu_finished_query); } // Kill off all device objects @@ -309,6 +325,12 @@ void TeardownDeviceObjects() { delete g_framebuffer_manager; + while (!pixel_perf_queries.empty()) + { + SAFE_RELEASE(pixel_perf_queries.back()); + pixel_perf_queries.pop_back(); + } + SAFE_RELEASE(gpu_finished_query); SAFE_RELEASE(access_efb_cbuf); SAFE_RELEASE(clearblendstates[0]); SAFE_RELEASE(clearblendstates[1]); @@ -357,6 +379,11 @@ Renderer::Renderer() s_LastEFBScale = g_ActiveConfig.iEFBScale; CalculateTargetSize(); + pixel_perf_query_index = 0; + pixel_perf = 0; + pixel_perf_active = false; + pixel_perf_dirty = false; + SetupDeviceObjects(); @@ -777,6 +804,112 @@ void Renderer::ReinterpretPixelData(unsigned int convtype) D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), FramebufferManager::GetEFBDepthTexture()->GetDSV()); } +void Renderer::ResetPixelPerf() +{ + if (g_ActiveConfig.bDisablePixelPerf) + return; + + if (pixel_perf_active) + PausePixelPerf(false); + + pixel_perf_query_index = 0; + pixel_perf = 0; +} + +void Renderer::ResumePixelPerf(bool efb_copies) +{ + if (g_ActiveConfig.bDisablePixelPerf) + return; + + if (efb_copies) + return; + + if(pixel_perf_active) + return; + + if (pixel_perf_queries.size() < pixel_perf_query_index+1 && pixel_perf_query_index < MAX_PIXEL_PERF_QUERIES) + { + D3D11_QUERY_DESC qdesc = CD3D11_QUERY_DESC(D3D11_QUERY_OCCLUSION, 0); + ID3D11Query* tmpquery = NULL; + D3D::device->CreateQuery(&qdesc, &tmpquery); + pixel_perf_queries.push_back(tmpquery); + pixel_perf_query_index = pixel_perf_queries.size() - 1; + } + else if (pixel_perf_queries.size() < pixel_perf_query_index+1) + { + StorePixelPerfResult(PP_ZCOMP_OUTPUT); + pixel_perf_query_index = 0; + } + // This will spam the D3D11 debug runtime output with QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS warnings which safely can be ignored. Mute them in the DX control panel if you need to read the debug runtime output. + D3D::context->Begin(pixel_perf_queries[pixel_perf_query_index]); + pixel_perf_active = true; + pixel_perf_dirty = true; +} + +void Renderer::PausePixelPerf(bool efb_copies) +{ + if (g_ActiveConfig.bDisablePixelPerf) + return; + + if(!pixel_perf_active) + return; + + D3D::context->End(pixel_perf_queries[pixel_perf_query_index]); + pixel_perf_query_index++; + pixel_perf_active = false; +} + +void Renderer::StorePixelPerfResult(PixelPerfQuery type) +{ + // First, make sure the GPU has finished rendering so that query results are valid + D3D::context->End(gpu_finished_query); + BOOL gpu_finished = FALSE; + while (!gpu_finished) + { + // If nothing goes horribly wrong here, this should complete in finite time... + D3D::context->GetData(gpu_finished_query, &gpu_finished, sizeof(gpu_finished), 0); + } + + for(int i = 0; i < pixel_perf_query_index; ++i) + { + UINT64 buf = 0; + D3D::context->GetData(pixel_perf_queries[i], &buf, sizeof(buf), 0); + + // Reported pixel metrics should be referenced to native resolution: + pixel_perf += buf * EFB_WIDTH * EFB_HEIGHT / GetTargetWidth() / GetTargetHeight(); + } + pixel_perf_dirty = false; +} + +u32 Renderer::GetPixelPerfResult(PixelPerfQuery type) +{ + if (g_ActiveConfig.bDisablePixelPerf) + return 0; + + if (type == PP_EFB_COPY_CLOCKS) + { + // not implemented + return 0; + } + + if (type == PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L || + type == PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H || + type == PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L || + type == PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H) + { + // return zero for now because ZCOMP_OUTPUT_ZCOMPLOC + ZCOMP_OUTPUT should equal BLEND_INPUT + // TODO: Instead, should keep separate counters for zcomploc and non-zcomploc registers. + return 0; + } + + // Basically we only implement PP_ZCOMP_OUTPUT, but we're returning the same value for PP_ZCOMP_INPUT and PP_BLEND_INPUT anyway + if (pixel_perf_dirty) + StorePixelPerfResult(PP_ZCOMP_OUTPUT); + + // Dividing by 4 because we're expected to return the number of 2x2 quads instead of pixels + return std::min(pixel_perf / 4, (u64)0xFFFFFFFF); +} + void SetSrcBlend(D3D11_BLEND val) { // Colors should blend against SRC_ALPHA diff --git a/Source/Plugins/Plugin_VideoDX11/Src/Render.h b/Source/Plugins/Plugin_VideoDX11/Src/Render.h index 8f6c78fae1..6db829c205 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/Render.h +++ b/Source/Plugins/Plugin_VideoDX11/Src/Render.h @@ -46,6 +46,12 @@ public: void ReinterpretPixelData(unsigned int convtype); + void ResetPixelPerf(); + void ResumePixelPerf(bool efb_copies); + void PausePixelPerf(bool efb_copies); + u32 GetPixelPerfResult(PixelPerfQuery type); + void StorePixelPerfResult(PixelPerfQuery type); // internal + void UpdateViewport(Matrix44& vpCorrection); bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); diff --git a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp index 58bad98cc6..4bb04bc302 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp @@ -198,7 +198,6 @@ void VertexManager::Draw(UINT stride) if (IndexGenerator::GetNumLines() > 0 || IndexGenerator::GetNumPoints() > 0) ((DX11::Renderer*)g_renderer)->RestoreCull(); } - void VertexManager::vFlush() { if (LocalVBuffer == s_pCurBufferPointer) return; @@ -266,7 +265,9 @@ void VertexManager::vFlush() g_renderer->ApplyState(useDstAlpha); LoadBuffers(); + g_renderer->ResumePixelPerf(false); Draw(stride); + g_renderer->PausePixelPerf(false); GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); diff --git a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp index cb348b8684..161321cf08 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp @@ -94,6 +94,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = true; g_Config.backend_info.bSupportsFormatReinterpretation = true; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsPixelPerfQuery = true; IDXGIFactory* factory; IDXGIAdapter* ad; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp index 5aeca6751d..1d1a2db112 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp @@ -96,6 +96,7 @@ void InitBackendInfo() g_Config.backend_info.bSupports3DVision = true; g_Config.backend_info.bSupportsDualSourceBlend = false; g_Config.backend_info.bSupportsFormatReinterpretation = true; + g_Config.backend_info.bSupportsPixelPerfQuery = false; g_Config.backend_info.bSupportsPixelLighting = C_PLIGHTS + 40 <= maxConstants && C_PMATERIALS + 4 <= maxConstants; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 543fb9824d..2c8f6d4716 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -135,6 +135,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = false; // supported, but broken g_Config.backend_info.bSupportsFormatReinterpretation = false; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsPixelPerfQuery = false; // aamodes const char* caamodes[] = {"None", "2x", "4x", "8x", "8x CSAA", "8xQ CSAA", "16x CSAA", "16xQ CSAA"}; From cf8744cf2c1de2231d180348c4b55ebc2b35240f Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Sun, 17 Jun 2012 13:58:29 +0200 Subject: [PATCH 085/625] OGL: Implement pixel metrics (untested) --- Source/Core/VideoCommon/CMakeLists.txt | 1 + Source/Core/VideoCommon/Src/BPStructs.cpp | 3 +- Source/Core/VideoCommon/Src/PerfQueryBase.cpp | 3 + Source/Core/VideoCommon/Src/PerfQueryBase.h | 39 ++++++++++ Source/Core/VideoCommon/Src/PixelEngine.cpp | 26 ++++--- Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 1 + .../Plugins/Plugin_VideoOGL/Src/PerfQuery.cpp | 78 +++++++++++++++++++ .../Plugins/Plugin_VideoOGL/Src/PerfQuery.h | 22 ++++++ .../Plugin_VideoOGL/Src/VertexManager.cpp | 4 + Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 2 + 10 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 Source/Core/VideoCommon/Src/PerfQueryBase.cpp create mode 100644 Source/Core/VideoCommon/Src/PerfQueryBase.h create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.cpp create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.h diff --git a/Source/Core/VideoCommon/CMakeLists.txt b/Source/Core/VideoCommon/CMakeLists.txt index d0e28f571c..5a4ed87c1d 100644 --- a/Source/Core/VideoCommon/CMakeLists.txt +++ b/Source/Core/VideoCommon/CMakeLists.txt @@ -16,6 +16,7 @@ set(SRCS Src/BPFunctions.cpp Src/OpcodeDecoding.cpp Src/OpenCL.cpp Src/OpenCL/OCLTextureDecoder.cpp + Src/PerfQueryBase.cpp Src/PixelEngine.cpp Src/PixelShaderGen.cpp Src/PixelShaderManager.cpp diff --git a/Source/Core/VideoCommon/Src/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp index bc6de89bf2..cda0f7c7c0 100644 --- a/Source/Core/VideoCommon/Src/BPStructs.cpp +++ b/Source/Core/VideoCommon/Src/BPStructs.cpp @@ -31,6 +31,7 @@ #include "VertexShaderManager.h" #include "Thread.h" #include "HW/Memmap.h" +#include "PerfQueryBase.h" using namespace BPFunctions; @@ -487,7 +488,7 @@ void BPWritten(const BPCmd& bp) case BPMEM_CLEAR_PIXEL_PERF: // GXClearPixMetric writes 0xAAA here, Sunshine alternates this register between values 0x000 and 0xAAA - g_renderer->ResetPixelPerf(); + g_perf_query->ResetQuery(); break; case BPMEM_PRELOAD_ADDR: diff --git a/Source/Core/VideoCommon/Src/PerfQueryBase.cpp b/Source/Core/VideoCommon/Src/PerfQueryBase.cpp new file mode 100644 index 0000000000..c537d176f6 --- /dev/null +++ b/Source/Core/VideoCommon/Src/PerfQueryBase.cpp @@ -0,0 +1,3 @@ +#include "PerfQueryBase.h" + +PerfQueryBase* g_perf_query = 0; diff --git a/Source/Core/VideoCommon/Src/PerfQueryBase.h b/Source/Core/VideoCommon/Src/PerfQueryBase.h new file mode 100644 index 0000000000..0520e9244c --- /dev/null +++ b/Source/Core/VideoCommon/Src/PerfQueryBase.h @@ -0,0 +1,39 @@ +#ifndef _PERFQUERY_BASE_H_ +#define _PERFQUERY_BASE_H_ + +#include "CommonTypes.h" + +enum PerfQueryType +{ + PQ_ZCOMP_INPUT_ZCOMPLOC = 0, + PQ_ZCOMP_OUTPUT_ZCOMPLOC, + PQ_ZCOMP_INPUT, + PQ_ZCOMP_OUTPUT, + PQ_BLEND_INPUT, + PQ_EFB_COPY_CLOCKS, + PQ_NUM_MEMBERS +}; + +enum PerfQueryGroup +{ + PQG_ZCOMP_ZCOMPLOC, + PQG_ZCOMP, + PQG_EFB_COPY_CLOCKS, + PQG_NUM_MEMBERS, +}; + +class PerfQueryBase +{ +public: + PerfQueryBase() {}; + virtual ~PerfQueryBase() {} + + virtual void EnableQuery(PerfQueryGroup type) {} + virtual void DisableQuery(PerfQueryGroup type) {} + virtual void ResetQuery() {} + virtual u32 GetQueryResult(PerfQueryType type) { return 0; } +}; + +extern PerfQueryBase* g_perf_query; + +#endif // _PERFQUERY_H_ diff --git a/Source/Core/VideoCommon/Src/PixelEngine.cpp b/Source/Core/VideoCommon/Src/PixelEngine.cpp index 4aac3c2456..005468f63c 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.cpp +++ b/Source/Core/VideoCommon/Src/PixelEngine.cpp @@ -33,6 +33,8 @@ #include "HW/ProcessorInterface.h" #include "DLCache.h" #include "State.h" +#include "PerfQueryBase.h" + namespace PixelEngine { @@ -258,35 +260,35 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) // NOTE(neobrain): only PE_PERF_ZCOMP_OUTPUT is implemented in D3D11, but the other values shouldn't be contradictionary to the value of that register (i.e. INPUT registers should always be greater or equal to their corresponding OUTPUT registers). case PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT_ZCOMPLOC) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_INPUT_ZCOMPLOC) & 0xFFFF; break; case PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT_ZCOMPLOC) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_INPUT_ZCOMPLOC) >> 16; break; case PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT_ZCOMPLOC) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_OUTPUT_ZCOMPLOC) & 0xFFFF; break; case PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT_ZCOMPLOC) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_OUTPUT_ZCOMPLOC) >> 16; break; case PE_PERF_ZCOMP_INPUT_L: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_INPUT) & 0xFFFF; break; case PE_PERF_ZCOMP_INPUT_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_INPUT) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_INPUT) >> 16; break; case PE_PERF_ZCOMP_OUTPUT_L: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_OUTPUT) & 0xFFFF; break; case PE_PERF_ZCOMP_OUTPUT_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_ZCOMP_OUTPUT) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_ZCOMP_OUTPUT) >> 16; break; case PE_PERF_BLEND_INPUT_L: @@ -296,19 +298,19 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) // In very old builds, Dolphin only returned 0. That caused the challenge to be immediately finished without any goop being cleaned (the timer just didn't even start counting from 3:00:00). // Later builds returned 1 for the high register. That caused the timer to actually count down, but made the challenge unbeatable because the game always thought you didn't clear any goop at all. // Note that currently this functionality is only implemented in the D3D11 backend. - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_BLEND_INPUT) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_BLEND_INPUT) & 0xFFFF; break; case PE_PERF_BLEND_INPUT_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_BLEND_INPUT) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_BLEND_INPUT) >> 16; break; case PE_PERF_EFB_COPY_CLOCKS_L: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_EFB_COPY_CLOCKS) & 0xFFFF; + _uReturnValue = g_perf_query->GetQueryResult(PQ_EFB_COPY_CLOCKS) & 0xFFFF; break; case PE_PERF_EFB_COPY_CLOCKS_H: - _uReturnValue = g_renderer->GetPixelPerfResult(Renderer::PP_EFB_COPY_CLOCKS) >> 16; + _uReturnValue = g_perf_query->GetQueryResult(PQ_EFB_COPY_CLOCKS) >> 16; break; default: diff --git a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt index b506087106..834e905faa 100644 --- a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt +++ b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt @@ -2,6 +2,7 @@ set(SRCS Src/FramebufferManager.cpp Src/GLUtil.cpp Src/main.cpp Src/NativeVertexFormat.cpp + Src/PerfQuery.cpp Src/PixelShaderCache.cpp Src/PostProcessing.cpp Src/RasterFont.cpp diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.cpp new file mode 100644 index 0000000000..cb659e6921 --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.cpp @@ -0,0 +1,78 @@ +#include "GLUtil.h" +#include "PerfQuery.h" + +namespace OGL { + +u32 results[PQG_NUM_MEMBERS] = { 0 }; +GLuint query_id; + +PerfQueryGroup active_query; + +PerfQuery::PerfQuery() +{ + glGenQueries(1, &query_id); +} + +PerfQuery::~PerfQuery() +{ + glDeleteQueries(1, &query_id); +} + +void PerfQuery::EnableQuery(PerfQueryGroup type) +{ + // start query + if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) + { + glBeginQuery(GL_SAMPLES_PASSED, query_id); + } + active_query = type; +} + +void PerfQuery::DisableQuery(PerfQueryGroup type) +{ + // stop query + if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) + { + glEndQuery(GL_SAMPLES_PASSED); + + GLuint query_result = GL_FALSE; + while (query_result != GL_TRUE) + { + glGetQueryObjectuiv(query_id, GL_QUERY_RESULT_AVAILABLE, &query_result); + } + + glGetQueryObjectuiv(query_id, GL_QUERY_RESULT, &query_result); + + results[active_query] += query_result; + } +} + +void PerfQuery::ResetQuery() +{ + memset(results, 0, sizeof(results)); +} + +u32 PerfQuery::GetQueryResult(PerfQueryType type) +{ + if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC || type == PQ_BLEND_INPUT) + { + + } + if (type == PQ_ZCOMP_INPUT || type == PQ_ZCOMP_OUTPUT || type == PQ_BLEND_INPUT) + { + + } + if (type == PQ_BLEND_INPUT) + { + results[PQ_BLEND_INPUT] = results[PQ_ZCOMP_OUTPUT] + results[PQ_ZCOMP_OUTPUT_ZCOMPLOC]; + } + + if (type == PQ_EFB_COPY_CLOCKS) + { + // TODO + } + + return results[type]; +} + +} // namespace diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.h b/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.h new file mode 100644 index 0000000000..776c576e2d --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/PerfQuery.h @@ -0,0 +1,22 @@ +#ifndef _PERFQUERY_H_ +#define _PERFQUERY_H_ + +#include "PerfQueryBase.h" + +namespace OGL { + +class PerfQuery : public PerfQueryBase +{ +public: + PerfQuery(); + ~PerfQuery(); + + void EnableQuery(PerfQueryGroup type); + void DisableQuery(PerfQueryGroup type); + void ResetQuery(); + u32 GetQueryResult(PerfQueryType type); +}; + +} // namespace + +#endif // _PERFQUERY_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 0a37b0e654..b2f55adec5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -40,6 +40,7 @@ #include "OpcodeDecoding.h" #include "FileUtil.h" #include "Debugger.h" +#include "PerfQueryBase.h" #include "main.h" @@ -207,7 +208,10 @@ void VertexManager::vFlush() if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); + g_perf_query->EnableQuery(bpmem.zcontrol.zcomploc ? PQG_ZCOMP_ZCOMPLOC : PQG_ZCOMP); Draw(); + g_perf_query->DisableQuery(bpmem.zcontrol.zcomploc ? PQG_ZCOMP_ZCOMPLOC : PQG_ZCOMP); + ERROR_LOG(VIDEO, "PerfQuery result: %d", g_perf_query->GetQueryResult(bpmem.zcontrol.zcomploc ? PQ_ZCOMP_OUTPUT_ZCOMPLOC : PQ_ZCOMP_OUTPUT)); // run through vertex groups again to set alpha if (useDstAlpha && !dualSourcePossible) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 2c8f6d4716..329d131ded 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -93,6 +93,7 @@ Make AA apply instantly during gameplay if possible #include "FramebufferManager.h" #include "Core.h" #include "Host.h" +#include "PerfQuery.h" #include "VideoState.h" #include "VideoBackend.h" @@ -194,6 +195,7 @@ void VideoBackend::Video_Prepare() BPInit(); g_vertex_manager = new VertexManager; + g_perf_query = new PerfQuery; Fifo_Init(); // must be done before OpcodeDecoder_Init() OpcodeDecoder_Init(); VertexShaderCache::Init(); From 26de63a8cd3e0b05c1ca01bd19e25ace5631943f Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Sun, 17 Jun 2012 19:49:48 +0200 Subject: [PATCH 086/625] Video_Software: Implement PE pixel metrics --- .../Plugin_VideoSoftware/Src/BPMemLoader.cpp | 9 ++++++++ .../Plugin_VideoSoftware/Src/Rasterizer.cpp | 15 ++++++++---- .../Plugin_VideoSoftware/Src/SWPixelEngine.h | 23 +++++++++++++++++++ .../Plugins/Plugin_VideoSoftware/Src/Tev.cpp | 18 +++++++++++---- 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp index 95ec555181..ad730a485c 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp @@ -90,6 +90,15 @@ void SWBPWritten(int address, int newvalue) SWPixelEngine::pereg.boxBottom = newvalue >> 10; SWPixelEngine::pereg.boxTop = newvalue & 0x3ff; break; + case BPMEM_CLEAR_PIXEL_PERF: + // TODO: Parameter? + SWPixelEngine::pereg.perfZcompInputZcomploc = 0; + SWPixelEngine::pereg.perfZcompOutputZcomploc = 0; + SWPixelEngine::pereg.perfZcompInput = 0; + SWPixelEngine::pereg.perfZcompOutput = 0; + SWPixelEngine::pereg.perfBlendInput = 0; + SWPixelEngine::pereg.perfEfbCopyClocks = 0; + break; case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. break; case BPMEM_LOADTLUT1: // Load a Texture Look Up Table diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp index c212c93601..a23d85f27f 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp @@ -23,6 +23,7 @@ #include "BPMemLoader.h" #include "XFMemLoader.h" #include "Tev.h" +#include "SWPixelEngine.h" #include "SWStatistics.h" #include "SWVideoConfig.h" @@ -125,11 +126,17 @@ inline void Draw(s32 x, s32 y, s32 xi, s32 yi) if (z < 0 || z > 0x00ffffff) return; - if (bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) + if (bpmem.zcontrol.zcomploc) { - // early z - if (!EfbInterface::ZCompare(x, y, z)) - return; + // TODO: Verify that perf regs are being incremented even if test is disabled + SWPixelEngine::pereg.perfZcompInputZcomploc++; + if (bpmem.zmode.testenable) + { + // early z + if (!EfbInterface::ZCompare(x, y, z)) + return; + } + SWPixelEngine::pereg.perfZcompOutputZcomploc++; } RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h index 6a87143e8c..764488c32e 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h @@ -38,6 +38,21 @@ namespace SWPixelEngine PE_BBOX_RIGHT = 0x012, // Flip Right PE_BBOX_TOP = 0x014, // Flip Top PE_BBOX_BOTTOM = 0x016, // Flip Bottom + + // NOTE: Order not verified + // These indicate the number of quads that are being used as input/output for each particular stage + PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L = 0x18, + PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H = 0x1a, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L = 0x1c, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H = 0x1e, + PE_PERF_ZCOMP_INPUT_L = 0x20, + PE_PERF_ZCOMP_INPUT_H = 0x22, + PE_PERF_ZCOMP_OUTPUT_L = 0x24, + PE_PERF_ZCOMP_OUTPUT_H = 0x26, + PE_PERF_BLEND_INPUT_L = 0x28, + PE_PERF_BLEND_INPUT_H = 0x2a, + PE_PERF_EFB_COPY_CLOCKS_L = 0x2c, + PE_PERF_EFB_COPY_CLOCKS_H = 0x2e, }; union UPEZConfReg @@ -125,10 +140,18 @@ namespace SWPixelEngine UPECtrlReg ctrl; u16 unk0; u16 token; + u16 boxLeft; u16 boxRight; u16 boxTop; u16 boxBottom; + + u16 perfZcompInputZcomploc; + u16 perfZcompOutputZcomploc; + u16 perfZcompInput; + u16 perfZcompOutput; + u16 perfBlendInput; + u16 perfEfbCopyClocks; }; extern PEReg pereg; diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp index c67ee53837..83d9de2784 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp @@ -20,6 +20,7 @@ #include "Tev.h" #include "EfbInterface.h" #include "TextureSampler.h" +#include "SWPixelEngine.h" #include "SWStatistics.h" #include "SWVideoConfig.h" #include "DebugUtil.h" @@ -784,11 +785,16 @@ void Tev::Draw() output[BLU_C] = (output[BLU_C] * invFog + fogInt * bpmem.fog.color.b) >> 8; } - if (!bpmem.zcontrol.zcomploc && bpmem.zmode.testenable) - { - if (!EfbInterface::ZCompare(Position[0], Position[1], Position[2])) - return; - } + if (!bpmem.zcontrol.zcomploc) + { + SWPixelEngine::pereg.perfZcompInput++; + if (bpmem.zmode.testenable) + { + if (!EfbInterface::ZCompare(Position[0], Position[1], Position[2])) + return; + } + SWPixelEngine::pereg.perfZcompOutput++; + } #if ALLOW_TEV_DUMPS if (g_SWVideoConfig.bDumpTevStages) @@ -812,6 +818,8 @@ void Tev::Draw() INCSTAT(swstats.thisFrame.tevPixelsOut); + SWPixelEngine::pereg.perfBlendInput++; + EfbInterface::BlendTev(Position[0], Position[1], output); } From 1c1ae63b697fa5589772c92a78a635ef68f67f83 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Tue, 19 Jun 2012 23:05:39 +0200 Subject: [PATCH 087/625] Windows build fix. --- Source/Core/VideoCommon/VideoCommon.vcxproj | 2 ++ Source/Core/VideoCommon/VideoCommon.vcxproj.filters | 6 ++++++ Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj | 2 ++ .../Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters | 6 ++++++ 4 files changed, 16 insertions(+) diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj b/Source/Core/VideoCommon/VideoCommon.vcxproj index f53c18cb37..e458a8d87c 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj @@ -194,6 +194,7 @@ + @@ -240,6 +241,7 @@ + diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters index c933fbc939..0a61595c45 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters @@ -119,6 +119,9 @@ Shader Generators + + Base + @@ -246,6 +249,9 @@ Shader Generators + + Base + diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj index 18b8ac4d84..8d73bfda05 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj @@ -200,6 +200,7 @@ + @@ -222,6 +223,7 @@ + diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters index cd170691da..f423a77f0b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters @@ -36,6 +36,9 @@ Render + + Render + @@ -72,6 +75,9 @@ Render + + Render + From 4607ebea2ad5fb472a53d5772af0c395c6f73810 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Sun, 26 Aug 2012 20:21:51 +0200 Subject: [PATCH 088/625] Video_Software: Fix a small issue that prevented perf queries from working at all. --- Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp index 33a6164b01..525b39b0b6 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp @@ -77,7 +77,7 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) u16 address = _iAddress & 0xFFF; - if (address <= 0x16) + if (address <= 0x2e) _uReturnValue = ((u16*)&pereg)[address >> 1]; } @@ -109,7 +109,7 @@ void Write16(const u16 _iValue, const u32 _iAddress) } break; default: - if (address <= 0x16) + if (address <= 0x2e) ((u16*)&pereg)[address >> 1] = _iValue; break; } From 87d8feb53df8499e61096e4df022d00e25edb3c3 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Sun, 26 Aug 2012 20:25:00 +0200 Subject: [PATCH 089/625] Video_Software: Add some debugging logs for PE perf queries --- Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp index 525b39b0b6..9ae13d4e3b 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp @@ -79,6 +79,11 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) if (address <= 0x2e) _uReturnValue = ((u16*)&pereg)[address >> 1]; + + if (address > 0x16) + { + ERROR_LOG(PIXELENGINE, "Read from address %#08x, returning %#08x\n", address, _uReturnValue); + } } void Write32(const u32 _iValue, const u32 _iAddress) From d734a5b486059d724f55e6662cf019fd71995c2b Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Mon, 27 Aug 2012 00:57:17 +0200 Subject: [PATCH 090/625] More debugging logs for RDilux --- Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp index 9ae13d4e3b..63885513f5 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp @@ -82,7 +82,7 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) if (address > 0x16) { - ERROR_LOG(PIXELENGINE, "Read from address %#08x, returning %#08x\n", address, _uReturnValue); + ERROR_LOG(PIXELENGINE, "addr %#08x, ret %#08x; %#08x, %#08x, %#08x, %#08x, %#08x, %#08x\n", address, _uReturnValue, pereg.perfZcompInputZcomploc, pereg.perfZcompOutputZcomploc, pereg.perfZcompInput, pereg.perfZcompOutput, pereg.perfBlendInput, pereg.perfEfbCopyClocks); } } From 49d1da5e7e0e9ba3aecc8fc02285ca537623c3ea Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Mon, 27 Aug 2012 23:51:35 +0200 Subject: [PATCH 091/625] Video_Software: Fix stuff. --- .../Plugin_VideoSoftware/Src/BPMemLoader.cpp | 18 ++++++++++++------ .../Plugin_VideoSoftware/Src/Rasterizer.cpp | 7 +++++-- .../Plugin_VideoSoftware/Src/SWPixelEngine.cpp | 2 +- .../Plugin_VideoSoftware/Src/SWPixelEngine.h | 18 ++++++++++++------ .../Plugins/Plugin_VideoSoftware/Src/Tev.cpp | 9 ++++++--- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp index ad730a485c..4de9f435fa 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp @@ -92,12 +92,18 @@ void SWBPWritten(int address, int newvalue) break; case BPMEM_CLEAR_PIXEL_PERF: // TODO: Parameter? - SWPixelEngine::pereg.perfZcompInputZcomploc = 0; - SWPixelEngine::pereg.perfZcompOutputZcomploc = 0; - SWPixelEngine::pereg.perfZcompInput = 0; - SWPixelEngine::pereg.perfZcompOutput = 0; - SWPixelEngine::pereg.perfBlendInput = 0; - SWPixelEngine::pereg.perfEfbCopyClocks = 0; + SWPixelEngine::pereg.perfZcompInputZcomplocLo = 0; + SWPixelEngine::pereg.perfZcompInputZcomplocHi = 0; + SWPixelEngine::pereg.perfZcompOutputZcomplocLo = 0; + SWPixelEngine::pereg.perfZcompOutputZcomplocHi = 0; + SWPixelEngine::pereg.perfZcompInputLo = 0; + SWPixelEngine::pereg.perfZcompInputHi = 0; + SWPixelEngine::pereg.perfZcompOutputLo = 0; + SWPixelEngine::pereg.perfZcompOutputHi = 0; + SWPixelEngine::pereg.perfBlendInputLo = 0; + SWPixelEngine::pereg.perfBlendInputHi = 0; + SWPixelEngine::pereg.perfEfbCopyClocksLo = 0; + SWPixelEngine::pereg.perfEfbCopyClocksHi = 0; break; case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. break; diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp index a23d85f27f..c9c3b8c26c 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Rasterizer.cpp @@ -129,14 +129,17 @@ inline void Draw(s32 x, s32 y, s32 xi, s32 yi) if (bpmem.zcontrol.zcomploc) { // TODO: Verify that perf regs are being incremented even if test is disabled - SWPixelEngine::pereg.perfZcompInputZcomploc++; + if (++SWPixelEngine::pereg.perfZcompInputZcomplocLo == 0) + SWPixelEngine::pereg.perfZcompInputZcomplocHi++; + if (bpmem.zmode.testenable) { // early z if (!EfbInterface::ZCompare(x, y, z)) return; } - SWPixelEngine::pereg.perfZcompOutputZcomploc++; + if (++SWPixelEngine::pereg.perfZcompOutputZcomplocLo == 0) + SWPixelEngine::pereg.perfZcompOutputZcomplocHi++; } RasterBlockPixel& pixel = rasterBlock.Pixel[xi][yi]; diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp index 63885513f5..d489d033ae 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp @@ -82,7 +82,7 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) if (address > 0x16) { - ERROR_LOG(PIXELENGINE, "addr %#08x, ret %#08x; %#08x, %#08x, %#08x, %#08x, %#08x, %#08x\n", address, _uReturnValue, pereg.perfZcompInputZcomploc, pereg.perfZcompOutputZcomploc, pereg.perfZcompInput, pereg.perfZcompOutput, pereg.perfBlendInput, pereg.perfEfbCopyClocks); + ERROR_LOG(PIXELENGINE, "addr %#08x, ret %#08x\n", address, _uReturnValue); } } diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h index 764488c32e..7deb69a164 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.h @@ -146,12 +146,18 @@ namespace SWPixelEngine u16 boxTop; u16 boxBottom; - u16 perfZcompInputZcomploc; - u16 perfZcompOutputZcomploc; - u16 perfZcompInput; - u16 perfZcompOutput; - u16 perfBlendInput; - u16 perfEfbCopyClocks; + u16 perfZcompInputZcomplocLo; + u16 perfZcompInputZcomplocHi; + u16 perfZcompOutputZcomplocLo; + u16 perfZcompOutputZcomplocHi; + u16 perfZcompInputLo; + u16 perfZcompInputHi; + u16 perfZcompOutputLo; + u16 perfZcompOutputHi; + u16 perfBlendInputLo; + u16 perfBlendInputHi; + u16 perfEfbCopyClocksLo; + u16 perfEfbCopyClocksHi; }; extern PEReg pereg; diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp index 83d9de2784..fad8806a9f 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp @@ -787,13 +787,15 @@ void Tev::Draw() if (!bpmem.zcontrol.zcomploc) { - SWPixelEngine::pereg.perfZcompInput++; + if (++SWPixelEngine::pereg.perfZcompInputLo == 0) + SWPixelEngine::pereg.perfZcompInputHi++; if (bpmem.zmode.testenable) { if (!EfbInterface::ZCompare(Position[0], Position[1], Position[2])) return; } - SWPixelEngine::pereg.perfZcompOutput++; + if (++SWPixelEngine::pereg.perfZcompOutputLo == 0) + SWPixelEngine::pereg.perfZcompOutputHi++; } #if ALLOW_TEV_DUMPS @@ -818,7 +820,8 @@ void Tev::Draw() INCSTAT(swstats.thisFrame.tevPixelsOut); - SWPixelEngine::pereg.perfBlendInput++; + if (++SWPixelEngine::pereg.perfBlendInputLo) + SWPixelEngine::pereg.perfBlendInputHi++; EfbInterface::BlendTev(Position[0], Position[1], output); } From 3d56ce18fb60a5617ba037d988f7918f7d29aae5 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Fri, 31 Aug 2012 20:49:59 +0200 Subject: [PATCH 092/625] Video_Software: Fix moar stuff --- Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp index fad8806a9f..80d68833b6 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp @@ -820,7 +820,7 @@ void Tev::Draw() INCSTAT(swstats.thisFrame.tevPixelsOut); - if (++SWPixelEngine::pereg.perfBlendInputLo) + if (++SWPixelEngine::pereg.perfBlendInputLo == 0) SWPixelEngine::pereg.perfBlendInputHi++; EfbInterface::BlendTev(Position[0], Position[1], output); From 54947b1e2246804ddf5ec0378f8111905a6d04bd Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Fri, 31 Aug 2012 21:30:12 +0200 Subject: [PATCH 093/625] Video_Software: Some more debugging logs. --- Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp index d489d033ae..ad19eb87ee 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWPixelEngine.cpp @@ -82,7 +82,13 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) if (address > 0x16) { - ERROR_LOG(PIXELENGINE, "addr %#08x, ret %#08x\n", address, _uReturnValue); + ERROR_LOG(PIXELENGINE, "addr %#08x, ret %#04x; %#04x%04x, %#04x%04x, %#04x%04x, %#04x%04x, %#04x%04x, %#04x%04x\n", address, _uReturnValue, + pereg.perfZcompInputZcomplocHi, pereg.perfZcompInputZcomplocLo, + pereg.perfZcompOutputZcomplocHi, pereg.perfZcompOutputZcomplocLo, + pereg.perfZcompInputHi, pereg.perfZcompInputLo, + pereg.perfZcompOutputHi, pereg.perfZcompOutputLo, + pereg.perfBlendInputHi, pereg.perfBlendInputLo, + pereg.perfEfbCopyClocksHi, pereg.perfEfbCopyClocksLo); } } From 760f777f5a08854e56057e3604d662b6d1ef07cf Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Mon, 20 Aug 2012 13:49:12 +0200 Subject: [PATCH 094/625] Simulate a small delay on GC Memcard operations This was not needed for most games before because the external exception was itself delayed. aram-dma-fixes changed that and made the external exception happen a lot quicker, breaking games that relied on the memcard operations delay. Fixes issue 5583. --- .../Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp | 38 +++++++++++++------ .../Core/Core/Src/HW/EXI_DeviceMemoryCard.h | 11 +++++- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp index 6f4bc502b6..4705e849be 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp @@ -47,13 +47,22 @@ void CEXIMemoryCard::FlushCallback(u64 userdata, int cyclesLate) pThis->Flush(); } +void CEXIMemoryCard::CmdDoneCallback(u64 userdata, int cyclesLate) +{ + int card_index = (int)userdata; + CEXIMemoryCard* pThis = (CEXIMemoryCard*)ExpansionInterface::FindDevice(EXIDEVICE_MEMORYCARD, card_index); + if (pThis) + pThis->CmdDone(); +} + CEXIMemoryCard::CEXIMemoryCard(const int index) : card_index(index) , m_bDirty(false) { m_strFilename = (card_index == 0) ? SConfig::GetInstance().m_strMemoryCardA : SConfig::GetInstance().m_strMemoryCardB; // we're potentially leaking events here, since there's no UnregisterEvent until emu shutdown, but I guess it's inconsequential - et_this_card = CoreTiming::RegisterEvent((card_index == 0) ? "memcardA" : "memcardB", FlushCallback); + et_this_card = CoreTiming::RegisterEvent((card_index == 0) ? "memcardFlushA" : "memcardFlushB", FlushCallback); + et_cmd_done = CoreTiming::RegisterEvent((card_index == 0) ? "memcardDoneA" : "memcardDoneB", CmdDoneCallback); interruptSwitch = 0; m_bInterruptSet = 0; @@ -175,6 +184,21 @@ bool CEXIMemoryCard::IsPresent() return true; } +void CEXIMemoryCard::CmdDone() +{ + status |= MC_STATUS_READY; + status &= ~MC_STATUS_BUSY; + + m_bInterruptSet = 1; + m_bDirty = true; +} + +void CEXIMemoryCard::CmdDoneLater(u64 cycles) +{ + CoreTiming::RemoveEvent(et_cmd_done); + CoreTiming::ScheduleEvent(cycles, et_cmd_done, (u64)card_index); +} + void CEXIMemoryCard::SetCS(int cs) { // So that memory card won't be invalidated during flushing @@ -198,11 +222,7 @@ void CEXIMemoryCard::SetCS(int cs) //??? - status |= MC_STATUS_READY; - status &= ~MC_STATUS_BUSY; - - m_bInterruptSet = 1; - m_bDirty = true; + CmdDoneLater(5000); } break; @@ -229,11 +249,7 @@ void CEXIMemoryCard::SetCS(int cs) address = (address & ~0x1FF) | ((address+1) & 0x1FF); } - status |= MC_STATUS_READY; - status &= ~MC_STATUS_BUSY; - - m_bInterruptSet = 1; - m_bDirty = true; + CmdDoneLater(5000); } // Page written to memory card, not just to buffer - let's schedule a flush 0.5b cycles into the future (1 sec) diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h index dfdc6349aa..33b94ca530 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h @@ -47,9 +47,18 @@ private: // through the userdata parameter, so that it can then call Flush on the right card. static void FlushCallback(u64 userdata, int cyclesLate); + // Scheduled when a command that required delayed end signaling is done. + static void CmdDoneCallback(u64 userdata, int cyclesLate); + // Flushes the memory card contents to disk. void Flush(bool exiting = false); + // Signals that the command that was previously executed is now done. + void CmdDone(); + + // Variant of CmdDone which schedules an event later in the future to complete the command. + void CmdDoneLater(u64 cycles); + enum { cmdNintendoID = 0x00, @@ -71,7 +80,7 @@ private: std::string m_strFilename; int card_index; - int et_this_card; + int et_this_card, et_cmd_done; //! memory card state // STATE_TO_SAVE From a357c772578b4dabffe15127beaaab8e145da90e Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 30 Nov 2011 21:00:21 -0600 Subject: [PATCH 095/625] Add in GLSL setting again. PS and VS making. Untested and won't work for now. Add in program shader cache files. Readd NativeVertexFormat stuffs. Add in PS and VS cache things. SetShaders in places. Fixed EFB cache index computations in OpenGL renderer. The previous computation was very likely to go out of array bounds, which could result in crashes on EFB access. Also, the cache size was rounded down instead of up. This is a problem since EFB_HEIGHT (528) is not a multiple of EFB_CACHE_RECT_SIZE (64). --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 231 +++++---- Source/Core/VideoCommon/Src/PixelShaderGen.h | 13 + .../Core/VideoCommon/Src/VertexShaderGen.cpp | 190 +++++--- Source/Core/VideoCommon/Src/VertexShaderGen.h | 11 +- Source/Core/VideoCommon/Src/VideoCommon.h | 6 + Source/Core/VideoCommon/Src/VideoConfig.cpp | 4 + Source/Core/VideoCommon/Src/VideoConfig.h | 2 + Source/Plugins/Plugin_VideoDX11/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoDX9/Src/main.cpp | 1 + Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 1 + .../Src/NativeVertexFormat.cpp | 18 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 456 +++++++++++------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 10 + .../Src/ProgramShaderCache.cpp | 150 ++++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 108 +++++ Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 19 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 27 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 414 ++++++++++------ .../Plugin_VideoOGL/Src/VertexShaderCache.h | 10 + Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 1 + 20 files changed, 1168 insertions(+), 505 deletions(-) create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp create mode 100644 Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index bc7a12304f..bc7b8cc375 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -509,122 +509,117 @@ static void BuildSwapModeTable() } } +const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) +{ + if(ApiType == API_GLSL) + return ""; // Nothing to do here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; +} + const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { - setlocale(LC_NUMERIC, "C"); // Reset locale for compilation - text[sizeof(text) - 1] = 0x7C; // canary - - BuildSwapModeTable(); // Needed for WriteStage - int numStages = bpmem.genMode.numtevstages + 1; - int numTexgen = bpmem.genMode.numtexgens; - - char *p = text; - WRITE(p, "//Pixel Shader for TEV stages\n"); - WRITE(p, "//%i TEV stages, %i texgens, XXX IND stages\n", - numStages, numTexgen/*, bpmem.genMode.numindstages*/); - - int nIndirectStagesUsed = 0; - if (bpmem.genMode.numindstages > 0) - { - for (int i = 0; i < numStages; ++i) - { - if (bpmem.tevind[i].IsActive() && bpmem.tevind[i].bt < bpmem.genMode.numindstages) - nIndirectStagesUsed |= 1 << bpmem.tevind[i].bt; - } - } - DepthTextureEnable = (bpmem.ztex2.op != ZTEXTURE_DISABLE && !bpmem.zcontrol.zcomploc && bpmem.zmode.testenable && bpmem.zmode.updateenable) || g_ActiveConfig.bEnablePerPixelDepth ; - // Declare samplers - - if(ApiType != API_D3D11) - { - WRITE(p, "uniform sampler2D "); - } - else - { - WRITE(p, "sampler "); - } - - bool bfirst = true; - for (int i = 0; i < 8; ++i) - { - WRITE(p, "%s samp%d : register(s%d)", bfirst?"":",", i, i); - bfirst = false; - } - WRITE(p, ";\n"); - if(ApiType == API_D3D11) - { - WRITE(p, "Texture2D "); - bfirst = true; - for (int i = 0; i < 8; ++i) - { - WRITE(p, "%s Tex%d : register(t%d)", bfirst?"":",", i, i); - bfirst = false; - } - WRITE(p, ";\n"); - } - - WRITE(p, "\n"); - - WRITE(p, "uniform float4 " I_COLORS"[4] : register(c%d);\n", C_COLORS); - WRITE(p, "uniform float4 " I_KCOLORS"[4] : register(c%d);\n", C_KCOLORS); - WRITE(p, "uniform float4 " I_ALPHA"[1] : register(c%d);\n", C_ALPHA); - WRITE(p, "uniform float4 " I_TEXDIMS"[8] : register(c%d);\n", C_TEXDIMS); - WRITE(p, "uniform float4 " I_ZBIAS"[2] : register(c%d);\n", C_ZBIAS); - WRITE(p, "uniform float4 " I_INDTEXSCALE"[2] : register(c%d);\n", C_INDTEXSCALE); - WRITE(p, "uniform float4 " I_INDTEXMTX"[6] : register(c%d);\n", C_INDTEXMTX); - WRITE(p, "uniform float4 " I_FOG"[3] : register(c%d);\n", C_FOG); + WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p,"typedef struct { float4 col; float4 cosatt; float4 distatt; float4 pos; float4 dir; } Light;\n"); - WRITE(p,"typedef struct { Light lights[8]; } s_" I_PLIGHTS";\n"); - WRITE(p, "uniform s_" I_PLIGHTS" " I_PLIGHTS" : register(c%d);\n", C_PLIGHTS); - WRITE(p, "typedef struct { float4 C0, C1, C2, C3; } s_" I_PMATERIALS";\n"); - WRITE(p, "uniform s_" I_PMATERIALS" " I_PMATERIALS" : register(c%d);\n", C_PMATERIALS); + WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); } - WRITE(p, "void main(\n"); - if(ApiType != API_D3D11) - { - WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", - DepthTextureEnable ? "\n out float depth : DEPTH," : "", - ApiType & API_OPENGL ? "WPOS" : ApiType & API_D3D9_SM20 ? "POSITION" : "VPOS"); - } - else - { - WRITE(p, " out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "", - DepthTextureEnable ? "\n out float depth : SV_Depth," : ""); - } - - WRITE(p, " in float4 colors_0 : COLOR0,\n"); - WRITE(p, " in float4 colors_1 : COLOR1"); - - // compute window position if needed because binding semantic WPOS is not widely supported - if (numTexgen < 7) - { - for (int i = 0; i < numTexgen; ++i) - WRITE(p, ",\n in float3 uv%d : TEXCOORD%d", i, i); - WRITE(p, ",\n in float4 clipPos : TEXCOORD%d", numTexgen); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, ",\n in float4 Normal : TEXCOORD%d", numTexgen + 1); - } - else - { - // wpos is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if(ApiType != API_GLSL) + { + WRITE(p, "void main(\n"); + if(ApiType != API_D3D11) { - for (int i = 0; i < 8; ++i) - WRITE(p, ",\n in float4 uv%d : TEXCOORD%d", i, i); + WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", + DepthTextureEnable ? "\n out float depth : DEPTH," : "", + ApiType & API_OPENGL ? "WPOS" : ApiType & API_D3D9_SM20 ? "POSITION" : "VPOS"); } else { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, ",\n in float%d uv%d : TEXCOORD%d", i < 4 ? 4 : 3 , i, i); + WRITE(p, " out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "", + DepthTextureEnable ? "\n out float depth : SV_Depth," : ""); } + + WRITE(p, " in float4 colors_0 : COLOR0,\n"); + WRITE(p, " in float4 colors_1 : COLOR1"); + + // compute window position if needed because binding semantic WPOS is not widely supported + if (numTexgen < 7) + { + for (int i = 0; i < numTexgen; ++i) + WRITE(p, ",\n in float3 uv%d : TEXCOORD%d", i, i); + WRITE(p, ",\n in float4 clipPos : TEXCOORD%d", numTexgen); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, ",\n in float4 Normal : TEXCOORD%d", numTexgen + 1); + } + else + { + // wpos is in w of first 4 texcoords + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, ",\n in float4 uv%d : TEXCOORD%d", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, ",\n in float%d uv%d : TEXCOORD%d", i < 4 ? 4 : 3 , i, i); + } + } + WRITE(p, " ) {\n"); + } + else + { + // GLSL doesn't do main arguments + // Once we switch to GLSL 1.3 we will bind a lot of these. + + WRITE(p, " float4 ocol0;\n"); + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, " float4 ocol1;\n"); // Will be supported later + if(DepthTextureEnable) + WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? + WRITE(p, " float4 rawpos = gl_FragCoord;\n"); + + WRITE(p, " float4 colors_0 = gl_Color;\n"); + WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); + + // compute window position if needed because binding semantic WPOS is not widely supported + if (numTexgen < 7) + { + for (int i = 0; i < numTexgen; ++i) + WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); + WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); + } + else + { + // wpos is in w of first 4 texcoords + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? ".xyz" : ""); + } + } + WRITE(p, "void main()\n{\n"); } - WRITE(p, " ) {\n"); char* pmainstart = p; int Pretest = AlphaPreTest(); @@ -633,12 +628,14 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (!Pretest) { // alpha test will always fail, so restart the shader and just make it an empty function + WRITE(p, "ocol0 = 0;\n"); if(DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "ocol1 = 0;\n"); - WRITE(p, "discard;\n"); + if(ApiType == API_GLSL) + WRITE(p, "gl_FragData[0] = ocol0;\n"); if(ApiType != API_D3D11) WRITE(p, "return;\n"); } @@ -763,6 +760,25 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(Pretest == -1) { WriteAlphaTest(p, ApiType, dstAlphaMode); + // alpha test will always fail, so restart the shader and just make it an empty function + /* p = pmainstart; + WRITE(p, "ocol0 = 0;\n"); + if(DepthTextureEnable) + WRITE(p, "depth = 1.f;\n"); + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "ocol1 = 0;\n"); + if(ApiType == API_GLSL) + { + // Once we switch to GLSL 1.3 and bind variables, we won't need to do this + WRITE(p, "gl_FragData[0] = ocol0;\n"); + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + ; // TODO: Will do this later + } + WRITE(p, "discard;\n"); + if(ApiType != API_D3D11) + WRITE(p, "return;\n");*/ } if((bpmem.fog.c_proj_fsel.fsel != 0) || DepthTextureEnable) @@ -805,6 +821,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, " ocol1 = ocol0;\n"); // ...and the alpha from ocol0 will be written to the framebuffer. WRITE(p, " ocol0.a = " I_ALPHA"[0].a;\n"); + + if(ApiType == API_GLSL) + { + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragData[0] = ocol0;\n"); + } } WRITE(p, "}\n"); diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 31242a916e..589fc927bc 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -47,6 +47,19 @@ #define PIXELSHADERUID_MAX_VALUES 70 #define PIXELSHADERUID_MAX_VALUES_SAFE 120 +// Annoying sure, can be removed once we get up to GLSL ~1.3 +const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; + // DO NOT make anything in this class virtual. template class _PIXELSHADERUID diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 07ace04b97..55f81002ba 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -130,7 +130,7 @@ static char text[16384]; #define WRITE p+=sprintf -char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE api_type) +char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) { WRITE(p, "struct VS_OUTPUT {\n"); WRITE(p, " float4 pos : POSITION;\n"); @@ -161,7 +161,10 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE api_type) return p; } -const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) +extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); + + +const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { setlocale(LC_NUMERIC, "C"); // Reset locale for compilation text[sizeof(text) - 1] = 0x7C; // canary @@ -169,7 +172,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) _assert_(bpmem.genMode.numtexgens == xfregs.numTexGen.numTexGens); _assert_(bpmem.genMode.numcolchans == xfregs.numChan.numColorChans); - bool is_d3d = (api_type & API_D3D9 || api_type == API_D3D11); + bool is_d3d = (ApiType & API_D3D9 || ApiType == API_D3D11); u32 lightMask = 0; if (xfregs.numChan.numColorChans > 0) lightMask |= xfregs.color[0].GetFullLightMask() | xfregs.alpha[0].GetFullLightMask(); @@ -178,78 +181,109 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE api_type) char *p = text; WRITE(p, "//Vertex Shader: comp:%x, \n", components); - WRITE(p, "typedef struct { float4 T0, T1, T2; float4 N0, N1, N2; } s_" I_POSNORMALMATRIX";\n" - "typedef struct { float4 t; } FLT4;\n" - "typedef struct { FLT4 T[24]; } s_" I_TEXMATRICES";\n" - "typedef struct { FLT4 T[64]; } s_" I_TRANSFORMMATRICES";\n" - "typedef struct { FLT4 T[32]; } s_" I_NORMALMATRICES";\n" - "typedef struct { FLT4 T[64]; } s_" I_POSTTRANSFORMMATRICES";\n" - "typedef struct { float4 col; float4 cosatt; float4 distatt; float4 pos; float4 dir; } Light;\n" - "typedef struct { Light lights[8]; } s_" I_LIGHTS";\n" - "typedef struct { float4 C0, C1, C2, C3; } s_" I_MATERIALS";\n" - "typedef struct { float4 T0, T1, T2, T3; } s_" I_PROJECTION";\n" - ); - - p = GenerateVSOutputStruct(p, components, api_type); - - // uniforms - - WRITE(p, "uniform s_" I_TRANSFORMMATRICES" " I_TRANSFORMMATRICES" : register(c%d);\n", C_TRANSFORMMATRICES); - WRITE(p, "uniform s_" I_TEXMATRICES" " I_TEXMATRICES" : register(c%d);\n", C_TEXMATRICES); // also using tex matrices - WRITE(p, "uniform s_" I_NORMALMATRICES" " I_NORMALMATRICES" : register(c%d);\n", C_NORMALMATRICES); - WRITE(p, "uniform s_" I_POSNORMALMATRIX" " I_POSNORMALMATRIX" : register(c%d);\n", C_POSNORMALMATRIX); - WRITE(p, "uniform s_" I_POSTTRANSFORMMATRICES" " I_POSTTRANSFORMMATRICES" : register(c%d);\n", C_POSTTRANSFORMMATRICES); - WRITE(p, "uniform s_" I_LIGHTS" " I_LIGHTS" : register(c%d);\n", C_LIGHTS); - WRITE(p, "uniform s_" I_MATERIALS" " I_MATERIALS" : register(c%d);\n", C_MATERIALS); - WRITE(p, "uniform s_" I_PROJECTION" " I_PROJECTION" : register(c%d);\n", C_PROJECTION); - WRITE(p, "uniform float4 " I_DEPTHPARAMS" : register(c%d);\n", C_DEPTHPARAMS); - - WRITE(p, "VS_OUTPUT main(\n"); - // inputs - if (components & VB_HAS_NRM0) - WRITE(p, " float3 rawnorm0 : NORMAL0,\n"); - if (components & VB_HAS_NRM1) { - if (is_d3d) - WRITE(p, " float3 rawnorm1 : NORMAL1,\n"); - else - WRITE(p, " float3 rawnorm1 : ATTR%d,\n", SHADER_NORM1_ATTRIB); + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } - if (components & VB_HAS_NRM2) { - if (is_d3d) - WRITE(p, " float3 rawnorm2 : NORMAL2,\n"); - else - WRITE(p, " float3 rawnorm2 : ATTR%d,\n", SHADER_NORM2_ATTRIB); - } - if (components & VB_HAS_COL0) - WRITE(p, " float4 color0 : COLOR0,\n"); - if (components & VB_HAS_COL1) - WRITE(p, " float4 color1 : COLOR1,\n"); - for (int i = 0; i < 8; ++i) { - u32 hastexmtx = (components & (VB_HAS_TEXMTXIDX0< class _VERTEXSHADERUID { diff --git a/Source/Core/VideoCommon/Src/VideoCommon.h b/Source/Core/VideoCommon/Src/VideoCommon.h index f067fb9d6b..a4bfaddd1f 100644 --- a/Source/Core/VideoCommon/Src/VideoCommon.h +++ b/Source/Core/VideoCommon/Src/VideoCommon.h @@ -152,5 +152,11 @@ inline unsigned int GetPow2(unsigned int val) ++ret; return ret; } +struct s_svar +{ + const char *name; + const unsigned int reg; + const unsigned int size; +}; #endif // _VIDEOCOMMON_H diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index 6d240ba357..c972d46716 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -141,6 +141,7 @@ void VideoConfig::GameIniLoad(const char *ini_file) iniFile.GetIfExists("Video_Settings", "DisableFog", &bDisableFog); iniFile.GetIfExists("Video_Settings", "EnableOpenCL", &bEnableOpenCL); iniFile.GetIfExists("Video_Settings", "OMPDecoder", &bOMPDecoder); + iniFile.GetIfExists("Video_Settings", "UseGLSL", &bUseGLSL); iniFile.GetIfExists("Video_Enhancements", "ForceFiltering", &bForceFiltering); iniFile.GetIfExists("Video_Enhancements", "MaxAnisotropy", &iMaxAnisotropy); // NOTE - this is x in (1 << x) @@ -173,6 +174,7 @@ void VideoConfig::VerifyValidity() if (!backend_info.bSupports3DVision) b3DVision = false; if (!backend_info.bSupportsFormatReinterpretation) bEFBEmulateFormatChanges = false; if (!backend_info.bSupportsPixelLighting) bEnablePixelLighting = false; + if (!backend_info.bSupportsGLSL) bUseGLSL = false; } void VideoConfig::Save(const char *ini_file) @@ -214,6 +216,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Settings", "Wireframe", bWireFrame); iniFile.Set("Settings", "DstAlphaPass", bDstAlphaPass); iniFile.Set("Settings", "DisableFog", bDisableFog); + iniFile.Set("Settings", "bUseGLSL", bUseGLSL); iniFile.Set("Settings", "EnableOpenCL", bEnableOpenCL); iniFile.Set("Settings", "OMPDecoder", bOMPDecoder); @@ -276,6 +279,7 @@ void VideoConfig::GameIniSave(const char* default_ini, const char* game_ini) SET_IF_DIFFERS("Video_Settings", "DisableFog", bDisableFog); SET_IF_DIFFERS("Video_Settings", "EnableOpenCL", bEnableOpenCL); SET_IF_DIFFERS("Video_Settings", "OMPDecoder", bOMPDecoder); + SET_IF_DIFFERS("Video_Settings", "UseGLSL", bUseGLSL); SET_IF_DIFFERS("Video_Enhancements", "ForceFiltering", bForceFiltering); SET_IF_DIFFERS("Video_Enhancements", "MaxAnisotropy", iMaxAnisotropy); // NOTE - this is x in (1 << x) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index e71c7356a9..1130df7b8e 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -103,6 +103,7 @@ struct VideoConfig bool bWireFrame; bool bDstAlphaPass; bool bDisableFog; + bool bUseGLSL; // Utility bool bDumpTextures; @@ -162,6 +163,7 @@ struct VideoConfig bool bSupportsDualSourceBlend; // only supported by D3D11 and OpenGL bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; + bool bSupportsGLSL; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp index cb348b8684..a79dc3b136 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/main.cpp @@ -94,6 +94,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = true; g_Config.backend_info.bSupportsFormatReinterpretation = true; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsGLSL = false; IDXGIFactory* factory; IDXGIAdapter* ad; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp index 5aeca6751d..7b0338a54c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp @@ -96,6 +96,7 @@ void InitBackendInfo() g_Config.backend_info.bSupports3DVision = true; g_Config.backend_info.bSupportsDualSourceBlend = false; g_Config.backend_info.bSupportsFormatReinterpretation = true; + g_Config.backend_info.bSupportsGLSL = false; g_Config.backend_info.bSupportsPixelLighting = C_PLIGHTS + 40 <= maxConstants && C_PMATERIALS + 4 <= maxConstants; diff --git a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt index b506087106..4c4bbbe649 100644 --- a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt +++ b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt @@ -4,6 +4,7 @@ set(SRCS Src/FramebufferManager.cpp Src/NativeVertexFormat.cpp Src/PixelShaderCache.cpp Src/PostProcessing.cpp + Src/ProgramShaderCache.cpp Src/RasterFont.cpp Src/Render.cpp Src/TextureCache.cpp diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index ae20649433..b5ba60e632 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -19,6 +19,7 @@ #include "x64Emitter.h" #include "ABI.h" #include "MemoryUtil.h" +#include "ProgramShaderCache.h" #include "VertexShaderGen.h" #include "CPMemory.h" @@ -191,8 +192,15 @@ void GLVertexFormat::SetupVertexPointers() { if (vtx_decl.num_normals >= 1) { glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); if (vtx_decl.num_normals == 3) { - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); + GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB; + if(g_ActiveConfig.bUseGLSL){ + varLocation1 = OGL::ProgramShaderCache::GetAttr(0); + varLocation2 = OGL::ProgramShaderCache::GetAttr(1); + } + if(varLocation1 > 0) + glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); + if(varLocation2 > 0) + glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); } } @@ -216,7 +224,11 @@ void GLVertexFormat::SetupVertexPointers() { } if (vtx_decl.posmtx_offset != -1) { - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); + GLint varLocation = SHADER_POSMTX_ATTRIB; + if(g_ActiveConfig.bUseGLSL) + varLocation = OGL::ProgramShaderCache::GetAttr(2); + if(varLocation > 0) + glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); } #endif } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 61e41008b3..37e65e2c88 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -27,6 +27,7 @@ #include "Common.h" #include "Render.h" #include "VertexShaderGen.h" +#include "ProgramShaderCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" #include "FileUtil.h" @@ -47,208 +48,225 @@ bool PixelShaderCache::ShaderEnabled; PixelShaderCache::PSCacheEntry* PixelShaderCache::last_entry = NULL; PIXELSHADERUID PixelShaderCache::last_uid; +void(*pSetPSConstant4f)(unsigned int, float, float, float, float); +void(*pSetPSConstant4fv)(unsigned int, const float*); +void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); + GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram; + return s_DepthMatrixProgram; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram; + return s_ColorMatrixProgram; } void PixelShaderCache::Init() { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; - GL_REPORT_ERRORD(); + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; + GL_REPORT_ERRORD(); - s_displayCompileAlert = true; + s_displayCompileAlert = true; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); - - if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; + if(g_ActiveConfig.bUseGLSL) + { + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + } + else + { + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + } + + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); + + if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. + s_nMaxPixelInstructions = 4096; + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxPixelInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxPixelInstructions = 4096; + } #endif - int maxinst, maxattribs; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); - INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - - char pmatrixprog[2048]; - sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_ColorMatrixProgram); - SetCurrentShader(s_ColorMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + int maxinst, maxattribs; + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); + INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - } + char pmatrixprog[2048]; + sprintf(pmatrixprog, "!!ARBfp1.0" + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); + glGenProgramsARB(1, &s_ColorMatrixProgram); + SetCurrentShader(s_ColorMatrixProgram); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + glDeleteProgramsARB(1, &s_ColorMatrixProgram); + s_ColorMatrixProgram = 0; + } - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + sprintf(pmatrixprog, "!!ARBfp1.0\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - "FLR R0.x,R0;\n" //bits 31..24 + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "FLR R0.x,R0;\n" //bits 31..24 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - - "MUL R0,R0,K0.y;\n" // /255 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_DepthMatrixProgram); - SetCurrentShader(s_DepthMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + "MUL R0,R0,K0.y;\n" // /255 + + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 + + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); + glGenProgramsARB(1, &s_DepthMatrixProgram); + SetCurrentShader(s_DepthMatrixProgram); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + glDeleteProgramsARB(1, &s_DepthMatrixProgram); + s_DepthMatrixProgram = 0; + } - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - } - } void PixelShaderCache::Shutdown() { - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; + glDeleteProgramsARB(1, &s_ColorMatrixProgram); + s_ColorMatrixProgram = 0; glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - PSCache::iterator iter = PixelShaders.begin(); - for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); - PixelShaders.clear(); + s_DepthMatrixProgram = 0; + PSCache::iterator iter = PixelShaders.begin(); + for (; iter != PixelShaders.end(); iter++) + iter->second.Destroy(); + PixelShaders.clear(); } FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components) { - PIXELSHADERUID uid; - GetPixelShaderId(&uid, dstAlphaMode, components); - - // Check if the shader is already set - if (last_entry) - { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } - } + PIXELSHADERUID uid; + GetPixelShaderId(&uid, dstAlphaMode, components); - last_uid = uid; + // Check if the shader is already set + if (last_entry) + { + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } + } - PSCache::iterator iter = PixelShaders.find(uid); - if (iter != PixelShaders.end()) - { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + last_uid = uid; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + PSCache::iterator iter = PixelShaders.find(uid); + if (iter != PixelShaders.end()) + { + PSCacheEntry &entry = iter->second; + last_entry = &entry; - // Make an entry in the table - PSCacheEntry& newentry = PixelShaders[uid]; - last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } - if (g_ActiveConfig.bEnableShaderDebugging && code) - { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; - } + // Make an entry in the table + PSCacheEntry& newentry = PixelShaders[uid]; + last_entry = &newentry; + const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + + if (g_ActiveConfig.bEnableShaderDebugging && code) + { + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; + } #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - - SaveData(szTemp, code); - } + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + + SaveData(szTemp, code); + } #endif - if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } - - INCSTAT(stats.numPixelShadersCreated); - SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - return &last_entry->shader; + if (!code || !CompilePixelShader(newentry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } + + INCSTAT(stats.numPixelShadersCreated); + SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + return &last_entry->shader; } bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } #if defined HAVE_CG && HAVE_CG char stropt[128]; @@ -323,50 +341,134 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr cgDestroyProgram(tempprog); #endif - return true; + return true; } //Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { - if(ShaderEnabled) - { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; - } + if(ShaderEnabled) + { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; + } } //bind a program if is diferent from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { - if(!ShaderEnabled) - { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - } - if(CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); - } + if(!ShaderEnabled) + { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + } + if(CurrentShader != Shader) + { + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + } +} +// GLSL Specific +void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) +{ + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform1i(tmp.UniformLocations[a], Tex); + return; + } + } +} +void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) +{ + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } +} +void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + float f[4] = { f1, f2, f3, f4 }; + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } + } } +void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) +{ + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } + } +} + +void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for( unsigned int a = 0; a < 10; ++a) + { + if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } + } +} +// CG Specific +void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + float f[4] = { f1, f2, f3, f4 }; + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); +} + +void SetCGPSConstant4fv(unsigned int const_number, const float *f) +{ + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); +} + +void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); +} +// Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + pSetPSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetPSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + pSetPSConstant4fv(const_number, f); } void Renderer::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + pSetMultiPSConstant4fv(const_number, count, f); } - } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index f528eeb35b..9d61d7229a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -73,6 +73,8 @@ class PixelShaderCache public: static void Init(); static void Shutdown(); + // This is a GLSL only function + static void SetPSSampler(const char * name, unsigned int Tex); static FRAGMENTSHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 components); static bool CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); @@ -85,7 +87,15 @@ public: static void DisableShader(); }; +// GLSL Specific +void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetGLSLPSConstant4fv(unsigned int const_number, const float *f); +void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +//CG Specific +void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetCGPSConstant4fv(unsigned int const_number, const float *f); +void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); } // namespace OGL #endif // _PIXELSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp new file mode 100644 index 0000000000..fc056aed63 --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -0,0 +1,150 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +#include "ProgramShaderCache.h" + +namespace OGL +{ + GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; + ProgramShaderCache::PCache ProgramShaderCache::pshaders; + + std::pair ProgramShaderCache::CurrentShaderProgram; + const char *UniformNames[NUM_UNIFORMS] = { + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; + + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + { + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; + + + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } + + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); + + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + glAttachShader(entry.program.glprogid, entry.program.psid); + glLinkProgram(entry.program.glprogid); + //checkForGLError("linking program"); + glUseProgram(entry.program.glprogid); + //checkForGLError("using program"); + + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + + + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + } + + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } + + GLint ProgramShaderCache::GetAttr(int num) + { + return pshaders[CurrentShaderProgram].program.attrLoc[num]; + } + PROGRAMSHADER ProgramShaderCache::GetShaderProgram() + { + return pshaders[CurrentShaderProgram].program; + } + + void ProgramShaderCache::Shutdown(void) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + } +} + +void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) +{ + uid->uid.vsid = _v; + uid->uid.psid = _p; +} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h new file mode 100644 index 0000000000..53abe440f5 --- /dev/null +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -0,0 +1,108 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _ProgramShaderCache_H_ +#define _ProgramShaderCache_H_ + +#include "GLUtil.h" + +#include "VertexShaderCache.h" +#include "PixelShaderCache.h" +#include "PixelShaderGen.h" +#include "VertexShaderGen.h" + + union PID + { + struct { + GLuint vsid, psid; + }; + u64 id; + }; + +class PROGRAMUID +{ +public: + + PID uid; + + PROGRAMUID() + { + uid.id = 0; + } + + PROGRAMUID(const PROGRAMUID& r) + { + uid.id = r.uid.id; + } + PROGRAMUID(GLuint _v, GLuint _p) + { + uid.vsid = _v; + uid.psid = _p; + } + + int GetNumValues() const + { + return uid.id; + } +}; +void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); + +namespace OGL +{ +#define NUM_UNIFORMS 27 +extern const char *UniformNames[NUM_UNIFORMS]; + + +struct PROGRAMSHADER +{ + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + GLuint glprogid; // opengl program id + GLuint vsid, psid; + GLint attrLoc[3]; + GLint UniformLocations[NUM_UNIFORMS]; +}; + + +class ProgramShaderCache +{ + struct PCacheEntry + { + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } + }; + typedef std::map, PCacheEntry> PCache; + + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static std::pair CurrentShaderProgram; +public: + static PROGRAMSHADER GetShaderProgram(); + static GLint GetAttr(int num); + static void SetBothShaders(GLuint PS, GLuint VS); + static GLuint GetCurrentProgram(void); + static void Shutdown(void); + +}; + +} // namespace OGL + +#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index a6121e1436..ae99669636 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -45,6 +45,7 @@ #include "DLCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" #include "VertexLoaderManager.h" @@ -1407,8 +1408,13 @@ void Renderer::ResetAPIState() { // Gets us to a reasonably sane state where it's possible to do things like // image copies with textured quads, etc. - VertexShaderCache::DisableShader(); - PixelShaderCache::DisableShader(); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(0, 0); + else + { + VertexShaderCache::DisableShader(); + PixelShaderCache::DisableShader(); + } glDisable(GL_SCISSOR_TEST); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); @@ -1430,8 +1436,13 @@ void Renderer::RestoreAPIState() glPolygonMode(GL_FRONT_AND_BACK, g_ActiveConfig.bWireFrame ? GL_LINE : GL_FILL); - VertexShaderCache::SetCurrentShader(0); - PixelShaderCache::SetCurrentShader(0); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(0, 0); + else + { + VertexShaderCache::SetCurrentShader(0); + PixelShaderCache::SetCurrentShader(0); + } } void Renderer::SetGenerationMode() diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 0a37b0e654..597bfbba49 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -33,6 +33,7 @@ #include "PixelShaderManager.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderGen.h" #include "VertexLoader.h" #include "VertexManager.h" @@ -168,10 +169,6 @@ void VertexManager::vFlush() } } - // set global constants - VertexShaderManager::SetConstants(); - PixelShaderManager::SetConstants(); - bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; @@ -204,8 +201,18 @@ void VertexManager::vFlush() FRAGMENTSHADER* ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); #endif VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); - if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. - if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(ps->glprogid, vs->glprogid); + else + { + if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. + if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); + } + + // set global constants + VertexShaderManager::SetConstants(); + PixelShaderManager::SetConstants(); Draw(); @@ -213,7 +220,13 @@ void VertexManager::vFlush() if (useDstAlpha && !dualSourcePossible) { ps = PixelShaderCache::SetShader(DSTALPHA_ALPHA_PASS,g_nativeVertexFmt->m_components); - if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); + if(g_ActiveConfig.bUseGLSL) + { + ProgramShaderCache::SetBothShaders(ps->glprogid, 0); + PixelShaderManager::SetConstants(); // Need to set these again + } + else + if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // only update alpha glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index dbbb7ee29b..a7b1c68e7a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -26,6 +26,7 @@ #include "Render.h" #include "VertexShaderGen.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "VertexShaderCache.h" #include "VertexManager.h" #include "VertexLoader.h" @@ -45,194 +46,293 @@ VertexShaderCache::VSCacheEntry* VertexShaderCache::last_entry = NULL; VERTEXSHADERUID VertexShaderCache::last_uid; static int s_nMaxVertexInstructions; - +void (*pSetVSConstant4f)(unsigned int, float, float, float, float); +void (*pSetVSConstant4fv)(unsigned int, const float*); +void (*pSetMultiVSConstant4fv)(unsigned int, unsigned int, const float*); +void (*pSetMultiVSConstant3fv)(unsigned int, unsigned int, const float*); void VertexShaderCache::Init() { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; - glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; + if(g_ActiveConfig.bUseGLSL) + { + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + } + else + { + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + } + + glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxVertexInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxVertexInstructions = 4096; + } #endif } void VertexShaderCache::Shutdown() { - for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); - vshaders.clear(); + for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) + iter->second.Destroy(); + vshaders.clear(); } VERTEXSHADER* VertexShaderCache::SetShader(u32 components) { - VERTEXSHADERUID uid; - GetVertexShaderId(&uid, components); - if (last_entry) - { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; - } - } + VERTEXSHADERUID uid; + GetVertexShaderId(&uid, components); + if (last_entry) + { + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } + } - last_uid = uid; + last_uid = uid; - VSCache::iterator iter = vshaders.find(uid); - if (iter != vshaders.end()) - { - VSCacheEntry &entry = iter->second; - last_entry = &entry; + VSCache::iterator iter = vshaders.find(uid); + if (iter != vshaders.end()) + { + VSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; - } + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; + } - // Make an entry in the table - VSCacheEntry& entry = vshaders[uid]; - last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, API_OPENGL); - GetSafeVertexShaderId(&entry.safe_uid, components); + // Make an entry in the table + VSCacheEntry& entry = vshaders[uid]; + last_entry = &entry; + const char *code = GenerateVertexShaderCode(components, API_OPENGL); + GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numVertexShadersCreated); - SETSTAT(stats.numVertexShadersAlive, vshaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numVertexShadersCreated); + SETSTAT(stats.numVertexShadersAlive, vshaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + return &last_entry->shader; } bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } #if defined HAVE_CG && HAVE_CG - char stropt[64]; - sprintf(stropt, "MaxLocalParams=256,MaxInstructions=%d", s_nMaxVertexInstructions); - const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", opts); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + char stropt[64]; + sprintf(stropt, "MaxLocalParams=256,MaxInstructions=%d", s_nMaxVertexInstructions); + const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", opts); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - SetCurrentShader(vs.glprogid); + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + SetCurrentShader(vs.glprogid); - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } - cgDestroyProgram(tempprog); + cgDestroyProgram(tempprog); #endif - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; - return true; + return true; } void VertexShaderCache::DisableShader() { - if (ShaderEnabled) - { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; + } } void VertexShaderCache::SetCurrentShader(GLuint Shader) { - if (!ShaderEnabled) - { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; - } - if (CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; + } + if (CurrentShader != Shader) + { + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + } } - -void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +// GLSL Specific +void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for(int a = 0; a < NUM_UNIFORMS; ++a) + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } - -void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) +void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); + float buf[4]; + buf[0] = f1; + buf[1] = f2; + buf[2] = f3; + buf[3] = f4; + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } + } } -void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) +{ + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } + } +} + +void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } + } +} + +void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +{ + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + for( unsigned int a = 0; a < 9; ++a) + { + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } + } +} + +// CG Specific +void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); +} + +void SetCGVSConstant4fv(unsigned int const_number, const float *f) +{ + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); +} + +void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { if(GLEW_EXT_gpu_program_parameters) { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); } else { @@ -241,32 +341,54 @@ void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int cou } } -void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { + if(GLEW_EXT_gpu_program_parameters) + { float buf[4 * C_VENVCONST_END]; for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } else { for (unsigned int i = 0; i < count; i++) - { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); - } + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } } +// Renderer Functions +void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) +{ + pSetVSConstant4f(const_number, f1, f2, f3, f4); +} + +void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) +{ + pSetVSConstant4fv(const_number, f); +} + +void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) +{ + pSetMultiVSConstant4fv(const_number, count, f); +} + +void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) +{ + pSetMultiVSConstant3fv(const_number, count, f); +} + + } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index 6f4cbe25c2..e398a801ff 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -70,7 +70,17 @@ public: static void DisableShader(); }; +// GLSL Specific +void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetGLSLVSConstant4fv(unsigned int const_number, const float *f); +void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +// CG Specific +void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); +void SetCGVSConstant4fv(unsigned int const_number, const float *f); +void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); } // namespace OGL #endif // _VERTEXSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 543fb9824d..572c1fbbe9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -135,6 +135,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsDualSourceBlend = false; // supported, but broken g_Config.backend_info.bSupportsFormatReinterpretation = false; g_Config.backend_info.bSupportsPixelLighting = true; + g_Config.backend_info.bSupportsGLSL = true; // aamodes const char* caamodes[] = {"None", "2x", "4x", "8x", "8x CSAA", "8xQ CSAA", "16x CSAA", "16xQ CSAA"}; From 3943840d5c422af45941a96e6d4407d59380b39d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 1 Dec 2011 00:33:12 -0600 Subject: [PATCH 096/625] Now CG plays nice with this new stuff. --- .../VideoCommon/Src/LightingShaderGen.cpp | 34 +++++++++---------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 32 +++++++++-------- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 11 +++--- 3 files changed, 38 insertions(+), 39 deletions(-) diff --git a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp index a506acadfc..5933a7d28f 100644 --- a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp @@ -47,13 +47,13 @@ char *GenerateLightShader(char *p, int index, const LitChannel& chan, const char // atten disabled switch (chan.diffusefunc) { case LIGHTDIF_NONE: - WRITE(p, "lacc.%s += %s.lights[%d].col.%s;\n", swizzle, lightsName, index, swizzle); + WRITE(p, "lacc.%s += %s[%d].%s;\n", swizzle, lightsName, index * 5, swizzle); break; case LIGHTDIF_SIGN: case LIGHTDIF_CLAMP: - WRITE(p, "ldir = normalize(%s.lights[%d].pos.xyz - pos.xyz);\n", lightsName, index); - WRITE(p, "lacc.%s += %sdot(ldir, _norm0)) * %s.lights[%d].col.%s;\n", - swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, index, swizzle); + WRITE(p, "ldir = normalize(%s[%d + 3].xyz - pos.xyz);\n", lightsName, index * 5); + WRITE(p, "lacc.%s += %sdot(ldir, _norm0)) * %s[%d].%s;\n", + swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, index * 5, swizzle); break; default: _assert_(0); } @@ -62,32 +62,32 @@ char *GenerateLightShader(char *p, int index, const LitChannel& chan, const char if (chan.attnfunc == 3) { // spot - WRITE(p, "ldir = %s.lights[%d].pos.xyz - pos.xyz;\n", lightsName, index); + WRITE(p, "ldir = %s[%d + 3].xyz - pos.xyz;\n", lightsName, index * 5); WRITE(p, "dist2 = dot(ldir, ldir);\n" "dist = sqrt(dist2);\n" "ldir = ldir / dist;\n" - "attn = max(0.0f, dot(ldir, %s.lights[%d].dir.xyz));\n", lightsName, index); - WRITE(p, "attn = max(0.0f, dot(%s.lights[%d].cosatt.xyz, float3(1.0f, attn, attn*attn))) / dot(%s.lights[%d].distatt.xyz, float3(1.0f,dist,dist2));\n", lightsName, index, lightsName, index); + "attn = max(0.0f, dot(ldir, %s[%d + 4].xyz));\n", lightsName, index * 5); + WRITE(p, "attn = max(0.0f, dot(%s[%d + 1].xyz, float3(1.0f, attn, attn*attn))) / dot(%s[%d + 2].xyz, float3(1.0f,dist,dist2));\n", lightsName, index * 5, lightsName, index * 5); } else if (chan.attnfunc == 1) { // specular - WRITE(p, "ldir = normalize(%s.lights[%d].pos.xyz);\n", lightsName, index); - WRITE(p, "attn = (dot(_norm0,ldir) >= 0.0f) ? max(0.0f, dot(_norm0, %s.lights[%d].dir.xyz)) : 0.0f;\n", lightsName, index); - WRITE(p, "attn = max(0.0f, dot(%s.lights[%d].cosatt.xyz, float3(1,attn,attn*attn))) / dot(%s.lights[%d].distatt.xyz, float3(1,attn,attn*attn));\n", lightsName, index, lightsName, index); + WRITE(p, "ldir = normalize(%s[%d + 3].xyz);\n", lightsName, index * 5); + WRITE(p, "attn = (dot(_norm0,ldir) >= 0.0f) ? max(0.0f, dot(_norm0, %s[%d + 4].xyz)) : 0.0f;\n", lightsName, index * 5); + WRITE(p, "attn = max(0.0f, dot(%s[%d + 1].xyz, float3(1,attn,attn*attn))) / dot(%s[%d + 2].xyz, float3(1,attn,attn*attn));\n", lightsName, index * 5, lightsName, index * 5); } switch (chan.diffusefunc) { case LIGHTDIF_NONE: - WRITE(p, "lacc.%s += attn * %s.lights[%d].col.%s;\n", swizzle, lightsName, index, swizzle); + WRITE(p, "lacc.%s += attn * %s[%d].%s;\n", swizzle, lightsName, index * 5, swizzle); break; case LIGHTDIF_SIGN: case LIGHTDIF_CLAMP: - WRITE(p, "lacc.%s += attn * %sdot(ldir, _norm0)) * %s.lights[%d].col.%s;\n", + WRITE(p, "lacc.%s += attn * %sdot(ldir, _norm0)) * %s[%d].%s;\n", swizzle, chan.diffusefunc != LIGHTDIF_SIGN ? "max(0.0f," :"(", lightsName, - index, + index * 5, swizzle); break; default: _assert_(0); @@ -120,7 +120,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "mat = float4(1.0f, 1.0f, 1.0f, 1.0f);\n"); } else // from color - WRITE(p, "mat = %s.C%d;\n", materialsName, j+2); + WRITE(p, "mat = %s[%d];\n", materialsName, j+2); if (color.enablelighting) { if (color.ambsource) { // from vertex @@ -132,7 +132,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "lacc = float4(0.0f, 0.0f, 0.0f, 0.0f);\n"); } else // from color - WRITE(p, "lacc = %s.C%d;\n", materialsName, j); + WRITE(p, "lacc = %s[%d];\n", materialsName, j); } else { @@ -149,7 +149,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, else WRITE(p, "mat.w = 1.0f;\n"); } else // from color - WRITE(p, "mat.w = %s.C%d.w;\n", materialsName, j+2); + WRITE(p, "mat.w = %s[%d].w;\n", materialsName, j+2); } if (alpha.enablelighting) @@ -163,7 +163,7 @@ char *GenerateLightingShader(char *p, int components, const char* materialsName, WRITE(p, "lacc.w = 0.0f;\n"); } else // from color - WRITE(p, "lacc.w = %s.C%d.w;\n", materialsName, j); + WRITE(p, "lacc.w = %s[%d].w;\n", materialsName, j); } else { diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 55f81002ba..7ebd6fd3b9 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -292,11 +292,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "int posmtx = fposmtx;\n"); } - WRITE(p, "float4 pos = float4(dot(" I_TRANSFORMMATRICES".T[posmtx].t, rawpos), dot(" I_TRANSFORMMATRICES".T[posmtx+1].t, rawpos), dot(" I_TRANSFORMMATRICES".T[posmtx+2].t, rawpos), 1);\n"); + WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES"[posmtx], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); if (components & VB_HAS_NRMALL) { WRITE(p, "int normidx = posmtx >= 32 ? (posmtx-32) : posmtx;\n"); - WRITE(p, "float3 N0 = " I_NORMALMATRICES".T[normidx].t.xyz, N1 = " I_NORMALMATRICES".T[normidx+1].t.xyz, N2 = " I_NORMALMATRICES".T[normidx+2].t.xyz;\n"); + WRITE(p, "float3 N0 = "I_NORMALMATRICES"[normidx].xyz, N1 = "I_NORMALMATRICES"[normidx+1].xyz, N2 = "I_NORMALMATRICES"[normidx+2].xyz;\n"); } if (components & VB_HAS_NRM0) @@ -308,13 +308,13 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "float4 pos = float4(dot(" I_POSNORMALMATRIX".T0, rawpos), dot(" I_POSNORMALMATRIX".T1, rawpos), dot(" I_POSNORMALMATRIX".T2, rawpos), 1.0f);\n"); + WRITE(p, "float4 pos = float4(dot("I_POSNORMALMATRIX"[0], rawpos), dot("I_POSNORMALMATRIX"[1], rawpos), dot("I_POSNORMALMATRIX"[2], rawpos), 1.0f);\n"); if (components & VB_HAS_NRM0) - WRITE(p, "float3 _norm0 = normalize(float3(dot(" I_POSNORMALMATRIX".N0.xyz, rawnorm0), dot(" I_POSNORMALMATRIX".N1.xyz, rawnorm0), dot(" I_POSNORMALMATRIX".N2.xyz, rawnorm0)));\n"); + WRITE(p, "float3 _norm0 = normalize(float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm0)));\n"); if (components & VB_HAS_NRM1) - WRITE(p, "float3 _norm1 = float3(dot(" I_POSNORMALMATRIX".N0.xyz, rawnorm1), dot(" I_POSNORMALMATRIX".N1.xyz, rawnorm1), dot(" I_POSNORMALMATRIX".N2.xyz, rawnorm1));\n"); + WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); if (components & VB_HAS_NRM2) - WRITE(p, "float3 _norm2 = float3(dot(" I_POSNORMALMATRIX".N0.xyz, rawnorm2), dot(" I_POSNORMALMATRIX".N1.xyz, rawnorm2), dot(" I_POSNORMALMATRIX".N2.xyz, rawnorm2));\n"); + WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX".[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); } if (!(components & VB_HAS_NRM0)) @@ -322,7 +322,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) - WRITE(p, "o.pos = float4(dot(" I_PROJECTION".T0, pos), dot(" I_PROJECTION".T1, pos), dot(" I_PROJECTION".T2, pos), dot(" I_PROJECTION".T3, pos));\n"); + WRITE(p, "o.pos = float4(dot("I_PROJECTION"[0], pos), dot("I_PROJECTION"[1], pos), dot("I_PROJECTION"[2], pos), dot("I_PROJECTION"[3], pos));\n"); WRITE(p, "float4 mat, lacc;\n" "float3 ldir, h;\n" @@ -421,18 +421,20 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) break; case XF_TEXGEN_REGULAR: default: - if (components & (VB_HAS_TEXMTXIDX0< Date: Fri, 2 Dec 2011 18:26:15 -0600 Subject: [PATCH 097/625] meh --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 169 +++++++++--------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 + .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 131 +++++++------- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 2 + 4 files changed, 164 insertions(+), 140 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 37e65e2c88..b972581aa8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -51,6 +51,7 @@ PIXELSHADERUID PixelShaderCache::last_uid; void(*pSetPSConstant4f)(unsigned int, float, float, float, float); void(*pSetPSConstant4fv)(unsigned int, const float*); void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); +bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { @@ -77,12 +78,14 @@ void PixelShaderCache::Init() pSetPSConstant4f = SetGLSLPSConstant4f; pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; } else { pSetPSConstant4f = SetCGPSConstant4f; pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); @@ -262,86 +265,7 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } - -#if defined HAVE_CG && HAVE_CG - char stropt[128]; - sprintf(stropt, "MaxLocalParams=224,NumInstructionSlots=%d", s_nMaxPixelInstructions); - const char *opts[] = {"-profileopts", stropt, "-O2", "-q", NULL}; - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", opts); - - // handle errors - if (!cgIsProgram(tempprog)) - { - cgDestroyProgram(tempprog); - - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sbad_ps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); - - PanicAlert("Failed to compile pixel shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); - - return false; - } - - // handle warnings - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) - { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); - } - - glGenProgramsARB(1, &ps.glprogid); - SetCurrentShader(ps.glprogid); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO - } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); -#endif - - return true; + return pCompilePixelShader(ps, pstrprogram); } //Disable Fragment programs and reset the selected Program @@ -370,6 +294,10 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) } } // GLSL Specific +bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) +{ + return false; +} void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); @@ -440,6 +368,87 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co } } // CG Specific + +bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) +{ + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } + +#if defined HAVE_CG && HAVE_CG + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); + + // handle errors + if (!cgIsProgram(tempprog)) + { + cgDestroyProgram(tempprog); + + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); + + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + return false; + } + + // handle warnings + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) + { + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); + } + + glGenProgramsARB(1, &ps.glprogid); + PixelShaderCache::SetCurrentShader(ps.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); +#endif + + return true; +} void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 9d61d7229a..429af249f1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -91,11 +91,13 @@ public: void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetGLSLPSConstant4fv(unsigned int const_number, const float *f); void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); //CG Specific void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetCGPSConstant4fv(unsigned int const_number, const float *f); void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); } // namespace OGL #endif // _PIXELSHADERCACHE_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 82db873e85..eb4f56522e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -50,6 +50,7 @@ void (*pSetVSConstant4f)(unsigned int, float, float, float, float); void (*pSetVSConstant4fv)(unsigned int, const float*); void (*pSetMultiVSConstant4fv)(unsigned int, unsigned int, const float*); void (*pSetMultiVSConstant3fv)(unsigned int, unsigned int, const float*); +bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { @@ -64,6 +65,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetGLSLVSConstant4fv; pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } else { @@ -71,6 +73,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetCGVSConstant4fv; pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -147,66 +150,7 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } - -#if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); - - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); - - cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } - - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - SetCurrentShader(vs.glprogid); - - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); -#endif - - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; - - return true; + return pCompileVertexShader(vs, pstrprogram); } void VertexShaderCache::DisableShader() @@ -234,6 +178,10 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) } } // GLSL Specific +bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) +{ + return false; +} void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); @@ -315,6 +263,69 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } // CG Specific +bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) +{ + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } + +#if defined HAVE_CG && HAVE_CG + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); + + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } + + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + VertexShaderCache::SetCurrentShader(vs.glprogid); + + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); +#endif + + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; + + return true; +} void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index e398a801ff..fc08cc4efd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -75,12 +75,14 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f); void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram); // CG Specific void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4); void SetCGVSConstant4fv(unsigned int const_number, const float *f); void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f); void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f); +bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram); } // namespace OGL #endif // _VERTEXSHADERCACHE_H_ From 411357b54a75ac1efa0a9d3b9dd6e87673459cad Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 18:31:06 -0600 Subject: [PATCH 098/625] Compile --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 31 ++++++++++++++++++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 31 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index b972581aa8..5b1cc564a7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -296,7 +296,36 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) // GLSL Specific bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - return false; + GLuint result = glCreateShader(GL_FRAGMENT_SHADER); + + glShaderSource(result, 1, &pstrprogram, NULL); + glCompileShader(result); + GLsizei length = 0; + + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + delete[] infoLog; + } + + GLint compileStatus; + glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); + if (compileStatus != GL_TRUE) + { + // Compile failed + ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + // Don't try to use this shader + glDeleteShader(result); + return false; + } + + (void)GL_REPORT_ERROR(); + ps.glprogid = result; + return true; } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index eb4f56522e..f58e9eb786 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -180,7 +180,36 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) // GLSL Specific bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - return false; + GLuint result = glCreateShader(GL_VERTEX_SHADER); + + glShaderSource(result, 1, &pstrprogram, NULL); + glCompileShader(result); + GLsizei length = 0; + + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + delete[] infoLog; + } + + GLint compileStatus; + glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); + if (compileStatus != GL_TRUE) + { + // Compile failed + ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + // Don't try to use this shader + glDeleteShader(result); + return false; + } + + (void)GL_REPORT_ERROR(); + vs.glprogid = result; + return true; } void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { From 7a4c080c701f2bc3e851576ad968ec8c069a4937 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 18:46:07 -0600 Subject: [PATCH 099/625] mah --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 8 +++++++- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 9 +++++++-- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 10 ++++++++-- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 15 +++++++++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 5b1cc564a7..6d56df3216 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -20,6 +20,7 @@ #include "GLUtil.h" #include +#include #include "Statistics.h" #include "VideoConfig.h" @@ -234,7 +235,8 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Make an entry in the table PSCacheEntry& newentry = PixelShaders[uid]; last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, components); + newentry.shader.bGLSL = g_ActiveConfig.bUseGLSL; + const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); if (g_ActiveConfig.bEnableShaderDebugging && code) { @@ -271,6 +273,8 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr //Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { + if(g_ActiveConfig.bUseGLSL) + assert(true); if(ShaderEnabled) { glDisable(GL_FRAGMENT_PROGRAM_ARB); @@ -281,6 +285,8 @@ void PixelShaderCache::DisableShader() //bind a program if is diferent from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { + if(g_ActiveConfig.bUseGLSL) + assert(true); if(!ShaderEnabled) { glEnable(GL_FRAGMENT_PROGRAM_ARB); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 429af249f1..d5e2cae6bc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -29,16 +29,21 @@ namespace OGL struct FRAGMENTSHADER { - FRAGMENTSHADER() : glprogid(0) { } + FRAGMENTSHADER() : glprogid(0), bGLSL(0) { } void Destroy() { if (glprogid) { - glDeleteProgramsARB(1, &glprogid); + if(bGLSL) + glDeleteShader(glprogid); + else + glDeleteProgramsARB(1, &glprogid); glprogid = 0; } } GLuint glprogid; // opengl program id + + bool bGLSL; std::string strprog; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index f58e9eb786..ea7a97196b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -16,6 +16,7 @@ // http://code.google.com/p/dolphin-emu/ #include +#include #include "Globals.h" #include "VideoConfig.h" @@ -73,7 +74,7 @@ void VertexShaderCache::Init() pSetVSConstant4fv = SetCGVSConstant4fv; pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; + pCompileVertexShader = CompileCGVertexShader; } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -124,7 +125,8 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) // Make an entry in the table VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, API_OPENGL); + entry.shader.bGLSL = g_ActiveConfig.bUseGLSL; + const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) @@ -155,6 +157,8 @@ bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrpr void VertexShaderCache::DisableShader() { + if(g_ActiveConfig.bUseGLSL) + assert(true); if (ShaderEnabled) { glDisable(GL_VERTEX_PROGRAM_ARB); @@ -165,6 +169,8 @@ void VertexShaderCache::DisableShader() void VertexShaderCache::SetCurrentShader(GLuint Shader) { + if(g_ActiveConfig.bUseGLSL) + assert(true); if (!ShaderEnabled) { glEnable(GL_VERTEX_PROGRAM_ARB); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index fc08cc4efd..c3a6146b53 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -29,9 +29,18 @@ namespace OGL struct VERTEXSHADER { - VERTEXSHADER() : glprogid(0) {} + VERTEXSHADER() : glprogid(0), bGLSL(0) {} + void Destroy() + { + if(bGLSL) + glDeleteShader(glprogid); + else + glDeleteProgramsARB(1, &glprogid); + glprogid = 0; + } GLuint glprogid; // opengl program id + bool bGLSL; std::string strprog; }; @@ -43,9 +52,7 @@ class VertexShaderCache VERTEXSHADERUIDSAFE safe_uid; VSCacheEntry() {} void Destroy() { - // printf("Destroying vs %i\n", shader.glprogid); - glDeleteProgramsARB(1, &shader.glprogid); - shader.glprogid = 0; + shader.Destroy(); } }; From 66a5334158e212d63a85bb6f34c01a01fc44ef4e Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 19:04:37 -0600 Subject: [PATCH 100/625] moe --- .../Src/TextureConversionShader.cpp | 150 +++++++++++++----- 1 file changed, 106 insertions(+), 44 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 2132a25258..b7a9df7e04 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -65,21 +65,35 @@ u16 GetEncodedSampleCount(u32 format) default: return 1; } } +const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) +{ + if(ApiType == API_GLSL) + return ""; // Once we switch to GLSL 1.3 we can do something here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; +} // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) { - WRITE(p, "uniform float4 blkDims : register(c%d);\n", C_COLORMATRIX); - WRITE(p, "uniform float4 textureDims : register(c%d);\n", C_COLORMATRIX + 1); + // [0] left, top, right, bottom of source rectangle within source texture + // [1] width and height of destination texture in pixels + // Two were merged for GLSL + WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); float samples = (float)GetEncodedSampleCount(format); - if(ApiType == API_OPENGL) + if (ApiType == API_OPENGL) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } + else if (ApiType == API_GLSL) + { + WRITE(p, "uniform sampler2DRect samp0;\n"); + } else if (ApiType & API_D3D9) { WRITE(p,"uniform sampler samp0 : register(s0);\n"); @@ -91,14 +105,24 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } - WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if(ApiType == API_GLSL) { - WRITE(p," out float4 ocol0 : COLOR0,\n"); + WRITE(p, " float4 ocol0;\n"); + WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); + WRITE(p, "void main()\n"); } else { - WRITE(p," out float4 ocol0 : SV_Target,\n"); + WRITE(p,"void main(\n"); + if(ApiType != API_D3D11) + { + WRITE(p," out float4 ocol0 : COLOR0,\n"); + } + else + { + WRITE(p," out float4 ocol0 : SV_Target,\n"); + } + WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } WRITE(p," in float2 uv0 : TEXCOORD0)\n" @@ -113,7 +137,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * textureDims.x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / %f);\n", blkW); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -121,26 +145,28 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (xb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * blkDims.xy;\n"); + WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); if(ApiType == API_OPENGL) - WRITE(p," sampleUv.y = textureDims.y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + textureDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); if(ApiType != API_OPENGL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / blkDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); } } // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) -{ - WRITE(p, "uniform float4 blkDims : register(c%d);\n", C_COLORMATRIX); - WRITE(p, "uniform float4 textureDims : register(c%d);\n", C_COLORMATRIX + 1); +{ + // [0] left, top, right, bottom of source rectangle within source texture + // [1] width and height of destination texture in pixels + // Two were merged for GLSL + WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -150,6 +176,10 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } + else if (ApiType == API_GLSL) + { + WRITE(p, "uniform sampler2DRect samp0;\n"); + } else if (ApiType & API_D3D9) { WRITE(p,"uniform sampler samp0 : register(s0);\n"); @@ -160,17 +190,27 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, "Texture2D Tex0 : register(t0);\n"); } - - WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if(ApiType == API_GLSL) { - WRITE(p," out float4 ocol0 : COLOR0,\n"); + WRITE(p, " float4 ocol0;\n"); + WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); + WRITE(p, "void main()\n"); } else { - WRITE(p," out float4 ocol0 : SV_Target,\n"); + WRITE(p,"void main(\n"); + if(ApiType != API_D3D11) + { + WRITE(p," out float4 ocol0 : COLOR0,\n"); + } + else + { + WRITE(p," out float4 ocol0 : SV_Target,\n"); + } + WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } + WRITE(p," in float2 uv0 : TEXCOORD0)\n" "{\n" " float2 sampleUv;\n" @@ -179,7 +219,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * textureDims.x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / 2);\n"); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -192,17 +232,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * blkDims.xy;\n"); + WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); if(ApiType == API_OPENGL) - WRITE(p," sampleUv.y = textureDims.y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + textureDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); if(ApiType != API_OPENGL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / blkDims.zw;\n"); + WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); } } @@ -213,15 +253,17 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP texSampleOpName = "tex2D"; else if (ApiType == API_D3D11) texSampleOpName = "tex0.Sample"; + else if (ApiType == API_GLSL) + texSampleOpName = "texture2DRect"; else texSampleOpName = "texRECT"; // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; if(ApiType != API_OPENGL) - texSampleIncrementUnit = "blkDims.x / blkDims.z"; + texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else - texSampleIncrementUnit = "blkDims.x"; + texSampleIncrementUnit = I_COLORS"[0].x"; WRITE(p, " %s = %s(samp0, sampleUv + float2(%d * (%s), 0)).%s;\n", dest, texSampleOpName, s_incrementSampleXCount, texSampleIncrementUnit, colorComp); @@ -263,8 +305,10 @@ void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest) WRITE(p, " %s = floor(%s * %ff);\n", dest, src, result); } -void WriteEncoderEnd(char* p) +void WriteEncoderEnd(char* p, API_TYPE ApiType) { + if(ApiType == API_GLSL) + WRITE(p, "gl_FragData[0] = ocol0;\n"); WRITE(p, "}\n"); IntensityConstantAdded = false; s_incrementSampleXCount = 0; @@ -292,7 +336,7 @@ void WriteI8Encoder(char* p, API_TYPE ApiType) WRITE(p, " ocol0.rgba += IntensityConst.aaaa;\n"); // see WriteColorToIntensity - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteI4Encoder(char* p, API_TYPE ApiType) @@ -340,7 +384,7 @@ void WriteI4Encoder(char* p, API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteIA8Encoder(char* p,API_TYPE ApiType) @@ -359,7 +403,7 @@ void WriteIA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.ga += IntensityConst.aa;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteIA4Encoder(char* p,API_TYPE ApiType) @@ -394,7 +438,7 @@ void WriteIA4Encoder(char* p,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGB565Encoder(char* p,API_TYPE ApiType) @@ -419,7 +463,7 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.ga = ocol0.ga + gLower * 32.0f;\n"); WRITE(p, " ocol0 = ocol0 / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) @@ -486,7 +530,7 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) WRITE(p, "}\n"); WRITE(p, " ocol0 = ocol0 / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) @@ -512,7 +556,7 @@ void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) WriteToBitDepth(p, 4, "texSample.b", "color1.a"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteRGBA8Encoder(char* p,API_TYPE ApiType) @@ -542,7 +586,7 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0 = (cl0 * color0) + (cl1 * color1);\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -578,7 +622,7 @@ void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -596,7 +640,7 @@ void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) WriteSampleColor(p, comp, "ocol0.a",ApiType); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) @@ -629,7 +673,7 @@ void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) WriteToBitDepth(p, 4, "color1", "color1"); WRITE(p, " ocol0 = (color0 * 16.0f + color1) / 255.0f;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) @@ -641,7 +685,7 @@ void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) WriteSampleColor(p, comp, "ocol0.ra",ApiType); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) @@ -665,7 +709,7 @@ void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) WriteSampleColor(p, "b", "depth",ApiType); WRITE(p, "ocol0.a = frac(depth * %s);\n", multiplier); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ16Encoder(char* p,API_TYPE ApiType) @@ -699,7 +743,7 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.r = expanded.g / 255;\n"); WRITE(p, " ocol0.a = expanded.r / 255;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ16LEncoder(char* p,API_TYPE ApiType) @@ -737,7 +781,7 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.r = expanded.b;\n"); WRITE(p, " ocol0.a = expanded.g;\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } void WriteZ24Encoder(char* p, API_TYPE ApiType) @@ -780,7 +824,7 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) WRITE(p, " ocol0.a = expanded1.r / 255;\n"); WRITE(p, " }\n"); - WriteEncoderEnd(p); + WriteEncoderEnd(p, ApiType); } const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) @@ -790,6 +834,24 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) char *p = text; + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + + // We require this here + WRITE(p, "#ifdef GL_ARB_texture_rectangle\n #extension GL_ARB_texture_rectangle : require\n#endif\n"); + } + switch(format) { case GX_TF_I4: From 0fc755c4dfd8b55b12461011550994ed6974e043 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 20:17:26 -0600 Subject: [PATCH 101/625] More stuff --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 20 +-- Source/Core/VideoCommon/Src/VideoConfig.cpp | 4 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 132 ++++++++++++------ .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 10 +- 6 files changed, 126 insertions(+), 52 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index bc7b8cc375..1a5908c068 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -1198,7 +1198,7 @@ void SampleTexture(char *&p, const char *destination, const char *texcoords, con if (ApiType == API_D3D11) WRITE(p, "%s=Tex%d.Sample(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", destination, texmap,texmap, texcoords, texmap, texswap); else - WRITE(p, "%s=tex2D(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", destination, texmap, texcoords, texmap, texswap); + WRITE(p, "%s=%s(samp%d,%s.xy * "I_TEXDIMS"[%d].xy).%s;\n", destination, ApiType == API_GLSL ? "texture2D" : "tex2D", texmap, texcoords, texmap, texswap); } static const char *tevAlphaFuncsTable[] = diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 7ebd6fd3b9..f22926462d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -132,30 +132,32 @@ static char text[16384]; char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) { + // This turned a bit ugly with GLSL + // Will be less ugly with GLSL 1.3...hopefully WRITE(p, "struct VS_OUTPUT {\n"); - WRITE(p, " float4 pos : POSITION;\n"); - WRITE(p, " float4 colors_0 : COLOR0;\n"); - WRITE(p, " float4 colors_1 : COLOR1;\n"); + WRITE(p, " float4 pos %s POSITION;\n", ApiType == API_GLSL ? ";//" : ":"); + WRITE(p, " float4 colors_0 %s COLOR0;\n", ApiType == API_GLSL ? ";//" : ":"); + WRITE(p, " float4 colors_1 %s COLOR1;\n", ApiType == API_GLSL ? ";//" : ":"); if (xfregs.numTexGen.numTexGens < 7) { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float3 tex%d : TEXCOORD%d;\n", i, i); - WRITE(p, " float4 clipPos : TEXCOORD%d;\n", xfregs.numTexGen.numTexGens); + WRITE(p, " float3 tex%d %s TEXCOORD%d;\n", i, ApiType == API_GLSL ? ";//" : ":", i); + WRITE(p, " float4 clipPos %s TEXCOORD%d;\n", ApiType == API_GLSL ? ";//" : ":", xfregs.numTexGen.numTexGens); if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " float4 Normal : TEXCOORD%d;\n", xfregs.numTexGen.numTexGens + 1); + WRITE(p, " float4 Normal %s TEXCOORD%d;\n", ApiType == API_GLSL ? ";//" : ":", xfregs.numTexGen.numTexGens + 1); } else { // clip position is in w of first 4 texcoords if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, " float4 tex%d : TEXCOORD%d;\n", i, i); + WRITE(p, " float4 tex%d %s TEXCOORD%d;\n", i, ApiType == API_GLSL ? ";//" : ":", i); } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d tex%d : TEXCOORD%d;\n", i < 4 ? 4 : 3 , i, i); + WRITE(p, " float%d tex%d %s TEXCOORD%d;\n", i < 4 ? 4 : 3 , i, ApiType == API_GLSL ? ";//" : ":", i); } - } + } WRITE(p, "};\n"); return p; diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index c972d46716..85b51c3f74 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -43,6 +43,7 @@ VideoConfig::VideoConfig() backend_info.APIType = API_NONE; backend_info.bUseRGBATextures = false; backend_info.bSupports3DVision = false; + backend_info.bSupportsGLSL = false; } void VideoConfig::Load(const char *ini_file) @@ -86,6 +87,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Settings", "TexFmtOverlayCenter", &bTexFmtOverlayCenter, 0); iniFile.Get("Settings", "WireFrame", &bWireFrame, 0); iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); + iniFile.Get("Settings", "UseGLSL", &bUseGLSL, 0); iniFile.Get("Settings", "EnableOpenCL", &bEnableOpenCL, false); iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); @@ -216,7 +218,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Settings", "Wireframe", bWireFrame); iniFile.Set("Settings", "DstAlphaPass", bDstAlphaPass); iniFile.Set("Settings", "DisableFog", bDisableFog); - iniFile.Set("Settings", "bUseGLSL", bUseGLSL); + iniFile.Set("Settings", "UseGLSL", bUseGLSL); iniFile.Set("Settings", "EnableOpenCL", bEnableOpenCL); iniFile.Set("Settings", "OMPDecoder", bOMPDecoder); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6d56df3216..2b9deb03aa 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -314,7 +314,15 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "ps_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) + exit(0); delete[] infoLog; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index c73d3abdbf..069991daf1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -60,51 +60,105 @@ static FRAGMENTSHADER s_encodingPrograms[NUM_ENCODING_PROGRAMS]; void CreateRgbToYuyvProgram() { // Output is BGRA because that is slightly faster than RGBA. - const char *FProgram = - "uniform samplerRECT samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float2 uv1 = float2(uv0.x + 1.0f, uv0.y);\n" - " float3 c0 = texRECT(samp0, uv0).rgb;\n" - " float3 c1 = texRECT(samp0, uv1).rgb;\n" - " float3 y_const = float3(0.257f,0.504f,0.098f);\n" - " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" - " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" - " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" - " float3 c01 = (c0 + c1) * 0.5f;\n" - " ocol0 = float4(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.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."); + } + else + { + const char *FProgram = + "uniform samplerRECT samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float2 uv1 = float2(uv0.x + 1.0f, uv0.y);\n" + " float3 c0 = texRECT(samp0, uv0).rgb;\n" + " float3 c1 = texRECT(samp0, uv1).rgb;\n" + " float3 y_const = float3(0.257f,0.504f,0.098f);\n" + " float3 u_const = float3(-0.148f,-0.291f,0.439f);\n" + " float3 v_const = float3(0.439f,-0.368f,-0.071f);\n" + " float4 const3 = float4(0.0625f,0.5f,0.0625f,0.5f);\n" + " float3 c01 = (c0 + c1) * 0.5f;\n" + " ocol0 = float4(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."); + } } void CreateYuyvToRgbProgram() { - const char *FProgram = - "uniform samplerRECT samp0 : register(s0);\n" - "void main(\n" - " out float4 ocol0 : COLOR0,\n" - " in float2 uv0 : TEXCOORD0)\n" - "{\n" - " float4 c0 = texRECT(samp0, uv0).rgba;\n" + 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" - " float f = step(0.5, frac(uv0.x));\n" - " float y = lerp(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" - " ocol0 = float4(yComp + (1.596f * vComp),\n" - " yComp - (0.813f * vComp) - (0.391f * uComp),\n" - " yComp + (2.018f * uComp),\n" - " 1.0f);\n" - "}\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 + { + const char *FProgram = + "uniform samplerRECT samp0 : register(s0);\n" + "void main(\n" + " out float4 ocol0 : COLOR0,\n" + " in float2 uv0 : TEXCOORD0)\n" + "{\n" + " float4 c0 = texRECT(samp0, uv0).rgba;\n" - if (!PixelShaderCache::CompilePixelShader(s_yuyvToRgbProgram, FProgram)) - ERROR_LOG(VIDEO, "Failed to create YUYV to RGB fragment program."); + " float f = step(0.5, frac(uv0.x));\n" + " float y = lerp(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" + + " ocol0 = float4(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."); + } } FRAGMENTSHADER &GetOrCreateEncodingShader(u32 format) @@ -117,7 +171,7 @@ FRAGMENTSHADER &GetOrCreateEncodingShader(u32 format) if (s_encodingPrograms[format].glprogid == 0) { - const char* shader = TextureConversionShader::GenerateEncodingShader(format,API_OPENGL); + const char* shader = TextureConversionShader::GenerateEncodingShader(format, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && shader) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index ea7a97196b..c543dfb86e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -198,7 +198,15 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) + exit(0); delete[] infoLog; } From 8123b137aae111a4e47e32569011d005e5a1d69d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 2 Dec 2011 20:20:53 -0600 Subject: [PATCH 102/625] This is the terrible bit that can't be removed until we use UBOs in the GLSL shaders. --- .../VideoCommon/Src/PixelShaderManager.cpp | 36 +++++++++---------- .../VideoCommon/Src/VertexShaderManager.cpp | 22 ++++++------ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 1533f9348e..8b5627c5fa 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -87,35 +87,35 @@ void PixelShaderManager::SetConstants() { for (int i = 0; i < 2; ++i) { - if (s_nColorsChanged[i]) + if (s_nColorsChanged[i] || g_ActiveConfig.bUseGLSL) { int baseind = i ? C_KCOLORS : C_COLORS; for (int j = 0; j < 4; ++j) { - if (s_nColorsChanged[i] & (1 << j)) + if (s_nColorsChanged[i] & (1 << j) || g_ActiveConfig.bUseGLSL) SetPSConstant4fv(baseind+j, &lastRGBAfull[i][j][0]); } s_nColorsChanged[i] = 0; } } - if (s_nTexDimsChanged) + if (s_nTexDimsChanged || g_ActiveConfig.bUseGLSL) { for (int i = 0; i < 8; ++i) { - if (s_nTexDimsChanged & (1<>8)&0xff)/255.0f, 0, ((lastAlpha>>16)&0xff)/255.0f); s_bAlphaChanged = false; } - if (s_bZTextureTypeChanged) + if (s_bZTextureTypeChanged || g_ActiveConfig.bUseGLSL) { float ftemp[4]; switch (bpmem.ztex2.type) @@ -137,7 +137,7 @@ void PixelShaderManager::SetConstants() s_bZTextureTypeChanged = false; } - if (s_bZBiasChanged || s_bDepthRangeChanged) + if (s_bZBiasChanged || s_bDepthRangeChanged || g_ActiveConfig.bUseGLSL) { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -153,12 +153,12 @@ void PixelShaderManager::SetConstants() } // indirect incoming texture scales - if (s_nIndTexScaleChanged) + if (s_nIndTexScaleChanged || g_ActiveConfig.bUseGLSL) { // set as two sets of vec4s, each containing S and T of two ind stages. float f[8]; - if (s_nIndTexScaleChanged & 0x03) + if (s_nIndTexScaleChanged & 0x03 || g_ActiveConfig.bUseGLSL) { for (u32 i = 0; i < 2; ++i) { @@ -169,7 +169,7 @@ void PixelShaderManager::SetConstants() SetPSConstant4fv(C_INDTEXSCALE, f); } - if (s_nIndTexScaleChanged & 0x0c) { + if (s_nIndTexScaleChanged & 0x0c || g_ActiveConfig.bUseGLSL) { for (u32 i = 2; i < 4; ++i) { f[2 * i] = bpmem.texscale[1].getScaleS(i & 1); f[2 * i + 1] = bpmem.texscale[1].getScaleT(i & 1); @@ -181,11 +181,11 @@ void PixelShaderManager::SetConstants() s_nIndTexScaleChanged = 0; } - if (s_nIndTexMtxChanged) + if (s_nIndTexMtxChanged || g_ActiveConfig.bUseGLSL) { for (int i = 0; i < 3; ++i) { - if (s_nIndTexMtxChanged & (1 << i)) + if (s_nIndTexMtxChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { int scale = ((u32)bpmem.indmtx[i].col0.s0 << 0) | ((u32)bpmem.indmtx[i].col1.s1 << 2) | @@ -215,13 +215,13 @@ void PixelShaderManager::SetConstants() s_nIndTexMtxChanged = 0; } - if (s_bFogColorChanged) + if (s_bFogColorChanged || g_ActiveConfig.bUseGLSL) { SetPSConstant4f(C_FOG, bpmem.fog.color.r / 255.0f, bpmem.fog.color.g / 255.0f, bpmem.fog.color.b / 255.0f, 0); s_bFogColorChanged = false; } - if (s_bFogParamChanged) + if (s_bFogParamChanged || g_ActiveConfig.bUseGLSL) { if(!g_ActiveConfig.bDisableFog) { @@ -237,7 +237,7 @@ void PixelShaderManager::SetConstants() s_bFogParamChanged = false; } - if (s_bFogRangeAdjustChanged) + if (s_bFogRangeAdjustChanged || g_ActiveConfig.bUseGLSL) { if(!g_ActiveConfig.bDisableFog && bpmem.fogRange.Base.Enabled == 1) { @@ -261,7 +261,7 @@ void PixelShaderManager::SetConstants() if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) // config check added because the code in here was crashing for me inside SetPSConstant4f { - if (nLightsChanged[0] >= 0) + if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -297,14 +297,14 @@ void PixelShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged) + if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i)) + if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { u32 data = *(xfregs.ambColor + i); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 6ad877318f..c251ddc732 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -184,7 +184,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (nTransformMatricesChanged[0] >= 0) + if (nTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nTransformMatricesChanged[0] / 4; int endn = (nTransformMatricesChanged[1] + 3) / 4; @@ -192,7 +192,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_TRANSFORMMATRICES + startn, endn - startn, pstart); nTransformMatricesChanged[0] = nTransformMatricesChanged[1] = -1; } - if (nNormalMatricesChanged[0] >= 0) + if (nNormalMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nNormalMatricesChanged[0] / 3; int endn = (nNormalMatricesChanged[1] + 2) / 3; @@ -201,7 +201,7 @@ void VertexShaderManager::SetConstants() nNormalMatricesChanged[0] = nNormalMatricesChanged[1] = -1; } - if (nPostTransformMatricesChanged[0] >= 0) + if (nPostTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { int startn = nPostTransformMatricesChanged[0] / 4; int endn = (nPostTransformMatricesChanged[1] + 3 ) / 4; @@ -209,7 +209,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_POSTTRANSFORMMATRICES + startn, endn - startn, pstart); } - if (nLightsChanged[0] >= 0) + if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -245,14 +245,14 @@ void VertexShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged) + if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i)) + if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) { u32 data = *(xfregs.ambColor + i); @@ -268,7 +268,7 @@ void VertexShaderManager::SetConstants() nMaterialsChanged = 0; } - if (bPosNormalMatrixChanged) + if (bPosNormalMatrixChanged || g_ActiveConfig.bUseGLSL) { bPosNormalMatrixChanged = false; @@ -279,7 +279,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant3fv(C_POSNORMALMATRIX + 3, 3, norm); } - if (bTexMatricesChanged[0]) + if (bTexMatricesChanged[0] || g_ActiveConfig.bUseGLSL) { bTexMatricesChanged[0] = false; const float *fptrs[] = @@ -294,7 +294,7 @@ void VertexShaderManager::SetConstants() } } - if (bTexMatricesChanged[1]) + if (bTexMatricesChanged[1] || g_ActiveConfig.bUseGLSL) { bTexMatricesChanged[1] = false; const float *fptrs[] = { @@ -308,7 +308,7 @@ void VertexShaderManager::SetConstants() } } - if (bViewportChanged) + if (bViewportChanged || g_ActiveConfig.bUseGLSL) { bViewportChanged = false; SetVSConstant4f(C_DEPTHPARAMS, @@ -321,7 +321,7 @@ void VertexShaderManager::SetConstants() bProjectionChanged = true; } - if (bProjectionChanged) + if (bProjectionChanged || g_ActiveConfig.bUseGLSL) { bProjectionChanged = false; From 7cec31dbf3afc0fddc0e3c99486158ff47ae1e96 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:04:34 -0600 Subject: [PATCH 103/625] Almost there. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 218 +++++++++++------- .../Plugin_VideoOGL/Src/TextureCache.cpp | 9 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 29 ++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 3 +- 6 files changed, 175 insertions(+), 88 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 1a5908c068..602e375377 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -1274,7 +1274,7 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table WRITE(p, ")) {\n"); - WRITE(p, "ocol0 = 0;\n"); + WRITE(p, "ocol0 = float4(0);\n"); if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "ocol1 = 0;\n"); if (DepthTextureEnable) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index f22926462d..99e510dd2e 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -291,7 +291,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "int posmtx = fposmtx;\n"); + WRITE(p, "int posmtx = int(fposmtx);\n"); } WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES"[posmtx], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 2b9deb03aa..75cc43797d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -38,8 +38,8 @@ namespace OGL { static int s_nMaxPixelInstructions; -static GLuint s_ColorMatrixProgram = 0; -static GLuint s_DepthMatrixProgram = 0; +static FRAGMENTSHADER s_ColorMatrixProgram; +static FRAGMENTSHADER s_DepthMatrixProgram; PixelShaderCache::PSCache PixelShaderCache::PixelShaders; PIXELSHADERUID PixelShaderCache::s_curuid; bool PixelShaderCache::s_displayCompileAlert; @@ -56,12 +56,12 @@ bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram; + return s_DepthMatrixProgram.glprogid; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram; + return s_ColorMatrixProgram.glprogid; } void PixelShaderCache::Init() @@ -105,98 +105,154 @@ void PixelShaderCache::Init() glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); + if(g_ActiveConfig.bUseGLSL) + { + char pmatrixprog[2048]; + sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if(!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + s_ColorMatrixProgram.Destroy(); + } + sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if(!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + s_DepthMatrixProgram.Destroy(); + } + } + else + { + char pmatrixprog[2048]; + sprintf(pmatrixprog, "!!ARBfp1.0" + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + glGenProgramsARB(1, &s_ColorMatrixProgram.glprogid); + SetCurrentShader(s_ColorMatrixProgram.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - char pmatrixprog[2048]; - sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORMATRIX+5,C_COLORMATRIX+6, C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_ColorMatrixProgram); - SetCurrentShader(s_ColorMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); + s_ColorMatrixProgram.Destroy(); + } - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - } + sprintf(pmatrixprog, "!!ARBfp1.0\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + "FLR R0.x,R0;\n" //bits 31..24 - "FLR R0.x,R0;\n" //bits 31..24 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 + "MUL R0,R0,K0.y;\n" // /255 - "MUL R0,R0,K0.y;\n" // /255 + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + glGenProgramsARB(1, &s_DepthMatrixProgram.glprogid); + SetCurrentShader(s_DepthMatrixProgram.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORMATRIX, C_COLORMATRIX+1, C_COLORMATRIX+2, C_COLORMATRIX+3, C_COLORMATRIX+4); - glGenProgramsARB(1, &s_DepthMatrixProgram); - SetCurrentShader(s_DepthMatrixProgram); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; - } + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); + s_DepthMatrixProgram.Destroy(); + } + } } void PixelShaderCache::Shutdown() { - glDeleteProgramsARB(1, &s_ColorMatrixProgram); - s_ColorMatrixProgram = 0; - glDeleteProgramsARB(1, &s_DepthMatrixProgram); - s_DepthMatrixProgram = 0; + s_ColorMatrixProgram.Destroy(); + s_DepthMatrixProgram.Destroy(); PSCache::iterator iter = PixelShaders.begin(); for (; iter != PixelShaders.end(); iter++) iter->second.Destroy(); @@ -235,7 +291,6 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Make an entry in the table PSCacheEntry& newentry = PixelShaders[uid]; last_entry = &newentry; - newentry.shader.bGLSL = g_ActiveConfig.bUseGLSL; const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); if (g_ActiveConfig.bEnableShaderDebugging && code) @@ -320,7 +375,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) exit(0); delete[] infoLog; @@ -339,6 +393,7 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) (void)GL_REPORT_ERROR(); ps.glprogid = result; + ps.bGLSL = true; return true; } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) @@ -462,6 +517,7 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } glGenProgramsARB(1, &ps.glprogid); + ps.bGLSL = false; PixelShaderCache::SetCurrentShader(ps.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 7a62131f90..e3605dba12 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -43,6 +43,7 @@ #include "ImageWrite.h" #include "MemoryUtil.h" #include "PixelShaderCache.h" +#include "ProgramShaderCache.h" #include "PixelShaderManager.h" #include "Render.h" #include "Statistics.h" @@ -299,7 +300,13 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtual_width, virtual_height); - PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); + if(g_ActiveConfig.bUseGLSL) + { + ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); + PixelShaderCache::SetPSSampler("samp0", 0); + } + else + PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); PixelShaderManager::SetColorMatrix(colmat); // set transformation GL_REPORT_ERRORD(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 597bfbba49..9b0c755f5b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -129,9 +129,6 @@ void VertexManager::vFlush() //glBufferData(GL_ARRAY_BUFFER, s_pCurBufferPointer - LocalVBuffer, LocalVBuffer, GL_STREAM_DRAW); GL_REPORT_ERRORD(); - // setup the pointers - if (g_nativeVertexFmt) - g_nativeVertexFmt->SetupVertexPointers(); GL_REPORT_ERRORD(); u32 usedtextures = 0; @@ -213,6 +210,21 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); + + // setup the pointers + if (g_nativeVertexFmt) + g_nativeVertexFmt->SetupVertexPointers(); + GL_REPORT_ERRORD(); + if(g_ActiveConfig.bUseGLSL) + for (int i = 0; i < 8; i++) + { + if (usedtextures & (1 << i)) + { + char tmp[16]; + sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? + PixelShaderCache::SetPSSampler(tmp, i); + } + } Draw(); @@ -224,6 +236,17 @@ void VertexManager::vFlush() { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); PixelShaderManager::SetConstants(); // Need to set these again + if (g_nativeVertexFmt) + g_nativeVertexFmt->SetupVertexPointers(); + for (int i = 0; i < 8; i++) + { + if (usedtextures & (1 << i)) + { + char tmp[16]; + sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? + PixelShaderCache::SetPSSampler(tmp, i); + } + } } else if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index c543dfb86e..34c8020a00 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -125,7 +125,6 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) // Make an entry in the table VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - entry.shader.bGLSL = g_ActiveConfig.bUseGLSL; const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); GetSafeVertexShaderId(&entry.safe_uid, components); @@ -223,6 +222,7 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) (void)GL_REPORT_ERROR(); vs.glprogid = result; + vs.bGLSL = true; return true; } void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) @@ -352,6 +352,7 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) plocal = strstr(plocal + 13, "program.local"); } glGenProgramsARB(1, &vs.glprogid); + vs.bGLSL = false; VertexShaderCache::SetCurrentShader(vs.glprogid); glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); From 3160da1289794862fd363e1e2fb89cf1e5858c2c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:11:41 -0600 Subject: [PATCH 104/625] This lets us see stuff with GLSL shaders. Just need to take care of some compile errors now. --- Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 75cc43797d..d04fdc2de8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -66,7 +66,6 @@ GLuint PixelShaderCache::GetColorMatrixProgram() void PixelShaderCache::Init() { - glEnable(GL_FRAGMENT_PROGRAM_ARB); ShaderEnabled = true; CurrentShader = 0; last_entry = NULL; @@ -87,6 +86,7 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 34c8020a00..e51e70d9eb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -55,7 +55,6 @@ bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { - glEnable(GL_VERTEX_PROGRAM_ARB); ShaderEnabled = true; CurrentShader = 0; last_entry = NULL; @@ -75,6 +74,7 @@ void VertexShaderCache::Init() pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); From 9064b76deb5e30a56044bddf080584f194879dc9 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 22:47:13 -0600 Subject: [PATCH 105/625] Shader Compile fixes. Played SMS for two shines. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/TextureConversionShader.cpp | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 602e375377..19424230c7 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -697,7 +697,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // optional perspective divides if (xfregs.texMtxInfo[i].projection == XF_TEXPROJ_STQ) { - WRITE(p, "if (uv%d.z)", i); + WRITE(p, "if (uv%d.z != 0.0f)", i); WRITE(p, " uv%d.xy = uv%d.xy / uv%d.z;\n", i, i, i); } diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index b7a9df7e04..abf2b934f9 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -125,8 +125,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p," in float2 uv0 : TEXCOORD0)\n"); } - WRITE(p," in float2 uv0 : TEXCOORD0)\n" - "{\n" + WRITE(p, "{\n" " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); @@ -448,10 +447,9 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) WriteSampleColor(p, "rgb", "float3 texSample0",ApiType); WriteIncrementSampleX(p,ApiType); WriteSampleColor(p, "rgb", "float3 texSample1",ApiType); - - WRITE(p, " float2 texRs = {texSample0.r, texSample1.r};\n"); - WRITE(p, " float2 texGs = {texSample0.g, texSample1.g};\n"); - WRITE(p, " float2 texBs = {texSample0.b, texSample1.b};\n"); + WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n"); + WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n"); + WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n"); WriteToBitDepth(p, 6, "texGs", "float2 gInt"); WRITE(p, " float2 gUpper = floor(gInt / 8.0f);\n"); From 8058f2f32f80789eefc6d917b94ab90f3bdc5d00 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:01:14 -0600 Subject: [PATCH 106/625] Missed one --- Source/Core/VideoCommon/Src/TextureConversionShader.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index abf2b934f9..a6dfdd38af 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -210,8 +210,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) } - WRITE(p," in float2 uv0 : TEXCOORD0)\n" - "{\n" + WRITE(p, "{\n" " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); From 3c9c5de722ffba12a6cd5c5ec88d19bafa1d4ee8 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:20:55 -0600 Subject: [PATCH 107/625] Missed a spot. Most games work now, Still have a problem with viewtiful joe. Destination Alpha pass doesn't work yet, going to use Dual source blending on that. --- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 069991daf1..47eb828dd9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -24,6 +24,7 @@ #include "TextureConversionShader.h" #include "TextureCache.h" #include "PixelShaderCache.h" +#include "ProgramShaderCache.h" #include "VertexShaderManager.h" #include "FramebufferManager.h" #include "Globals.h" @@ -228,7 +229,7 @@ void Shutdown() s_texConvFrameBuffer = 0; } -void EncodeToRamUsingShader(FRAGMENTSHADER& shader, GLuint srcTexture, const TargetRectangle& sourceRc, +void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) { @@ -265,8 +266,6 @@ void EncodeToRamUsingShader(FRAGMENTSHADER& shader, GLuint srcTexture, const Tar glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); - PixelShaderCache::SetCurrentShader(shader.glprogid); - // Draw... glBegin(GL_QUADS); glTexCoord2f((float)sourceRc.left, (float)sourceRc.top); glVertex2f(-1,-1); @@ -340,6 +339,11 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, s32 expandedWidth = (width + blkW) & (~blkW); s32 expandedHeight = (height + blkH) & (~blkH); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); + float sampleStride = bScaleByHalf ? 2.f : 1.f; TextureConversionShader::SetShaderParameters((float)expandedWidth, (float)Renderer::EFBToScaledY(expandedHeight), // TODO: Why do we scale this? @@ -359,7 +363,7 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, int readStride = (expandedWidth * cacheBytes) / TexDecoder_GetBlockWidthInTexels(format); - EncodeToRamUsingShader(texconv_shader, source_texture, scaledSource, + EncodeToRamUsingShader(source_texture, scaledSource, dest_ptr, expandedWidth / samples, expandedHeight, readStride, true, bScaleByHalf > 0 && !bFromZBuffer); return size_in_bytes; // TODO: D3D11 is calculating this value differently! @@ -369,7 +373,13 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, int dstWidth, int dstHeight) { g_renderer->ResetAPIState(); - EncodeToRamUsingShader(s_rgbToYuyvProgram, srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); + + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(s_rgbToYuyvProgram.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(s_rgbToYuyvProgram.glprogid); + + EncodeToRamUsingShader(srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); FramebufferManager::SetFramebuffer(0); VertexShaderManager::SetViewportChanged(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); From 081ad949ce46b54288d1dc823048bb6ab202f254 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 7 Dec 2011 23:23:00 -0600 Subject: [PATCH 108/625] Welp, just fixed that problem. --- Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 47eb828dd9..c542a64cb9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -263,6 +263,8 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, } GL_REPORT_ERRORD(); + if(g_ActiveConfig.bUseGLSL) + PixelShaderCache::SetPSSampler("samp0", 0); glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); From cf68cc0c611f261ad0168bda8b354331f07a77ff Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 01:51:08 -0600 Subject: [PATCH 109/625] Add support for GL_ARB_shading_language_420pack so we don't have to binding sampler locations. Also add support for GL_ARB_separate_shader_objects which doesn't currently work for some reason....investigating. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 121 +++++++++++- .../Src/TextureConversionShader.cpp | 13 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 34 ++-- Source/Core/VideoCommon/Src/VideoConfig.h | 2 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 179 +++++++++++++----- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 + .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ++ 7 files changed, 301 insertions(+), 70 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 19424230c7..ca654a9aef 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -517,22 +517,123 @@ const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) sprintf(result, " : register(%s%d)", prefix, num); return result; } +const char* WriteBinding(API_TYPE ApiType, const u32 num) +{ + if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) + return ""; + static char result[64]; + sprintf(result, "layout(binding = %d) ", num); + return result; +} +const char* WriteLocation(API_TYPE ApiType, const u32 num) +{ + if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLLocation) + return ""; + static char result[64]; + sprintf(result, "layout(location = %d) ", num); + return result; +} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { - WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); + setlocale(LC_NUMERIC, "C"); // Reset locale for compilation + text[sizeof(text) - 1] = 0x7C; // canary + + BuildSwapModeTable(); // Needed for WriteStage + int numStages = bpmem.genMode.numtevstages + 1; + int numTexgen = bpmem.genMode.numtexgens; + + char *p = text; + WRITE(p, "//Pixel Shader for TEV stages\n"); + WRITE(p, "//%i TEV stages, %i texgens, XXX IND stages\n", + numStages, numTexgen/*, bpmem.genMode.numindstages*/); + + int nIndirectStagesUsed = 0; + if (bpmem.genMode.numindstages > 0) + { + for (int i = 0; i < numStages; ++i) + { + if (bpmem.tevind[i].IsActive() && bpmem.tevind[i].bt < bpmem.genMode.numindstages) + nIndirectStagesUsed |= 1 << bpmem.tevind[i].bt; + } + } + DepthTextureEnable = (bpmem.ztex2.op != ZTEXTURE_DISABLE && !bpmem.zcontrol.zcomploc && bpmem.zmode.testenable && bpmem.zmode.updateenable) || g_ActiveConfig.bEnablePerPixelDepth ; + + if(ApiType == API_GLSL) + { + // A few required defines and ones that will make our lives a lot easier + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) + WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + } + else + WRITE(p, "#version 120\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); + + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + + for (int i = 0; i < 8; ++i) + WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); + } + else + { + // Declare samplers + + if(ApiType != API_D3D11) + { + WRITE(p, "uniform sampler2D "); + } + else + { + WRITE(p, "sampler "); + } + + bool bfirst = true; + for (int i = 0; i < 8; ++i) + { + WRITE(p, "%s samp%d %s", bfirst?"":",", i, WriteRegister(ApiType, "s", i)); + bfirst = false; + } + WRITE(p, ";\n"); + if(ApiType == API_D3D11) + { + WRITE(p, "Texture2D "); + bfirst = true; + for (int i = 0; i < 8; ++i) + { + WRITE(p, "%s Tex%d : register(t%d)", bfirst?"":",", i, i); + bfirst = false; + } + WRITE(p, ";\n"); + } + } + + WRITE(p, "\n"); + + WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); +>>>>>>> Add support for GL_ARB_shading_language_420pack so we don't have to binding sampler locations. Also add support for GL_ARB_separate_shader_objects which doesn't currently work for some reason....investigating. if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); } if(ApiType != API_GLSL) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index a6dfdd38af..8e45955d4a 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -26,6 +26,7 @@ #include "PixelShaderGen.h" #include "BPMemory.h" #include "RenderBase.h" +#include "VideoConfig.h" #define WRITE p+=sprintf @@ -92,6 +93,8 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } else if (ApiType == API_GLSL) { + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "layout(binding = 0) "); WRITE(p, "uniform sampler2DRect samp0;\n"); } else if (ApiType & API_D3D9) @@ -177,6 +180,8 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) } else if (ApiType == API_GLSL) { + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "layout(binding = 0) "); WRITE(p, "uniform sampler2DRect samp0;\n"); } else if (ApiType & API_D3D9) @@ -834,7 +839,13 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - WRITE(p, "#version 120\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + WRITE(p, "#version 330 compatibility\n"); + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + } + else + WRITE(p, "#version 120\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 99e510dd2e..8093a865a4 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -164,7 +164,8 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) } extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); - +extern const char* WriteBinding(API_TYPE ApiType, const u32 num); +extern const char* WriteLocation(API_TYPE ApiType, const u32 num); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -187,7 +188,16 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - WRITE(p, "#version 120\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) + WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + } + else + WRITE(p, "#version 120\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -199,15 +209,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); p = GenerateVSOutputStruct(p, components, ApiType); @@ -403,7 +413,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & (VB_HAS_NRM1|VB_HAS_NRM2)) { // transform the light dir into tangent space - WRITE(p, "ldir = normalize(" I_LIGHTS".lights[%d].pos.xyz - pos.xyz);\n", texinfo.embosslightshift); + WRITE(p, "ldir = normalize("I_LIGHTS"[%d + 3].xyz - pos.xyz);\n", texinfo.embosslightshift); WRITE(p, "o.tex%d.xyz = o.tex%d.xyz + float3(dot(ldir, _norm1), dot(ldir, _norm2), 0.0f);\n", i, texinfo.embosssourceshift); } else diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 1130df7b8e..8c2c796b6f 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -164,6 +164,8 @@ struct VideoConfig bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; bool bSupportsGLSL; + bool bSupportsGLSLBinding; + bool bSupportsGLSLLocation; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index d04fdc2de8..1434853dd2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -63,7 +63,6 @@ GLuint PixelShaderCache::GetColorMatrixProgram() { return s_ColorMatrixProgram.glprogid; } - void PixelShaderCache::Init() { ShaderEnabled = true; @@ -79,6 +78,12 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + g_ActiveConfig.backend_info.bSupportsGLSLBinding = true; + // This bit doesn't quite work yet, always set to false + //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) + g_ActiveConfig.backend_info.bSupportsGLSLLocation = false; } else { @@ -108,56 +113,118 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; - sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - if(!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + sprintf(pmatrixprog, "#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" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + else + { + sprintf(pmatrixprog, "#version 120\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[7];\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + if (!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - sprintf(pmatrixprog, "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - if(!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + sprintf(pmatrixprog, "#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" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + else + { + sprintf(pmatrixprog, "#version 120\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "uniform sampler2DRect samp0;\n" + "uniform vec4 "I_COLORS"[5];\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + } + if (!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); s_DepthMatrixProgram.Destroy(); @@ -398,6 +465,8 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { + if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for(int a = 0; a < NUM_UNIFORMS; ++a) if(!strcmp(name, UniformNames[a])) @@ -429,6 +498,12 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; + + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) @@ -442,6 +517,11 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) @@ -455,6 +535,11 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, f); + return; + } for( unsigned int a = 0; a < 10; ++a) { if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index d5e2cae6bc..6547b95234 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -88,6 +88,8 @@ public: static GLuint GetDepthMatrixProgram(); + static bool SupportsBinding(); + static void SetCurrentShader(GLuint Shader); static void DisableShader(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index e51e70d9eb..143340277e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -247,6 +247,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[1] = f2; buf[2] = f3; buf[3] = f4; + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -260,6 +265,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, 1, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -273,6 +283,11 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -294,6 +309,11 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co buf[4*i+2] = *f++; buf[4*i+3] = 0.f; } + if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + { + glUniform4fv(const_number, count, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) From b24990ca2873aa0666e0252f940f6dd80ac84ef7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 03:20:31 -0600 Subject: [PATCH 110/625] Bit of cleanup. Clean up my massive hack in the ShaderManagerFiles. Almost feature parity with Nvidia CG now I think. Just need to do Alpha test with Dual source blending now. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 3 +- .../VideoCommon/Src/PixelShaderManager.cpp | 38 ++++++++++--------- .../Src/TextureConversionShader.cpp | 10 ++--- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 12 ++++-- .../VideoCommon/Src/VertexShaderManager.cpp | 24 ++++++------ .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 5 ++- 6 files changed, 52 insertions(+), 40 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index ca654a9aef..3929f80183 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -926,7 +926,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { if(DepthTextureEnable) - WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragDepth = depth;\n"); + WRITE(p, "gl_FragData[0] = ocol0;\n"); } } diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 8b5627c5fa..f0ad446449 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -85,37 +85,39 @@ void PixelShaderManager::Shutdown() void PixelShaderManager::SetConstants() { + if (g_ActiveConfig.bUseGLSL) + Dirty(); for (int i = 0; i < 2; ++i) { - if (s_nColorsChanged[i] || g_ActiveConfig.bUseGLSL) + if (s_nColorsChanged[i]) { int baseind = i ? C_KCOLORS : C_COLORS; for (int j = 0; j < 4; ++j) { - if (s_nColorsChanged[i] & (1 << j) || g_ActiveConfig.bUseGLSL) + if (s_nColorsChanged[i] & (1 << j)) SetPSConstant4fv(baseind+j, &lastRGBAfull[i][j][0]); } s_nColorsChanged[i] = 0; } } - if (s_nTexDimsChanged || g_ActiveConfig.bUseGLSL) + if (s_nTexDimsChanged) { for (int i = 0; i < 8; ++i) { - if (s_nTexDimsChanged & (1<>8)&0xff)/255.0f, 0, ((lastAlpha>>16)&0xff)/255.0f); s_bAlphaChanged = false; } - if (s_bZTextureTypeChanged || g_ActiveConfig.bUseGLSL) + if (s_bZTextureTypeChanged) { float ftemp[4]; switch (bpmem.ztex2.type) @@ -137,7 +139,7 @@ void PixelShaderManager::SetConstants() s_bZTextureTypeChanged = false; } - if (s_bZBiasChanged || s_bDepthRangeChanged || g_ActiveConfig.bUseGLSL) + if (s_bZBiasChanged || s_bDepthRangeChanged) { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -153,12 +155,12 @@ void PixelShaderManager::SetConstants() } // indirect incoming texture scales - if (s_nIndTexScaleChanged || g_ActiveConfig.bUseGLSL) + if (s_nIndTexScaleChanged) { // set as two sets of vec4s, each containing S and T of two ind stages. float f[8]; - if (s_nIndTexScaleChanged & 0x03 || g_ActiveConfig.bUseGLSL) + if (s_nIndTexScaleChanged & 0x03) { for (u32 i = 0; i < 2; ++i) { @@ -169,7 +171,7 @@ void PixelShaderManager::SetConstants() SetPSConstant4fv(C_INDTEXSCALE, f); } - if (s_nIndTexScaleChanged & 0x0c || g_ActiveConfig.bUseGLSL) { + if (s_nIndTexScaleChanged & 0x0c) { for (u32 i = 2; i < 4; ++i) { f[2 * i] = bpmem.texscale[1].getScaleS(i & 1); f[2 * i + 1] = bpmem.texscale[1].getScaleT(i & 1); @@ -181,11 +183,11 @@ void PixelShaderManager::SetConstants() s_nIndTexScaleChanged = 0; } - if (s_nIndTexMtxChanged || g_ActiveConfig.bUseGLSL) + if (s_nIndTexMtxChanged) { for (int i = 0; i < 3; ++i) { - if (s_nIndTexMtxChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (s_nIndTexMtxChanged & (1 << i)) { int scale = ((u32)bpmem.indmtx[i].col0.s0 << 0) | ((u32)bpmem.indmtx[i].col1.s1 << 2) | @@ -215,13 +217,13 @@ void PixelShaderManager::SetConstants() s_nIndTexMtxChanged = 0; } - if (s_bFogColorChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogColorChanged) { SetPSConstant4f(C_FOG, bpmem.fog.color.r / 255.0f, bpmem.fog.color.g / 255.0f, bpmem.fog.color.b / 255.0f, 0); s_bFogColorChanged = false; } - if (s_bFogParamChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogParamChanged) { if(!g_ActiveConfig.bDisableFog) { @@ -237,7 +239,7 @@ void PixelShaderManager::SetConstants() s_bFogParamChanged = false; } - if (s_bFogRangeAdjustChanged || g_ActiveConfig.bUseGLSL) + if (s_bFogRangeAdjustChanged) { if(!g_ActiveConfig.bDisableFog && bpmem.fogRange.Base.Enabled == 1) { @@ -261,7 +263,7 @@ void PixelShaderManager::SetConstants() if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) // config check added because the code in here was crashing for me inside SetPSConstant4f { - if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nLightsChanged[0] >= 0) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -297,14 +299,14 @@ void PixelShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged & (1 << i)) { u32 data = *(xfregs.ambColor + i); diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 8e45955d4a..e4638f8b16 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -149,12 +149,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL) + if(ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -237,12 +237,12 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL) + if(ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -263,7 +263,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; - if(ApiType != API_OPENGL) + if(ApiType != API_OPENGL || ApiType != API_GLSL) texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 8093a865a4..8709e44e21 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -195,9 +195,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); } else + { WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -227,11 +233,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); if (components & VB_HAS_POSMTXIDX) - WRITE(p, "attribute float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); + WRITE(p, "ATTRIN float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); if (components & VB_HAS_NRM1) - WRITE(p, "attribute float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); + WRITE(p, "ATTRIN float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); if (components & VB_HAS_NRM2) - WRITE(p, "attribute float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); + WRITE(p, "ATTRIN float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); if (components & VB_HAS_COL0) WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index c251ddc732..52b267224f 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -184,7 +184,9 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (nTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) + Dirty(); + if (nTransformMatricesChanged[0] >= 0) { int startn = nTransformMatricesChanged[0] / 4; int endn = (nTransformMatricesChanged[1] + 3) / 4; @@ -192,7 +194,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_TRANSFORMMATRICES + startn, endn - startn, pstart); nTransformMatricesChanged[0] = nTransformMatricesChanged[1] = -1; } - if (nNormalMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nNormalMatricesChanged[0] >= 0) { int startn = nNormalMatricesChanged[0] / 3; int endn = (nNormalMatricesChanged[1] + 2) / 3; @@ -201,7 +203,7 @@ void VertexShaderManager::SetConstants() nNormalMatricesChanged[0] = nNormalMatricesChanged[1] = -1; } - if (nPostTransformMatricesChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nPostTransformMatricesChanged[0] >= 0) { int startn = nPostTransformMatricesChanged[0] / 4; int endn = (nPostTransformMatricesChanged[1] + 3 ) / 4; @@ -209,7 +211,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant4fv(C_POSTTRANSFORMMATRICES + startn, endn - startn, pstart); } - if (nLightsChanged[0] >= 0 || g_ActiveConfig.bUseGLSL) + if (nLightsChanged[0] >= 0) { // lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats int istart = nLightsChanged[0] / 0x10; @@ -245,14 +247,14 @@ void VertexShaderManager::SetConstants() nLightsChanged[0] = nLightsChanged[1] = -1; } - if (nMaterialsChanged || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged) { float GC_ALIGNED16(material[4]); float NormalizationCoef = 1 / 255.0f; for (int i = 0; i < 4; ++i) { - if (nMaterialsChanged & (1 << i) || g_ActiveConfig.bUseGLSL) + if (nMaterialsChanged & (1 << i)) { u32 data = *(xfregs.ambColor + i); @@ -268,7 +270,7 @@ void VertexShaderManager::SetConstants() nMaterialsChanged = 0; } - if (bPosNormalMatrixChanged || g_ActiveConfig.bUseGLSL) + if (bPosNormalMatrixChanged) { bPosNormalMatrixChanged = false; @@ -279,7 +281,7 @@ void VertexShaderManager::SetConstants() SetMultiVSConstant3fv(C_POSNORMALMATRIX + 3, 3, norm); } - if (bTexMatricesChanged[0] || g_ActiveConfig.bUseGLSL) + if (bTexMatricesChanged[0]) { bTexMatricesChanged[0] = false; const float *fptrs[] = @@ -294,7 +296,7 @@ void VertexShaderManager::SetConstants() } } - if (bTexMatricesChanged[1] || g_ActiveConfig.bUseGLSL) + if (bTexMatricesChanged[1]) { bTexMatricesChanged[1] = false; const float *fptrs[] = { @@ -308,7 +310,7 @@ void VertexShaderManager::SetConstants() } } - if (bViewportChanged || g_ActiveConfig.bUseGLSL) + if (bViewportChanged) { bViewportChanged = false; SetVSConstant4f(C_DEPTHPARAMS, @@ -321,7 +323,7 @@ void VertexShaderManager::SetConstants() bProjectionChanged = true; } - if (bProjectionChanged || g_ActiveConfig.bUseGLSL) + if (bProjectionChanged) { bProjectionChanged = false; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 1434853dd2..6b5705179a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -80,10 +80,11 @@ void PixelShaderCache::Init() pCompilePixelShader = CompileGLSLPixelShader; // Should this be set here? if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_ActiveConfig.backend_info.bSupportsGLSLBinding = true; + g_Config.backend_info.bSupportsGLSLBinding = true; // This bit doesn't quite work yet, always set to false //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) - g_ActiveConfig.backend_info.bSupportsGLSLLocation = false; + g_Config.backend_info.bSupportsGLSLLocation = false; + UpdateActiveConfig(); } else { From eff019442f00eacea793544551c102fdcd946fcb Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 04:11:30 -0600 Subject: [PATCH 111/625] Playing through SSBM story made me find this. --- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 8709e44e21..2c527a3f1d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -332,7 +332,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & VB_HAS_NRM1) WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); if (components & VB_HAS_NRM2) - WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX".[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); + WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); } if (!(components & VB_HAS_NRM0)) From d83ead59141c839449fe16915245684b8e5a1462 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 05:09:48 -0600 Subject: [PATCH 112/625] Support Dual Source Blending in OGL plugin with GLSL. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 25 +++++++++++++------ .../Plugin_VideoOGL/Src/VertexManager.cpp | 8 ++---- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 3929f80183..940156600d 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -685,10 +685,18 @@ 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. - - WRITE(p, " float4 ocol0;\n"); + + if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, " float4 ocol1;\n"); // Will be supported later + { + // 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 + } + else + { + WRITE(p, " float4 ocol0;\n"); + } if(DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? WRITE(p, " float4 rawpos = gl_FragCoord;\n"); @@ -730,12 +738,12 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { // alpha test will always fail, so restart the shader and just make it an empty function - WRITE(p, "ocol0 = 0;\n"); + WRITE(p, "ocol0 = float(0.0);\n"); if(DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "ocol1 = 0;\n"); - if(ApiType == API_GLSL) + if(ApiType == API_GLSL && dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "gl_FragData[0] = ocol0;\n"); if(ApiType != API_D3D11) WRITE(p, "return;\n"); @@ -871,7 +879,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { // Once we switch to GLSL 1.3 and bind variables, we won't need to do this - WRITE(p, "gl_FragData[0] = ocol0;\n"); + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); if(DepthTextureEnable) WRITE(p, "gl_FragDepth = depth;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) @@ -927,8 +936,8 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { if(DepthTextureEnable) WRITE(p, "gl_FragDepth = depth;\n"); - - WRITE(p, "gl_FragData[0] = ocol0;\n"); + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 9b0c755f5b..93a56d44f8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -169,8 +169,8 @@ void VertexManager::vFlush() bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; -#ifdef USE_DUAL_SOURCE_BLEND - bool dualSourcePossible = GLEW_ARB_blend_func_extended; + // Makes sure we can actually do Dual source blending + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; // finally bind FRAGMENTSHADER* ps; @@ -193,10 +193,6 @@ void VertexManager::vFlush() { ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); } -#else - bool dualSourcePossible = false; - FRAGMENTSHADER* ps = PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components); -#endif VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); if(g_ActiveConfig.bUseGLSL) From d897491f94bd6b52ac888216aaa8e266d9376ff3 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 8 Dec 2011 05:32:17 -0600 Subject: [PATCH 113/625] Few compiler errors that got exposed once I got Dual Source Blending working. Seems it isn't working quite 100% either. Good chance I missed something anyway. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 940156600d..04cd459af8 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -628,7 +628,6 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); ->>>>>>> Add support for GL_ARB_shading_language_420pack so we don't have to binding sampler locations. Also add support for GL_ARB_separate_shader_objects which doesn't currently work for some reason....investigating. if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { @@ -875,16 +874,14 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "ocol1 = 0;\n"); + WRITE(p, "ocol1 = vec4(0.0f);\n"); if(ApiType == API_GLSL) { - // Once we switch to GLSL 1.3 and bind variables, we won't need to do this - if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "gl_FragData[0] = ocol0;\n"); - if(DepthTextureEnable) - WRITE(p, "gl_FragDepth = depth;\n"); - if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - ; // TODO: Will do this later + // Once we switch to GLSL 1.3 and bind variables, we won't need to do this + if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) + WRITE(p, "gl_FragData[0] = ocol0;\n"); + if(DepthTextureEnable) + WRITE(p, "gl_FragDepth = depth;\n"); } WRITE(p, "discard;\n"); if(ApiType != API_D3D11) @@ -1047,10 +1044,10 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) WRITE(p, "float2 indtevtrans%d = " I_INDTEXMTX"[%d].ww * uv%d.xy * indtevcrd%d.yy;\n", n, mtxidx, texcoord, n); } else - WRITE(p, "float2 indtevtrans%d = 0;\n", n); + WRITE(p, "float2 indtevtrans%d = float2(0.0f);\n", n); } else - WRITE(p, "float2 indtevtrans%d = 0;\n", n); + WRITE(p, "float2 indtevtrans%d = float2(0.0f);\n", n); // --------- // Wrapping @@ -1383,6 +1380,7 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode compindex = bpmem.alphaFunc.comp1 % 8; WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table +<<<<<<< HEAD WRITE(p, ")) {\n"); WRITE(p, "ocol0 = float4(0);\n"); @@ -1412,6 +1410,13 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode WRITE(p, "}\n"); +======= + WRITE(p, ")){ocol0 = float4(0.0f);%s%s discard;%s}\n", + dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = vec4(0.0f);" : "", + DepthTextureEnable ? "depth = 1.f;" : "", + (ApiType != API_D3D11) ? "return;" : ""); + return true; +>>>>>>> Few compiler errors that got exposed once I got Dual Source Blending working. Seems it isn't working quite 100% either. Good chance I missed something anyway. } static const char *tevFogFuncsTable[] = From 76e5766a1b71da9ad3124d9fab15e69534eaa489 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 16:13:04 -0600 Subject: [PATCH 114/625] Put Vertex Uniforms in to the correct places to get ready for UBOs. --- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 2c527a3f1d..fe45ab5668 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -215,14 +215,14 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); p = GenerateVSOutputStruct(p, components, ApiType); From 5f0f26ef35f4e218e008465cd598b0692f050ac0 Mon Sep 17 00:00:00 2001 From: LPFaint99 Date: Fri, 9 Dec 2011 14:28:59 -0800 Subject: [PATCH 115/625] add ProgramShaderCache.* to visual studio project files --- Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj | 2 ++ .../Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj index 18b8ac4d84..d6554a0d06 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj @@ -202,6 +202,7 @@ + @@ -224,6 +225,7 @@ + diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters index cd170691da..5d8eda64ff 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcxproj.filters @@ -27,6 +27,9 @@ Render + + Render + Render @@ -63,6 +66,9 @@ Render + + Render + Render From 4a84c6f742efb7a450d85791cd39d31ee0968812 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 17:30:05 -0600 Subject: [PATCH 116/625] Add in UBOs, doesn't work yet. Still debugging here. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 33 +++++++------ .../VideoCommon/Src/PixelShaderManager.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 25 ++++++---- Source/Core/VideoCommon/Src/VertexShaderGen.h | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- Source/Core/VideoCommon/Src/VideoConfig.h | 2 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 48 +++++++++++++------ .../Src/ProgramShaderCache.cpp | 39 ++++++++++++--- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 8 +++- .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ++++++++ Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 3 ++ 12 files changed, 138 insertions(+), 49 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 04cd459af8..fe26df6b03 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -619,21 +619,24 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } WRITE(p, "\n"); - - WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); - - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - { - WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); - } + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + + WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); + + // Compiler will optimize these out by itself. + WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); if(ApiType != API_GLSL) { diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index f0ad446449..10399b159f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -85,7 +85,7 @@ void PixelShaderManager::Shutdown() void PixelShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); for (int i = 0; i < 2; ++i) { diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index fe45ab5668..13d526ba07 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -214,16 +214,23 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } + // uniforms - WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); + + WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); p = GenerateVSOutputStruct(p, components, ApiType); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 0b4c25602a..7e5fc365e6 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -46,7 +46,7 @@ #define C_NORMALMATRICES (C_TRANSFORMMATRICES + 64) #define C_POSTTRANSFORMMATRICES (C_NORMALMATRICES + 32) #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) -#define C_VENVCONST_END (C_DEPTHPARAMS + 4) +#define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, {I_PROJECTION , C_PROJECTION, 4 }, {I_MATERIALS, C_MATERIALS, 4 }, diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 52b267224f..5d62686ac9 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -184,7 +184,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 8c2c796b6f..2bdbfe89b2 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -163,9 +163,11 @@ struct VideoConfig bool bSupportsDualSourceBlend; // only supported by D3D11 and OpenGL bool bSupportsFormatReinterpretation; bool bSupportsPixelLighting; + bool bSupportsGLSL; bool bSupportsGLSLBinding; bool bSupportsGLSLLocation; + bool bSupportsGLSLUBO; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6b5705179a..2f6a3408a3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -82,8 +82,13 @@ void PixelShaderCache::Init() if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; // This bit doesn't quite work yet, always set to false + // TODO: Probably just drop this entirely in favour of UBOS //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) g_Config.backend_info.bSupportsGLSLLocation = false; + + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) + g_Config.backend_info.bSupportsGLSLUBO = true; + UpdateActiveConfig(); } else @@ -466,11 +471,11 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) } void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + for (int a = 0; a < NUM_UNIFORMS; ++a) + if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) return; @@ -484,8 +489,8 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + for (int a = 0; a < NUM_UNIFORMS; ++a) + if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) return; @@ -500,14 +505,19 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 { float f[4] = { f1, f2, f3, f4 }; - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, 1, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); @@ -518,14 +528,19 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, 1, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); @@ -536,14 +551,19 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) { glUniform4fv(const_number, count, f); return; } - for( unsigned int a = 0; a < 10; ++a) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(0, const_number, f, count); + return; + } + for (unsigned int a = 0; a < 10; ++a) { - if( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) { unsigned int offset = const_number - PSVar_Loc[a].reg; SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index fc056aed63..776280103e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -14,12 +14,15 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ + #include "ProgramShaderCache.h" +#include namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; + GLuint ProgramShaderCache::UBOBuffers[2]; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -85,12 +88,14 @@ namespace OGL // Let's attach everything if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out glAttachShader(entry.program.glprogid, entry.program.vsid); + glAttachShader(entry.program.glprogid, entry.program.psid); + glLinkProgram(entry.program.glprogid); - //checkForGLError("linking program"); - glUseProgram(entry.program.glprogid); - //checkForGLError("using program"); + glUseProgram(entry.program.glprogid); + + // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 // We can remove this @@ -122,18 +127,40 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - + void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + { + assert(Buffer > 1); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); + // glBufferSubData expects data in bytes, so multiply count by four + // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4, (void*)&f[0]); + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) { return pshaders[CurrentShaderProgram].program.attrLoc[num]; } - PROGRAMSHADER ProgramShaderCache::GetShaderProgram() + PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { return pshaders[CurrentShaderProgram].program; } - + void ProgramShaderCache::Init(void) + { + glGenBuffers(2, UBOBuffers); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); + // We multiply by *4*4 because we need to get down to basic machine units. + // So multiply by four to get how many floats we have from vec4s + // Then once more to get bytes + glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + // Now bind the buffer to the index point + // We know PS is 0 since we have it statically set in the shader + glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + // Repeat for VS shader + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, C_VENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[1]); + } void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 53abe440f5..a5ff097af6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -94,11 +94,17 @@ class ProgramShaderCache static PCache pshaders; static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; + + // For UBOS + static GLuint UBOBuffers[2]; // PS is 0, VS is 1 public: - static PROGRAMSHADER GetShaderProgram(); + static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); + static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void Init(void); static void Shutdown(void); }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 93a56d44f8..8756462dbc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -231,7 +231,8 @@ void VertexManager::vFlush() if(g_ActiveConfig.bUseGLSL) { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); - PixelShaderManager::SetConstants(); // Need to set these again + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); for (int i = 0; i < 8; i++) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 143340277e..dfa3293a46 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -252,6 +252,11 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 glUniform4fv(const_number, 1, buf); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, buf); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -270,6 +275,11 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) glUniform4fv(const_number, 1, f); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, f); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -288,6 +298,11 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co glUniform4fv(const_number, count, f); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, f, count); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) @@ -314,6 +329,11 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co glUniform4fv(const_number, count, buf); return; } + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); + return; + } for( unsigned int a = 0; a < 9; ++a) { if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 572c1fbbe9..deaf430f8c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -83,6 +83,7 @@ Make AA apply instantly during gameplay if possible #include "PixelShaderManager.h" #include "VertexShaderCache.h" #include "VertexShaderManager.h" +#include "ProgramShaderCache.h" #include "CommandProcessor.h" #include "PixelEngine.h" #include "TextureConverter.h" @@ -200,6 +201,7 @@ void VideoBackend::Video_Prepare() VertexShaderManager::Init(); PixelShaderCache::Init(); PixelShaderManager::Init(); + ProgramShaderCache::Init(); PostProcessing::Init(); GL_REPORT_ERRORD(); VertexLoaderManager::Init(); @@ -227,6 +229,7 @@ void VideoBackend::Shutdown() // And need to be called from the video thread TextureConverter::Shutdown(); VertexLoaderManager::Shutdown(); + ProgramShaderCache::Shutdown(); VertexShaderCache::Shutdown(); VertexShaderManager::Shutdown(); PixelShaderManager::Shutdown(); From 2fbca145cb9c559fed0be8e57c954e91e803ff8a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 19:14:02 -0600 Subject: [PATCH 117/625] Remove bSupportsGLSLLocation since it won't work how I expect it. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 34 +++++++------------ .../Core/VideoCommon/Src/VertexShaderGen.cpp | 25 +++++++------- Source/Core/VideoCommon/Src/VideoConfig.h | 1 - .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 20 ----------- .../Src/ProgramShaderCache.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 20 ----------- 6 files changed, 26 insertions(+), 76 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index fe26df6b03..d5680a8cf2 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -525,14 +525,6 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) sprintf(result, "layout(binding = %d) ", num); return result; } -const char* WriteLocation(API_TYPE ApiType, const u32 num) -{ - if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLLocation) - return ""; - static char result[64]; - sprintf(result, "layout(location = %d) ", num); - return result; -} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { @@ -562,13 +554,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); } else WRITE(p, "#version 120\n"); @@ -622,18 +614,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); - WRITE(p, "%suniform float4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType, C_COLORS), WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "%suniform float4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType, C_KCOLORS), WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "%suniform float4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType, C_ALPHA), WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "%suniform float4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType, C_TEXDIMS), WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "%suniform float4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType, C_ZBIAS), WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "%suniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType, C_INDTEXSCALE), WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "%suniform float4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType, C_INDTEXMTX), WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "%suniform float4 "I_FOG"[3] %s;\n", WriteLocation(ApiType, C_FOG), WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); // Compiler will optimize these out by itself. - WRITE(p, "%suniform float4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType, C_PLIGHTS), WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "%suniform float4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType, C_PMATERIALS), WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 13d526ba07..6d3eb239a1 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -165,7 +165,6 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); -extern const char* WriteLocation(API_TYPE ApiType, const u32 num); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -188,13 +187,13 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLLocation) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - WRITE(p, "#extension GL_ARB_separate_shader_objects : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); } @@ -219,15 +218,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); - WRITE(p, "%suniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType, C_POSNORMALMATRIX), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%suniform float4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType, C_PROJECTION), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%suniform float4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType, C_MATERIALS), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%suniform float4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType, C_LIGHTS), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%suniform float4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType, C_TEXMATRICES), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%suniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_TRANSFORMMATRICES), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType, C_NORMALMATRICES), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%suniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType, C_POSTTRANSFORMMATRICES), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%suniform float4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType, C_DEPTHPARAMS), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 2bdbfe89b2..fa6740c3cb 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -166,7 +166,6 @@ struct VideoConfig bool bSupportsGLSL; bool bSupportsGLSLBinding; - bool bSupportsGLSLLocation; bool bSupportsGLSLUBO; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 2f6a3408a3..6f98dd50c4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -81,11 +81,6 @@ void PixelShaderCache::Init() // Should this be set here? if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - // This bit doesn't quite work yet, always set to false - // TODO: Probably just drop this entirely in favour of UBOS - //if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_separate_shader_objects") != NULL) - g_Config.backend_info.bSupportsGLSLLocation = false; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; @@ -505,11 +500,6 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 { float f[4] = { f1, f2, f3, f4 }; - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); @@ -528,11 +518,6 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); @@ -551,11 +536,6 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if (g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 776280103e..c7c8624069 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -92,7 +92,7 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); - + glUseProgram(entry.program.glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index dfa3293a46..d0fb9ec189 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -247,11 +247,6 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[1] = f2; buf[2] = f3; buf[3] = f4; - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, buf); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf); @@ -270,11 +265,6 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, 1, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f); @@ -293,11 +283,6 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, f); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f, count); @@ -324,11 +309,6 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co buf[4*i+2] = *f++; buf[4*i+3] = 0.f; } - if(g_ActiveConfig.backend_info.bSupportsGLSLLocation) - { - glUniform4fv(const_number, count, buf); - return; - } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); From c82b92bfc2203defad093a2e55adedeafed6c7ff Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 9 Dec 2011 21:15:15 -0600 Subject: [PATCH 118/625] Fix one error. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 28 ++++++++++++------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 19 +++++++------ .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 6 ++-- .../Src/ProgramShaderCache.cpp | 1 - .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 8 +++--- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index d5680a8cf2..f30e37b0ad 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -525,6 +525,14 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) sprintf(result, "layout(binding = %d) ", num); return result; } +const char *WriteLocation(API_TYPE ApiType) +{ + static char result[64]; + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + return ""; + sprintf(result, "uniform "); + return result; +} const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components) { @@ -614,18 +622,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); - WRITE(p, "uniform float4 "I_COLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "uniform float4 "I_KCOLORS"[4] %s;\n", WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "uniform float4 "I_ALPHA"[1] %s;\n", WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "uniform float4 "I_TEXDIMS"[8] %s;\n", WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "uniform float4 "I_ZBIAS"[2] %s;\n", WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "uniform float4 "I_INDTEXSCALE"[2] %s;\n", WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "uniform float4 "I_INDTEXMTX"[6] %s;\n", WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "uniform float4 "I_FOG"[3] %s;\n", WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%sfloat4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%sfloat4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%sfloat4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%sfloat4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%sfloat4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%sfloat4 "I_FOG"[3] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_FOG)); // Compiler will optimize these out by itself. - WRITE(p, "uniform float4 "I_PLIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "uniform float4 "I_PMATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "%sfloat4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%sfloat4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 6d3eb239a1..da7650fd5e 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -165,6 +165,7 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); +const char *WriteLocation(API_TYPE ApiType); const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -218,15 +219,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); - WRITE(p, "uniform float4 "I_POSNORMALMATRIX"[6] %s;\n", WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "uniform float4 "I_PROJECTION"[4] %s;\n", WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "uniform float4 "I_MATERIALS"[4] %s;\n", WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "uniform float4 "I_LIGHTS"[40] %s;\n", WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "uniform float4 "I_TEXMATRICES"[24] %s;\n", WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "uniform float4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_NORMALMATRICES"[32] %s;\n", WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "uniform float4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "uniform float4 "I_DEPTHPARAMS" %s;\n", WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6f98dd50c4..7e8c48a872 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -503,7 +503,7 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -521,7 +521,7 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -539,7 +539,7 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - return; + //return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c7c8624069..9fd3479e1d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -94,7 +94,6 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index d0fb9ec189..e22a2f3be2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -250,7 +250,7 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -268,7 +268,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -286,7 +286,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, f, count); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { @@ -312,7 +312,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); - return; + //return; } for( unsigned int a = 0; a < 9; ++a) { From b105d70339040bf0785e41629f0d4a1557d757b8 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 01:56:37 -0600 Subject: [PATCH 119/625] Firin ma lazer --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- .../Src/ProgramShaderCache.cpp | 22 ++++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index f30e37b0ad..05997bd1db 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -620,7 +620,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 4) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index da7650fd5e..fc3c73c3c3 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -217,7 +217,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 1) uniform VSBlock {\n"); + WRITE(p, "layout(std140, binding = 5) uniform VSBlock {\n"); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 9fd3479e1d..b2bb6b6351 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -94,7 +94,15 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - + + GLint Info = -1; + GLuint Indice = 1; + //glGetIntegeri_v(GL_UNIFORM_BLOCK_DATA_SIZE, 4, &Info); + //glGetIntegerv(GL_UNIFORM_BLOCK_DATA_SIZE, &Info); + glGetActiveUniformsiv(entry.program.glprogid, 1, &Indice, + GL_UNIFORM_SIZE, &Info); + printf("Minimum size: %d\n", Info); + // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 // We can remove this @@ -132,7 +140,8 @@ namespace OGL glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4, (void*)&f[0]); + glBufferSubData(GL_UNIFORM_BUFFER_EXT, offset * 4 * 4, count * 4 * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -151,14 +160,15 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 *1024 *1024, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + glBindBufferRange(GL_UNIFORM_BUFFER, 4, UBOBuffers[0], 0, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % 256) + 256); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, C_VENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferRange(GL_UNIFORM_BUFFER, 5, UBOBuffers[1], 0, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % 256) + 256); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } void ProgramShaderCache::Shutdown(void) { From ce7a54f32af6614a5f9160dbbe53ee98a87109fb Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 01:57:27 -0600 Subject: [PATCH 120/625] Firin ma lazer --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b2bb6b6351..322950edf0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -140,7 +140,7 @@ namespace OGL glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER_EXT, offset * 4 * 4, count * 4 * 4, f); + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } From 904adb9e3dbc2af4c34740022ecabe3c1493c725 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 02:02:22 -0600 Subject: [PATCH 121/625] More for Billiard <3 --- .../Src/ProgramShaderCache.cpp | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 322950edf0..e174cf2641 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,7 +17,13 @@ #include "ProgramShaderCache.h" #include - +static GLenum checkForGLError(const char * situation) +{ + GLenum error = glGetError(); + if (error != GL_NO_ERROR) + printf("Error: %d -- %s\n", error, situation); + return error; +} namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; @@ -94,14 +100,8 @@ namespace OGL glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); + checkForGLError("User"); - GLint Info = -1; - GLuint Indice = 1; - //glGetIntegeri_v(GL_UNIFORM_BLOCK_DATA_SIZE, 4, &Info); - //glGetIntegerv(GL_UNIFORM_BLOCK_DATA_SIZE, &Info); - glGetActiveUniformsiv(entry.program.glprogid, 1, &Indice, - GL_UNIFORM_SIZE, &Info); - printf("Minimum size: %d\n", Info); // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -160,15 +160,16 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, 1024 *1024 *1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 *1024, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferRange(GL_UNIFORM_BUFFER, 4, UBOBuffers[0], 0, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % 256) + 256); + glBindBufferBase(GL_UNIFORM_BUFFER, 4, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024*1024, NULL, GL_DYNAMIC_DRAW); - glBindBufferRange(GL_UNIFORM_BUFFER, 5, UBOBuffers[1], 0, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % 256) + 256); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 5, UBOBuffers[1]); glBindBuffer(GL_UNIFORM_BUFFER, 0); + checkForGLError("Init"); } void ProgramShaderCache::Shutdown(void) { From 1f75ee49bf3003b10a41d93c0848573b38a7b440 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 07:38:30 -0600 Subject: [PATCH 122/625] 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. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 14 +- Source/Core/VideoCommon/Src/PixelShaderGen.h | 4 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 33 +++-- Source/Core/VideoCommon/Src/VertexShaderGen.h | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 13 +- .../Src/ProgramShaderCache.cpp | 56 +++++--- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 133 ++++++++++++------ .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 7 +- 9 files changed, 176 insertions(+), 88 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 05997bd1db..d6a128ac4f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -511,11 +511,11 @@ static void BuildSwapModeTable() const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) - return ""; // Nothing to do here - static char result[64]; - sprintf(result, " : register(%s%d)", prefix, num); - return result; + if(ApiType == API_GLSL) + return ""; // Nothing to do here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; } const char* WriteBinding(API_TYPE ApiType, const u32 num) { @@ -527,9 +527,9 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - static char result[64]; if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; + static char result[64]; sprintf(result, "uniform "); return result; } @@ -620,7 +620,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 4) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 589fc927bc..b32b7408c3 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -28,8 +28,8 @@ #define I_INDTEXSCALE "cindscale" #define I_INDTEXMTX "cindmtx" #define I_FOG "cfog" -#define I_PLIGHTS "cLights" -#define I_PMATERIALS "cmtrl" +#define I_PLIGHTS "cPLights" +#define I_PMATERIALS "cPmtrl" #define C_COLORMATRIX 0 // 0 #define C_COLORS 0 // 0 diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index fc3c73c3c3..6190eacbd0 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -166,6 +166,12 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); const char *WriteLocation(API_TYPE ApiType); +const char *WriteLocation2(API_TYPE ApiType) +{ + static char result[64]; + sprintf(result, "uniform "); + return result; +} const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -216,21 +222,22 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } // uniforms - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 5) uniform VSBlock {\n"); + //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //WRITE(p, "};\n"); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "};\n"); p = GenerateVSOutputStruct(p, components, ApiType); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 7e5fc365e6..73decc32bc 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -55,7 +55,7 @@ const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 4 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, }; template class _VERTEXSHADERUID diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 5d62686ac9..866674e853 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -184,7 +184,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + //if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 7e8c48a872..a248157751 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -496,14 +496,15 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float } } } + void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float f[4] = { f1, f2, f3, f4 }; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f); + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -520,8 +521,8 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f); + //return; } for (unsigned int a = 0; a < 10; ++a) { @@ -538,8 +539,8 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - //return; + ProgramShaderCache::SetUniformObjects(0, const_number, f, count); + //return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index e174cf2641..4b1f8b28d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,12 +17,15 @@ #include "ProgramShaderCache.h" #include -static GLenum checkForGLError(const char * situation) +GLuint GLERR(const char *function) { - GLenum error = glGetError(); - if (error != GL_NO_ERROR) - printf("Error: %d -- %s\n", error, situation); - return error; + GLint err = glGetError(); + if (err != GL_NO_ERROR) + { + printf( "(%s) OpenGL error 0x%x - %s\n", + function, err, gluErrorString(err)); + } + return err; } namespace OGL { @@ -98,10 +101,19 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); + GLsizei length = 0; + + glGetProgramiv(entry.program.glprogid, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetProgramInfoLog(entry.program.glprogid, length, &charsWritten, infoLog); + printf("Program info log:\n%s", infoLog); + delete[] infoLog; + } glUseProgram(entry.program.glprogid); - checkForGLError("User"); - // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -136,12 +148,22 @@ namespace OGL } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { + GLERR(""); assert(Buffer > 1); - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[Buffer]); + static int _Buffer = -1; + if(_Buffer != Buffer) + { + _Buffer = Buffer; + GLERR("bind"); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); + } + // Query for the offsets of each block variable + // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + GLERR("sub"); + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -156,20 +178,22 @@ namespace OGL void ProgramShaderCache::Init(void) { glGenBuffers(2, UBOBuffers); + + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, 1024 *1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 4, UBOBuffers[0]); + glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + // Repeat for VS shader - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 5, UBOBuffers[1]); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - checkForGLError("Init"); + //glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + //glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + //glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); + GLERR("init"); } void ProgramShaderCache::Shutdown(void) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index c542a64cb9..6a5becae7b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -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 { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index e22a2f3be2..0550e99b18 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -240,6 +240,7 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } } } +#define MAX_UNIFORM 0 void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float buf[4]; @@ -249,7 +250,8 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[3] = f4; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf); + if(const_number < MAX_UNIFORM) + ProgramShaderCache::SetUniformObjects(1, const_number, buf); //return; } for( unsigned int a = 0; a < 9; ++a) @@ -267,6 +269,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f); //return; } @@ -285,6 +288,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f, count); //return; } @@ -311,6 +315,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { + if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); //return; } From d4a80ca3ecb595f849f4b7baebb491fa1fbc915d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 08:07:13 -0600 Subject: [PATCH 123/625] yay, UBOs work 100% now. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 4 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 33 +++++------- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 35 +++++++------ .../Src/ProgramShaderCache.cpp | 40 ++++----------- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 51 ++++++++----------- 6 files changed, 66 insertions(+), 99 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index d6a128ac4f..bffaa5b08a 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -527,7 +527,7 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if(ApiType == API_GLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -620,7 +620,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 0) uniform PSBlock {\n"); + WRITE(p, "layout(std140, binding = 1) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 6190eacbd0..b0c3491315 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -166,12 +166,6 @@ char* GenerateVSOutputStruct(char* p, u32 components, API_TYPE ApiType) extern const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num); extern const char* WriteBinding(API_TYPE ApiType, const u32 num); const char *WriteLocation(API_TYPE ApiType); -const char *WriteLocation2(API_TYPE ApiType) -{ - static char result[64]; - sprintf(result, "uniform "); - return result; -} const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { @@ -222,20 +216,21 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } // uniforms - //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - //WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - //if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - //WRITE(p, "};\n"); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation2(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 866674e853..5d62686ac9 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -184,7 +184,7 @@ void VertexShaderManager::Dirty() // TODO: A cleaner way to control the matricies without making a mess in the parameters field void VertexShaderManager::SetConstants() { - //if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (g_ActiveConfig.bUseGLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) Dirty(); if (nTransformMatricesChanged[0] >= 0) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index a248157751..ff3196fa41 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -429,24 +429,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) glShaderSource(result, 1, &pstrprogram, NULL); glCompileShader(result); - GLsizei length = 0; - - glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "ps_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) - exit(0); - delete[] infoLog; - } GLint compileStatus; glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); @@ -454,6 +436,23 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { // Compile failed ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + + GLsizei length = 0; + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + delete[] infoLog; + } // Don't try to use this shader glDeleteShader(result); return false; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 4b1f8b28d2..073e8b430c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -17,16 +17,6 @@ #include "ProgramShaderCache.h" #include -GLuint GLERR(const char *function) -{ - GLint err = glGetError(); - if (err != GL_NO_ERROR) - { - printf( "(%s) OpenGL error 0x%x - %s\n", - function, err, gluErrorString(err)); - } - return err; -} namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; @@ -101,19 +91,14 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); glLinkProgram(entry.program.glprogid); - GLsizei length = 0; - - glGetProgramiv(entry.program.glprogid, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetProgramInfoLog(entry.program.glprogid, length, &charsWritten, infoLog); - printf("Program info log:\n%s", infoLog); - delete[] infoLog; - } glUseProgram(entry.program.glprogid); + + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -148,13 +133,11 @@ namespace OGL } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { - GLERR(""); assert(Buffer > 1); static int _Buffer = -1; if(_Buffer != Buffer) { _Buffer = Buffer; - GLERR("bind"); glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); } // Query for the offsets of each block variable @@ -162,7 +145,6 @@ namespace OGL // glBufferSubData expects data in bytes, so multiply count by four // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - GLERR("sub"); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -179,7 +161,6 @@ namespace OGL { glGenBuffers(2, UBOBuffers); - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s @@ -187,13 +168,12 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 0, UBOBuffers[0]); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader - //glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - //glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); - //glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); - GLERR("init"); + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); + glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 0550e99b18..97dfc9a3bb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -189,25 +189,6 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) glShaderSource(result, 1, &pstrprogram, NULL); glCompileShader(result); - GLsizei length = 0; - - glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); - if (length > 0) - { - GLsizei charsWritten; - GLchar* infoLog = new GLchar[length]; - glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - - if(strstr(infoLog, "warning") != NULL || strstr(infoLog, "error") != NULL) - exit(0); - delete[] infoLog; - } GLint compileStatus; glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus); @@ -215,6 +196,23 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { // Compile failed ERROR_LOG(VIDEO, "Shader compilation failed; see info log"); + + GLsizei length = 0; + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length); + if (length > 0) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetShaderInfoLog(result, length, &charsWritten, infoLog); + WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + + delete[] infoLog; + } // Don't try to use this shader glDeleteShader(result); return false; @@ -240,7 +238,6 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } } } -#define MAX_UNIFORM 0 void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { float buf[4]; @@ -250,9 +247,8 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 buf[3] = f4; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) - ProgramShaderCache::SetUniformObjects(1, const_number, buf); - //return; + ProgramShaderCache::SetUniformObjects(1, const_number, buf); + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -269,9 +265,8 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -288,9 +283,8 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, f, count); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { @@ -315,9 +309,8 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - if(const_number < MAX_UNIFORM) ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); - //return; + return; } for( unsigned int a = 0; a < 9; ++a) { From 5bcbf92f439663900a8fe60c1fee4eea2d96a192 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 14:35:37 -0600 Subject: [PATCH 124/625] Make sure to support everything even if GPU doesn't. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 5 +++-- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 8 ++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index bffaa5b08a..cc350c7e0a 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -527,7 +527,7 @@ const char* WriteBinding(API_TYPE ApiType, const u32 num) } const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && !g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -581,6 +581,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#define frac(x) fract(x)\n"); WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + for (int i = 0; i < 8; ++i) WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); @@ -620,7 +621,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 1) uniform PSBlock {\n"); + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index b0c3491315..415ff4614c 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -217,7 +217,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140, binding = 2) uniform VSBlock {\n"); + WRITE(p, "layout(std140%s) uniform VSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 2" : ""); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 073e8b430c..37923d2f47 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -96,9 +96,13 @@ namespace OGL // Dunno why this is needed when I have the binding // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 From 5b06bbf87d75cb3d06dfae6c58c05ade0374a676 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:40:10 -0600 Subject: [PATCH 125/625] Use UBOs in every shader. I had missed a few. Only cache Uniform locations if we aren't using UBOs. --- .../Src/TextureConversionShader.cpp | 29 ++++++++-- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 54 +++++++++++++------ .../Src/ProgramShaderCache.cpp | 8 +-- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 6 ++- 4 files changed, 73 insertions(+), 24 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index e4638f8b16..33c6bca038 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -74,6 +74,14 @@ const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) sprintf(result, " : register(%s%d)", prefix, num); return result; } +const char *WriteLocation(API_TYPE ApiType) +{ + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + return ""; + static char result[64]; + sprintf(result, "uniform "); + return result; +} // block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset @@ -82,7 +90,13 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + + WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -168,7 +182,11 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - WRITE(p, "uniform float4 "I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); @@ -839,10 +857,13 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) if(ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) { WRITE(p, "#version 330 compatibility\n"); - WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); } else WRITE(p, "#version 120\n"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index ff3196fa41..4e5fa9c66f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -120,7 +120,9 @@ void PixelShaderCache::Init() "#extension GL_ARB_texture_rectangle : enable\n" "#extension GL_ARB_shading_language_420pack : enable\n" "layout(binding = 0) uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" "void main(){\n" "vec4 Temp0, Temp1;\n" "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" @@ -134,14 +136,20 @@ void PixelShaderCache::Init() "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } else { sprintf(pmatrixprog, "#version 120\n" "#extension GL_ARB_texture_rectangle : enable\n" "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[7];\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" "void main(){\n" "vec4 Temp0, Temp1;\n" "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" @@ -155,9 +163,13 @@ void PixelShaderCache::Init() "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } - if (!pCompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); @@ -168,7 +180,9 @@ void PixelShaderCache::Init() "#extension GL_ARB_texture_rectangle : enable\n" "#extension GL_ARB_shading_language_420pack : enable\n" "layout(binding = 0) uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" "void main(){\n" "vec4 R0, R1, R2;\n" "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" @@ -192,14 +206,20 @@ void PixelShaderCache::Init() "R1.z = dot(R0, "I_COLORS"[%d]);\n" "R1.w = dot(R0, "I_COLORS"[%d]);\n" "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } else { sprintf(pmatrixprog, "#version 120\n" "#extension GL_ARB_texture_rectangle : enable\n" "uniform sampler2DRect samp0;\n" - "uniform vec4 "I_COLORS"[5];\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" "void main(){\n" "vec4 R0, R1, R2;\n" "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" @@ -223,9 +243,13 @@ void PixelShaderCache::Init() "R1.z = dot(R0, "I_COLORS"[%d]);\n" "R1.w = dot(R0, "I_COLORS"[%d]);\n" "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "}\n", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); } - if (!pCompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); s_DepthMatrixProgram.Destroy(); @@ -444,9 +468,9 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLsizei charsWritten; GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); - WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); + WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); + sprintf(szTemp, "ps_%d.txt", result); FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); @@ -503,7 +527,7 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -521,7 +545,7 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -539,7 +563,7 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - //return; + return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 37923d2f47..562843ebb1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -111,8 +111,9 @@ namespace OGL //For some reason this fails on my hardware //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. - for(int a = 0; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader @@ -176,7 +177,7 @@ namespace OGL // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024*1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, 1024 * 1024, NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) @@ -185,6 +186,7 @@ namespace OGL for (; iter != pshaders.end(); iter++) iter->second.Destroy(); pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index 6a5becae7b..bfee0c193c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -488,8 +488,10 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur } glViewport(0, 0, srcWidth, srcHeight); - - PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); + if(g_ActiveConfig.bUseGLSL) + ProgramShaderCache::SetBothShaders(s_yuyvToRgbProgram.glprogid, 0); + else + PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); GL_REPORT_ERRORD(); From 67687a7b6d65dfa86d143da269a6b7163ad7d653 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:52:20 -0600 Subject: [PATCH 126/625] Make sure our UBO buffers are always aligned correctly. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 562843ebb1..c62016a853 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -164,20 +164,26 @@ namespace OGL } void ProgramShaderCache::Init(void) { + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + GLint Align; + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + glGenBuffers(2, UBOBuffers); glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, C_PENVCONST_END * 4 * 4, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, 1024 * 1024, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) From a304af75fd11989597cc0df6946bc9a0de6734ad Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 10 Dec 2011 15:58:44 -0600 Subject: [PATCH 127/625] Make this pretty --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c62016a853..d66fd9ec19 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -16,6 +16,8 @@ // http://code.google.com/p/dolphin-emu/ #include "ProgramShaderCache.h" +#include "MathUtil.h" + #include namespace OGL { @@ -176,14 +178,14 @@ namespace OGL // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, (C_PENVCONST_END * 4 * 4) - (C_PENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); // Repeat for VS shader glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, (C_VENVCONST_END * 4 * 4) - (C_VENVCONST_END * 4 * 4 % Align) + Align, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } void ProgramShaderCache::Shutdown(void) From a5257c1a0a951605fc6a74aa1eb12610f9207926 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 03:10:03 -0600 Subject: [PATCH 128/625] Actually have Dual Source blending work for people. Forgot about this change. --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 7 ++++++- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index 23c31a1bb7..7d309dee38 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -124,6 +124,11 @@ extern CGprofile g_cgvProf, g_cgfProf; // XXX: Dual-source blending in OpenGL does not work correctly yet. To make it // work, we may need to use glBindFragDataLocation. To use that, we need to // use GLSL shaders across the whole pipeline. Yikes! -//#define USE_DUAL_SOURCE_BLEND +#define USE_DUAL_SOURCE_BLEND + +// Can't get defined on my system for some reason... +#ifndef GL_ONE_MINUS_SRC1_ALPHA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#endif #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index ae99669636..fe9f9e7822 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -937,8 +937,8 @@ void Renderer::SetBlendMode(bool forceUpdate) #ifdef USE_DUAL_SOURCE_BLEND bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate - && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = useDstAlpha && GLEW_ARB_blend_func_extended; + && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; + bool useDualSource = useDstAlpha; #endif if (changes & 1) From 3c6d0fc7106131098fe1a79d2deb0f39671c5252 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 11 Dec 2011 11:08:18 +0100 Subject: [PATCH 129/625] 8 spaces indentation -> tabs --- Source/Core/VideoCommon/Src/PixelShaderGen.h | 20 +- .../Src/TextureConversionShader.cpp | 22 +- Source/Core/VideoCommon/Src/VertexShaderGen.h | 18 +- Source/Core/VideoCommon/Src/VideoCommon.h | 6 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 234 ++++++++--------- .../Src/ProgramShaderCache.cpp | 238 ++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 108 ++++---- .../Plugin_VideoOGL/Src/TextureCache.cpp | 8 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 246 +++++++++--------- Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 34 +-- 10 files changed, 467 insertions(+), 467 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index b32b7408c3..3228d50b99 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -49,16 +49,16 @@ // Annoying sure, can be removed once we get up to GLSL ~1.3 const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, - {I_KCOLORS, C_KCOLORS, 4 }, - {I_ALPHA, C_ALPHA, 1 }, - {I_TEXDIMS, C_TEXDIMS, 8 }, - {I_ZBIAS , C_ZBIAS, 2 }, - {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, - {I_INDTEXMTX, C_INDTEXMTX, 6 }, - {I_FOG, C_FOG, 3 }, - {I_PLIGHTS, C_PLIGHTS, 40 }, - {I_PMATERIALS, C_PMATERIALS, 4 }, - }; + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; // DO NOT make anything in this class virtual. template diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 33c6bca038..620cac3845 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -68,11 +68,11 @@ u16 GetEncodedSampleCount(u32 format) } const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) - return ""; // Once we switch to GLSL 1.3 we can do something here - static char result[64]; - sprintf(result, " : register(%s%d)", prefix, num); - return result; + if(ApiType == API_GLSL) + return ""; // Once we switch to GLSL 1.3 we can do something here + static char result[64]; + sprintf(result, " : register(%s%d)", prefix, num); + return result; } const char *WriteLocation(API_TYPE ApiType) { @@ -821,13 +821,13 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) for (int i = 0; i < 2; i++) { - WRITE(p, " depth%i *= 16777215.0f;\n", i); + WRITE(p, " depth%i *= 16777215.0f;\n", i); - WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); - WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); - WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); - WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); - WRITE(p, " expanded%i.b = depth%i;\n", i, i); + WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); + WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); + WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); + WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); + WRITE(p, " expanded%i.b = depth%i;\n", i, i); } WRITE(p, " if(cl > 0.5f) {\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 73decc32bc..65d05e3fe8 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -48,15 +48,15 @@ #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) #define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, - {I_PROJECTION , C_PROJECTION, 4 }, - {I_MATERIALS, C_MATERIALS, 4 }, - {I_LIGHTS, C_LIGHTS, 40 }, - {I_TEXMATRICES, C_TEXMATRICES, 24 }, - {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, - {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, - {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, - }; + {I_PROJECTION , C_PROJECTION, 4 }, + {I_MATERIALS, C_MATERIALS, 4 }, + {I_LIGHTS, C_LIGHTS, 40 }, + {I_TEXMATRICES, C_TEXMATRICES, 24 }, + {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, + {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, + {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, + }; template class _VERTEXSHADERUID { diff --git a/Source/Core/VideoCommon/Src/VideoCommon.h b/Source/Core/VideoCommon/Src/VideoCommon.h index a4bfaddd1f..58b8acd80d 100644 --- a/Source/Core/VideoCommon/Src/VideoCommon.h +++ b/Source/Core/VideoCommon/Src/VideoCommon.h @@ -154,9 +154,9 @@ inline unsigned int GetPow2(unsigned int val) } struct s_svar { - const char *name; - const unsigned int reg; - const unsigned int size; + const char *name; + const unsigned int reg; + const unsigned int size; }; #endif // _VIDEOCOMMON_H diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 4e5fa9c66f..c1ebf557ed 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -74,12 +74,12 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetPSConstant4f = SetGLSLPSConstant4f; - pSetPSConstant4fv = SetGLSLPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; - pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; @@ -88,22 +88,22 @@ void PixelShaderCache::Init() } else { - pSetPSConstant4f = SetCGPSConstant4f; - pSetPSConstant4fv = SetCGPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; - pCompilePixelShader = CompileCGPixelShader; - glEnable(GL_FRAGMENT_PROGRAM_ARB); + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; + s_nMaxPixelInstructions = 4096; if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) { - s_nMaxPixelInstructions = 4096; + s_nMaxPixelInstructions = 4096; } #endif @@ -347,7 +347,7 @@ void PixelShaderCache::Shutdown() s_DepthMatrixProgram.Destroy(); PSCache::iterator iter = PixelShaders.begin(); for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); + iter->second.Destroy(); PixelShaders.clear(); } @@ -359,12 +359,12 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp // Check if the shader is already set if (last_entry) { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } } last_uid = uid; @@ -372,12 +372,12 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp PSCache::iterator iter = PixelShaders.find(uid); if (iter != PixelShaders.end()) { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + PSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; } // Make an entry in the table @@ -387,23 +387,23 @@ FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 comp if (g_ActiveConfig.bEnableShaderDebugging && code) { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; } #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); + SaveData(szTemp, code); } #endif if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; } INCSTAT(stats.numPixelShadersCreated); @@ -424,8 +424,8 @@ void PixelShaderCache::DisableShader() assert(true); if(ShaderEnabled) { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; } } @@ -436,14 +436,14 @@ void PixelShaderCache::SetCurrentShader(GLuint Shader) assert(true); if(!ShaderEnabled) { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; } if(CurrentShader != Shader) { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); } } // GLSL Specific @@ -493,31 +493,31 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) return; PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform1i(tmp.UniformLocations[a], Tex); - return; - } - } + if (!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform1i(tmp.UniformLocations[a], Tex); + return; + } + } } void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } - } + if (!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) @@ -531,12 +531,12 @@ void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3 } for (unsigned int a = 0; a < 10; ++a) { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; - } + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } } @@ -549,12 +549,12 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) } for (unsigned int a = 0; a < 10; ++a) { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; - } + if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } } @@ -567,12 +567,12 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co } for (unsigned int a = 0; a < 10; ++a) { - if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) - { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); - return; - } + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } } } // CG Specific @@ -582,7 +582,7 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLenum err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); + ERROR_LOG(VIDEO, "glError %08x before PS!", err); } #if defined HAVE_CG && HAVE_CG @@ -591,28 +591,28 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) // handle errors if (!cgIsProgram(tempprog)) { - cgDestroyProgram(tempprog); + cgDestroyProgram(tempprog); - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - return false; + return false; } // handle warnings if (cgGetError() != CG_NO_ERROR) { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); } // This looks evil - we modify the program through the const char * we got from cgGetProgramString! @@ -621,9 +621,9 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) char *plocal = strstr(pcompiledprog, "program.local"); while (plocal != NULL) { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); } glGenProgramsARB(1, &ps.glprogid); @@ -634,23 +634,23 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO - } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); } cgDestroyProgram(tempprog); @@ -672,21 +672,21 @@ void SetCGPSConstant4fv(unsigned int const_number, const float *f) void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); } // Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - pSetPSConstant4f(const_number, f1, f2, f3, f4); + pSetPSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetPSConstant4fv(unsigned int const_number, const float *f) { - pSetPSConstant4fv(const_number, f); + pSetPSConstant4fv(const_number, f); } void Renderer::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiPSConstant4fv(const_number, count, f); + pSetMultiPSConstant4fv(const_number, count, f); } } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d66fd9ec19..15a5ff42a8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -21,123 +21,123 @@ #include namespace OGL { - GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; - ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::UBOBuffers[2]; + GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; + ProgramShaderCache::PCache ProgramShaderCache::pshaders; + GLuint ProgramShaderCache::UBOBuffers[2]; - std::pair ProgramShaderCache::CurrentShaderProgram; - const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; + std::pair ProgramShaderCache::CurrentShaderProgram; + const char *UniformNames[NUM_UNIFORMS] = { + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; - void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) - { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + { + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.glprogid = glCreateProgram(); + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); - } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - } + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { assert(Buffer > 1); @@ -154,16 +154,16 @@ namespace OGL glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); } - GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - GLint ProgramShaderCache::GetAttr(int num) - { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; - } - PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) - { - return pshaders[CurrentShaderProgram].program; - } + GLint ProgramShaderCache::GetAttr(int num) + { + return pshaders[CurrentShaderProgram].program.attrLoc[num]; + } + PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) + { + return pshaders[CurrentShaderProgram].program; + } void ProgramShaderCache::Init(void) { // We have to get the UBO alignment here because @@ -188,18 +188,18 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } - void ProgramShaderCache::Shutdown(void) - { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) - iter->second.Destroy(); - pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); - } + void ProgramShaderCache::Shutdown(void) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); + } } void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) { - uid->uid.vsid = _v; - uid->uid.psid = _p; + uid->uid.vsid = _v; + uid->uid.psid = _p; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index a5ff097af6..1c114551b8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -25,39 +25,39 @@ #include "PixelShaderGen.h" #include "VertexShaderGen.h" - union PID - { - struct { - GLuint vsid, psid; - }; - u64 id; - }; + union PID + { + struct { + GLuint vsid, psid; + }; + u64 id; + }; class PROGRAMUID { public: - PID uid; + PID uid; - PROGRAMUID() - { - uid.id = 0; - } + PROGRAMUID() + { + uid.id = 0; + } - PROGRAMUID(const PROGRAMUID& r) - { - uid.id = r.uid.id; - } - PROGRAMUID(GLuint _v, GLuint _p) - { - uid.vsid = _v; - uid.psid = _p; - } + PROGRAMUID(const PROGRAMUID& r) + { + uid.id = r.uid.id; + } + PROGRAMUID(GLuint _v, GLuint _p) + { + uid.vsid = _v; + uid.psid = _p; + } - int GetNumValues() const - { - return uid.id; - } + int GetNumValues() const + { + return uid.id; + } }; void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); @@ -69,43 +69,43 @@ extern const char *UniformNames[NUM_UNIFORMS]; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} - GLuint glprogid; // opengl program id - GLuint vsid, psid; - GLint attrLoc[3]; - GLint UniformLocations[NUM_UNIFORMS]; + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + GLuint glprogid; // opengl program id + GLuint vsid, psid; + GLint attrLoc[3]; + GLint UniformLocations[NUM_UNIFORMS]; }; class ProgramShaderCache { - struct PCacheEntry - { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} - void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; - } - }; - typedef std::map, PCacheEntry> PCache; + struct PCacheEntry + { + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } + }; + typedef std::map, PCacheEntry> PCache; - static PCache pshaders; - static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static std::pair CurrentShaderProgram; - // For UBOS - static GLuint UBOBuffers[2]; // PS is 0, VS is 1 + // For UBOS + static GLuint UBOBuffers[2]; // PS is 0, VS is 1 public: - static PROGRAMSHADER GetShaderProgram(void); - static GLint GetAttr(int num); - static void SetBothShaders(GLuint PS, GLuint VS); - static GLuint GetCurrentProgram(void); - static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); - - static void Init(void); - static void Shutdown(void); + static PROGRAMSHADER GetShaderProgram(void); + static GLint GetAttr(int num); + static void SetBothShaders(GLuint PS, GLuint VS); + static GLuint GetCurrentProgram(void); + static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void Init(void); + static void Shutdown(void); }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index e3605dba12..0feb7ee3ac 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -211,7 +211,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, if (pcfmt != PC_TEX_FMT_DXT1) { if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); + glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); if (bHaveMipMaps && autogen_mips) { @@ -225,7 +225,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, } if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } else { @@ -399,8 +399,8 @@ TextureCache::~TextureCache() { if (s_TempFramebuffer) { - glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); - s_TempFramebuffer = 0; + glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); + s_TempFramebuffer = 0; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 97dfc9a3bb..b665aeae98 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -61,20 +61,20 @@ void VertexShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetVSConstant4f = SetGLSLVSConstant4f; - pSetVSConstant4fv = SetGLSLVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; } else { - pSetVSConstant4f = SetCGVSConstant4f; - pSetVSConstant4fv = SetCGVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileCGVertexShader; - glEnable(GL_VERTEX_PROGRAM_ARB); + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); } glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); @@ -82,7 +82,7 @@ void VertexShaderCache::Init() #if CG_VERSION_NUM == 2100 if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) { - s_nMaxVertexInstructions = 4096; + s_nMaxVertexInstructions = 4096; } #endif } @@ -90,7 +90,7 @@ void VertexShaderCache::Init() void VertexShaderCache::Shutdown() { for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); + iter->second.Destroy(); vshaders.clear(); } @@ -101,12 +101,12 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) GetVertexShaderId(&uid, components); if (last_entry) { - if (uid == last_uid) - { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; - } + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } } last_uid = uid; @@ -114,12 +114,12 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) VSCache::iterator iter = vshaders.find(uid); if (iter != vshaders.end()) { - VSCacheEntry &entry = iter->second; - last_entry = &entry; + VSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; } // Make an entry in the table @@ -130,17 +130,17 @@ VERTEXSHADER* VertexShaderCache::SetShader(u32 components) #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); + SaveData(szTemp, code); } #endif if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; } INCSTAT(stats.numVertexShadersCreated); @@ -160,8 +160,8 @@ void VertexShaderCache::DisableShader() assert(true); if (ShaderEnabled) { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; } } @@ -172,14 +172,14 @@ void VertexShaderCache::SetCurrentShader(GLuint Shader) assert(true); if (!ShaderEnabled) { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; } if (CurrentShader != Shader) { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + if(Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); } } // GLSL Specific @@ -227,16 +227,16 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } - } + if(!strcmp(name, UniformNames[a])) + { + if(tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { @@ -252,12 +252,12 @@ void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3 } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } } } @@ -270,12 +270,12 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } } } @@ -288,12 +288,12 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } } } @@ -302,10 +302,10 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co float buf[4 * C_VENVCONST_END]; for (unsigned int i = 0; i < count; i++) { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { @@ -314,12 +314,12 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } for( unsigned int a = 0; a < 9; ++a) { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) - { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); - return; - } + if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } } } @@ -330,34 +330,34 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLenum err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); + ERROR_LOG(VIDEO, "glError %08x before VS!", err); } #if defined HAVE_CG && HAVE_CG CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; } if (cgGetError() != CG_NO_ERROR) { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); } // This looks evil - we modify the program through the const char * we got from cgGetProgramString! @@ -365,9 +365,9 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); char *plocal = strstr(pcompiledprog, "program.local"); while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); } glGenProgramsARB(1, &vs.glprogid); vs.bGLSL = false; @@ -376,15 +376,15 @@ bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); err = GL_REPORT_ERROR(); if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); } cgDestroyProgram(tempprog); #endif if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + vs.strprog = pstrprogram; return true; } @@ -402,12 +402,12 @@ void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, cons { if(GLEW_EXT_gpu_program_parameters) { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); } else { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); } } @@ -415,49 +415,49 @@ void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, cons { if(GLEW_EXT_gpu_program_parameters) { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } else { - for (unsigned int i = 0; i < count; i++) - { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); - } + for (unsigned int i = 0; i < count; i++) + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } } // Renderer Functions void Renderer::SetVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - pSetVSConstant4f(const_number, f1, f2, f3, f4); + pSetVSConstant4f(const_number, f1, f2, f3, f4); } void Renderer::SetVSConstant4fv(unsigned int const_number, const float *f) { - pSetVSConstant4fv(const_number, f); + pSetVSConstant4fv(const_number, f); } void Renderer::SetMultiVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiVSConstant4fv(const_number, count, f); + pSetMultiVSConstant4fv(const_number, count, f); } void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - pSetMultiVSConstant3fv(const_number, count, f); + pSetMultiVSConstant3fv(const_number, count, f); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index deaf430f8c..24478d9c01 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -109,23 +109,23 @@ std::string VideoBackend::GetName() void GetShaders(std::vector &shaders) { - shaders.clear(); - if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) - { - File::FSTEntry entry; - File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); - for (u32 i = 0; i < entry.children.size(); i++) - { - std::string name = entry.children[i].virtualName.c_str(); - if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) - name = name.substr(0, name.size() - 4); - shaders.push_back(name); - } - } - else - { - File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); - } + shaders.clear(); + if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) + { + File::FSTEntry entry; + File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); + for (u32 i = 0; i < entry.children.size(); i++) + { + std::string name = entry.children[i].virtualName.c_str(); + if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) + name = name.substr(0, name.size() - 4); + shaders.push_back(name); + } + } + else + { + File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); + } } void InitBackendInfo() From 3bcec51334169ada2979ec77a09aa992e168f4d6 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 11 Dec 2011 11:14:02 +0100 Subject: [PATCH 130/625] More coding style fixes because I suck at sed --- Source/Core/VideoCommon/Src/PixelShaderGen.h | 20 +- .../Src/TextureConversionShader.cpp | 2 +- Source/Core/VideoCommon/Src/VertexShaderGen.h | 18 +- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 18 +- .../Src/ProgramShaderCache.cpp | 198 +++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 32 +-- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/main.cpp | 20 +- 8 files changed, 155 insertions(+), 155 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h index 3228d50b99..1a70a3664b 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.h +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h @@ -49,16 +49,16 @@ // Annoying sure, can be removed once we get up to GLSL ~1.3 const s_svar PSVar_Loc[] = { {I_COLORS, C_COLORS, 4 }, - {I_KCOLORS, C_KCOLORS, 4 }, - {I_ALPHA, C_ALPHA, 1 }, - {I_TEXDIMS, C_TEXDIMS, 8 }, - {I_ZBIAS , C_ZBIAS, 2 }, - {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, - {I_INDTEXMTX, C_INDTEXMTX, 6 }, - {I_FOG, C_FOG, 3 }, - {I_PLIGHTS, C_PLIGHTS, 40 }, - {I_PMATERIALS, C_PMATERIALS, 4 }, - }; + {I_KCOLORS, C_KCOLORS, 4 }, + {I_ALPHA, C_ALPHA, 1 }, + {I_TEXDIMS, C_TEXDIMS, 8 }, + {I_ZBIAS , C_ZBIAS, 2 }, + {I_INDTEXSCALE , C_INDTEXSCALE, 2 }, + {I_INDTEXMTX, C_INDTEXMTX, 6 }, + {I_FOG, C_FOG, 3 }, + {I_PLIGHTS, C_PLIGHTS, 40 }, + {I_PMATERIALS, C_PMATERIALS, 4 }, + }; // DO NOT make anything in this class virtual. template diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 620cac3845..322d9e071b 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -69,7 +69,7 @@ u16 GetEncodedSampleCount(u32 format) const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { if(ApiType == API_GLSL) - return ""; // Once we switch to GLSL 1.3 we can do something here + return ""; // Once we switch to GLSL 1.3 we can do something here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 65d05e3fe8..d41ba2141a 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -48,15 +48,15 @@ #define C_DEPTHPARAMS (C_POSTTRANSFORMMATRICES + 64) #define C_VENVCONST_END (C_DEPTHPARAMS + 1) const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 }, - {I_PROJECTION , C_PROJECTION, 4 }, - {I_MATERIALS, C_MATERIALS, 4 }, - {I_LIGHTS, C_LIGHTS, 40 }, - {I_TEXMATRICES, C_TEXMATRICES, 24 }, - {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, - {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, - {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, - {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, - }; + {I_PROJECTION , C_PROJECTION, 4 }, + {I_MATERIALS, C_MATERIALS, 4 }, + {I_LIGHTS, C_LIGHTS, 40 }, + {I_TEXMATRICES, C_TEXMATRICES, 24 }, + {I_TRANSFORMMATRICES , C_TRANSFORMMATRICES, 64 }, + {I_NORMALMATRICES , C_NORMALMATRICES, 32 }, + {I_POSTTRANSFORMMATRICES, C_POSTTRANSFORMMATRICES, 64 }, + {I_DEPTHPARAMS, C_DEPTHPARAMS, 1 }, + }; template class _VERTEXSHADERUID { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index c1ebf557ed..2f782caa02 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -496,11 +496,11 @@ void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) - return; + return; else { - glUniform1i(tmp.UniformLocations[a], Tex); - return; + glUniform1i(tmp.UniformLocations[a], Tex); + return; } } } @@ -511,11 +511,11 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float if (!strcmp(name, UniformNames[a])) { if(tmp.UniformLocations[a] == -1) - return; + return; else { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; } } } @@ -601,9 +601,9 @@ bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) file.close(); PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); return false; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 15a5ff42a8..e43dfa9798 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -27,116 +27,116 @@ namespace OGL std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, + }; void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } + if(uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.glprogid = glCreateProgram(); + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.glprogid = glCreateProgram(); - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); + // Right, the program is created now + // Let's attach everything + if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); - } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); + entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); + entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); + if(entry.program.attrLoc[0] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[0]); + if(entry.program.attrLoc[1] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[1]); + if(entry.program.attrLoc[2] > 0) + glEnableVertexAttribArray(entry.program.attrLoc[2]); + } + else + entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; } void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) { @@ -158,11 +158,11 @@ namespace OGL GLint ProgramShaderCache::GetAttr(int num) { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; + return pshaders[CurrentShaderProgram].program.attrLoc[num]; } PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { - return pshaders[CurrentShaderProgram].program; + return pshaders[CurrentShaderProgram].program; } void ProgramShaderCache::Init(void) { @@ -190,11 +190,11 @@ namespace OGL } void ProgramShaderCache::Shutdown(void) { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) - iter->second.Destroy(); - pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); iter++) + iter->second.Destroy(); + pshaders.clear(); + glDeleteBuffers(2, UBOBuffers); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 1c114551b8..4c356f52d5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -27,10 +27,10 @@ union PID { - struct { - GLuint vsid, psid; - }; - u64 id; + struct { + GLuint vsid, psid; + }; + u64 id; }; class PROGRAMUID @@ -41,22 +41,22 @@ public: PROGRAMUID() { - uid.id = 0; + uid.id = 0; } PROGRAMUID(const PROGRAMUID& r) { - uid.id = r.uid.id; + uid.id = r.uid.id; } PROGRAMUID(GLuint _v, GLuint _p) { - uid.vsid = _v; - uid.psid = _p; + uid.vsid = _v; + uid.psid = _p; } int GetNumValues() const { - return uid.id; + return uid.id; } }; void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); @@ -81,13 +81,13 @@ class ProgramShaderCache { struct PCacheEntry { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} - void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; - } + PROGRAMSHADER program; + int frameCount; + PCacheEntry() : frameCount(0) {} + void Destroy() { + glDeleteProgram(program.glprogid); + program.glprogid = 0; + } }; typedef std::map, PCacheEntry> PCache; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index bfee0c193c..f8bdf3f946 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -281,7 +281,7 @@ void Shutdown() } void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, - u8* destAddr, int dstWidth, int dstHeight, int readStride, + u8* destAddr, int dstWidth, int dstHeight, int readStride, bool toTexture, bool linearFilter) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 24478d9c01..4e85287459 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -112,19 +112,19 @@ void GetShaders(std::vector &shaders) shaders.clear(); if (File::IsDirectory(File::GetUserPath(D_SHADERS_IDX))) { - File::FSTEntry entry; - File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); - for (u32 i = 0; i < entry.children.size(); i++) - { - std::string name = entry.children[i].virtualName.c_str(); - if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) - name = name.substr(0, name.size() - 4); - shaders.push_back(name); - } + File::FSTEntry entry; + File::ScanDirectoryTree(File::GetUserPath(D_SHADERS_IDX), entry); + for (u32 i = 0; i < entry.children.size(); i++) + { + std::string name = entry.children[i].virtualName.c_str(); + if (!strcasecmp(name.substr(name.size() - 4).c_str(), ".txt")) + name = name.substr(0, name.size() - 4); + shaders.push_back(name); + } } else { - File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); + File::CreateDir(File::GetUserPath(D_SHADERS_IDX).c_str()); } } From a809feae1a786a5768ad65a92059f12f37f97760 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 04:19:11 -0600 Subject: [PATCH 131/625] Disable UBO buffer generation if hardware doesn't support it. --- .../Src/ProgramShaderCache.cpp | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index e43dfa9798..adaa4babc3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -102,9 +102,9 @@ namespace OGL // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } // We cache our uniform locations for now // Once we move up to a newer version of GLSL, ~1.30 @@ -114,8 +114,8 @@ namespace OGL //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 0; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + for(int a = 0; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader @@ -138,22 +138,22 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) + { + assert(Buffer > 1); + static int _Buffer = -1; + if(_Buffer != Buffer) { - assert(Buffer > 1); - static int _Buffer = -1; - if(_Buffer != Buffer) - { - _Buffer = Buffer; - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); - } - // Query for the offsets of each block variable - - // glBufferSubData expects data in bytes, so multiply count by four - // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - + _Buffer = Buffer; + glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); } + // Query for the offsets of each block variable + + // glBufferSubData expects data in bytes, so multiply count by four + // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location + glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); + + } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -164,11 +164,13 @@ namespace OGL { return pshaders[CurrentShaderProgram].program; } - void ProgramShaderCache::Init(void) + void ProgramShaderCache::Init(void) + { + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - // We have to get the UBO alignment here because - // if we generate a buffer that isn't aligned - // then the UBO will fail. GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); @@ -188,13 +190,15 @@ namespace OGL glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); } + } void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); iter++) iter->second.Destroy(); pshaders.clear(); - glDeleteBuffers(2, UBOBuffers); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + glDeleteBuffers(2, UBOBuffers); } } From 73a29bf6a1c8330ae826f67f6ecfdd041eae7a57 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 04:11:57 -0600 Subject: [PATCH 132/625] have separate variables/functions for VS/PS ubo stuff, array was confusing. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 14 ++--- .../Src/ProgramShaderCache.cpp | 57 ++++++++++--------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 7 ++- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 15 ++--- 4 files changed, 47 insertions(+), 46 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 2f782caa02..e30344edcb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -522,12 +522,12 @@ void SetPSConstant4fvByName(const char * name, unsigned int offset, const float void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; + float const f[4] = {f1, f2, f3, f4}; if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -544,8 +544,8 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); + return; } for (unsigned int a = 0; a < 10; ++a) { @@ -562,8 +562,8 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(0, const_number, f, count); - return; + ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, count); + return; } for (unsigned int a = 0; a < 10; ++a) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index adaa4babc3..3be1e76aff 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,7 +23,8 @@ namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::UBOBuffers[2]; + GLuint ProgramShaderCache::s_ps_ubo; + GLuint ProgramShaderCache::s_vs_ubo; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -138,22 +139,21 @@ namespace OGL CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count) - { - assert(Buffer > 1); - static int _Buffer = -1; - if(_Buffer != Buffer) + + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - _Buffer = Buffer; - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[_Buffer]); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } - // Query for the offsets of each block variable - - // glBufferSubData expects data in bytes, so multiply count by four - // Expects the offset in bytes as well, so multiply by *4 *4 since we are passing in a vec4 location - glBufferSubData(GL_UNIFORM_BUFFER, offset * 4 * 4, count * 4 * 4, f); - + + void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -173,32 +173,35 @@ namespace OGL { GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); - - glGenBuffers(2, UBOBuffers); - - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[0]); + // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); + glGenBuffers(1, &s_ps_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); + glGenBuffers(1, &s_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); + + glBindBuffer(GL_UNIFORM_BUFFER, 0); // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader - glBindBufferBase(GL_UNIFORM_BUFFER, 1, UBOBuffers[0]); - // Repeat for VS shader - glBindBuffer(GL_UNIFORM_BUFFER, UBOBuffers[1]); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * 4 * 4, Align), NULL, GL_DYNAMIC_DRAW); - glBindBufferBase(GL_UNIFORM_BUFFER, 2, UBOBuffers[1]); + glBindBufferBase(GL_UNIFORM_BUFFER, 1, s_ps_ubo); + glBindBufferBase(GL_UNIFORM_BUFFER, 2, s_vs_ubo); } } + void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); iter++) + for (; iter != pshaders.end(); ++iter) iter->second.Destroy(); pshaders.clear(); - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - glDeleteBuffers(2, UBOBuffers); + + glDeleteBuffers(1, &s_ps_ubo); + glDeleteBuffers(1, &s_ps_ubo); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 4c356f52d5..03bb58ce55 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -95,14 +95,15 @@ class ProgramShaderCache static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; - // For UBOS - static GLuint UBOBuffers[2]; // PS is 0, VS is 1 + static GLuint s_ps_ubo, s_vs_ubo; public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); - static void SetUniformObjects(int Buffer, unsigned int offset, const float *f, unsigned int count = 1); + + static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); + static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index b665aeae98..a88867095a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -240,14 +240,11 @@ void SetVSConstant4fvByName(const char * name, unsigned int offset, const float } void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float buf[4]; - buf[0] = f1; - buf[1] = f2; - buf[2] = f3; - buf[3] = f4; + float const buf[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, 1); return; } for( unsigned int a = 0; a < 9; ++a) @@ -265,7 +262,7 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, f); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, 1); return; } for( unsigned int a = 0; a < 9; ++a) @@ -283,7 +280,7 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co { if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, f, count); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, count); return; } for( unsigned int a = 0; a < 9; ++a) @@ -309,7 +306,7 @@ void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, co } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - ProgramShaderCache::SetUniformObjects(1, const_number, buf, count); + ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, count); return; } for( unsigned int a = 0; a < 9; ++a) From 8e80771670625fbb72c683f061965b8b12dc07bf Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 04:32:57 -0600 Subject: [PATCH 133/625] fix stupid indentation --- .../Src/ProgramShaderCache.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 3be1e76aff..dd4fd6923f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -140,18 +140,18 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - } - - void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + } + + void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } From 04836705b70bacaeebc4a4ae07ae050b764836a4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 05:15:08 -0600 Subject: [PATCH 134/625] Show a bit of information when using GLSL shaders. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index e30344edcb..b1d4e4b701 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -31,6 +31,8 @@ #include "ProgramShaderCache.h" #include "PixelShaderCache.h" #include "PixelShaderManager.h" +#include "OnScreenDisplay.h" +#include "StringUtil.h" #include "FileUtil.h" #include "Debugger.h" @@ -74,25 +76,28 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { - pSetPSConstant4f = SetGLSLPSConstant4f; - pSetPSConstant4fv = SetGLSLPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; - pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + pSetPSConstant4f = SetGLSLPSConstant4f; + pSetPSConstant4fv = SetGLSLPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; + pCompilePixelShader = CompileGLSLPixelShader; + // Should this be set here? + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); } else { - pSetPSConstant4f = SetCGPSConstant4f; - pSetPSConstant4fv = SetCGPSConstant4fv; - pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; - pCompilePixelShader = CompileCGPixelShader; - glEnable(GL_FRAGMENT_PROGRAM_ARB); + pSetPSConstant4f = SetCGPSConstant4f; + pSetPSConstant4fv = SetCGPSConstant4fv; + pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; + pCompilePixelShader = CompileCGPixelShader; + glEnable(GL_FRAGMENT_PROGRAM_ARB); } glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); From e641ede232c97cb1208051fbd74633af2eef3bc7 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 05:13:05 -0600 Subject: [PATCH 135/625] make use of glMapBuffer to set ubo data --- .../Src/ProgramShaderCache.cpp | 56 ++++++++++++++++--- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 3 + .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 + 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index dd4fd6923f..df01055e65 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,6 +25,8 @@ namespace OGL ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_ubo; GLuint ProgramShaderCache::s_vs_ubo; + float* ProgramShaderCache::s_ps_mapped_data; + float* ProgramShaderCache::s_vs_mapped_data; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -142,18 +144,55 @@ namespace OGL void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + if (!s_ps_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + s_ps_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + + if (!s_ps_mapped_data) + PanicAlert("glMapBuffer"); + } + + std::copy(f, f + count * 4, s_ps_mapped_data + offset * 4); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, count * sizeof(float) * 4, f); + if (!s_vs_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + s_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); + glBindBuffer(GL_UNIFORM_BUFFER, 0); + + if (!s_vs_mapped_data) + PanicAlert("glMapBuffer"); + } + + std::copy(f, f + count * 4, s_vs_mapped_data + offset * 4); + } + + void ProgramShaderCache::FlushConstants() + { + if (s_ps_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); + if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) + PanicAlert("glUnmapBuffer"); + s_ps_mapped_data = NULL; + } + + if (s_vs_mapped_data) + { + glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); + if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) + PanicAlert("glUnmapBuffer"); + s_vs_mapped_data = NULL; + } + glBindBuffer(GL_UNIFORM_BUFFER, 0); } - + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -200,8 +239,11 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); + // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" glDeleteBuffers(1, &s_ps_ubo); - glDeleteBuffers(1, &s_ps_ubo); + glDeleteBuffers(1, &s_vs_ubo); + s_ps_ubo = s_vs_ubo = 0; + s_ps_mapped_data = s_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 03bb58ce55..56026a5c4d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -96,6 +96,7 @@ class ProgramShaderCache static std::pair CurrentShaderProgram; static GLuint s_ps_ubo, s_vs_ubo; + static float *s_ps_mapped_data, *s_vs_mapped_data; public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); @@ -104,6 +105,8 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); + + static void FlushConstants(); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 8756462dbc..499c216f2e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -206,6 +206,9 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); + + if(g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + ProgramShaderCache::FlushConstants(); // setup the pointers if (g_nativeVertexFmt) From d9117ab6a1da84618a123903217059ef72a396a1 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 06:02:04 -0600 Subject: [PATCH 136/625] try combining vs/ps ubo --- .../Src/ProgramShaderCache.cpp | 80 ++++++++----------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 8 +- 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index df01055e65..bff25a5a65 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,10 +23,9 @@ namespace OGL { GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::s_ps_ubo; - GLuint ProgramShaderCache::s_vs_ubo; - float* ProgramShaderCache::s_ps_mapped_data; - float* ProgramShaderCache::s_vs_mapped_data; + GLuint ProgramShaderCache::s_ps_vs_ubo; + float* ProgramShaderCache::s_ps_vs_mapped_data; + GLintptr ProgramShaderCache::s_vs_data_offset; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -142,55 +141,40 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + void ProgramShaderCache::MapBuffer() { - if (!s_ps_mapped_data) + if (!s_ps_vs_mapped_data) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - s_ps_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + s_ps_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - if (!s_ps_mapped_data) + if (!s_ps_vs_mapped_data) PanicAlert("glMapBuffer"); } + } - std::copy(f, f + count * 4, s_ps_mapped_data + offset * 4); + void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) + { + MapBuffer(); + + std::copy(f, f + count * 4, s_ps_vs_mapped_data + offset * 4); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - if (!s_vs_mapped_data) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - s_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - glBindBuffer(GL_UNIFORM_BUFFER, 0); + MapBuffer(); - if (!s_vs_mapped_data) - PanicAlert("glMapBuffer"); - } - - std::copy(f, f + count * 4, s_vs_mapped_data + offset * 4); + // TODO: division = hax + std::copy(f, f + count * 4, s_ps_vs_mapped_data + (s_vs_data_offset / sizeof(float)) + offset * 4); } void ProgramShaderCache::FlushConstants() { - if (s_ps_mapped_data) + if (s_ps_vs_mapped_data) { - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) PanicAlert("glUnmapBuffer"); - s_ps_mapped_data = NULL; + s_ps_vs_mapped_data = NULL; } - - if (s_vs_mapped_data) - { - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) - PanicAlert("glUnmapBuffer"); - s_vs_mapped_data = NULL; - } - - glBindBuffer(GL_UNIFORM_BUFFER, 0); } GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } @@ -212,23 +196,23 @@ namespace OGL { GLint Align; glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + + GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); + GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); + s_vs_data_offset = ps_data_size; // We multiply by *4*4 because we need to get down to basic machine units. // So multiply by four to get how many floats we have from vec4s // Then once more to get bytes - glGenBuffers(1, &s_ps_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_ubo); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); - glGenBuffers(1, &s_vs_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_vs_ubo); - glBufferData(GL_UNIFORM_BUFFER, ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align), NULL, GL_DYNAMIC_DRAW); - - glBindBuffer(GL_UNIFORM_BUFFER, 0); + glGenBuffers(1, &s_ps_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); + // Now bind the buffer to the index point // We know PS is 0 since we have it statically set in the shader // Repeat for VS shader - glBindBufferBase(GL_UNIFORM_BUFFER, 1, s_ps_ubo); - glBindBufferBase(GL_UNIFORM_BUFFER, 2, s_vs_ubo); + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } } @@ -239,11 +223,11 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); + glBindBuffer(GL_UNIFORM_BUFFER, 0); // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" - glDeleteBuffers(1, &s_ps_ubo); - glDeleteBuffers(1, &s_vs_ubo); - s_ps_ubo = s_vs_ubo = 0; - s_ps_mapped_data = s_vs_mapped_data = NULL; + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + s_ps_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 56026a5c4d..20a33f184b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -95,8 +95,12 @@ class ProgramShaderCache static GLuint CurrentFShader, CurrentVShader, CurrentProgram; static std::pair CurrentShaderProgram; - static GLuint s_ps_ubo, s_vs_ubo; - static float *s_ps_mapped_data, *s_vs_mapped_data; + static GLuint s_ps_vs_ubo; + static float* s_ps_vs_mapped_data; + static GLintptr s_vs_data_offset; + + static void MapBuffer(); + public: static PROGRAMSHADER GetShaderProgram(void); static GLint GetAttr(int num); From d70726b035cc9d3dc7c342018f5e84efffe04bf1 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 11 Dec 2011 06:11:38 -0600 Subject: [PATCH 137/625] glMapBuffer was slow, go back to glBufferSubData, single combined ps/vs ubo now --- .../Src/ProgramShaderCache.cpp | 37 +++---------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 5 --- .../Plugin_VideoOGL/Src/VertexManager.cpp | 3 -- 3 files changed, 5 insertions(+), 40 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index bff25a5a65..10c15aae36 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -24,7 +24,6 @@ namespace OGL GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; - float* ProgramShaderCache::s_ps_vs_mapped_data; GLintptr ProgramShaderCache::s_vs_data_offset; std::pair ProgramShaderCache::CurrentShaderProgram; @@ -141,42 +140,18 @@ namespace OGL CurrentProgram = entry.program.glprogid; } - void ProgramShaderCache::MapBuffer() - { - if (!s_ps_vs_mapped_data) - { - s_ps_vs_mapped_data = reinterpret_cast(glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY)); - - if (!s_ps_vs_mapped_data) - PanicAlert("glMapBuffer"); - } - } - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - MapBuffer(); - - std::copy(f, f + count * 4, s_ps_vs_mapped_data + offset * 4); + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); } void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) { - MapBuffer(); - - // TODO: division = hax - std::copy(f, f + count * 4, s_ps_vs_mapped_data + (s_vs_data_offset / sizeof(float)) + offset * 4); + glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); } - - void ProgramShaderCache::FlushConstants() - { - if (s_ps_vs_mapped_data) - { - if (!glUnmapBuffer(GL_UNIFORM_BUFFER)) - PanicAlert("glUnmapBuffer"); - s_ps_vs_mapped_data = NULL; - } - } - + GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } GLint ProgramShaderCache::GetAttr(int num) @@ -224,10 +199,8 @@ namespace OGL pshaders.clear(); glBindBuffer(GL_UNIFORM_BUFFER, 0); - // "A buffer object's mapped data store is automatically unmapped when the buffer object is deleted" glDeleteBuffers(1, &s_ps_vs_ubo); s_ps_vs_ubo = 0; - s_ps_vs_mapped_data = NULL; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 20a33f184b..26d5735ce6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -96,10 +96,7 @@ class ProgramShaderCache static std::pair CurrentShaderProgram; static GLuint s_ps_vs_ubo; - static float* s_ps_vs_mapped_data; static GLintptr s_vs_data_offset; - - static void MapBuffer(); public: static PROGRAMSHADER GetShaderProgram(void); @@ -109,8 +106,6 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); - - static void FlushConstants(); static void Init(void); static void Shutdown(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 499c216f2e..8756462dbc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -206,9 +206,6 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); - - if(g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - ProgramShaderCache::FlushConstants(); // setup the pointers if (g_nativeVertexFmt) From ba12c0b4f51aafd814d9d400869586d204cf43df Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 06:18:01 -0600 Subject: [PATCH 138/625] Instead of querying the vertex attribute location. Let's bind it to where CG expects it to be as well. Was causing problems when we were trying to activate the components below and they weren't available. This fixes cubivore with GLSL shader. Also any other game that uses 3 normal pointers. --- .../Plugin_VideoOGL/Src/NativeVertexFormat.cpp | 17 +++-------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 18 +++--------------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 -- 3 files changed, 6 insertions(+), 31 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index b5ba60e632..02710405fb 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -192,15 +192,8 @@ void GLVertexFormat::SetupVertexPointers() { if (vtx_decl.num_normals >= 1) { glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); if (vtx_decl.num_normals == 3) { - GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB; - if(g_ActiveConfig.bUseGLSL){ - varLocation1 = OGL::ProgramShaderCache::GetAttr(0); - varLocation2 = OGL::ProgramShaderCache::GetAttr(1); - } - if(varLocation1 > 0) - glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - if(varLocation2 > 0) - glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); + glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); + glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); } } @@ -224,11 +217,7 @@ void GLVertexFormat::SetupVertexPointers() { } if (vtx_decl.posmtx_offset != -1) { - GLint varLocation = SHADER_POSMTX_ATTRIB; - if(g_ActiveConfig.bUseGLSL) - varLocation = OGL::ProgramShaderCache::GetAttr(2); - if(varLocation > 0) - glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); + glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); } #endif } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 10c15aae36..2f6aa691de 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -121,18 +121,10 @@ namespace OGL // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader { - entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1"); - entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2"); - entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx"); - if(entry.program.attrLoc[0] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[0]); - if(entry.program.attrLoc[1] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[1]); - if(entry.program.attrLoc[2] > 0) - glEnableVertexAttribArray(entry.program.attrLoc[2]); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); } - else - entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0; pshaders[ShaderPair] = entry; @@ -154,10 +146,6 @@ namespace OGL GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - GLint ProgramShaderCache::GetAttr(int num) - { - return pshaders[CurrentShaderProgram].program.attrLoc[num]; - } PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) { return pshaders[CurrentShaderProgram].program; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 26d5735ce6..4830f28849 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -72,7 +72,6 @@ struct PROGRAMSHADER PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; - GLint attrLoc[3]; GLint UniformLocations[NUM_UNIFORMS]; }; @@ -100,7 +99,6 @@ class ProgramShaderCache public: static PROGRAMSHADER GetShaderProgram(void); - static GLint GetAttr(int num); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); From 7f12daa0142a4e7210fa3d9ef1241083e89ee7f7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 11 Dec 2011 07:02:13 -0600 Subject: [PATCH 139/625] Looks like we make use of fmod, make a GLSL function for it! --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index cc350c7e0a..3833c91c93 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -582,6 +582,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + // A function here + // Fmod implementation gleaned from Nvidia + // At http://http.developer.nvidia.com/Cg/fmod.html + WRITE(p, "float fmod( float x, float y )\n"); + WRITE(p, "{\n"); + WRITE(p, "float z = fract( abs( x / y) ) * abs( y );\n"); + WRITE(p, "return (x < 0) ? -z : z;\n"); + WRITE(p, "}\n"); + for (int i = 0; i < 8; ++i) WRITE(p, "%suniform sampler2D samp%d;\n", WriteBinding(ApiType, i), i); From 076c1a5aa7e88adba12138658250e370aecbe523 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 15 Dec 2011 15:48:21 -0600 Subject: [PATCH 140/625] Make sure not to try and bind UBO locations when it isn't supported --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 2f6aa691de..5d00ce2529 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -101,7 +101,7 @@ namespace OGL // points statically set in the shader source // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - //if(!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); From 7aad45658ee30ad6b90f7d368e413afb519bfcc4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 16 Dec 2011 23:18:24 -0600 Subject: [PATCH 141/625] Add a GUI option to use GLSL shaders. Also fix a small typo. --- Source/Core/DolphinWX/Src/VideoConfigDiag.cpp | 12 ++++++++++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 20bd4dfb38..2372521be4 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -115,6 +115,7 @@ wxString use_ffv1_desc = wxTRANSLATE("Encode frame dumps using the FFV1 codec.\n #endif wxString free_look_desc = wxTRANSLATE("This feature allows you to change the game's camera.\nHold the right mouse button and move the mouse to pan the camera around. Hold SHIFT and press one of the WASD keys to move the camera by a certain step distance (SHIFT+0 to move faster and SHIFT+9 to move slower). Press SHIFT+R to reset the camera.\n\nIf unsure, leave this unchecked."); wxString crop_desc = wxTRANSLATE("Crop the picture from 4:3 to 5:4 or from 16:9 to 16:10.\n\nIf unsure, leave this unchecked."); +wxString GLSL_desc = wxTRANSLATE("Uses GLSL shaders in place of Nvidia CG Shaders\n\nIf unsure, leave this unchecked."); wxString opencl_desc = wxTRANSLATE("[EXPERIMENTAL]\nAims to speed up emulation by offloading texture decoding to the GPU using the OpenCL framework.\nHowever, right now it's known to cause texture defects in various games. Also it's slower than regular CPU texture decoding in most cases.\n\nIf unsure, leave this unchecked."); wxString dlc_desc = wxTRANSLATE("[EXPERIMENTAL]\nSpeeds up emulation a bit by caching display lists.\nPossibly causes issues though.\n\nIf unsure, leave this unchecked."); wxString omp_desc = wxTRANSLATE("Use multiple threads to decode textures.\nMight result in a speedup (especially on CPUs with more than two cores).\n\nIf unsure, leave this unchecked."); @@ -570,6 +571,17 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con szr_misc->Add(cb_prog_scan); } + // GLSL Option + { + if(strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) + { + wxCheckBox* const cb_GLSL = CreateCheckBox(page_advanced, _("Use GLSL Shaders"), wxGetTranslation(GLSL_desc), vconfig.bUseGLSL); + szr_misc->Add(cb_GLSL); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + cb_GLSL->Disable(); + } + } + wxStaticBoxSizer* const group_misc = new wxStaticBoxSizer(wxVERTICAL, page_advanced, _("Misc")); szr_advanced->Add(group_misc, 0, wxEXPAND | wxALL, 5); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 5d00ce2529..98efbb000b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -101,7 +101,7 @@ namespace OGL // points statically set in the shader source // We should only need these two functions when we don't support binding but do support UBO // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); glUniformBlockBinding( entry.program.glprogid, 1, 2 ); From ddd4360d6df89bc82c20c1d5ef47ee1fc94180e7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 16 Dec 2011 23:37:22 -0600 Subject: [PATCH 142/625] Only delete this buffer if we support it. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 98efbb000b..c90f151421 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -186,9 +186,12 @@ namespace OGL iter->second.Destroy(); pshaders.clear(); - glBindBuffer(GL_UNIFORM_BUFFER, 0); - glDeleteBuffers(1, &s_ps_vs_ubo); - s_ps_vs_ubo = 0; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glBindBuffer(GL_UNIFORM_BUFFER, 0); + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + } } } From f8d0c28e537faa069a6f0f27f8bc205cae6b78d6 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 17 Dec 2011 01:06:55 -0600 Subject: [PATCH 143/625] Set Sampler values at program make time instead of every frame. Fix an issue when The user had UBO support but not Binding support. --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 217 ++++++------------ .../Plugin_VideoOGL/Src/PixelShaderCache.h | 4 - .../Src/ProgramShaderCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 3 - .../Plugin_VideoOGL/Src/TextureConverter.cpp | 2 - .../Plugin_VideoOGL/Src/VertexManager.cpp | 19 -- 6 files changed, 79 insertions(+), 176 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index b1d4e4b701..bb0f47db53 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -119,141 +119,81 @@ void PixelShaderCache::Init() if(g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { - sprintf(pmatrixprog, "#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" - "%s\n" - "%svec4 "I_COLORS"[7];\n" - "%s\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } - else - { - sprintf(pmatrixprog, "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "%s\n" - "%svec4 "I_COLORS"[7];\n" - "%s\n" - "void main(){\n" - "vec4 Temp0, Temp1;\n" - "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" - "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp0 = Temp0 + K0;\n" - "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } + sprintf(pmatrixprog, "#version %s\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "%s\n" + "%suniform sampler2DRect samp0;\n" + "%s\n" + "%svec4 "I_COLORS"[7];\n" + "%s\n" + "void main(){\n" + "vec4 Temp0, Temp1;\n" + "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" + "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 + K0;\n" + "Temp0 = floor(Temp0);\n" + "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "}\n", + (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "layout(binding = 0) " : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - { - sprintf(pmatrixprog, "#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" - "%s\n" - "%svec4 "I_COLORS"[5];\n" - "%s\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140, binding = 1) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } - else - { - sprintf(pmatrixprog, "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "uniform sampler2DRect samp0;\n" - "%s\n" - "%svec4 "I_COLORS"[5];\n" - "%s\n" - "void main(){\n" - "vec4 R0, R1, R2;\n" - "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" - "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" - "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "R0.x = R2.x * K0.x;\n" - "R0.x = floor(R0).x;\n" - "R0.yzw = (R0 - R0.x).yzw;\n" - "R0.yzw = (R0 * K0.z).yzw;\n" - "R0.y = floor(R0).y;\n" - "R0.zw = (R0 - R0.y).zw;\n" - "R0.zw = (R0 * K0.z).zw;\n" - "R0.z = floor(R0).z;\n" - "R0.w = R0.x;\n" - "R0 = R0 * K0.y;\n" - "R0.w = (R0 * K1.x).w;\n" - "R0.w = floor(R0).w;\n" - "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" - "}\n", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", - C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - } + + sprintf(pmatrixprog, "#version %s\n" + "#extension GL_ARB_texture_rectangle : enable\n" + "%s\n" + "%suniform sampler2DRect samp0;\n" + "%s\n" + "%svec4 "I_COLORS"[5];\n" + "%s\n" + "void main(){\n" + "vec4 R0, R1, R2;\n" + "vec4 K0 = vec4(255.99998474121, 0.003921568627451, 256.0, 0.0);\n" + "vec4 K1 = vec4(15.0, 0.066666666666, 0.0, 0.0);\n" + "R2 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" + "R0.x = R2.x * K0.x;\n" + "R0.x = floor(R0).x;\n" + "R0.yzw = (R0 - R0.x).yzw;\n" + "R0.yzw = (R0 * K0.z).yzw;\n" + "R0.y = floor(R0).y;\n" + "R0.zw = (R0 - R0.y).zw;\n" + "R0.zw = (R0 * K0.z).zw;\n" + "R0.z = floor(R0).z;\n" + "R0.w = R0.x;\n" + "R0 = R0 * K0.y;\n" + "R0.w = (R0 * K1.x).w;\n" + "R0.w = floor(R0).w;\n" + "R0.w = (R0 * K1.y).w;\n" + "R1.x = dot(R0, "I_COLORS"[%d]);\n" + "R1.y = dot(R0, "I_COLORS"[%d]);\n" + "R1.z = dot(R0, "I_COLORS"[%d]);\n" + "R1.w = dot(R0, "I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "}\n", + (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "layout(binding = 0) " : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "layout(std140) uniform PSBlock {" : "", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", + C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); @@ -492,23 +432,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) ps.bGLSL = true; return true; } -void PixelShaderCache::SetPSSampler(const char * name, unsigned int Tex) -{ - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - return; - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) - { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform1i(tmp.UniformLocations[a], Tex); - return; - } - } -} void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 6547b95234..b0328f336c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -78,8 +78,6 @@ class PixelShaderCache public: static void Init(); static void Shutdown(); - // This is a GLSL only function - static void SetPSSampler(const char * name, unsigned int Tex); static FRAGMENTSHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 components); static bool CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram); @@ -88,8 +86,6 @@ public: static GLuint GetDepthMatrixProgram(); - static bool SupportsBinding(); - static void SetCurrentShader(GLuint Shader); static void DisableShader(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index c90f151421..14542bf68f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -114,9 +114,17 @@ namespace OGL //For some reason this fails on my hardware //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + else if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } // Need to get some attribute locations if(uid.uid.vsid != 0) // We have no vertex Shader diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 0feb7ee3ac..1ca7cae1c2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -301,10 +301,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtual_width, virtual_height); if(g_ActiveConfig.bUseGLSL) - { ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); - PixelShaderCache::SetPSSampler("samp0", 0); - } else PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); PixelShaderManager::SetColorMatrix(colmat); // set transformation diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index f8bdf3f946..abe5a23f02 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -314,8 +314,6 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, } GL_REPORT_ERRORD(); - if(g_ActiveConfig.bUseGLSL) - PixelShaderCache::SetPSSampler("samp0", 0); glViewport(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 8756462dbc..7631fd9f05 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -211,16 +211,6 @@ void VertexManager::vFlush() if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); GL_REPORT_ERRORD(); - if(g_ActiveConfig.bUseGLSL) - for (int i = 0; i < 8; i++) - { - if (usedtextures & (1 << i)) - { - char tmp[16]; - sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? - PixelShaderCache::SetPSSampler(tmp, i); - } - } Draw(); @@ -235,15 +225,6 @@ void VertexManager::vFlush() PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); - for (int i = 0; i < 8; i++) - { - if (usedtextures & (1 << i)) - { - char tmp[16]; - sprintf(tmp, "samp%d", i); // Bake this in to something so we don't have to sprintf? - PixelShaderCache::SetPSSampler(tmp, i); - } - } } else if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); From 9c09e1973a6868ce35c3d309088da01b9f6c4713 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 17 Dec 2011 01:17:11 -0600 Subject: [PATCH 144/625] Some shader programs don't come with Vertex shaders attached, don't try to bind a Vertex Uniform block then. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 14542bf68f..7ae733bcf1 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -104,7 +104,8 @@ namespace OGL if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + if(uid.uid.vsid != 0) // Some things have no vertex shader + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); } // We cache our uniform locations for now From 66a245dd68ede3c4402139c1d35aa833ef681199 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 01:51:15 -0600 Subject: [PATCH 145/625] Remove this silliness --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 10 ---------- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 10 ---------- 2 files changed, 20 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index 7d309dee38..b81d051a0f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -121,14 +121,4 @@ extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif -// XXX: Dual-source blending in OpenGL does not work correctly yet. To make it -// work, we may need to use glBindFragDataLocation. To use that, we need to -// use GLSL shaders across the whole pipeline. Yikes! -#define USE_DUAL_SOURCE_BLEND - -// Can't get defined on my system for some reason... -#ifndef GL_ONE_MINUS_SRC1_ALPHA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#endif - #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index fe9f9e7822..8b70cf5b8f 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -935,11 +935,9 @@ void Renderer::SetBlendMode(bool forceUpdate) u32 changes = forceUpdate ? 0xFFFFFFFF : newval ^ s_blendMode; -#ifdef USE_DUAL_SOURCE_BLEND bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; bool useDualSource = useDstAlpha; -#endif if (changes & 1) // blend enable change @@ -947,19 +945,14 @@ void Renderer::SetBlendMode(bool forceUpdate) if (changes & 4) { -#ifdef USE_DUAL_SOURCE_BLEND // subtract enable change GLenum equation = newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD; GLenum equationAlpha = useDualSource ? GL_FUNC_ADD : equation; glBlendEquationSeparate(equation, equationAlpha); -#else - glBlendEquation(newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD); -#endif } if (changes & 0x1F8) { -#ifdef USE_DUAL_SOURCE_BLEND GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; GLenum srcFactorAlpha = srcFactor; GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; @@ -982,9 +975,6 @@ void Renderer::SetBlendMode(bool forceUpdate) // blend RGB change glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); -#else - glBlendFunc(glSrcFactors[(newval >> 3) & 7], glDestFactors[(newval >> 6) & 7]); -#endif } s_blendMode = newval; From c76593f6a2f23665bfacd09a0ca0bebc37b00304 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 21:06:28 -0600 Subject: [PATCH 146/625] Looky, OSX found an issue for me. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 3833c91c93..9bb897dcc9 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -730,13 +730,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // wpos is in w of first 4 texcoords if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - for (int i = 0; i < 8; ++i) - WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + for (int i = 0; i < 8; ++i) + WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); } else { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? ".xyz" : ""); + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? "" : ".xyz"); } } WRITE(p, "void main()\n{\n"); From 6759ee701d3deb3d2966f871b7e44f1038194d74 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 18 Dec 2011 23:31:00 -0600 Subject: [PATCH 147/625] This thing fails when we don't support binding. Not 100% sure why I need to set this multiple times. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 7ae733bcf1..b83e4cf0ac 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -77,6 +77,13 @@ namespace OGL { PCacheEntry &entry = iter->second; glUseProgram(entry.program.glprogid); + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Why do we need to set this again here when we don't support binding? + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; return; From 1aad2e9e56311607879dc407388c6e1d12cdd978 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 19 Dec 2011 00:15:07 -0600 Subject: [PATCH 148/625] There we go, actually found the issue. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b83e4cf0ac..d38a4607e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -77,13 +77,6 @@ namespace OGL { PCacheEntry &entry = iter->second; glUseProgram(entry.program.glprogid); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Why do we need to set this again here when we don't support binding? - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; return; @@ -125,11 +118,10 @@ namespace OGL if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for(int a = 0; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - else if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) for(int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if(entry.program.UniformLocations[a] != -1) glUniform1i(entry.program.UniformLocations[a], a); } From 7cb3d86e31bf4f2e38b90640e614be63e327bcda Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 19 Dec 2011 19:10:05 -0600 Subject: [PATCH 149/625] Add a define back so we work without GLEW 1.6, Also I missed a line when I was fixing binding sampler locations last night when I was tired. --- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 5 +++++ Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index b81d051a0f..bfde884ccd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -121,4 +121,9 @@ extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif +// Isn't defined if we aren't using GLEW 1.6 +#ifndef GL_ONE_MINUS_SRC1_ALPHA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#endif + #endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d38a4607e4..dc4b4e9822 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -116,12 +116,13 @@ namespace OGL //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); //Got to do it this crappy way. if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 0; a < NUM_UNIFORMS; ++a) + for(int a = 8; a < NUM_UNIFORMS; ++a) entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) for(int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); if(entry.program.UniformLocations[a] != -1) glUniform1i(entry.program.UniformLocations[a], a); } From ac77bbd47b61dde38979addc758629cc7e2c40f5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 20 Dec 2011 21:55:11 -0600 Subject: [PATCH 150/625] Move the GLSL extension checks over here so it is nicer. --- .../Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp | 10 ---------- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 11 +++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index bb0f47db53..6840baded8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -80,16 +80,6 @@ void PixelShaderCache::Init() pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; - // Should this be set here? - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) - g_Config.backend_info.bSupportsGLSLUBO = true; - - UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", - g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); } else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 8b70cf5b8f..cf8add6ed9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -315,6 +315,17 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; + + if (glewIsSupported("GL_ARB_shading_language_420pack")) + g_Config.backend_info.bSupportsGLSLBinding = true; + if (glewIsSupported("GL_ARB_uniform_buffer_object")) + g_Config.backend_info.bSupportsGLSLUBO = true; + + UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); + s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); s_MSAACoverageSamples = GetNumMSAACoverageSamples(s_LastMultisampleMode); From ef1e157786d5e694909326fbbe9537fd654a4479 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 20 Dec 2011 23:07:42 -0600 Subject: [PATCH 151/625] Go back to using glGetString with GL_EXTENSIONS because glew 1.7 is required to check for newer 4.2 extensions that way. --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index cf8add6ed9..246a5778f0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -316,9 +316,9 @@ Renderer::Renderer() s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - if (glewIsSupported("GL_ARB_shading_language_420pack")) + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - if (glewIsSupported("GL_ARB_uniform_buffer_object")) + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; UpdateActiveConfig(); From d012c75005a66f0bc1375816fd2155f97516cdde Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 21 Dec 2011 00:15:48 -0600 Subject: [PATCH 152/625] Implement Program shaders cache. Seems to reduce a small amount of stuttering when F-Zero starts. Did it because I can :| --- Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Src/ProgramShaderCache.cpp | 112 ++++++++++++------ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 59 ++++++++- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 9 +- 4 files changed, 139 insertions(+), 42 deletions(-) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index fa6740c3cb..b27893f0ae 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -167,6 +167,7 @@ struct VideoConfig bool bSupportsGLSL; bool bSupportsGLSLBinding; bool bSupportsGLSLUBO; + bool bSupportsGLSLCache; } backend_info; }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index dc4b4e9822..70655294c7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -26,6 +26,9 @@ namespace OGL GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; + LinearDiskCache g_program_disk_cache; + GLenum ProgramFormat; + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { // SAMPLERS @@ -53,6 +56,48 @@ namespace OGL I_DEPTHPARAMS, }; + void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) + { + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glUniformBlockBinding( entry.program.glprogid, 0, 1 ); + if(uid.uid.vsid != 0) // Some things have no vertex shader + glUniformBlockBinding( entry.program.glprogid, 1, 2 ); + } + + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + //For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //Got to do it this crappy way. + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for(int a = 8; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + for(int a = 0; a < 8; ++a) + { + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if(entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); + } + + // Need to get some attribute locations + if(uid.uid.vsid != 0) // We have no vertex Shader + { + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + } + } + + void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { PROGRAMUID uid; @@ -92,49 +137,19 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.vsid); glAttachShader(entry.program.glprogid, entry.program.psid); + + + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); glLinkProgram(entry.program.glprogid); glUseProgram(entry.program.glprogid); - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - if(uid.uid.vsid != 0) // Some things have no vertex shader - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } - - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } - - // Need to get some attribute locations - if(uid.uid.vsid != 0) // We have no vertex Shader - { - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); - } + SetProgramVariables(entry, uid); + // Add it to our cache + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + g_program_disk_cache.Append(uid, entry.Data(), entry.Size()); pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; @@ -186,10 +201,33 @@ namespace OGL glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } + + // Read our shader cache, only if supported + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + char cache_filename[MAX_PATH]; + sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; + g_program_disk_cache.OpenAndRead(cache_filename, inserter); + + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint Formats[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + ProgramFormat = (GLenum)Formats[0]; // We don't really care about format + } } void ProgramShaderCache::Shutdown(void) { + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + g_program_disk_cache.Sync(); + g_program_disk_cache.Close(); + } + PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) iter->second.Destroy(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 4830f28849..f2987965dc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -25,6 +25,9 @@ #include "PixelShaderGen.h" #include "VertexShaderGen.h" +#include "LinearDiskCache.h" +#include "ConfigManager.h" + union PID { struct { @@ -65,14 +68,28 @@ namespace OGL { #define NUM_UNIFORMS 27 extern const char *UniformNames[NUM_UNIFORMS]; - +extern GLenum ProgramFormat; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){} + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; GLint UniformLocations[NUM_UNIFORMS]; + GLint binaryLength; + u8 *Data() + { + glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); + u8* binary = (u8*)malloc(binaryLength); + glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); + return binary; + } + GLint Size() + { + if(!binaryLength) + glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); + return binaryLength; + } }; @@ -87,7 +104,44 @@ class ProgramShaderCache glDeleteProgram(program.glprogid); program.glprogid = 0; } + u8* Data() + { + return program.Data(); + } + GLint Size() + { + return program.Size(); + } }; + + class ProgramShaderCacheInserter : public LinearDiskCacheReader + { + public: + void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + { + PCacheEntry entry; + + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + entry.program.vsid = key.uid.vsid; + entry.program.psid = key.uid.psid; + + entry.program.glprogid = glCreateProgram(); + + glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); + + GLint success; + glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); + + if (success) + { + pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; + glUseProgram(entry.program.glprogid); + SetProgramVariables(entry, key); + } + } + }; + typedef std::map, PCacheEntry> PCache; static PCache pshaders; @@ -96,6 +150,7 @@ class ProgramShaderCache static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; + static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); public: static PROGRAMSHADER GetShaderProgram(void); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 246a5778f0..2a24bf1138 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -315,16 +315,19 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - + // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) + g_Config.backend_info.bSupportsGLSLCache = true; UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s", + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False").c_str(), 5000); + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); From 9996f2712046b7d899cc52a0d4ae6f021ef918f5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 21 Dec 2011 01:29:29 -0600 Subject: [PATCH 153/625] Give OSX users more of a chance of supporting Single pass DSB in the future. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 5 ++- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 32 +++++++++++++------ Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Src/ProgramShaderCache.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 ++ .../Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 9bb897dcc9..2cf1a33fed 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -572,6 +572,9 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } else WRITE(p, "#version 120\n"); + + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -630,7 +633,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "\n"); if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); + WRITE(p, "layout(std140) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 415ff4614c..5ae3e84f56 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -204,6 +204,8 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#define ATTRIN attribute\n"); WRITE(p, "#define ATTROUT attribute\n"); } + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); WRITE(p, "#define float3 vec3\n"); @@ -217,7 +219,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // uniforms if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "layout(std140%s) uniform VSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 2" : ""); + WRITE(p, "layout(std140) uniform VSBlock {\n"); WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); @@ -241,21 +243,33 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & VB_HAS_NRM0) WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); - if (components & VB_HAS_POSMTXIDX) + if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + { + if (components & VB_HAS_POSMTXIDX) + WRITE(p, "layout(location = %d) ATTRIN float fposmtx;\n", SHADER_POSMTX_ATTRIB); + if (components & VB_HAS_NRM1) + WRITE(p, "layout(location = %d) ATTRIN float3 rawnorm1;\n", SHADER_NORM1_ATTRIB); + if (components & VB_HAS_NRM2) + WRITE(p, "layout(location = %d) ATTRIN float3 rawnorm2;\n", SHADER_NORM2_ATTRIB); + } + else + { + if (components & VB_HAS_POSMTXIDX) WRITE(p, "ATTRIN float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); - if (components & VB_HAS_NRM1) + if (components & VB_HAS_NRM1) WRITE(p, "ATTRIN float3 rawnorm1; // ATTR%d,\n", SHADER_NORM1_ATTRIB); - if (components & VB_HAS_NRM2) + if (components & VB_HAS_NRM2) WRITE(p, "ATTRIN float3 rawnorm2; // ATTR%d,\n", SHADER_NORM2_ATTRIB); + } if (components & VB_HAS_COL0) - WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); + WRITE(p, " float4 color0 = gl_Color; // COLOR0,\n"); if (components & VB_HAS_COL1) - WRITE(p, " float4 color1 = gl_SecondaryColor; // COLOR1,\n"); + WRITE(p, " float4 color1 = gl_SecondaryColor; // COLOR1,\n"); for (int i = 0; i < 8; ++i) { - u32 hastexmtx = (components & (VB_HAS_TEXMTXIDX0< Date: Wed, 21 Dec 2011 22:33:33 +0000 Subject: [PATCH 154/625] Missed a if, don't want people crashing now do we? --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 5c143c010c..0429b89e30 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -138,8 +138,8 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.psid); - - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); glLinkProgram(entry.program.glprogid); From 189d12b61c3831dcda8499c5f2fbcf46712661d5 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 00:24:13 -0600 Subject: [PATCH 155/625] If CG isn't available, still compile and fallback on GLSL --- CMakeLists.txt | 6 ++++++ Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 2 +- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 3 +-- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 5 +++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 37e4f14f5e..467aeca777 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -475,6 +475,12 @@ else() include_directories(Externals) endif(NOT CG_FOUND) check_lib(CGGL CgGL Cg/cgGL.h) + if(NOT CG_FOUND) + message("CG not found, Building without") + add_definitions(-DHAVE_CG=0) + else() + add_definitions(-DHAVE_CG=1) + endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") diff --git a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt index 4c4bbbe649..2a43a85b92 100644 --- a/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt +++ b/Source/Plugins/Plugin_VideoOGL/CMakeLists.txt @@ -23,7 +23,7 @@ if(wxWidgets_FOUND) set(LIBS ${LIBS} ${wxWidgets_LIBRARIES}) endif(wxWidgets_FOUND) -if(WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if(HAVE_CG AND (APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")) set(LIBS ${LIBS} Cg CgGL) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") list(APPEND LIBS "${CMAKE_SOURCE_DIR}/Externals/Cg/Cg.framework") diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index bfde884ccd..db7cf822e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -113,10 +113,9 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line); #define GL_REPORT_PROGRAM_ERROR() (void)0 #endif -#if defined __APPLE__ || defined __linux__ || defined _WIN32 +#if HAVE_CG && (defined __APPLE__ || defined __linux__ || defined _WIN32) #include #include -#define HAVE_CG 1 extern CGcontext g_cgcontext; extern CGprofile g_cgvProf, g_cgfProf; #endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index da9ba40108..f4614294fd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -438,6 +438,11 @@ Renderer::Renderer() cgGLSetOptimalOptions(g_cgfProf); } } +#else + // If we don't have Nvidia CG, we HAVE to use GLSL + g_Config.bUseGLSL = true; + + UpdateActiveConfig(); #endif // HAVE_CG int nenvvertparams, nenvfragparams, naddrregisters[2]; From 4eb227bd4ce853f2df9af3e18ef317d5a15edff8 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 00:37:13 -0600 Subject: [PATCH 156/625] If user doesn't compile with glew 1.6, cut out program binaries so everything still compiles. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 ++++-- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 0429b89e30..628cbae865 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -137,9 +137,10 @@ namespace OGL glAttachShader(entry.program.glprogid, entry.program.vsid); glAttachShader(entry.program.glprogid, entry.program.psid); - + #ifdef GLEW_VERSION_4_0 if (g_ActiveConfig.backend_info.bSupportsGLSLCache) glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + #endif glLinkProgram(entry.program.glprogid); @@ -201,7 +202,7 @@ namespace OGL glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } - + #ifdef GLEW_VERSION_4_0 // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { @@ -218,6 +219,7 @@ namespace OGL glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); ProgramFormat = (GLenum)Formats[0]; // We don't really care about format } + #endif } void ProgramShaderCache::Shutdown(void) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index f2987965dc..51638cc1e4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -79,16 +79,24 @@ struct PROGRAMSHADER GLint binaryLength; u8 *Data() { + #ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); u8* binary = (u8*)malloc(binaryLength); glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); return binary; + #else + return NULL; + #endif } GLint Size() { + #ifdef GLEW_VERSION_4_0 if(!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; + #else + return 0; + #endif } }; @@ -119,6 +127,7 @@ class ProgramShaderCache public: void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) { + #ifdef GLEW_VERSION_4_0 PCacheEntry entry; // The two shaders might not even exist anymore @@ -139,6 +148,7 @@ class ProgramShaderCache glUseProgram(entry.program.glprogid); SetProgramVariables(entry, key); } + #endif } }; From 5c486587a68c2513412fe67d7bad24673ce2969f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 02:19:30 -0600 Subject: [PATCH 157/625] Write all shaders to disk on emulator stop instead of constantly. Also change pair from u64 to u32. --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 13 +++++++------ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 628cbae865..6514e1e775 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -29,7 +29,7 @@ namespace OGL LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; - std::pair ProgramShaderCache::CurrentShaderProgram; + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { // SAMPLERS "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", @@ -116,7 +116,7 @@ namespace OGL // Fragment shaders can survive without Vertex Shaders // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); PCache::iterator iter = pshaders.find(ShaderPair); if (iter != pshaders.end()) { @@ -129,6 +129,7 @@ namespace OGL PCacheEntry entry; entry.program.vsid = CurrentVShader; entry.program.psid = CurrentFShader; + entry.program.uid = uid; entry.program.glprogid = glCreateProgram(); // Right, the program is created now @@ -148,10 +149,6 @@ namespace OGL SetProgramVariables(entry, uid); - // Add it to our cache - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - g_program_disk_cache.Append(uid, entry.Data(), entry.Size()); - pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; CurrentProgram = entry.program.glprogid; @@ -226,6 +223,10 @@ namespace OGL { if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + g_program_disk_cache.Sync(); g_program_disk_cache.Close(); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 51638cc1e4..59bcc8e295 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -75,6 +75,7 @@ struct PROGRAMSHADER PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} GLuint glprogid; // opengl program id GLuint vsid, psid; + PROGRAMUID uid; GLint UniformLocations[NUM_UNIFORMS]; GLint binaryLength; u8 *Data() @@ -152,11 +153,11 @@ class ProgramShaderCache } }; - typedef std::map, PCacheEntry> PCache; + typedef std::map, PCacheEntry> PCache; static PCache pshaders; static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; + static std::pair CurrentShaderProgram; static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; From ee529b7125670a803d22b5dfd1151f2ab5c5bf3c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 24 Dec 2011 08:58:51 -0600 Subject: [PATCH 158/625] Only use explicit attribute locations when we are supporting GLSL > 1.2 since we need in/out instead of attribute variable types. This was brought to my attention from MESA. MESA supports GL_ARB_explicit_attrib_location, but yets to support GLSL 1.3, so basically useless extension to MESA right now? --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index f4614294fd..5f8f2630db 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -318,10 +318,10 @@ Renderer::Renderer() // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) - g_Config.backend_info.bSupportsGLSLATTRBind = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; + if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) + g_Config.backend_info.bSupportsGLSLATTRBind = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) g_Config.backend_info.bSupportsGLSLCache = true; From c4e7a288e5390ccd0920812c11ff3c42fc691294 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 25 Dec 2011 12:21:31 -0600 Subject: [PATCH 159/625] Add in the Windows fix. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 6514e1e775..a422f80079 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -212,9 +212,10 @@ namespace OGL GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - GLint Formats[Supported]; + GLint *Formats = new GLint[Supported]; glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); ProgramFormat = (GLenum)Formats[0]; // We don't really care about format + delete[] Formats; } #endif } From 3a5b6aed91abd3db4861c487b91357c6a242beb3 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 25 Dec 2011 12:44:31 -0600 Subject: [PATCH 160/625] Missed a line here --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 467aeca777..9a32308c65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -478,8 +478,10 @@ else() if(NOT CG_FOUND) message("CG not found, Building without") add_definitions(-DHAVE_CG=0) + set(HAVE_CG 0) else() add_definitions(-DHAVE_CG=1) + set(HAVE_CG 1) endif() endif() From 4a4833e617b9644bf6c45e20a9f4d308d847b174 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sun, 25 Dec 2011 22:00:24 -0500 Subject: [PATCH 161/625] default to GLSL instead of Cg --- Source/Core/VideoCommon/Src/VideoConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index 85b51c3f74..08b3daca94 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -87,7 +87,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Settings", "TexFmtOverlayCenter", &bTexFmtOverlayCenter, 0); iniFile.Get("Settings", "WireFrame", &bWireFrame, 0); iniFile.Get("Settings", "DisableFog", &bDisableFog, 0); - iniFile.Get("Settings", "UseGLSL", &bUseGLSL, 0); + iniFile.Get("Settings", "UseGLSL", &bUseGLSL, true); iniFile.Get("Settings", "EnableOpenCL", &bEnableOpenCL, false); iniFile.Get("Settings", "OMPDecoder", &bOMPDecoder, false); From 31a8424bcc70c566b370831d35a5a30fbd7d7fe2 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 00:15:54 -0500 Subject: [PATCH 162/625] fix formatting uglies introduced in glsl-master branch --- Source/Core/DolphinWX/Src/VideoConfigDiag.cpp | 2 +- Source/Core/DolphinWX/Src/VideoConfigDiag.h | 2 +- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 85 ++- .../Src/TextureConversionShader.cpp | 315 +++++------ .../Core/VideoCommon/Src/VertexShaderGen.cpp | 126 ++--- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 532 +++++++++--------- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 2 +- .../Src/ProgramShaderCache.cpp | 439 ++++++++------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 116 ++-- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 10 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 16 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 6 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 457 ++++++++------- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 2 +- 15 files changed, 1061 insertions(+), 1051 deletions(-) diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 2372521be4..10cd403633 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -573,7 +573,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con // GLSL Option { - if(strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) + if (strstr(choice_backend->GetString(choice_backend->GetSelection()).ToAscii(), "OpenGL") != NULL) { wxCheckBox* const cb_GLSL = CreateCheckBox(page_advanced, _("Use GLSL Shaders"), wxGetTranslation(GLSL_desc), vconfig.bUseGLSL); szr_misc->Add(cb_GLSL); diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.h b/Source/Core/DolphinWX/Src/VideoConfigDiag.h index e6b13a4092..ce16138b5c 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.h +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.h @@ -112,7 +112,7 @@ protected: void Event_ProgressiveScan(wxCommandEvent &ev) { SConfig::GetInstance().m_SYSCONF->SetData("IPL.PGS", ev.GetInt()); - SConfig::GetInstance().m_LocalCoreStartupParameter.bProgressive = ev.GetInt(); + SConfig::GetInstance().m_LocalCoreStartupParameter.bProgressive = !!ev.GetInt(); ev.Skip(); } diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 2cf1a33fed..9f1eb99938 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -511,23 +511,25 @@ static void BuildSwapModeTable() const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) return ""; // Nothing to do here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; } + const char* WriteBinding(API_TYPE ApiType, const u32 num) { - if(ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (ApiType != API_GLSL || !g_ActiveConfig.backend_info.bSupportsGLSLBinding) return ""; static char result[64]; sprintf(result, "layout(binding = %d) ", num); return result; } + const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -559,7 +561,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } DepthTextureEnable = (bpmem.ztex2.op != ZTEXTURE_DISABLE && !bpmem.zcontrol.zcomploc && bpmem.zmode.testenable && bpmem.zmode.updateenable) || g_ActiveConfig.bEnablePerPixelDepth ; - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) @@ -573,7 +575,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType else WRITE(p, "#version 120\n"); - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); // Silly differences WRITE(p, "#define float2 vec2\n"); @@ -602,7 +604,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { // Declare samplers - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p, "uniform sampler2D "); } @@ -618,7 +620,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType bfirst = false; } WRITE(p, ";\n"); - if(ApiType == API_D3D11) + if (ApiType == API_D3D11) { WRITE(p, "Texture2D "); bfirst = true; @@ -632,7 +634,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } WRITE(p, "\n"); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform PSBlock {\n"); WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); @@ -648,13 +650,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "%sfloat4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); WRITE(p, "%sfloat4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); - if(ApiType != API_GLSL) + if (ApiType != API_GLSL) { WRITE(p, "void main(\n"); - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p, " out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n", dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "", @@ -702,7 +704,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // Once we switch to GLSL 1.3 we will bind a lot of these. - if(dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + 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"); @@ -712,7 +714,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { WRITE(p, " float4 ocol0;\n"); } - if(DepthTextureEnable) + if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? WRITE(p, " float4 rawpos = gl_FragCoord;\n"); @@ -725,13 +727,13 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType for (int i = 0; i < numTexgen; ++i) WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); } else { // wpos is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); @@ -783,7 +785,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType " float4 cc2=float4(0.0f,0.0f,0.0f,0.0f), cprev=float4(0.0f,0.0f,0.0f,0.0f);\n" " float4 crastemp=float4(0.0f,0.0f,0.0f,0.0f),ckonsttemp=float4(0.0f,0.0f,0.0f,0.0f);\n\n"); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { if (xfregs.numTexGen.numTexGens < 7) { @@ -830,7 +832,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } // indirect texture map lookup - for(u32 i = 0; i < bpmem.genMode.numindstages; ++i) + for (u32 i = 0; i < bpmem.genMode.numindstages; ++i) { if (nIndirectStagesUsed & (1< 7 || ka > 7) + if (kc > 7 || ka > 7) { WRITE(p, "ckonsttemp = frac(konsttemp * (255.0f/256.0f)) * (256.0f/255.0f);\n"); } @@ -1231,7 +1233,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) if (cc.shift > TEVSCALE_1) WRITE(p, "%s*(", tevScaleTable[cc.shift]); - if(!(cc.d == TEVCOLORARG_ZERO && cc.op == TEVOP_ADD)) + if (!(cc.d == TEVCOLORARG_ZERO && cc.op == TEVOP_ADD)) WRITE(p, "%s%s", tevCInputTable[cc.d], tevOpTable[cc.op]); if (cc.a == cc.b) @@ -1281,7 +1283,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) if (ac.shift > TEVSCALE_1) WRITE(p, "%s*(", tevScaleTable[ac.shift]); - if(!(ac.d == TEVALPHAARG_ZERO && ac.op == TEVOP_ADD)) + if (!(ac.d == TEVALPHAARG_ZERO && ac.op == TEVOP_ADD)) WRITE(p, "%s.a%s", tevAInputTable[ac.d], tevOpTable[ac.op]); if (ac.a == ac.b) @@ -1297,7 +1299,7 @@ static void WriteStage(char *&p, int n, API_TYPE ApiType) WRITE(p, "%s",tevBiasTable[ac.bias]); - if (ac.shift>0) + if (ac.shift > 0) WRITE(p, ")"); } @@ -1386,6 +1388,7 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode I_ALPHA"[0].g" }; + // using discard then return works the same in cg and dx9 but not in dx11 WRITE(p, "if(!( "); @@ -1399,9 +1402,9 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode <<<<<<< HEAD WRITE(p, ")) {\n"); - WRITE(p, "ocol0 = float4(0);\n"); + WRITE(p, "ocol0 = float4(0.0f);\n"); if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "ocol1 = 0;\n"); + WRITE(p, "ocol1 = float4(0.0f);\n"); if (DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); @@ -1426,13 +1429,6 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode WRITE(p, "}\n"); -======= - WRITE(p, ")){ocol0 = float4(0.0f);%s%s discard;%s}\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "ocol1 = vec4(0.0f);" : "", - DepthTextureEnable ? "depth = 1.f;" : "", - (ApiType != API_D3D11) ? "return;" : ""); - return true; ->>>>>>> Few compiler errors that got exposed once I got Dual Source Blending working. Seems it isn't working quite 100% either. Good chance I missed something anyway. } static const char *tevFogFuncsTable[] = @@ -1449,7 +1445,8 @@ static const char *tevFogFuncsTable[] = static void WriteFog(char *&p) { - if(bpmem.fog.c_proj_fsel.fsel == 0)return;//no Fog + if (bpmem.fog.c_proj_fsel.fsel == 0) + return; // no Fog if (bpmem.fog.c_proj_fsel.proj == 0) { @@ -1467,7 +1464,7 @@ static void WriteFog(char *&p) // x_adjust = sqrt((x-center)^2 + k^2)/k // ze *= x_adjust //this is complitly teorical as the real hard seems to use a table intead of calculate the values. - if(bpmem.fogRange.Base.Enabled) + if (bpmem.fogRange.Base.Enabled) { WRITE (p, " float x_adjust = (2.0f * (clipPos.x / " I_FOG"[2].y)) - 1.0f - " I_FOG"[2].x;\n"); WRITE (p, " x_adjust = sqrt(x_adjust * x_adjust + " I_FOG"[2].z * " I_FOG"[2].z) / " I_FOG"[2].z;\n"); @@ -1476,17 +1473,15 @@ static void WriteFog(char *&p) WRITE (p, " float fog = saturate(ze - " I_FOG"[1].z);\n"); - if(bpmem.fog.c_proj_fsel.fsel > 3) + if (bpmem.fog.c_proj_fsel.fsel > 3) { WRITE(p, "%s", tevFogFuncsTable[bpmem.fog.c_proj_fsel.fsel]); } else { - if(bpmem.fog.c_proj_fsel.fsel != 2) + if (bpmem.fog.c_proj_fsel.fsel != 2) WARN_LOG(VIDEO, "Unknown Fog Type! %08x", bpmem.fog.c_proj_fsel.fsel); } WRITE(p, " prev.rgb = lerp(prev.rgb," I_FOG"[0].rgb,fog);\n"); - - } diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 322d9e071b..5f1eaf855a 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -66,17 +66,19 @@ u16 GetEncodedSampleCount(u32 format) default: return 1; } } + const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) return ""; // Once we switch to GLSL 1.3 we can do something here static char result[64]; sprintf(result, " : register(%s%d)", prefix, num); return result; } + const char *WriteLocation(API_TYPE ApiType) { - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) return ""; static char result[64]; sprintf(result, "uniform "); @@ -90,12 +92,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); @@ -122,7 +124,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) } - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { WRITE(p, " float4 ocol0;\n"); WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); @@ -131,7 +133,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) else { WRITE(p,"void main(\n"); - if(ApiType != API_D3D11) + if (ApiType != API_D3D11) { WRITE(p," out float4 ocol0 : COLOR0,\n"); } @@ -163,12 +165,12 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL || ApiType == API_GLSL) + if (ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL && ApiType != API_GLSL) + if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -182,17 +184,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // [0] left, top, right, bottom of source rectangle within source texture // [1] width and height of destination texture in pixels // Two were merged for GLSL - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); // 32 bit textures (RGBA8 and Z24) are store in 2 cache line increments - if(ApiType == API_OPENGL) + if (ApiType == API_OPENGL) { WRITE(p,"uniform samplerRECT samp0 : register(s0);\n"); } @@ -212,7 +214,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, "Texture2D Tex0 : register(t0);\n"); } - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { WRITE(p, " float4 ocol0;\n"); WRITE(p, " float2 uv0 = gl_TexCoord[0].xy;\n"); @@ -249,18 +251,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float xl = floor(x2 / %f);\n", blkW); WRITE(p, " float xib = x2 - (xl * %f);\n", blkW); WRITE(p, " float halfxb = floor(xb / 2);\n"); - WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); - if(ApiType == API_OPENGL || ApiType == API_GLSL) + if (ApiType == API_OPENGL || ApiType == API_GLSL) WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); - if(ApiType != API_OPENGL && ApiType != API_GLSL) + if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); @@ -281,7 +282,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; - if(ApiType != API_OPENGL || ApiType != API_GLSL) + if (ApiType != API_OPENGL || ApiType != API_GLSL) texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; @@ -292,7 +293,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP void WriteColorToIntensity(char*& p, const char* src, const char* dest) { - if(!IntensityConstantAdded) + if (!IntensityConstantAdded) { WRITE(p, " float4 IntensityConst = float4(0.257f,0.504f,0.098f,0.0625f);\n"); IntensityConstantAdded = true; @@ -328,7 +329,7 @@ void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest) void WriteEncoderEnd(char* p, API_TYPE ApiType) { - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) WRITE(p, "gl_FragData[0] = ocol0;\n"); WRITE(p, "}\n"); IntensityConstantAdded = false; @@ -337,22 +338,22 @@ void WriteEncoderEnd(char* p, API_TYPE ApiType) void WriteI8Encoder(char* p, API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_I8,ApiType); + WriteSwizzler(p, GX_TF_I8, ApiType); WRITE(p, " float3 texSample;\n"); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "ocol0.a"); WRITE(p, " ocol0.rgba += IntensityConst.aaaa;\n"); // see WriteColorToIntensity @@ -362,40 +363,40 @@ void WriteI8Encoder(char* p, API_TYPE ApiType) void WriteI4Encoder(char* p, API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_I4,ApiType); + WriteSwizzler(p, GX_TF_I4, ApiType); WRITE(p, " float3 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color0.a"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgb", "texSample",ApiType); + WriteSampleColor(p, "rgb", "texSample", ApiType); WriteColorToIntensity(p, "texSample", "color1.a"); WRITE(p, " color0.rgba += IntensityConst.aaaa;\n"); @@ -410,15 +411,15 @@ void WriteI4Encoder(char* p, API_TYPE ApiType) void WriteIA8Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_IA8,ApiType); + WriteSwizzler(p, GX_TF_IA8, ApiType); WRITE(p, " float4 texSample;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.b = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "ocol0.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.r = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "ocol0.a"); @@ -429,27 +430,27 @@ void WriteIA8Encoder(char* p,API_TYPE ApiType) void WriteIA4Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_IA4,ApiType); + WriteSwizzler(p, GX_TF_IA4, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.b = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.b"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.g = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.r = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.r"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.a = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "color1.a"); @@ -464,11 +465,11 @@ void WriteIA4Encoder(char* p,API_TYPE ApiType) void WriteRGB565Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB565,ApiType); + WriteSwizzler(p, GX_TF_RGB565, ApiType); - WriteSampleColor(p, "rgb", "float3 texSample0",ApiType); - WriteIncrementSampleX(p,ApiType); - WriteSampleColor(p, "rgb", "float3 texSample1",ApiType); + WriteSampleColor(p, "rgb", "float3 texSample0", ApiType); + WriteIncrementSampleX(p, ApiType); + WriteSampleColor(p, "rgb", "float3 texSample1", ApiType); WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n"); WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n"); WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n"); @@ -488,14 +489,14 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType) void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB5A3,ApiType); + WriteSwizzler(p, GX_TF_RGB5A3, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float color0;\n"); WRITE(p, " float gUpper;\n"); WRITE(p, " float gLower;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); // 0.8784 = 224 / 255 which is the maximum alpha value that can be represented in 3 bits WRITE(p, "if(texSample.a > 0.878f) {\n"); @@ -522,9 +523,9 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) WRITE(p, "}\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, "if(texSample.a > 0.878f) {\n"); @@ -555,21 +556,21 @@ void WriteRGB5A3Encoder(char* p,API_TYPE ApiType) void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_RGB5A3,ApiType); + WriteSwizzler(p, GX_TF_RGB5A3, ApiType); WRITE(p, " float4 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WriteToBitDepth(p, 3, "texSample.a", "color0.b"); WriteToBitDepth(p, 4, "texSample.r", "color1.b"); WriteToBitDepth(p, 4, "texSample.g", "color0.g"); WriteToBitDepth(p, 4, "texSample.b", "color1.g"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WriteToBitDepth(p, 3, "texSample.a", "color0.r"); WriteToBitDepth(p, 4, "texSample.r", "color1.r"); WriteToBitDepth(p, 4, "texSample.g", "color0.a"); @@ -581,7 +582,7 @@ void WriteRGBA4443Encoder(char* p,API_TYPE ApiType) void WriteRGBA8Encoder(char* p,API_TYPE ApiType) { - Write32BitSwizzler(p, GX_TF_RGBA8,ApiType); + Write32BitSwizzler(p, GX_TF_RGBA8, ApiType); WRITE(p, " float cl1 = xb - (halfxb * 2);\n"); WRITE(p, " float cl0 = 1.0f - cl1;\n"); @@ -590,15 +591,15 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.b = texSample.a;\n"); WRITE(p, " color0.g = texSample.r;\n"); WRITE(p, " color1.b = texSample.g;\n"); WRITE(p, " color1.g = texSample.b;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "rgba", "texSample",ApiType); + WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " color0.r = texSample.a;\n"); WRITE(p, " color0.a = texSample.r;\n"); WRITE(p, " color1.r = texSample.g;\n"); @@ -611,32 +612,32 @@ void WriteRGBA8Encoder(char* p,API_TYPE ApiType) void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_R4,ApiType); + WriteSwizzler(p, GX_CTF_R4, ApiType); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, comp, "color0.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color1.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color0.a",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "color0.a", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "color1.a",ApiType); + WriteSampleColor(p, comp, "color1.a", ApiType); WriteToBitDepth(p, 4, "color0", "color0"); WriteToBitDepth(p, 4, "color1", "color1"); @@ -647,45 +648,45 @@ void WriteC4Encoder(char* p, const char* comp,API_TYPE ApiType) void WriteC8Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_R8,ApiType); + WriteSwizzler(p, GX_CTF_R8, ApiType); - WriteSampleColor(p, comp, "ocol0.b",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.b", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.g",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.g", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.r",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.r", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.a",ApiType); + WriteSampleColor(p, comp, "ocol0.a", ApiType); WriteEncoderEnd(p, ApiType); } void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_RA4,ApiType); + WriteSwizzler(p, GX_CTF_RA4, ApiType); WRITE(p, " float2 texSample;\n"); WRITE(p, " float4 color0;\n"); WRITE(p, " float4 color1;\n"); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.b = texSample.x;\n"); WRITE(p, " color1.b = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.g = texSample.x;\n"); WRITE(p, " color1.g = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.r = texSample.x;\n"); WRITE(p, " color1.r = texSample.y;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "texSample",ApiType); + WriteSampleColor(p, comp, "texSample", ApiType); WRITE(p, " color0.a = texSample.x;\n"); WRITE(p, " color1.a = texSample.y;\n"); @@ -698,35 +699,35 @@ void WriteCC4Encoder(char* p, const char* comp,API_TYPE ApiType) void WriteCC8Encoder(char* p, const char* comp, API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_RA8,ApiType); + WriteSwizzler(p, GX_CTF_RA8, ApiType); - WriteSampleColor(p, comp, "ocol0.bg",ApiType); - WriteIncrementSampleX(p,ApiType); + WriteSampleColor(p, comp, "ocol0.bg", ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, comp, "ocol0.ra",ApiType); + WriteSampleColor(p, comp, "ocol0.ra", ApiType); WriteEncoderEnd(p, ApiType); } void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_Z8M,ApiType); + WriteSwizzler(p, GX_CTF_Z8M, ApiType); WRITE(p, " float depth;\n"); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.b = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.g = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.r = frac(depth * %s);\n", multiplier); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, "ocol0.a = frac(depth * %s);\n", multiplier); WriteEncoderEnd(p, ApiType); @@ -734,14 +735,14 @@ void WriteZ8Encoder(char* p, const char* multiplier,API_TYPE ApiType) void WriteZ16Encoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_TF_Z16,ApiType); + WriteSwizzler(p, GX_TF_Z16, ApiType); WRITE(p, " float depth;\n"); WRITE(p, " float3 expanded;\n"); // byte order is reversed - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -751,9 +752,9 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.b = expanded.g / 255;\n"); WRITE(p, " ocol0.g = expanded.r / 255;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -768,14 +769,14 @@ void WriteZ16Encoder(char* p,API_TYPE ApiType) void WriteZ16LEncoder(char* p,API_TYPE ApiType) { - WriteSwizzler(p, GX_CTF_Z16L,ApiType); + WriteSwizzler(p, GX_CTF_Z16L, ApiType); WRITE(p, " float depth;\n"); WRITE(p, " float3 expanded;\n"); // byte order is reversed - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -787,9 +788,9 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) WRITE(p, " ocol0.b = expanded.b / 255;\n"); WRITE(p, " ocol0.g = expanded.g / 255;\n"); - WriteIncrementSampleX(p,ApiType); + WriteIncrementSampleX(p, ApiType); - WriteSampleColor(p, "b", "depth",ApiType); + WriteSampleColor(p, "b", "depth", ApiType); WRITE(p, " depth *= 16777215.0f;\n"); WRITE(p, " expanded.r = floor(depth / (256 * 256));\n"); @@ -806,7 +807,7 @@ void WriteZ16LEncoder(char* p,API_TYPE ApiType) void WriteZ24Encoder(char* p, API_TYPE ApiType) { - Write32BitSwizzler(p, GX_TF_Z24X8,ApiType); + Write32BitSwizzler(p, GX_TF_Z24X8, ApiType); WRITE(p, " float cl = xb - (halfxb * 2);\n"); @@ -815,19 +816,19 @@ void WriteZ24Encoder(char* p, API_TYPE ApiType) WRITE(p, " float3 expanded0;\n"); WRITE(p, " float3 expanded1;\n"); - WriteSampleColor(p, "b", "depth0",ApiType); - WriteIncrementSampleX(p,ApiType); - WriteSampleColor(p, "b", "depth1",ApiType); + WriteSampleColor(p, "b", "depth0", ApiType); + WriteIncrementSampleX(p, ApiType); + WriteSampleColor(p, "b", "depth1", ApiType); for (int i = 0; i < 2; i++) { - WRITE(p, " depth%i *= 16777215.0f;\n", i); + WRITE(p, " depth%i *= 16777215.0f;\n", i); - WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); - WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); - WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); - WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); - WRITE(p, " expanded%i.b = depth%i;\n", i, i); + WRITE(p, " expanded%i.r = floor(depth%i / (256 * 256));\n", i, i); + WRITE(p, " depth%i -= expanded%i.r * 256 * 256;\n", i, i); + WRITE(p, " expanded%i.g = floor(depth%i / 256);\n", i, i); + WRITE(p, " depth%i -= expanded%i.g * 256;\n", i, i); + WRITE(p, " expanded%i.b = depth%i;\n", i, i); } WRITE(p, " if(cl > 0.5f) {\n"); @@ -854,7 +855,7 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) char *p = text; - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { // A few required defines and ones that will make our lives a lot easier if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) @@ -881,76 +882,76 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType) WRITE(p, "#ifdef GL_ARB_texture_rectangle\n #extension GL_ARB_texture_rectangle : require\n#endif\n"); } - switch(format) + switch (format) { case GX_TF_I4: - WriteI4Encoder(p,ApiType); + WriteI4Encoder(p, ApiType); break; case GX_TF_I8: - WriteI8Encoder(p,ApiType); + WriteI8Encoder(p, ApiType); break; case GX_TF_IA4: - WriteIA4Encoder(p,ApiType); + WriteIA4Encoder(p, ApiType); break; case GX_TF_IA8: - WriteIA8Encoder(p,ApiType); + WriteIA8Encoder(p, ApiType); break; case GX_TF_RGB565: - WriteRGB565Encoder(p,ApiType); + WriteRGB565Encoder(p, ApiType); break; case GX_TF_RGB5A3: - WriteRGB5A3Encoder(p,ApiType); + WriteRGB5A3Encoder(p, ApiType); break; case GX_TF_RGBA8: - WriteRGBA8Encoder(p,ApiType); + WriteRGBA8Encoder(p, ApiType); break; case GX_CTF_R4: - WriteC4Encoder(p, "r",ApiType); + WriteC4Encoder(p, "r", ApiType); break; case GX_CTF_RA4: - WriteCC4Encoder(p, "ar",ApiType); + WriteCC4Encoder(p, "ar", ApiType); break; case GX_CTF_RA8: - WriteCC8Encoder(p, "ar",ApiType); + WriteCC8Encoder(p, "ar", ApiType); break; case GX_CTF_A8: - WriteC8Encoder(p, "a",ApiType); + WriteC8Encoder(p, "a", ApiType); break; case GX_CTF_R8: - WriteC8Encoder(p, "r",ApiType); + WriteC8Encoder(p, "r", ApiType); break; case GX_CTF_G8: - WriteC8Encoder(p, "g",ApiType); + WriteC8Encoder(p, "g", ApiType); break; case GX_CTF_B8: - WriteC8Encoder(p, "b",ApiType); + WriteC8Encoder(p, "b", ApiType); break; case GX_CTF_RG8: - WriteCC8Encoder(p, "rg",ApiType); + WriteCC8Encoder(p, "rg", ApiType); break; case GX_CTF_GB8: - WriteCC8Encoder(p, "gb",ApiType); + WriteCC8Encoder(p, "gb", ApiType); break; case GX_TF_Z8: - WriteC8Encoder(p, "b",ApiType); + WriteC8Encoder(p, "b", ApiType); break; case GX_TF_Z16: - WriteZ16Encoder(p,ApiType); + WriteZ16Encoder(p, ApiType); break; case GX_TF_Z24X8: - WriteZ24Encoder(p,ApiType); + WriteZ24Encoder(p, ApiType); break; case GX_CTF_Z4: - WriteC4Encoder(p, "b",ApiType); + WriteC4Encoder(p, "b", ApiType); break; case GX_CTF_Z8M: - WriteZ8Encoder(p, "256.0f",ApiType); + WriteZ8Encoder(p, "256.0f", ApiType); break; case GX_CTF_Z8L: - WriteZ8Encoder(p, "65536.0f" ,ApiType); + WriteZ8Encoder(p, "65536.0f" , ApiType); break; case GX_CTF_Z16L: - WriteZ16LEncoder(p,ApiType); + WriteZ16LEncoder(p, ApiType); break; default: PanicAlert("Unknown texture copy format: 0x%x\n", format); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 5ae3e84f56..b8ddf29fbb 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -185,65 +185,64 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) char *p = text; WRITE(p, "//Vertex Shader: comp:%x, \n", components); - if(ApiType == API_GLSL) + if (ApiType == API_GLSL) { - // A few required defines and ones that will make our lives a lot easier - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - WRITE(p, "#version 330 compatibility\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) - WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); - WRITE(p, "#define ATTRIN in\n"); - WRITE(p, "#define ATTROUT out\n"); - } - else - { - WRITE(p, "#version 120\n"); - WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); - } - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) - WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); - // Silly differences - WRITE(p, "#define float2 vec2\n"); - WRITE(p, "#define float3 vec3\n"); - WRITE(p, "#define float4 vec4\n"); + // A few required defines and ones that will make our lives a lot easier + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding || g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + WRITE(p, "#version 330 compatibility\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) + WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); + } + else + { + WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); + // Silly differences + WRITE(p, "#define float2 vec2\n"); + WRITE(p, "#define float3 vec3\n"); + WRITE(p, "#define float4 vec4\n"); - // cg to glsl function translation - WRITE(p, "#define frac(x) fract(x)\n"); - WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); - WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); + // cg to glsl function translation + WRITE(p, "#define frac(x) fract(x)\n"); + WRITE(p, "#define saturate(x) clamp(x, 0.0f, 1.0f)\n"); + WRITE(p, "#define lerp(x, y, z) mix(x, y, z)\n"); } // uniforms - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); - if(ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); - p = GenerateVSOutputStruct(p, components, ApiType); - if(ApiType == API_GLSL) + if(ApiType == API_GLSL) { if (components & VB_HAS_NRM0) - WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); + WRITE(p, " float3 rawnorm0 = gl_Normal; // NORMAL0,\n"); - if(g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { if (components & VB_HAS_POSMTXIDX) WRITE(p, "layout(location = %d) ATTRIN float fposmtx;\n", SHADER_POSMTX_ATTRIB); @@ -277,7 +276,6 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "VS_OUTPUT main(\n"); // inputs @@ -306,9 +304,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } if (components & VB_HAS_POSMTXIDX) { if (is_d3d) - { WRITE(p, " float4 blend_indices : BLENDINDICES,\n"); - } else WRITE(p, " float fposmtx : ATTR%d,\n", SHADER_POSMTX_ATTRIB); } @@ -369,7 +365,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) "float3 ldir, h;\n" "float dist, dist2, attn;\n"); - if(xfregs.numChan.numColorChans == 0) + if (xfregs.numChan.numColorChans == 0) { if (components & VB_HAS_COL0) WRITE(p, "o.colors_0 = color0;\n"); @@ -380,7 +376,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // TODO: This probably isn't necessary if pixel lighting is enabled. p = GenerateLightingShader(p, components, I_MATERIALS, I_LIGHTS, "color", "o.colors_"); - if(xfregs.numChan.numColorChans < 2) + if (xfregs.numChan.numColorChans < 2) { if (components & VB_HAS_COL1) WRITE(p, "o.colors_1 = color1;\n"); @@ -584,23 +580,23 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) // clipPos/w needs to be done in pixel shader, not here if (xfregs.numTexGen.numTexGens < 7) { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " gl_TexCoord[%d].xyz = o.tex%d;\n", i, i); - WRITE(p, " gl_TexCoord[%d] = o.clipPos;\n", xfregs.numTexGen.numTexGens); - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " gl_TexCoord[%d] = o.Normal;\n", xfregs.numTexGen.numTexGens + 1); + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " gl_TexCoord[%d].xyz = o.tex%d;\n", i, i); + WRITE(p, " gl_TexCoord[%d] = o.clipPos;\n", xfregs.numTexGen.numTexGens); + if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + WRITE(p, " gl_TexCoord[%d] = o.Normal;\n", xfregs.numTexGen.numTexGens + 1); } else { - // clip position is in w of first 4 texcoords - if(g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - { - for (int i = 0; i < 8; ++i) - WRITE(p, " gl_TexCoord[%d] = o.tex%d;\n", i, i); - } - else - { - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " gl_TexCoord[%d]%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); - } + // clip position is in w of first 4 texcoords + if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) + { + for (int i = 0; i < 8; ++i) + WRITE(p, " gl_TexCoord[%d] = o.tex%d;\n", i, i); + } + else + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + WRITE(p, " gl_TexCoord[%d]%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); + } } WRITE(p, "gl_FrontColor = o.colors_0;\n"); WRITE(p, "gl_FrontSecondaryColor = o.colors_1;\n"); @@ -608,7 +604,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "}\n"); } else - WRITE(p, "return o;\n}\n"); + WRITE(p, "return o;\n}\n"); if (text[sizeof(text) - 1] != 0x7C) PanicAlert("VertexShader generator - buffer too small, canary has been eaten!"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 6840baded8..480cdc2430 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -20,7 +20,6 @@ #include "GLUtil.h" #include -#include #include "Statistics.h" #include "VideoConfig.h" @@ -51,62 +50,63 @@ bool PixelShaderCache::ShaderEnabled; PixelShaderCache::PSCacheEntry* PixelShaderCache::last_entry = NULL; PIXELSHADERUID PixelShaderCache::last_uid; -void(*pSetPSConstant4f)(unsigned int, float, float, float, float); -void(*pSetPSConstant4fv)(unsigned int, const float*); -void(*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); +void (*pSetPSConstant4f)(unsigned int, float, float, float, float); +void (*pSetPSConstant4fv)(unsigned int, const float*); +void (*pSetMultiPSConstant4fv)(unsigned int, unsigned int, const float*); bool (*pCompilePixelShader)(FRAGMENTSHADER&, const char*); GLuint PixelShaderCache::GetDepthMatrixProgram() { - return s_DepthMatrixProgram.glprogid; + return s_DepthMatrixProgram.glprogid; } GLuint PixelShaderCache::GetColorMatrixProgram() { - return s_ColorMatrixProgram.glprogid; + return s_ColorMatrixProgram.glprogid; } + void PixelShaderCache::Init() { - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; - GL_REPORT_ERRORD(); + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; + GL_REPORT_ERRORD(); - s_displayCompileAlert = true; + s_displayCompileAlert = true; - if(g_ActiveConfig.bUseGLSL) - { + if (g_ActiveConfig.bUseGLSL) + { pSetPSConstant4f = SetGLSLPSConstant4f; pSetPSConstant4fv = SetGLSLPSConstant4fv; pSetMultiPSConstant4fv = SetMultiGLSLPSConstant4fv; pCompilePixelShader = CompileGLSLPixelShader; - } - else - { + } + else + { pSetPSConstant4f = SetCGPSConstant4f; pSetPSConstant4fv = SetCGPSConstant4fv; pSetMultiPSConstant4fv = SetMultiCGPSConstant4fv; pCompilePixelShader = CompileCGPixelShader; glEnable(GL_FRAGMENT_PROGRAM_ARB); - } + } - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, (GLint *)&s_nMaxPixelInstructions); - if(s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. - s_nMaxPixelInstructions = 4096; - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; + if (s_nMaxPixelInstructions == 0) // Some combination of drivers and hardware returns zero for some reason. + s_nMaxPixelInstructions = 4096; + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxPixelInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxPixelInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxPixelInstructions = 4096; + } #endif - int maxinst, maxattribs; - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); - INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); - if(g_ActiveConfig.bUseGLSL) + int maxinst, maxattribs; + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&maxinst); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, (GLint *)&maxattribs); + INFO_LOG(VIDEO, "pixel max_alu=%d, max_inst=%d, max_attrib=%d", s_nMaxPixelInstructions, maxinst, maxattribs); + if (g_ActiveConfig.bUseGLSL) { char pmatrixprog[2048]; sprintf(pmatrixprog, "#version %s\n" @@ -137,14 +137,14 @@ void PixelShaderCache::Init() g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", C_COLORS+5, C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - - + + if (!PixelShaderCache::CompilePixelShader(s_ColorMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create color matrix fragment program"); s_ColorMatrixProgram.Destroy(); } - + sprintf(pmatrixprog, "#version %s\n" "#extension GL_ARB_texture_rectangle : enable\n" "%s\n" @@ -183,7 +183,7 @@ void PixelShaderCache::Init() g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "uniform ", g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "};" : "", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); - + if (!PixelShaderCache::CompilePixelShader(s_DepthMatrixProgram, pmatrixprog)) { ERROR_LOG(VIDEO, "Failed to create depth matrix fragment program"); @@ -194,20 +194,20 @@ void PixelShaderCache::Init() { char pmatrixprog[2048]; sprintf(pmatrixprog, "!!ARBfp1.0" - "TEMP R0;\n" - "TEMP R1;\n" - "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" - "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" - "MUL R0, R0, program.env[%d];\n" - "ADD R0, R0, K0;\n" - "FLR R0, R0;\n" - "MUL R0, R0, program.env[%d];\n" - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "TEMP R0;\n" + "TEMP R1;\n" + "PARAM K0 = { 0.5, 0.5, 0.5, 0.5};\n" + "TEX R0, fragment.texcoord[0], texture[0], RECT;\n" + "MUL R0, R0, program.env[%d];\n" + "ADD R0, R0, K0;\n" + "FLR R0, R0;\n" + "MUL R0, R0, program.env[%d];\n" + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n",C_COLORS+5,C_COLORS+6, C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); glGenProgramsARB(1, &s_ColorMatrixProgram.glprogid); SetCurrentShader(s_ColorMatrixProgram.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); @@ -219,50 +219,50 @@ void PixelShaderCache::Init() } sprintf(pmatrixprog, "!!ARBfp1.0\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - //16777215/16777216*256, 1/255, 256, 0 - "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" - "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" - //sample the depth value - "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" + "TEMP R0;\n" + "TEMP R1;\n" + "TEMP R2;\n" + //16777215/16777216*256, 1/255, 256, 0 + "PARAM K0 = { 255.99998474121, 0.003921568627451, 256.0, 0.0};\n" + "PARAM K1 = { 15.0, 0.066666666666, 0.0, 0.0};\n" + //sample the depth value + "TEX R2, fragment.texcoord[0], texture[0], RECT;\n" - //scale from [0*16777216..1*16777216] to - //[0*16777215..1*16777215], multiply by 256 - "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 + //scale from [0*16777216..1*16777216] to + //[0*16777215..1*16777215], multiply by 256 + "MUL R0, R2.x, K0.x;\n" // *16777215/16777216*256 - //It is easy to get bad results due to low precision - //here, for example converting like this: - //MUL R0,R0,{ 65536, 256, 1, 16777216 } - //FRC R0,R0 - //gives {?, 128/255, 254/255, ?} for depth value 254/255 - //on some gpus + //It is easy to get bad results due to low precision + //here, for example converting like this: + //MUL R0,R0,{ 65536, 256, 1, 16777216 } + //FRC R0,R0 + //gives {?, 128/255, 254/255, ?} for depth value 254/255 + //on some gpus - "FLR R0.x,R0;\n" //bits 31..24 + "FLR R0.x,R0;\n" //bits 31..24 - "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest - "MUL R0.yzw,R0,K0.z;\n" // *256 - "FLR R0.y,R0;\n" //bits 23..16 + "SUB R0.yzw,R0,R0.x;\n" //subtract bits 31..24 from rest + "MUL R0.yzw,R0,K0.z;\n" // *256 + "FLR R0.y,R0;\n" //bits 23..16 - "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest - "MUL R0.zw,R0,K0.z;\n" // *256 - "FLR R0.z,R0;\n" //bits 15..8 + "SUB R0.zw,R0,R0.y;\n" //subtract bits 23..16 from rest + "MUL R0.zw,R0,K0.z;\n" // *256 + "FLR R0.z,R0;\n" //bits 15..8 - "MOV R0.w,R0.x;\n" //duplicate bit 31..24 + "MOV R0.w,R0.x;\n" //duplicate bit 31..24 - "MUL R0,R0,K0.y;\n" // /255 + "MUL R0,R0,K0.y;\n" // /255 - "MUL R0.w,R0,K1.x;\n" // *15 - "FLR R0.w,R0;\n" //bits 31..28 - "MUL R0.w,R0,K1.y;\n" // /15 + "MUL R0.w,R0,K1.x;\n" // *15 + "FLR R0.w,R0;\n" //bits 31..28 + "MUL R0.w,R0,K1.y;\n" // /15 - "DP4 R1.x, R0, program.env[%d];\n" - "DP4 R1.y, R0, program.env[%d];\n" - "DP4 R1.z, R0, program.env[%d];\n" - "DP4 R1.w, R0, program.env[%d];\n" - "ADD result.color, R1, program.env[%d];\n" - "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); + "DP4 R1.x, R0, program.env[%d];\n" + "DP4 R1.y, R0, program.env[%d];\n" + "DP4 R1.z, R0, program.env[%d];\n" + "DP4 R1.w, R0, program.env[%d];\n" + "ADD result.color, R1, program.env[%d];\n" + "END\n", C_COLORS, C_COLORS+1, C_COLORS+2, C_COLORS+3, C_COLORS+4); glGenProgramsARB(1, &s_DepthMatrixProgram.glprogid); SetCurrentShader(s_DepthMatrixProgram.glprogid); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pmatrixprog), pmatrixprog); @@ -280,71 +280,71 @@ void PixelShaderCache::Shutdown() { s_ColorMatrixProgram.Destroy(); s_DepthMatrixProgram.Destroy(); - PSCache::iterator iter = PixelShaders.begin(); - for (; iter != PixelShaders.end(); iter++) - iter->second.Destroy(); - PixelShaders.clear(); + PSCache::iterator iter = PixelShaders.begin(); + for (; iter != PixelShaders.end(); iter++) + iter->second.Destroy(); + PixelShaders.clear(); } FRAGMENTSHADER* PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components) { - PIXELSHADERUID uid; - GetPixelShaderId(&uid, dstAlphaMode, components); + PIXELSHADERUID uid; + GetPixelShaderId(&uid, dstAlphaMode, components); - // Check if the shader is already set - if (last_entry) - { - if (uid == last_uid) + // Check if the shader is already set + if (last_entry) { - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); - return &last_entry->shader; + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, last_entry->safe_uid, last_entry->shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } } - } - last_uid = uid; + last_uid = uid; - PSCache::iterator iter = PixelShaders.find(uid); - if (iter != PixelShaders.end()) - { - PSCacheEntry &entry = iter->second; - last_entry = &entry; + PSCache::iterator iter = PixelShaders.find(uid); + if (iter != PixelShaders.end()) + { + PSCacheEntry &entry = iter->second; + last_entry = &entry; - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); - return &last_entry->shader; - } + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + ValidatePixelShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, dstAlphaMode, components); + return &last_entry->shader; + } - // Make an entry in the table - PSCacheEntry& newentry = PixelShaders[uid]; - last_entry = &newentry; - const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); + // Make an entry in the table + PSCacheEntry& newentry = PixelShaders[uid]; + last_entry = &newentry; + const char *code = GeneratePixelShaderCode(dstAlphaMode, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL, components); - if (g_ActiveConfig.bEnableShaderDebugging && code) - { - GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); - newentry.shader.strprog = code; - } + if (g_ActiveConfig.bEnableShaderDebugging && code) + { + GetSafePixelShaderId(&newentry.safe_uid, dstAlphaMode, components); + newentry.shader.strprog = code; + } #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%sps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !CompilePixelShader(newentry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !CompilePixelShader(newentry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numPixelShadersCreated); - SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numPixelShadersCreated); + SETSTAT(stats.numPixelShadersAlive, PixelShaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); + return &last_entry->shader; } bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) @@ -352,35 +352,32 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr return pCompilePixelShader(ps, pstrprogram); } -//Disable Fragment programs and reset the selected Program +// Disable Fragment programs and reset the selected Program void PixelShaderCache::DisableShader() { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if(ShaderEnabled) - { - glDisable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = false; + } } -//bind a program if is diferent from the binded oone +// bind a program if is different from the binded oone void PixelShaderCache::SetCurrentShader(GLuint Shader) { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if(!ShaderEnabled) - { - glEnable(GL_FRAGMENT_PROGRAM_ARB); - ShaderEnabled = true; - } - if(CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + ShaderEnabled = true; + } + if (CurrentShader != Shader) + { + if (Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, CurrentShader); + } } + // GLSL Specific bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { @@ -404,12 +401,12 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); WARN_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "ps_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - + char szTemp[MAX_PATH]; + sprintf(szTemp, "ps_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + delete[] infoLog; } // Don't try to use this shader @@ -422,40 +419,43 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) ps.bGLSL = true; return true; } + void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for (int a = 0; a < NUM_UNIFORMS; ++a) - if (!strcmp(name, UniformNames[a])) + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for (int a = 0; a < NUM_UNIFORMS; ++a) { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } + if (!strcmp(name, UniformNames[a])) + { + if (tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } } void SetGLSLPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float const f[4] = {f1, f2, f3, f4}; - + float const f[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } - } } void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) @@ -465,15 +465,15 @@ void SetGLSLPSConstant4fv(unsigned int const_number, const float *f) ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, 1); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if ( const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f); + return; + } } - } } void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) @@ -483,115 +483,117 @@ void SetMultiGLSLPSConstant4fv(unsigned int const_number, unsigned int count, co ProgramShaderCache::SetMultiPSConstant4fv(const_number, f, count); return; } - for (unsigned int a = 0; a < 10; ++a) - { - if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + for (unsigned int a = 0; a < 10; ++a) { - unsigned int offset = const_number - PSVar_Loc[a].reg; - SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); - return; + if (const_number >= PSVar_Loc[a].reg && const_number < (PSVar_Loc[a].reg + PSVar_Loc[a].size)) + { + unsigned int offset = const_number - PSVar_Loc[a].reg; + SetPSConstant4fvByName(PSVar_Loc[a].name, offset, f, count); + return; + } } - } } -// CG Specific +// CG Specific bool CompileCGPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) { - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before PS!", err); - } + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before PS!", err); + } #if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgfProf, "main", NULL); - // handle errors - if (!cgIsProgram(tempprog)) - { - cgDestroyProgram(tempprog); + // handle errors + if (!cgIsProgram(tempprog)) + { + cgDestroyProgram(tempprog); - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_ps_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile pixel shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); - return false; - } - - // handle warnings - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) - { - const char *penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal+13, "program.local"); - } - - glGenProgramsARB(1, &ps.glprogid); - ps.bGLSL = false; - PixelShaderCache::SetCurrentShader(ps.glprogid); - glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - GLint error_pos, native_limit; - glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); - glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); - // Error occur - if (error_pos != -1) { - const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); - char line[256]; - strncpy(line, (const char *)pcompiledprog + error_pos, 255); - line[255] = 0; - ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); - ERROR_LOG(VIDEO, "Line dump: \n%s", line); - } else if (native_limit != -1) { - ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); - // TODO + return false; } - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - cgDestroyProgram(tempprog); + // handle warnings + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Warnings on compile ps %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) + { + const char *penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal+13, "program.local"); + } + + glGenProgramsARB(1, &ps.glprogid); + ps.bGLSL = false; + PixelShaderCache::SetCurrentShader(ps.glprogid); + glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + GLint error_pos, native_limit; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native_limit); + // Error occur + if (error_pos != -1) { + const char *program_error = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB); + char line[256]; + strncpy(line, (const char *)pcompiledprog + error_pos, 255); + line[255] = 0; + ERROR_LOG(VIDEO, "Error at %i: %s", error_pos, program_error); + ERROR_LOG(VIDEO, "Line dump: \n%s", line); + } else if (native_limit != -1) { + ERROR_LOG(VIDEO, "Hit limit? %i", native_limit); + // TODO + } + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } + + cgDestroyProgram(tempprog); #endif - return true; + return true; } + void SetCGPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float f[4] = { f1, f2, f3, f4 }; - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + float f[4] = { f1, f2, f3, f4 }; + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); } void SetCGPSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number, f); } void SetMultiCGPSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, const_number + i, f); } + // Renderer functions void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index b0328f336c..c9a6ca6791 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -34,7 +34,7 @@ struct FRAGMENTSHADER { if (glprogid) { - if(bGLSL) + if (bGLSL) glDeleteShader(glprogid); else glDeleteProgramsARB(1, &glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index a422f80079..008a4a679e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -18,234 +18,247 @@ #include "ProgramShaderCache.h" #include "MathUtil.h" -#include namespace OGL { - GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; - ProgramShaderCache::PCache ProgramShaderCache::pshaders; - GLuint ProgramShaderCache::s_ps_vs_ubo; - GLintptr ProgramShaderCache::s_vs_data_offset; - LinearDiskCache g_program_disk_cache; - GLenum ProgramFormat; +GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShader = 0, ProgramShaderCache::CurrentProgram = 0; +ProgramShaderCache::PCache ProgramShaderCache::pshaders; +GLuint ProgramShaderCache::s_ps_vs_ubo; +GLintptr ProgramShaderCache::s_vs_data_offset; - std::pair ProgramShaderCache::CurrentShaderProgram; - const char *UniformNames[NUM_UNIFORMS] = { - // SAMPLERS - "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", - // PIXEL SHADER UNIFORMS - I_COLORS, - I_KCOLORS, - I_ALPHA, - I_TEXDIMS, - I_ZBIAS , - I_INDTEXSCALE , - I_INDTEXMTX, - I_FOG, - I_PLIGHTS, - I_PMATERIALS, - // VERTEX SHADER UNIFORMS - I_POSNORMALMATRIX, - I_PROJECTION , - I_MATERIALS, - I_LIGHTS, - I_TEXMATRICES, - I_TRANSFORMMATRICES , - I_NORMALMATRICES , - I_POSTTRANSFORMMATRICES, - I_DEPTHPARAMS, - }; +LinearDiskCache g_program_disk_cache; +GLenum ProgramFormat; - void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +std::pair ProgramShaderCache::CurrentShaderProgram; +const char *UniformNames[NUM_UNIFORMS] = +{ + // SAMPLERS + "samp0","samp1","samp2","samp3","samp4","samp5","samp6","samp7", + // PIXEL SHADER UNIFORMS + I_COLORS, + I_KCOLORS, + I_ALPHA, + I_TEXDIMS, + I_ZBIAS , + I_INDTEXSCALE , + I_INDTEXMTX, + I_FOG, + I_PLIGHTS, + I_PMATERIALS, + // VERTEX SHADER UNIFORMS + I_POSNORMALMATRIX, + I_PROJECTION , + I_MATERIALS, + I_LIGHTS, + I_TEXMATRICES, + I_TRANSFORMMATRICES , + I_NORMALMATRICES , + I_POSTTRANSFORMMATRICES, + I_DEPTHPARAMS, +}; + +void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +{ + // Dunno why this is needed when I have the binding + // points statically set in the shader source + // We should only need these two functions when we don't support binding but do support UBO + // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - // Dunno why this is needed when I have the binding - // points statically set in the shader source - // We should only need these two functions when we don't support binding but do support UBO - // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glUniformBlockBinding( entry.program.glprogid, 0, 1 ); - if(uid.uid.vsid != 0) // Some things have no vertex shader - glUniformBlockBinding( entry.program.glprogid, 1, 2 ); - } - - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - //For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); - //Got to do it this crappy way. - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for(int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) - for(int a = 0; a < 8; ++a) - { - // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if(entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); - } + glUniformBlockBinding(entry.program.glprogid, 0, 1); + // Some things have no vertex shader + if (uid.uid.vsid != 0) + glUniformBlockBinding(entry.program.glprogid, 1, 2); + } - // Need to get some attribute locations - if(uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) // We have no vertex Shader + // We cache our uniform locations for now + // Once we move up to a newer version of GLSL, ~1.30 + // We can remove this + + // (Sonicadvance): For some reason this fails on my hardware + //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + // Got to do it this crappy way. + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + for (int a = 8; a < NUM_UNIFORMS; ++a) + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + + if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) + { + for (int a = 0; a < 8; ++a) { - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + // Still need to get sampler locations since we aren't binding them statically in the shaders + entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + if (entry.program.UniformLocations[a] != -1) + glUniform1i(entry.program.UniformLocations[a], a); } } - - void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) + // Need to get some attribute locations + if (uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { - PROGRAMUID uid; - CurrentFShader = PS; - CurrentVShader = VS; - - - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - - if(uid.uid.id == 0) - { - CurrentProgram = 0; - glUseProgram(0); - return; - } - - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); - PCache::iterator iter = pshaders.find(ShaderPair); - if (iter != pshaders.end()) - { - PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - return; - } - PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.uid = uid; - entry.program.glprogid = glCreateProgram(); - - // Right, the program is created now - // Let's attach everything - if(entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); - - glAttachShader(entry.program.glprogid, entry.program.psid); - #ifdef GLEW_VERSION_4_0 - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); - #endif - - glLinkProgram(entry.program.glprogid); - - glUseProgram(entry.program.glprogid); - - SetProgramVariables(entry, uid); - - pshaders[ShaderPair] = entry; - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; - } - - void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, - count * sizeof(float) * 4, f); - } - - void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) - { - glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, - count * sizeof(float) * 4, f); - } - - GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; } - - PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) - { - return pshaders[CurrentShaderProgram].program; - } - void ProgramShaderCache::Init(void) - { - // We have to get the UBO alignment here because - // if we generate a buffer that isn't aligned - // then the UBO will fail. - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - GLint Align; - glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); - - GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); - GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); - s_vs_data_offset = ps_data_size; - - // We multiply by *4*4 because we need to get down to basic machine units. - // So multiply by four to get how many floats we have from vec4s - // Then once more to get bytes - glGenBuffers(1, &s_ps_vs_ubo); - glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); - glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); - - // Now bind the buffer to the index point - // We know PS is 0 since we have it statically set in the shader - // Repeat for VS shader - glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); - glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); - } - #ifdef GLEW_VERSION_4_0 - // Read our shader cache, only if supported - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - { - char cache_filename[MAX_PATH]; - sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), - SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); - ProgramShaderCacheInserter inserter; - g_program_disk_cache.OpenAndRead(cache_filename, inserter); - - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - ProgramFormat = (GLenum)Formats[0]; // We don't really care about format - delete[] Formats; - } - #endif - } - - void ProgramShaderCache::Shutdown(void) - { - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - { - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); ++iter) - g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); - - g_program_disk_cache.Sync(); - g_program_disk_cache.Close(); - } - - PCache::iterator iter = pshaders.begin(); - for (; iter != pshaders.end(); ++iter) - iter->second.Destroy(); - pshaders.clear(); - - if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) - { - glBindBuffer(GL_UNIFORM_BUFFER, 0); - glDeleteBuffers(1, &s_ps_vs_ubo); - s_ps_vs_ubo = 0; - } + // We have no vertex Shader + glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); } } +void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) +{ + PROGRAMUID uid; + CurrentFShader = PS; + CurrentVShader = VS; + + GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); + + if (uid.uid.id == 0) + { + CurrentProgram = 0; + glUseProgram(0); + return; + } + + // Fragment shaders can survive without Vertex Shaders + // We have a valid fragment shader, let's create our program + std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + PCache::iterator iter = pshaders.find(ShaderPair); + if (iter != pshaders.end()) + { + PCacheEntry &entry = iter->second; + glUseProgram(entry.program.glprogid); + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; + return; + } + + PCacheEntry entry; + entry.program.vsid = CurrentVShader; + entry.program.psid = CurrentFShader; + entry.program.uid = uid; + entry.program.glprogid = glCreateProgram(); + + // Right, the program is created now + // Let's attach everything + if (entry.program.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.program.glprogid, entry.program.vsid); + + glAttachShader(entry.program.glprogid, entry.program.psid); + +#ifdef GLEW_VERSION_4_0 + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); +#endif + + glLinkProgram(entry.program.glprogid); + + glUseProgram(entry.program.glprogid); + + SetProgramVariables(entry, uid); + + pshaders[ShaderPair] = entry; + CurrentShaderProgram = ShaderPair; + CurrentProgram = entry.program.glprogid; +} + +void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) +{ + glBufferSubData(GL_UNIFORM_BUFFER, offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); +} + +void ProgramShaderCache::SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count) +{ + glBufferSubData(GL_UNIFORM_BUFFER, s_vs_data_offset + offset * sizeof(float) * 4, + count * sizeof(float) * 4, f); +} + +GLuint ProgramShaderCache::GetCurrentProgram(void) +{ + return CurrentProgram; +} + +PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) +{ + return pshaders[CurrentShaderProgram].program; +} + +void ProgramShaderCache::Init(void) +{ + // We have to get the UBO alignment here because + // if we generate a buffer that isn't aligned + // then the UBO will fail. + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + GLint Align; + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &Align); + + GLintptr const ps_data_size = ROUND_UP(C_PENVCONST_END * sizeof(float) * 4, Align); + GLintptr const vs_data_size = ROUND_UP(C_VENVCONST_END * sizeof(float) * 4, Align); + s_vs_data_offset = ps_data_size; + + // We multiply by *4*4 because we need to get down to basic machine units. + // So multiply by four to get how many floats we have from vec4s + // Then once more to get bytes + glGenBuffers(1, &s_ps_vs_ubo); + glBindBuffer(GL_UNIFORM_BUFFER, s_ps_vs_ubo); + glBufferData(GL_UNIFORM_BUFFER, ps_data_size + vs_data_size, NULL, GL_DYNAMIC_DRAW); + + // Now bind the buffer to the index point + // We know PS is 0 since we have it statically set in the shader + // Repeat for VS shader + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_ps_vs_ubo, 0, ps_data_size); + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); + } + +#ifdef GLEW_VERSION_4_0 + // Read our shader cache, only if supported + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + char cache_filename[MAX_PATH]; + sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; + g_program_disk_cache.OpenAndRead(cache_filename, inserter); + + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + ProgramFormat = (GLenum)Formats[0]; + delete[] Formats; + } +#endif +} + +void ProgramShaderCache::Shutdown(void) +{ + if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + { + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + + g_program_disk_cache.Sync(); + g_program_disk_cache.Close(); + } + + PCache::iterator iter = pshaders.begin(); + for (; iter != pshaders.end(); ++iter) + iter->second.Destroy(); + pshaders.clear(); + + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + glBindBuffer(GL_UNIFORM_BUFFER, 0); + glDeleteBuffers(1, &s_ps_vs_ubo); + s_ps_vs_ubo = 0; + } +} + +} // namespace OGL + void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) { uid->uid.vsid = _v; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 59bcc8e295..e34ca1c086 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -15,8 +15,7 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#ifndef _ProgramShaderCache_H_ -#define _ProgramShaderCache_H_ +#pragma once #include "GLUtil.h" @@ -28,18 +27,18 @@ #include "LinearDiskCache.h" #include "ConfigManager.h" - union PID +union PID +{ + struct { - struct { GLuint vsid, psid; - }; - u64 id; }; + u64 id; +}; class PROGRAMUID { public: - PID uid; PROGRAMUID() @@ -51,57 +50,63 @@ public: { uid.id = r.uid.id; } + PROGRAMUID(GLuint _v, GLuint _p) { uid.vsid = _v; uid.psid = _p; } - int GetNumValues() const + u64 GetNumValues() const { return uid.id; } }; + void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); namespace OGL { -#define NUM_UNIFORMS 27 + +const int NUM_UNIFORMS = 27; extern const char *UniformNames[NUM_UNIFORMS]; extern GLenum ProgramFormat; struct PROGRAMSHADER { - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0){} - GLuint glprogid; // opengl program id + PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0) {} + // opengl program id + GLuint glprogid; GLuint vsid, psid; PROGRAMUID uid; GLint UniformLocations[NUM_UNIFORMS]; GLint binaryLength; + + // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... u8 *Data() { - #ifdef GLEW_VERSION_4_0 +#ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - u8* binary = (u8*)malloc(binaryLength); - glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); - return binary; - #else - return NULL; - #endif + u8* binary = (u8*)malloc(binaryLength); + glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); + return binary; +#else + return NULL; +#endif } + GLint Size() { - #ifdef GLEW_VERSION_4_0 - if(!binaryLength) +#ifdef GLEW_VERSION_4_0 + if (!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; - #else +#else return 0; - #endif +#endif } }; - class ProgramShaderCache { struct PCacheEntry @@ -109,50 +114,54 @@ class ProgramShaderCache PROGRAMSHADER program; int frameCount; PCacheEntry() : frameCount(0) {} - void Destroy() { + + void Destroy() + { glDeleteProgram(program.glprogid); program.glprogid = 0; } + u8* Data() { return program.Data(); } + GLint Size() { return program.Size(); } }; - + class ProgramShaderCacheInserter : public LinearDiskCacheReader { - public: - void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + public: + void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) + { +#ifdef GLEW_VERSION_4_0 + PCacheEntry entry; + + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + entry.program.vsid = key.uid.vsid; + entry.program.psid = key.uid.psid; + + entry.program.glprogid = glCreateProgram(); + + glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); + + GLint success; + glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); + + if (success) { - #ifdef GLEW_VERSION_4_0 - PCacheEntry entry; - - // The two shaders might not even exist anymore - // But it is fine, no need to worry about that - entry.program.vsid = key.uid.vsid; - entry.program.psid = key.uid.psid; - - entry.program.glprogid = glCreateProgram(); - - glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); - - GLint success; - glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); - - if (success) - { - pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; - glUseProgram(entry.program.glprogid); - SetProgramVariables(entry, key); - } - #endif + pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; + glUseProgram(entry.program.glprogid); + SetProgramVariables(entry, key); } +#endif + } }; - + typedef std::map, PCacheEntry> PCache; static PCache pshaders; @@ -162,7 +171,7 @@ class ProgramShaderCache static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); - + public: static PROGRAMSHADER GetShaderProgram(void); static void SetBothShaders(GLuint PS, GLuint VS); @@ -170,12 +179,9 @@ public: static void SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count); static void SetMultiVSConstant4fv(unsigned int offset, const float *f, unsigned int count); - + static void Init(void); static void Shutdown(void); - }; } // namespace OGL - -#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 5f8f2630db..08891ddf19 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -1419,7 +1419,7 @@ void Renderer::ResetAPIState() { // Gets us to a reasonably sane state where it's possible to do things like // image copies with textured quads, etc. - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(0, 0); else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 1ca7cae1c2..2f0e940aa2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -211,7 +211,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, if (pcfmt != PC_TEX_FMT_DXT1) { if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); + glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width); if (bHaveMipMaps && autogen_mips) { @@ -225,7 +225,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, } if (expanded_width != width) - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } else { @@ -300,7 +300,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glViewport(0, 0, virtual_width, virtual_height); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram(), 0); else PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); @@ -396,8 +396,8 @@ TextureCache::~TextureCache() { if (s_TempFramebuffer) { - glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); - s_TempFramebuffer = 0; + glDeleteFramebuffersEXT(1, (GLuint*)&s_TempFramebuffer); + s_TempFramebuffer = 0; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index abe5a23f02..3bdb9f7f34 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -61,9 +61,9 @@ static FRAGMENTSHADER s_encodingPrograms[NUM_ENCODING_PROGRAMS]; void CreateRgbToYuyvProgram() { // Output is BGRA because that is slightly faster than RGBA. - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) { const char *FProgram = "#version 330 compatibility\n" @@ -132,9 +132,9 @@ void CreateRgbToYuyvProgram() void CreateYuyvToRgbProgram() { - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { - if(g_ActiveConfig.backend_info.bSupportsGLSLBinding) + if (g_ActiveConfig.backend_info.bSupportsGLSLBinding) { const char *FProgram = "#version 330 compatibility\n" @@ -390,7 +390,7 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, s32 expandedWidth = (width + blkW) & (~blkW); s32 expandedHeight = (height + blkH) & (~blkH); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(texconv_shader.glprogid, 0); else PixelShaderCache::SetCurrentShader(texconv_shader.glprogid); @@ -425,7 +425,7 @@ void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* des { g_renderer->ResetAPIState(); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(s_rgbToYuyvProgram.glprogid, 0); else PixelShaderCache::SetCurrentShader(s_rgbToYuyvProgram.glprogid); @@ -472,7 +472,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur glBindTexture(GL_TEXTURE_RECTANGLE_ARB, s_srcTexture); // TODO: make this less slow. (How?) - if((GLsizei)s_srcTextureWidth == (GLsizei)srcFmtWidth && (GLsizei)s_srcTextureHeight == (GLsizei)srcHeight) + if ((GLsizei)s_srcTextureWidth == (GLsizei)srcFmtWidth && (GLsizei)s_srcTextureHeight == (GLsizei)srcHeight) { glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 0,0,0,s_srcTextureWidth, s_srcTextureHeight, GL_BGRA, GL_UNSIGNED_BYTE, srcAddr); @@ -486,7 +486,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur } glViewport(0, 0, srcWidth, srcHeight); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(s_yuyvToRgbProgram.glprogid, 0); else PixelShaderCache::SetCurrentShader(s_yuyvToRgbProgram.glprogid); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 21e2476df8..8fc84a6c9e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -195,7 +195,7 @@ void VertexManager::vFlush() } VERTEXSHADER* vs = VertexShaderCache::SetShader(g_nativeVertexFmt->m_components); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) ProgramShaderCache::SetBothShaders(ps->glprogid, vs->glprogid); else { @@ -218,10 +218,10 @@ void VertexManager::vFlush() if (useDstAlpha && !dualSourcePossible) { ps = PixelShaderCache::SetShader(DSTALPHA_ALPHA_PASS,g_nativeVertexFmt->m_components); - if(g_ActiveConfig.bUseGLSL) + if (g_ActiveConfig.bUseGLSL) { ProgramShaderCache::SetBothShaders(ps->glprogid, 0); - if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) PixelShaderManager::SetConstants(); // Need to set these again, if we don't support UBO if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index a88867095a..59fcd6582e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -16,7 +16,6 @@ // http://code.google.com/p/dolphin-emu/ #include -#include #include "Globals.h" #include "VideoConfig.h" @@ -55,98 +54,97 @@ bool (*pCompileVertexShader)(VERTEXSHADER&, const char*); void VertexShaderCache::Init() { - ShaderEnabled = true; - CurrentShader = 0; - last_entry = NULL; + ShaderEnabled = true; + CurrentShader = 0; + last_entry = NULL; - if(g_ActiveConfig.bUseGLSL) - { - pSetVSConstant4f = SetGLSLVSConstant4f; - pSetVSConstant4fv = SetGLSLVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; - pCompileVertexShader = CompileGLSLVertexShader; - } - else - { - pSetVSConstant4f = SetCGVSConstant4f; - pSetVSConstant4fv = SetCGVSConstant4fv; - pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; - pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; - pCompileVertexShader = CompileCGVertexShader; - glEnable(GL_VERTEX_PROGRAM_ARB); - } + if (g_ActiveConfig.bUseGLSL) + { + pSetVSConstant4f = SetGLSLVSConstant4f; + pSetVSConstant4fv = SetGLSLVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiGLSLVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiGLSLVSConstant3fv; + pCompileVertexShader = CompileGLSLVertexShader; + } + else + { + pSetVSConstant4f = SetCGVSConstant4f; + pSetVSConstant4fv = SetCGVSConstant4fv; + pSetMultiVSConstant4fv = SetMultiCGVSConstant4fv; + pSetMultiVSConstant3fv = SetMultiCGVSConstant3fv; + pCompileVertexShader = CompileCGVertexShader; + glEnable(GL_VERTEX_PROGRAM_ARB); + } - glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); - if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; + glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, (GLint *)&s_nMaxVertexInstructions); + if (strstr((const char*)glGetString(GL_VENDOR), "Humper") != NULL) s_nMaxVertexInstructions = 4096; #if CG_VERSION_NUM == 2100 - if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) - { - s_nMaxVertexInstructions = 4096; - } + if (strstr((const char*)glGetString(GL_VENDOR), "ATI") != NULL) + { + s_nMaxVertexInstructions = 4096; + } #endif } void VertexShaderCache::Shutdown() { - for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) - iter->second.Destroy(); - vshaders.clear(); + for (VSCache::iterator iter = vshaders.begin(); iter != vshaders.end(); ++iter) + iter->second.Destroy(); + vshaders.clear(); } - VERTEXSHADER* VertexShaderCache::SetShader(u32 components) { - VERTEXSHADERUID uid; - GetVertexShaderId(&uid, components); - if (last_entry) - { - if (uid == last_uid) + VERTEXSHADERUID uid; + GetVertexShaderId(&uid, components); + if (last_entry) { - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); - return &last_entry->shader; + if (uid == last_uid) + { + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, vshaders[uid].safe_uid, vshaders[uid].shader.strprog, components); + return &last_entry->shader; + } } - } - last_uid = uid; + last_uid = uid; - VSCache::iterator iter = vshaders.find(uid); - if (iter != vshaders.end()) - { - VSCacheEntry &entry = iter->second; + VSCache::iterator iter = vshaders.find(uid); + if (iter != vshaders.end()) + { + VSCacheEntry &entry = iter->second; + last_entry = &entry; + + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); + return &last_entry->shader; + } + + // Make an entry in the table + VSCacheEntry& entry = vshaders[uid]; last_entry = &entry; - - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - ValidateVertexShaderIDs(API_OPENGL, entry.safe_uid, entry.shader.strprog, components); - return &last_entry->shader; - } - - // Make an entry in the table - VSCacheEntry& entry = vshaders[uid]; - last_entry = &entry; - const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); - GetSafeVertexShaderId(&entry.safe_uid, components); + const char *code = GenerateVertexShaderCode(components, g_ActiveConfig.bUseGLSL ? API_GLSL : API_OPENGL); + GetSafeVertexShaderId(&entry.safe_uid, components); #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { - static int counter = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); + if (g_ActiveConfig.iLog & CONF_SAVESHADERS && code) { + static int counter = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "%svs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), counter++); - SaveData(szTemp, code); - } + SaveData(szTemp, code); + } #endif - if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { - GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); - return NULL; - } + if (!code || !VertexShaderCache::CompileVertexShader(entry.shader, code)) { + GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true); + return NULL; + } - INCSTAT(stats.numVertexShadersCreated); - SETSTAT(stats.numVertexShadersAlive, vshaders.size()); - GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); - return &last_entry->shader; + INCSTAT(stats.numVertexShadersCreated); + SETSTAT(stats.numVertexShadersAlive, vshaders.size()); + GFX_DEBUGGER_PAUSE_AT(NEXT_VERTEX_SHADER_CHANGE, true); + return &last_entry->shader; } bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrprogram) @@ -156,32 +154,28 @@ bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrpr void VertexShaderCache::DisableShader() { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if (ShaderEnabled) - { - glDisable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled = false; - } + if (ShaderEnabled) + { + glDisable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled = false; + } } - void VertexShaderCache::SetCurrentShader(GLuint Shader) { - if(g_ActiveConfig.bUseGLSL) - assert(true); - if (!ShaderEnabled) - { - glEnable(GL_VERTEX_PROGRAM_ARB); - ShaderEnabled= true; - } - if (CurrentShader != Shader) - { - if(Shader != 0) - CurrentShader = Shader; - glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); - } + if (!ShaderEnabled) + { + glEnable(GL_VERTEX_PROGRAM_ARB); + ShaderEnabled= true; + } + if (CurrentShader != Shader) + { + if (Shader != 0) + CurrentShader = Shader; + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, CurrentShader); + } } + // GLSL Specific bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { @@ -205,12 +199,12 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); WARN_LOG(VIDEO, "VS Shader info log:\n%s", infoLog); - char szTemp[MAX_PATH]; - sprintf(szTemp, "vs_%d.txt", result); - FILE *fp = fopen(szTemp, "wb"); - fwrite(pstrprogram, strlen(pstrprogram), 1, fp); - fclose(fp); - + char szTemp[MAX_PATH]; + sprintf(szTemp, "vs_%d.txt", result); + FILE *fp = fopen(szTemp, "wb"); + fwrite(pstrprogram, strlen(pstrprogram), 1, fp); + fclose(fp); + delete[] infoLog; } // Don't try to use this shader @@ -223,39 +217,43 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) vs.bGLSL = true; return true; } + void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); - for(int a = 0; a < NUM_UNIFORMS; ++a) - if(!strcmp(name, UniformNames[a])) + PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + for (int a = 0; a < NUM_UNIFORMS; ++a) { - if(tmp.UniformLocations[a] == -1) - return; - else - { - glUniform4fv(tmp.UniformLocations[a] + offset, count, f); - return; - } + if (!strcmp(name, UniformNames[a])) + { + if (tmp.UniformLocations[a] == -1) + return; + else + { + glUniform4fv(tmp.UniformLocations[a] + offset, count, f); + return; + } + } } } + void SetGLSLVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - float const buf[4] = {f1, f2, f3, f4}; - + float const buf[4] = {f1, f2, f3, f4}; + if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, 1); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf); + return; + } } - } } void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) @@ -265,15 +263,15 @@ void SetGLSLVSConstant4fv(unsigned int const_number, const float *f) ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, 1); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f); + return; + } } - } } void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) @@ -283,157 +281,157 @@ void SetMultiGLSLVSConstant4fv(unsigned int const_number, unsigned int count, co ProgramShaderCache::SetMultiVSConstant4fv(const_number, f, count); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, f, count); + return; + } } - } } void SetMultiGLSLVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) - { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; - } + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { ProgramShaderCache::SetMultiVSConstant4fv(const_number, buf, count); return; } - for( unsigned int a = 0; a < 9; ++a) - { - if( const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + for (unsigned int a = 0; a < 9; ++a) { - unsigned int offset = const_number - VSVar_Loc[a].reg; - SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); - return; + if (const_number >= VSVar_Loc[a].reg && const_number < ( VSVar_Loc[a].reg + VSVar_Loc[a].size)) + { + unsigned int offset = const_number - VSVar_Loc[a].reg; + SetVSConstant4fvByName(VSVar_Loc[a].name, offset, buf, count); + return; + } } - } } // CG Specific bool CompileCGVertexShader(VERTEXSHADER& vs, const char* pstrprogram) { - // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. - GLenum err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) - { - ERROR_LOG(VIDEO, "glError %08x before VS!", err); - } + // Reset GL error before compiling shaders. Yeah, we need to investigate the causes of these. + GLenum err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "glError %08x before VS!", err); + } #if defined HAVE_CG && HAVE_CG - CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); - if (!cgIsProgram(tempprog)) { - static int num_failures = 0; - char szTemp[MAX_PATH]; - sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); - std::ofstream file(szTemp); - file << pstrprogram; - file.close(); + CGprogram tempprog = cgCreateProgram(g_cgcontext, CG_SOURCE, pstrprogram, g_cgvProf, "main", NULL); + if (!cgIsProgram(tempprog)) { + static int num_failures = 0; + char szTemp[MAX_PATH]; + sprintf(szTemp, "bad_vs_%04i.txt", num_failures++); + std::ofstream file(szTemp); + file << pstrprogram; + file.close(); - PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", - num_failures - 1, szTemp, - g_cgfProf, - cgGetLastListing(g_cgcontext)); + PanicAlert("Failed to compile vertex shader %d!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%d):\n%s", + num_failures - 1, szTemp, + g_cgfProf, + cgGetLastListing(g_cgcontext)); + + cgDestroyProgram(tempprog); + ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + ERROR_LOG(VIDEO, "%s", pstrprogram); + return false; + } + + if (cgGetError() != CG_NO_ERROR) + { + WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); + WARN_LOG(VIDEO, "%s", pstrprogram); + } + + // This looks evil - we modify the program through the const char * we got from cgGetProgramString! + // It SHOULD not have any nasty side effects though - but you never know... + char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); + char *plocal = strstr(pcompiledprog, "program.local"); + while (plocal != NULL) { + const char* penv = " program.env"; + memcpy(plocal, penv, 13); + plocal = strstr(plocal + 13, "program.local"); + } + glGenProgramsARB(1, &vs.glprogid); + vs.bGLSL = false; + VertexShaderCache::SetCurrentShader(vs.glprogid); + + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); + err = GL_REPORT_ERROR(); + if (err != GL_NO_ERROR) { + ERROR_LOG(VIDEO, "%s", pstrprogram); + ERROR_LOG(VIDEO, "%s", pcompiledprog); + } cgDestroyProgram(tempprog); - ERROR_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - ERROR_LOG(VIDEO, "%s", pstrprogram); - return false; - } - - if (cgGetError() != CG_NO_ERROR) - { - WARN_LOG(VIDEO, "Failed to load vs %s:", cgGetLastListing(g_cgcontext)); - WARN_LOG(VIDEO, "%s", pstrprogram); - } - - // This looks evil - we modify the program through the const char * we got from cgGetProgramString! - // It SHOULD not have any nasty side effects though - but you never know... - char *pcompiledprog = (char*)cgGetProgramString(tempprog, CG_COMPILED_PROGRAM); - char *plocal = strstr(pcompiledprog, "program.local"); - while (plocal != NULL) { - const char* penv = " program.env"; - memcpy(plocal, penv, 13); - plocal = strstr(plocal + 13, "program.local"); - } - glGenProgramsARB(1, &vs.glprogid); - vs.bGLSL = false; - VertexShaderCache::SetCurrentShader(vs.glprogid); - - glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei)strlen(pcompiledprog), pcompiledprog); - err = GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) { - ERROR_LOG(VIDEO, "%s", pstrprogram); - ERROR_LOG(VIDEO, "%s", pcompiledprog); - } - - cgDestroyProgram(tempprog); #endif - if (g_ActiveConfig.bEnableShaderDebugging) - vs.strprog = pstrprogram; + if (g_ActiveConfig.bEnableShaderDebugging) + vs.strprog = pstrprogram; - return true; + return true; } void SetCGVSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) { - glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); + glProgramEnvParameter4fARB(GL_VERTEX_PROGRAM_ARB, const_number, f1, f2, f3, f4); } void SetCGVSConstant4fv(unsigned int const_number, const float *f) { - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number, f); } void SetMultiCGVSConstant4fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); - } - else - { - for (unsigned int i = 0; i < count; i++,f+=4) - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); - } + if (GLEW_EXT_gpu_program_parameters) + { + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, f); + } + else + { + for (unsigned int i = 0; i < count; i++,f+=4) + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, f); + } } void SetMultiCGVSConstant3fv(unsigned int const_number, unsigned int count, const float *f) { - if(GLEW_EXT_gpu_program_parameters) - { - float buf[4 * C_VENVCONST_END]; - for (unsigned int i = 0; i < count; i++) + if (GLEW_EXT_gpu_program_parameters) { - buf[4*i ] = *f++; - buf[4*i+1] = *f++; - buf[4*i+2] = *f++; - buf[4*i+3] = 0.f; + float buf[4 * C_VENVCONST_END]; + for (unsigned int i = 0; i < count; i++) + { + buf[4*i ] = *f++; + buf[4*i+1] = *f++; + buf[4*i+2] = *f++; + buf[4*i+3] = 0.f; + } + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); } - glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, const_number, count, buf); - } - else - { - for (unsigned int i = 0; i < count; i++) + else { - float buf[4]; - buf[0] = *f++; - buf[1] = *f++; - buf[2] = *f++; - buf[3] = 0.f; - glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + for (unsigned int i = 0; i < count; i++) + { + float buf[4]; + buf[0] = *f++; + buf[1] = *f++; + buf[2] = *f++; + buf[3] = 0.f; + glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, const_number + i, buf); + } } - } } // Renderer Functions @@ -457,5 +455,4 @@ void Renderer::SetMultiVSConstant3fv(unsigned int const_number, unsigned int cou pSetMultiVSConstant3fv(const_number, count, f); } - } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h index c3a6146b53..8922311613 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.h @@ -32,7 +32,7 @@ struct VERTEXSHADER VERTEXSHADER() : glprogid(0), bGLSL(0) {} void Destroy() { - if(bGLSL) + if (bGLSL) glDeleteShader(glprogid); else glDeleteProgramsARB(1, &glprogid); From aaa405c9734855ad38a97433fd27bfdb37138d41 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 00:43:47 -0500 Subject: [PATCH 163/625] Checking GLEW_VERSION_4_0 is superfluous since we check GL_ARB_get_program_binary, and it's a runtime variable anyways. --- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 4 ---- .../Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 10 ---------- 2 files changed, 14 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 008a4a679e..d25830566e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -144,10 +144,8 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) glAttachShader(entry.program.glprogid, entry.program.psid); -#ifdef GLEW_VERSION_4_0 if (g_ActiveConfig.backend_info.bSupportsGLSLCache) glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); -#endif glLinkProgram(entry.program.glprogid); @@ -210,7 +208,6 @@ void ProgramShaderCache::Init(void) glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_ps_vs_ubo, s_vs_data_offset, vs_data_size); } -#ifdef GLEW_VERSION_4_0 // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { @@ -229,7 +226,6 @@ void ProgramShaderCache::Init(void) ProgramFormat = (GLenum)Formats[0]; delete[] Formats; } -#endif } void ProgramShaderCache::Shutdown(void) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index e34ca1c086..34930ec027 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -85,25 +85,17 @@ struct PROGRAMSHADER // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... u8 *Data() { -#ifdef GLEW_VERSION_4_0 glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); u8* binary = (u8*)malloc(binaryLength); glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); return binary; -#else - return NULL; -#endif } GLint Size() { -#ifdef GLEW_VERSION_4_0 if (!binaryLength) glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); return binaryLength; -#else - return 0; -#endif } }; @@ -137,7 +129,6 @@ class ProgramShaderCache public: void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) { -#ifdef GLEW_VERSION_4_0 PCacheEntry entry; // The two shaders might not even exist anymore @@ -158,7 +149,6 @@ class ProgramShaderCache glUseProgram(entry.program.glprogid); SetProgramVariables(entry, key); } -#endif } }; From 4c1fef8f9837ccffc37a418b798d3d567b42ffef Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 02:58:52 -0500 Subject: [PATCH 164/625] refactor ProgramShaderCache::PCacheEntry --- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 2 +- .../Src/ProgramShaderCache.cpp | 81 +++---- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 209 ++++++++---------- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 +- 4 files changed, 127 insertions(+), 167 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 480cdc2430..440d414b73 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -422,7 +422,7 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) void SetPSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + ProgramShaderCache::PCacheEntry tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) { if (!strcmp(name, UniformNames[a])) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d25830566e..387996a957 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -26,7 +26,7 @@ ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; -LinearDiskCache g_program_disk_cache; +LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; std::pair ProgramShaderCache::CurrentShaderProgram; @@ -57,7 +57,7 @@ const char *UniformNames[NUM_UNIFORMS] = I_DEPTHPARAMS, }; -void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid) +void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry) { // Dunno why this is needed when I have the binding // points statically set in the shader source @@ -65,10 +65,10 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUI // Driver Bug? Nvidia GTX 570, 290.xx Driver, Linux x64 if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { - glUniformBlockBinding(entry.program.glprogid, 0, 1); + glUniformBlockBinding(entry.prog_id, 0, 1); // Some things have no vertex shader - if (uid.uid.vsid != 0) - glUniformBlockBinding(entry.program.glprogid, 1, 2); + if (entry.vsid != 0) + glUniformBlockBinding(entry.prog_id, 1, 2); } // We cache our uniform locations for now @@ -76,42 +76,39 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry, const PROGRAMUI // We can remove this // (Sonicadvance): For some reason this fails on my hardware - //glGetUniformIndices(entry.program.glprogid, NUM_UNIFORMS, UniformNames, entry.program.UniformLocations); + //glGetUniformIndices(entry.prog_id, NUM_UNIFORMS, UniformNames, entry.UniformLocations); // Got to do it this crappy way. if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) for (int a = 8; a < NUM_UNIFORMS; ++a) - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); + entry.UniformLocations[a] = glGetUniformLocation(entry.prog_id, UniformNames[a]); if (!g_ActiveConfig.backend_info.bSupportsGLSLBinding) { for (int a = 0; a < 8; ++a) { // Still need to get sampler locations since we aren't binding them statically in the shaders - entry.program.UniformLocations[a] = glGetUniformLocation(entry.program.glprogid, UniformNames[a]); - if (entry.program.UniformLocations[a] != -1) - glUniform1i(entry.program.UniformLocations[a], a); + entry.UniformLocations[a] = glGetUniformLocation(entry.prog_id, UniformNames[a]); + if (entry.UniformLocations[a] != -1) + glUniform1i(entry.UniformLocations[a], a); } } // Need to get some attribute locations - if (uid.uid.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) + if (entry.vsid != 0 && !g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) { // We have no vertex Shader - glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); - glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2"); - glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + glBindAttribLocation(entry.prog_id, SHADER_NORM1_ATTRIB, "rawnorm1"); + glBindAttribLocation(entry.prog_id, SHADER_NORM2_ATTRIB, "rawnorm2"); + glBindAttribLocation(entry.prog_id, SHADER_POSMTX_ATTRIB, "fposmtx"); } } void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { - PROGRAMUID uid; CurrentFShader = PS; CurrentVShader = VS; - GetProgramShaderId(&uid, CurrentVShader, CurrentFShader); - - if (uid.uid.id == 0) + if (CurrentFShader == 0 && CurrentVShader == 0) { CurrentProgram = 0; glUseProgram(0); @@ -120,42 +117,39 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) // Fragment shaders can survive without Vertex Shaders // We have a valid fragment shader, let's create our program - std::pair ShaderPair = std::make_pair(uid.uid.psid, uid.uid.vsid); + std::pair ShaderPair = std::make_pair(CurrentFShader, CurrentVShader); PCache::iterator iter = pshaders.find(ShaderPair); if (iter != pshaders.end()) { PCacheEntry &entry = iter->second; - glUseProgram(entry.program.glprogid); + glUseProgram(entry.prog_id); CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + CurrentProgram = entry.prog_id; return; } PCacheEntry entry; - entry.program.vsid = CurrentVShader; - entry.program.psid = CurrentFShader; - entry.program.uid = uid; - entry.program.glprogid = glCreateProgram(); + entry.Create(CurrentFShader, CurrentVShader); // Right, the program is created now // Let's attach everything - if (entry.program.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.program.glprogid, entry.program.vsid); + if (entry.vsid != 0) // attaching zero vertex shader makes it freak out + glAttachShader(entry.prog_id, entry.vsid); - glAttachShader(entry.program.glprogid, entry.program.psid); + glAttachShader(entry.prog_id, entry.psid); if (g_ActiveConfig.backend_info.bSupportsGLSLCache) - glProgramParameteri(entry.program.glprogid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + glProgramParameteri(entry.prog_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); - glLinkProgram(entry.program.glprogid); + glLinkProgram(entry.prog_id); - glUseProgram(entry.program.glprogid); + glUseProgram(entry.prog_id); - SetProgramVariables(entry, uid); + SetProgramVariables(entry); pshaders[ShaderPair] = entry; CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.program.glprogid; + CurrentProgram = entry.prog_id; } void ProgramShaderCache::SetMultiPSConstant4fv(unsigned int offset, const float *f, unsigned int count) @@ -175,9 +169,9 @@ GLuint ProgramShaderCache::GetCurrentProgram(void) return CurrentProgram; } -PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void) +ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram(void) { - return pshaders[CurrentShaderProgram].program; + return pshaders[CurrentShaderProgram]; } void ProgramShaderCache::Init(void) @@ -216,15 +210,6 @@ void ProgramShaderCache::Init(void) SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); - - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - ProgramFormat = (GLenum)Formats[0]; - delete[] Formats; } } @@ -234,7 +219,7 @@ void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) - g_program_disk_cache.Append(iter->second.program.uid, iter->second.program.Data(), iter->second.program.Size()); + g_program_disk_cache.Append(iter->second.uid, iter->second.GetProgram(), iter->second.Size()); g_program_disk_cache.Sync(); g_program_disk_cache.Close(); @@ -254,9 +239,3 @@ void ProgramShaderCache::Shutdown(void) } } // namespace OGL - -void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p) -{ - uid->uid.vsid = _v; - uid->uid.psid = _p; -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 34930ec027..d10cb202a0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -27,143 +27,89 @@ #include "LinearDiskCache.h" #include "ConfigManager.h" -union PID -{ - struct - { - GLuint vsid, psid; - }; - u64 id; -}; - -class PROGRAMUID -{ -public: - PID uid; - - PROGRAMUID() - { - uid.id = 0; - } - - PROGRAMUID(const PROGRAMUID& r) - { - uid.id = r.uid.id; - } - - PROGRAMUID(GLuint _v, GLuint _p) - { - uid.vsid = _v; - uid.psid = _p; - } - - u64 GetNumValues() const - { - return uid.id; - } -}; - -void GetProgramShaderId(PROGRAMUID *uid, GLuint _v, GLuint _p); - namespace OGL { const int NUM_UNIFORMS = 27; extern const char *UniformNames[NUM_UNIFORMS]; -extern GLenum ProgramFormat; - -struct PROGRAMSHADER -{ - PROGRAMSHADER() : glprogid(0), vsid(0), psid(0), binaryLength(0) {} - // opengl program id - GLuint glprogid; - GLuint vsid, psid; - PROGRAMUID uid; - GLint UniformLocations[NUM_UNIFORMS]; - GLint binaryLength; - - // TODO at first glance looks bad - malloc/no free/pointer not saved in instance... - u8 *Data() - { - glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - u8* binary = (u8*)malloc(binaryLength); - glGetProgramBinary(glprogid, binaryLength, NULL, &ProgramFormat, binary); - return binary; - } - - GLint Size() - { - if (!binaryLength) - glGetProgramiv(glprogid, GL_PROGRAM_BINARY_LENGTH, &binaryLength); - return binaryLength; - } -}; class ProgramShaderCache { +public: + typedef std::pair ShaderUID; + struct PCacheEntry { - PROGRAMSHADER program; - int frameCount; - PCacheEntry() : frameCount(0) {} + GLuint prog_id; + GLenum prog_format; + u8 *binary; + GLint binary_size; + GLuint vsid, psid; + ShaderUID uid; + GLint UniformLocations[NUM_UNIFORMS]; + + PCacheEntry() : prog_id(0), vsid(0), psid(0), binary(NULL), binary_size(0) { } + + ~PCacheEntry() + { + FreeProgram(); + } + + void Create(const GLuint pix_id, const GLuint vert_id) + { + psid = pix_id; + vsid = vert_id; + uid = std::make_pair(psid, vsid); + prog_id = glCreateProgram(); + } void Destroy() { - glDeleteProgram(program.glprogid); - program.glprogid = 0; + glDeleteProgram(prog_id); + prog_id = 0; } - u8* Data() + void UpdateSize() { - return program.Data(); + if (binary_size == 0) + glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); + } + + // No idea how necessary this is + void SetProgramFormat() + { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + prog_format = (GLenum)Formats[0]; + delete[] Formats; + } + + u8 *GetProgram() + { + UpdateSize(); + FreeProgram(); + binary = new u8[binary_size]; + glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); + return binary; + } + + void FreeProgram() + { + delete [] binary; } GLint Size() { - return program.Size(); + UpdateSize(); + return binary_size; } }; - class ProgramShaderCacheInserter : public LinearDiskCacheReader - { - public: - void Read(const PROGRAMUID &key, const u8 *value, u32 value_size) - { - PCacheEntry entry; - - // The two shaders might not even exist anymore - // But it is fine, no need to worry about that - entry.program.vsid = key.uid.vsid; - entry.program.psid = key.uid.psid; - - entry.program.glprogid = glCreateProgram(); - - glProgramBinary(entry.program.glprogid, ProgramFormat, value, value_size); - - GLint success; - glGetProgramiv(entry.program.glprogid, GL_LINK_STATUS, &success); - - if (success) - { - pshaders[std::make_pair(key.uid.psid, key.uid.vsid)] = entry; - glUseProgram(entry.program.glprogid); - SetProgramVariables(entry, key); - } - } - }; - - typedef std::map, PCacheEntry> PCache; - - static PCache pshaders; - static GLuint CurrentFShader, CurrentVShader, CurrentProgram; - static std::pair CurrentShaderProgram; - - static GLuint s_ps_vs_ubo; - static GLintptr s_vs_data_offset; - static void SetProgramVariables(PCacheEntry &entry, const PROGRAMUID &uid); - -public: - static PROGRAMSHADER GetShaderProgram(void); + static PCacheEntry GetShaderProgram(void); static void SetBothShaders(GLuint PS, GLuint VS); static GLuint GetCurrentProgram(void); @@ -172,6 +118,41 @@ public: static void Init(void); static void Shutdown(void); + +private: + class ProgramShaderCacheInserter : public LinearDiskCacheReader + { + public: + void Read(const ShaderUID &key, const u8 *value, u32 value_size) + { + // The two shaders might not even exist anymore + // But it is fine, no need to worry about that + PCacheEntry entry; + entry.Create(key.first, key.second); + + glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); + + GLint success; + glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); + + if (success) + { + pshaders[key] = entry; + glUseProgram(entry.prog_id); + SetProgramVariables(entry); + } + } + }; + + typedef std::map PCache; + + static PCache pshaders; + static GLuint CurrentFShader, CurrentVShader, CurrentProgram; + static ShaderUID CurrentShaderProgram; + + static GLuint s_ps_vs_ubo; + static GLintptr s_vs_data_offset; + static void SetProgramVariables(PCacheEntry &entry); }; } // namespace OGL diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 59fcd6582e..f396e90078 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -220,7 +220,7 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) void SetVSConstant4fvByName(const char * name, unsigned int offset, const float *f, const unsigned int count = 1) { - PROGRAMSHADER tmp = ProgramShaderCache::GetShaderProgram(); + ProgramShaderCache::PCacheEntry tmp = ProgramShaderCache::GetShaderProgram(); for (int a = 0; a < NUM_UNIFORMS; ++a) { if (!strcmp(name, UniformNames[a])) From 4cd748bbec15d046caff1c50f456c37ab1688c94 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 26 Dec 2011 03:54:44 -0600 Subject: [PATCH 165/625] Remove some warnings in ProgramShadercache, Was using wrong variable for checking dual source blending. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 4 ++-- Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d10cb202a0..d0743326dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -48,7 +48,7 @@ public: ShaderUID uid; GLint UniformLocations[NUM_UNIFORMS]; - PCacheEntry() : prog_id(0), vsid(0), psid(0), binary(NULL), binary_size(0) { } + PCacheEntry() : prog_id(0), binary(NULL), binary_size(0), vsid(0), psid(0) { } ~PCacheEntry() { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 08891ddf19..73453c1395 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -957,8 +957,8 @@ void Renderer::SetBlendMode(bool forceUpdate) u32 changes = forceUpdate ? 0xFFFFFFFF : newval ^ s_blendMode; bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate - && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && g_ActiveConfig.bUseGLSL; - bool useDualSource = useDstAlpha; + && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; + bool useDualSource = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; if (changes & 1) // blend enable change diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 8fc84a6c9e..7e2919e7f8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -170,7 +170,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLATTRBind; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; // finally bind FRAGMENTSHADER* ps; From e3854ded731dd3b22eb3fcbad040bb3fc76b29ef Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 26 Dec 2011 04:09:36 -0600 Subject: [PATCH 166/625] Woops, better not forget the ing --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 73453c1395..ffdefcdccc 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -958,7 +958,7 @@ void Renderer::SetBlendMode(bool forceUpdate) bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; + bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; if (changes & 1) // blend enable change diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 7e2919e7f8..5bc0d2f1d0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -170,7 +170,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBind; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; // finally bind FRAGMENTSHADER* ps; From 108722bed04d65819dae76cf09874e5256252f4a Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 26 Dec 2011 10:27:18 -0500 Subject: [PATCH 167/625] oops, forgot to make sure the gl program is actually free'd. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 3 +++ Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 1 + 2 files changed, 4 insertions(+) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 387996a957..eeb9614070 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -219,7 +219,10 @@ void ProgramShaderCache::Shutdown(void) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) + { g_program_disk_cache.Append(iter->second.uid, iter->second.GetProgram(), iter->second.Size()); + iter->second.FreeProgram(); + } g_program_disk_cache.Sync(); g_program_disk_cache.Close(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d0743326dd..6089f205e7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -100,6 +100,7 @@ public: void FreeProgram() { delete [] binary; + binary = NULL; } GLint Size() From e88d35d1c1ce993bff93001a918b825ce1a6b0d3 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 27 Dec 2011 12:35:35 -0600 Subject: [PATCH 168/625] Had a few vec4 and float4(0) calls floating around. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 9f1eb99938..a6e1995ad9 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -888,11 +888,11 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WriteAlphaTest(p, ApiType, dstAlphaMode); // alpha test will always fail, so restart the shader and just make it an empty function /* p = pmainstart; - WRITE(p, "ocol0 = 0;\n"); + WRITE(p, "ocol0 = float4(0.0f);\n"); if(DepthTextureEnable) WRITE(p, "depth = 1.f;\n"); if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) - WRITE(p, "ocol1 = vec4(0.0f);\n"); + WRITE(p, "ocol1 = float4(0.0f,0.0f,0.0f,0.0f);\n"); if (ApiType == API_GLSL) { // Once we switch to GLSL 1.3 and bind variables, we won't need to do this @@ -1399,7 +1399,6 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode compindex = bpmem.alphaFunc.comp1 % 8; WRITE(p, tevAlphaFuncsTable[compindex],alphaRef[1]);//lookup the second component from the alpha function table -<<<<<<< HEAD WRITE(p, ")) {\n"); WRITE(p, "ocol0 = float4(0.0f);\n"); @@ -1428,7 +1427,6 @@ static void WriteAlphaTest(char *&p, API_TYPE ApiType,DSTALPHA_MODE dstAlphaMode } WRITE(p, "}\n"); - } static const char *tevFogFuncsTable[] = From 5085cebaf381e5a56505b9535ecbfc633cc24c07 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 00:01:50 -0600 Subject: [PATCH 169/625] These checks aren't needed when using CG. --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index ffdefcdccc..d7f9c0e1f3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -314,22 +314,24 @@ Renderer::Renderer() s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; - - // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) - g_Config.backend_info.bSupportsGLSLBinding = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) - g_Config.backend_info.bSupportsGLSLUBO = true; - if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) - g_Config.backend_info.bSupportsGLSLATTRBind = true; - if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) - g_Config.backend_info.bSupportsGLSLCache = true; - - UpdateActiveConfig(); - OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", - g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", - g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); + if(g_ActiveConfig.bUseGLSL) + { + // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) + g_Config.backend_info.bSupportsGLSLBinding = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) + g_Config.backend_info.bSupportsGLSLUBO = true; + if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) + g_Config.backend_info.bSupportsGLSLATTRBind = true; + if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_get_program_binary") != NULL) + g_Config.backend_info.bSupportsGLSLCache = true; + + UpdateActiveConfig(); + OSD::AddMessage(StringFromFormat("Using GLSL. Supports Binding: %s UBOs: %s Cache: %s", + g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "True" : "False", + g_ActiveConfig.backend_info.bSupportsGLSLCache ? "True" : "False").c_str(), 5000); + } s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); @@ -441,8 +443,8 @@ Renderer::Renderer() #else // If we don't have Nvidia CG, we HAVE to use GLSL g_Config.bUseGLSL = true; - UpdateActiveConfig(); + INFO_LOG(VIDEO, "CG not found, switching to GLSL"); #endif // HAVE_CG int nenvvertparams, nenvfragparams, naddrregisters[2]; From 2e15440896f0267ef4b602ebfded277c95e0572f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 00:32:06 -0600 Subject: [PATCH 170/625] 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. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 15 ++++-- Source/Core/VideoCommon/Src/VideoConfig.h | 1 + .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 1 - .../Src/ProgramShaderCache.cpp | 8 +++ Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 51 +++++++++++-------- .../Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 2 - 7 files changed, 53 insertions(+), 27 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index a6e1995ad9..a4d3f3a397 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -577,6 +577,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"); @@ -702,13 +704,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 6476317efc..92afaa313d 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -166,6 +166,7 @@ struct VideoConfig bool bSupportsGLSL; bool bSupportsGLSLBinding; + bool bSupportsGLSLBlend; bool bSupportsGLSLUBO; bool bSupportsGLSLATTRBind; bool bSupportsGLSLCache; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 440d414b73..5705ddf242 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -406,7 +406,6 @@ bool CompileGLSLPixelShader(FRAGMENTSHADER& ps, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - delete[] infoLog; } // Don't try to use this shader diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index eeb9614070..728e4e8a01 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -91,6 +91,14 @@ void ProgramShaderCache::SetProgramVariables(PCacheEntry &entry) if (entry.UniformLocations[a] != -1) glUniform1i(entry.UniformLocations[a], a); } + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) + { + // So we don't support binding, but we do support extended blending + // So we need to set a few more things here. + // Bind our out locations + glBindFragDataLocationIndexed(entry.prog_id, 0, 0, "ocol0"); + glBindFragDataLocationIndexed(entry.prog_id, 0, 1, "ocol1"); + } } // Need to get some attribute locations diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index d7f9c0e1f3..b1a3c8c6dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -319,6 +319,8 @@ Renderer::Renderer() // TODO: Switch over to using glew once 1.6/1.7 becomes more mainstream, seems most people are stuck in 1.5 if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_shading_language_420pack") != NULL) g_Config.backend_info.bSupportsGLSLBinding = true; + if (glewIsSupported("GL_ARB_blend_func_extended")) + g_Config.backend_info.bSupportsGLSLBlend = true; if (strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_uniform_buffer_object") != NULL) g_Config.backend_info.bSupportsGLSLUBO = true; if ((g_Config.backend_info.bSupportsGLSLBinding || g_Config.backend_info.bSupportsGLSLUBO) && strstr((const char*)glGetString(GL_EXTENSIONS), "GL_ARB_explicit_attrib_location") != NULL) @@ -960,7 +962,7 @@ void Renderer::SetBlendMode(bool forceUpdate) bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; + bool useDualSource = useDstAlpha && g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBlend; if (changes & 1) // blend enable change @@ -971,33 +973,42 @@ void Renderer::SetBlendMode(bool forceUpdate) // subtract enable change GLenum equation = newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD; GLenum equationAlpha = useDualSource ? GL_FUNC_ADD : equation; - glBlendEquationSeparate(equation, equationAlpha); + + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) + glBlendEquationSeparate(equation, equationAlpha); + else + glBlendEquation(newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD); } if (changes & 0x1F8) { - GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; - GLenum srcFactorAlpha = srcFactor; - GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; - GLenum dstFactorAlpha = dstFactor; - if (useDualSource) + if (g_ActiveConfig.backend_info.bSupportsGLSLBlend) { - srcFactorAlpha = GL_ONE; - dstFactorAlpha = GL_ZERO; + GLenum srcFactor = glSrcFactors[(newval >> 3) & 7]; + GLenum srcFactorAlpha = srcFactor; + GLenum dstFactor = glDestFactors[(newval >> 6) & 7]; + GLenum dstFactorAlpha = dstFactor; + if (useDualSource) + { + srcFactorAlpha = GL_ONE; + dstFactorAlpha = GL_ZERO; - if (srcFactor == GL_SRC_ALPHA) - srcFactor = GL_SRC1_ALPHA; - else if (srcFactor == GL_ONE_MINUS_SRC_ALPHA) - srcFactor = GL_ONE_MINUS_SRC1_ALPHA; + if (srcFactor == GL_SRC_ALPHA) + srcFactor = GL_SRC1_ALPHA; + else if (srcFactor == GL_ONE_MINUS_SRC_ALPHA) + srcFactor = GL_ONE_MINUS_SRC1_ALPHA; - if (dstFactor == GL_SRC_ALPHA) - dstFactor = GL_SRC1_ALPHA; - else if (dstFactor == GL_ONE_MINUS_SRC_ALPHA) - dstFactor = GL_ONE_MINUS_SRC1_ALPHA; + if (dstFactor == GL_SRC_ALPHA) + dstFactor = GL_SRC1_ALPHA; + else if (dstFactor == GL_ONE_MINUS_SRC_ALPHA) + dstFactor = GL_ONE_MINUS_SRC1_ALPHA; + } + + // blend RGB change + glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); } - - // blend RGB change - glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + else + glBlendFunc(glSrcFactors[(newval >> 3) & 7], glDestFactors[(newval >> 6) & 7]); } s_blendMode = newval; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 5bc0d2f1d0..4c28a28c7c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -170,7 +170,7 @@ void VertexManager::vFlush() && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; // Makes sure we can actually do Dual source blending - bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBinding; + bool dualSourcePossible = g_ActiveConfig.bUseGLSL && g_ActiveConfig.backend_info.bSupportsGLSLBlend; // finally bind FRAGMENTSHADER* ps; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index f396e90078..810cd4c54a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -204,14 +204,12 @@ bool CompileGLSLVertexShader(VERTEXSHADER& vs, const char* pstrprogram) FILE *fp = fopen(szTemp, "wb"); fwrite(pstrprogram, strlen(pstrprogram), 1, fp); fclose(fp); - delete[] infoLog; } // Don't try to use this shader glDeleteShader(result); return false; } - (void)GL_REPORT_ERROR(); vs.glprogid = result; vs.bGLSL = true; From 03b09bed5dba644a06b5a591c477e7c4345f2b2d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 29 Dec 2011 01:35:50 -0600 Subject: [PATCH 171/625] Get the program binary type correctly or else ATI makes massive (~400MB) shader caches. Also, don't need the line in the PixelShaderGen. --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 -- .../Src/ProgramShaderCache.cpp | 11 ++++++++ .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 25 ++++++------------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index a4d3f3a397..6b0b61902a 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -577,8 +577,6 @@ 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"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 728e4e8a01..57470959d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,6 +25,7 @@ GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShade ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; +GLenum ProgramShaderCache::prog_format; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; @@ -213,6 +214,16 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + // We just need the correct data type + prog_format = (GLenum)Formats[0]; + delete[] Formats; + char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 6089f205e7..6ea72c05dd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -41,7 +41,6 @@ public: struct PCacheEntry { GLuint prog_id; - GLenum prog_format; u8 *binary; GLint binary_size; GLuint vsid, psid; @@ -75,25 +74,15 @@ public: glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); } - // No idea how necessary this is - void SetProgramFormat() - { - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - prog_format = (GLenum)Formats[0]; - delete[] Formats; - } - u8 *GetProgram() { UpdateSize(); FreeProgram(); binary = new u8[binary_size]; - glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); + GLenum _form; + glGetProgramBinary(prog_id, binary_size, NULL, &_form, binary); + if (_form != prog_format) + ERROR_LOG(VIDEO, "Returned format not the same as expected! %d vs %d", _form, prog_format); return binary; } @@ -130,8 +119,7 @@ private: // But it is fine, no need to worry about that PCacheEntry entry; entry.Create(key.first, key.second); - - glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); + glProgramBinary(entry.prog_id, prog_format, value, value_size); GLint success; glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); @@ -153,6 +141,9 @@ private: static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; + + static GLenum prog_format; + static void SetProgramVariables(PCacheEntry &entry); }; From 210ecad15f71efe0e09e4cf54744715483df5df1 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Thu, 29 Dec 2011 16:25:03 +0100 Subject: [PATCH 172/625] let us try normal c++ static init instead... --- .../Src/ProgramShaderCache.cpp | 13 ++-------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 26 +++++++++++++------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 57470959d2..b178157a89 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -25,11 +25,12 @@ GLuint ProgramShaderCache::CurrentFShader = 0, ProgramShaderCache::CurrentVShade ProgramShaderCache::PCache ProgramShaderCache::pshaders; GLuint ProgramShaderCache::s_ps_vs_ubo; GLintptr ProgramShaderCache::s_vs_data_offset; -GLenum ProgramShaderCache::prog_format; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; +GLuint ProgramShaderCache::PCacheEntry::prog_format = ProgramShaderCache::PCacheEntry::SetProgramFormat(); + std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = { @@ -214,16 +215,6 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { - GLint Supported; - glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); - - GLint *Formats = new GLint[Supported]; - glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); - // We don't really care about format - // We just need the correct data type - prog_format = (GLenum)Formats[0]; - delete[] Formats; - char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 6ea72c05dd..07e77e3eae 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -41,6 +41,7 @@ public: struct PCacheEntry { GLuint prog_id; + static GLenum prog_format; u8 *binary; GLint binary_size; GLuint vsid, psid; @@ -74,15 +75,26 @@ public: glGetProgramiv(prog_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); } + // No idea how necessary this is + static GLenum SetProgramFormat() + { + GLint Supported; + glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); + + GLint *Formats = new GLint[Supported]; + glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, Formats); + // We don't really care about format + GLenum prog_format = (GLenum)Formats[0]; + delete[] Formats; + return prog_format; + } + u8 *GetProgram() { UpdateSize(); FreeProgram(); binary = new u8[binary_size]; - GLenum _form; - glGetProgramBinary(prog_id, binary_size, NULL, &_form, binary); - if (_form != prog_format) - ERROR_LOG(VIDEO, "Returned format not the same as expected! %d vs %d", _form, prog_format); + glGetProgramBinary(prog_id, binary_size, NULL, &prog_format, binary); return binary; } @@ -119,7 +131,8 @@ private: // But it is fine, no need to worry about that PCacheEntry entry; entry.Create(key.first, key.second); - glProgramBinary(entry.prog_id, prog_format, value, value_size); + + glProgramBinary(entry.prog_id, entry.prog_format, value, value_size); GLint success; glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &success); @@ -141,9 +154,6 @@ private: static GLuint s_ps_vs_ubo; static GLintptr s_vs_data_offset; - - static GLenum prog_format; - static void SetProgramVariables(PCacheEntry &entry); }; From 71f6b1eec63a2e744481dc325f24f1ddd578d77e Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 11 Jan 2012 01:18:54 -0600 Subject: [PATCH 173/625] Change 'stuff' --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 40 ++++++++++++++----- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 34 +++++++++++++--- 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 6b0b61902a..640712e673 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -571,9 +571,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#extension GL_ARB_shading_language_420pack : enable\n"); if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); - } - else - WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN in\n"); + WRITE(p, "#define ATTROUT out\n"); + } + else + { + WRITE(p, "#version 120\n"); + WRITE(p, "#define ATTRIN attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); + } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); @@ -729,13 +735,21 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); // compute window position if needed because binding semantic WPOS is not widely supported - if (numTexgen < 7) + // Let's set up attributes + if (xfregs.numTexGen.numTexGens < 7) { - for (int i = 0; i < numTexgen; ++i) - WRITE(p, " float3 uv%d = gl_TexCoord[%d].xyz;\n", i, i); - WRITE(p, " float4 clipPos = gl_TexCoord[%d];\n", numTexgen); + for (int i = 0; i < 8; ++i) + { + WRITE(p, "ATTRIN float3 uv%d_2;\n", i); + WRITE(p, " float3 uv%d = uv%d_2;\n", i, i); + } + WRITE(p, "ATTRIN float4 clipPos_2;\n"); + WRITE(p, " float4 clipPos = clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, " float4 Normal = gl_TexCoord[%d];\n", numTexgen + 1); + { + WRITE(p, "ATTRIN float4 Normal_2;\n"); + WRITE(p, " float4 Normal = Normal_2;\n"); + } } else { @@ -743,12 +757,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, " float4 uv%d = gl_TexCoord[%d];\n", i, i); + { + WRITE(p, "ATTRIN float4 uv%d_2;\n", i); + WRITE(p, " float4 uv%d = uv%d_2;\n", i, i); + } } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, " float%d uv%d = gl_TexCoord[%d]%s;\n", i < 4 ? 4 : 3 , i, i, i < 4 ? "" : ".xyz"); + { + WRITE(p, "ATTRIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, " float%d uv%d = uv%d_2;\n", i < 4 ? 4 : 3 , i, i); + } } } WRITE(p, "void main()\n{\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index b8ddf29fbb..69837f973d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -270,6 +270,30 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if ((components & (VB_HAS_UV0< Date: Wed, 11 Jan 2012 04:10:43 -0600 Subject: [PATCH 174/625] More "stuff" for SS, also a small fix in the program shader cache cache setup." --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 18 +++++++++++------- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 19 ++++++++++++------- .../Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 ++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 640712e673..2f34909652 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -573,12 +573,16 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); + WRITE(p, "#define VARYIN in\n"); + WRITE(p, "#define VARYOUT out\n"); } else { WRITE(p, "#version 120\n"); WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); // Can't really be used, but provide it anyway + WRITE(p, "#define VARYIN varying\n"); + WRITE(p, "#define VARYOUT varying\n"); } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) @@ -729,7 +733,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? - WRITE(p, " float4 rawpos = gl_FragCoord;\n"); + WRITE(p, "VARYIN float4 rawpos;\n"); WRITE(p, " float4 colors_0 = gl_Color;\n"); WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); @@ -740,14 +744,14 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (int i = 0; i < 8; ++i) { - WRITE(p, "ATTRIN float3 uv%d_2;\n", i); + WRITE(p, "VARYIN float3 uv%d_2;\n", i); WRITE(p, " float3 uv%d = uv%d_2;\n", i, i); } - WRITE(p, "ATTRIN float4 clipPos_2;\n"); + WRITE(p, "VARYIN float4 clipPos_2;\n"); WRITE(p, " float4 clipPos = clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { - WRITE(p, "ATTRIN float4 Normal_2;\n"); + WRITE(p, "VARYIN float4 Normal_2;\n"); WRITE(p, " float4 Normal = Normal_2;\n"); } } @@ -758,7 +762,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (int i = 0; i < 8; ++i) { - WRITE(p, "ATTRIN float4 uv%d_2;\n", i); + WRITE(p, "VARYIN float4 uv%d_2;\n", i); WRITE(p, " float4 uv%d = uv%d_2;\n", i, i); } } @@ -766,7 +770,7 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) { - WRITE(p, "ATTRIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, "VARYIN float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); WRITE(p, " float%d uv%d = uv%d_2;\n", i < 4 ? 4 : 3 , i, i); } } diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 69837f973d..97b5dc32f3 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -197,12 +197,16 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "#extension GL_ARB_uniform_buffer_object : enable\n"); WRITE(p, "#define ATTRIN in\n"); WRITE(p, "#define ATTROUT out\n"); + WRITE(p, "#define VARYIN in\n"); + WRITE(p, "#define VARYOUT out\n"); } else { WRITE(p, "#version 120\n"); WRITE(p, "#define ATTRIN attribute\n"); - WRITE(p, "#define ATTROUT attribute\n"); + WRITE(p, "#define ATTROUT attribute\n"); // Can't really be used, but provide it anyway + WRITE(p, "#define VARYIN varying\n"); + WRITE(p, "#define VARYOUT varying\n"); } if (g_ActiveConfig.backend_info.bSupportsGLSLATTRBind) WRITE(p, "#extension GL_ARB_explicit_attrib_location : enable\n"); @@ -275,10 +279,10 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (xfregs.numTexGen.numTexGens < 7) { for (int i = 0; i < 8; ++i) - WRITE(p, "ATTROUT float3 uv%d_2;\n", i); - WRITE(p, "ATTROUT float4 clipPos_2;\n"); + WRITE(p, "VARYOUT float3 uv%d_2;\n", i); + WRITE(p, "VARYOUT float4 clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) - WRITE(p, "ATTROUT float4 Normal_2;\n"); + WRITE(p, "VARYOUT float4 Normal_2;\n"); } else { @@ -286,17 +290,18 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { for (int i = 0; i < 8; ++i) - WRITE(p, "ATTROUT float4 uv%d_2;\n", i); + WRITE(p, "VARYOUT float4 uv%d_2;\n", i); } else { for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) - WRITE(p, "ATTROUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); + WRITE(p, "VARYOUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); } } - WRITE(p, " float4 rawpos = gl_Vertex;\n") ; + WRITE(p, "VARYOUT float4 rawpos;\n") ; WRITE(p, "void main()\n{\n"); + WRITE(p, "rawpos = gl_Vertex;\n"); } else { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index 07e77e3eae..d4a12aac43 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -78,6 +78,8 @@ public: // No idea how necessary this is static GLenum SetProgramFormat() { + if(!g_ActiveConfig.backend_info.bSupportsGLSLCache) + return 0; GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); From 10666a9b877a6608e563cde5cfb7bbc11862274f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 11 Jan 2012 16:00:30 -0600 Subject: [PATCH 175/625] More 'stuff' --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 8 +++++--- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 9 +++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 2f34909652..6b760ba40f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -733,10 +733,12 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType } if (DepthTextureEnable) WRITE(p, " float depth;\n"); // TODO: Passed to Vertex Shader right? - WRITE(p, "VARYIN float4 rawpos;\n"); + WRITE(p, " float4 rawpos = gl_FragCoord;\n"); - WRITE(p, " float4 colors_0 = gl_Color;\n"); - WRITE(p, " float4 colors_1 = gl_SecondaryColor;\n"); + WRITE(p, "VARYIN float4 colors_02;\n"); + WRITE(p, "VARYIN float4 colors_12;\n"); + WRITE(p, " float4 colors_0 = colors_02;\n"); + WRITE(p, " float4 colors_1 = colors_12;\n"); // compute window position if needed because binding semantic WPOS is not widely supported // Let's set up attributes diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 97b5dc32f3..430e929509 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -298,10 +298,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "VARYOUT float%d uv%d_2;\n", i < 4 ? 4 : 3 , i); } } - WRITE(p, "VARYOUT float4 rawpos;\n") ; + WRITE(p, " float4 rawpos = gl_Vertex;\n"); + WRITE(p, "VARYOUT float4 colors_02;\n"); + WRITE(p, "VARYOUT float4 colors_12;\n"); WRITE(p, "void main()\n{\n"); - WRITE(p, "rawpos = gl_Vertex;\n"); } else { @@ -627,8 +628,8 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, " uv%d_2%s = o.tex%d;\n", i, i < 4 ? ".xyzw" : ".xyz" , i); } } - WRITE(p, "gl_FrontColor = o.colors_0;\n"); - WRITE(p, "gl_FrontSecondaryColor = o.colors_1;\n"); + WRITE(p, "colors_02 = o.colors_0;\n"); + WRITE(p, "colors_12 = o.colors_1;\n"); WRITE(p, "gl_Position = o.pos;\n"); WRITE(p, "}\n"); } From 1a8005d9489b7eea7c840609913c7f249885cbba Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Wed, 18 Jan 2012 10:22:03 -0800 Subject: [PATCH 176/625] set ProgramShaderCache program format correctly. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 5 ++++- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h | 2 -- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b178157a89..8f3378dca8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -29,7 +29,7 @@ GLintptr ProgramShaderCache::s_vs_data_offset; LinearDiskCache g_program_disk_cache; GLenum ProgramFormat; -GLuint ProgramShaderCache::PCacheEntry::prog_format = ProgramShaderCache::PCacheEntry::SetProgramFormat(); +GLuint ProgramShaderCache::PCacheEntry::prog_format = 0; std::pair ProgramShaderCache::CurrentShaderProgram; const char *UniformNames[NUM_UNIFORMS] = @@ -215,9 +215,12 @@ void ProgramShaderCache::Init(void) // Read our shader cache, only if supported if (g_ActiveConfig.backend_info.bSupportsGLSLCache) { + PCacheEntry::prog_format = PCacheEntry::SetProgramFormat(); + char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); + ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h index d4a12aac43..07e77e3eae 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.h @@ -78,8 +78,6 @@ public: // No idea how necessary this is static GLenum SetProgramFormat() { - if(!g_ActiveConfig.backend_info.bSupportsGLSLCache) - return 0; GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); From 3f0d7312fa10db750c97ace02e881d71cb659053 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 13 Oct 2012 12:43:00 -0500 Subject: [PATCH 177/625] A couple missed lines on the rebase. --- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 7 +++---- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 6b760ba40f..e7b40c3212 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -978,16 +978,15 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType // Colors will be blended against the alpha from ocol1... WRITE(p, " ocol1 = ocol0;\n"); // ...and the alpha from ocol0 will be written to the framebuffer. - WRITE(p, " ocol0.a = " I_ALPHA"[0].a;\n"); - - if (ApiType == API_GLSL) + WRITE(p, " ocol0.a = " I_ALPHA"[0].a;\n"); + } + if (ApiType == API_GLSL) { if (DepthTextureEnable) WRITE(p, "gl_FragDepth = depth;\n"); if (dstAlphaMode != DSTALPHA_DUAL_SOURCE_BLEND) WRITE(p, "gl_FragData[0] = ocol0;\n"); } - } WRITE(p, "}\n"); if (text[sizeof(text) - 1] != 0x7C) diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 430e929509..d0379e697d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -596,7 +596,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) //seems to get rather complicated } - if (api_type & API_D3D9) + if (ApiType & API_D3D9) { // D3D9 is addressing pixel centers instead of pixel boundaries in clip space. // Thus we need to offset the final position by half a pixel From eaa1ea71c1b5abda68ab46d1039b06b56a0bd074 Mon Sep 17 00:00:00 2001 From: rodolfoosvaldobogado Date: Fri, 26 Oct 2012 11:34:02 -0300 Subject: [PATCH 178/625] Implement the new buffer approach in opengl. sadly in my machine it gives my only 2 more fps and if your hardware does not support ARB_map_buffer_range is even slower than plain vertex arrays. change naming in all the backends vertex managers to make more easy to continue with the merge an some future improvements. please test this as i'm interested in knowing the performance in linux and windows with the different hardware platforms. --- .../VideoCommon/Src/LightingShaderGen.cpp | 2 +- .../Core/VideoCommon/Src/NativeVertexFormat.h | 2 +- .../Core/VideoCommon/Src/OpcodeDecoding.cpp | 4 +- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 4 +- .../Plugin_VideoDX11/Src/VertexManager.cpp | 98 +++---- .../Plugin_VideoDX11/Src/VertexManager.h | 24 +- .../Plugin_VideoDX9/Src/VertexManager.cpp | 128 ++++----- .../Plugin_VideoDX9/Src/VertexManager.h | 24 +- .../Src/NativeVertexFormat.cpp | 60 +++-- .../Plugin_VideoOGL/Src/VertexManager.cpp | 248 +++++++++++++++--- .../Plugin_VideoOGL/Src/VertexManager.h | 30 ++- 11 files changed, 431 insertions(+), 193 deletions(-) diff --git a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp index a506acadfc..f32e5dfeee 100644 --- a/Source/Core/VideoCommon/Src/LightingShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/LightingShaderGen.cpp @@ -23,7 +23,7 @@ int GetLightingShaderId(u32* out) { - for (int i = 0; i < xfregs.numChan.numColorChans; ++i) + for (u32 i = 0; i < xfregs.numChan.numColorChans; ++i) { out[i] = xfregs.color[i].enablelighting ? (u32)xfregs.color[i].hex : diff --git a/Source/Core/VideoCommon/Src/NativeVertexFormat.h b/Source/Core/VideoCommon/Src/NativeVertexFormat.h index 02184fde1c..1340991b21 100644 --- a/Source/Core/VideoCommon/Src/NativeVertexFormat.h +++ b/Source/Core/VideoCommon/Src/NativeVertexFormat.h @@ -102,7 +102,7 @@ public: virtual void SetupVertexPointers() = 0; virtual void EnableComponents(u32 components) {} - int GetVertexStride() const { return vertex_stride; } + u32 GetVertexStride() const { return vertex_stride; } // TODO: move this under private: u32 m_components; // VB_HAS_X. Bitmask telling what vertex components are present. diff --git a/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp b/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp index 4f7f86d655..a1ff1a9985 100644 --- a/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp +++ b/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp @@ -346,7 +346,7 @@ static void Decode() // Display lists get added directly into the FIFO stream if (g_bRecordFifoData && cmd_byte != GX_CMD_CALL_DL) - FifoRecorder::GetInstance().WriteGPCommand(opcodeStart, g_pVideoData - opcodeStart); + FifoRecorder::GetInstance().WriteGPCommand(opcodeStart, u32(g_pVideoData - opcodeStart)); } static void DecodeSemiNop() @@ -429,7 +429,7 @@ static void DecodeSemiNop() } if (g_bRecordFifoData && cmd_byte != GX_CMD_CALL_DL) - FifoRecorder::GetInstance().WriteGPCommand(opcodeStart, g_pVideoData - opcodeStart); + FifoRecorder::GetInstance().WriteGPCommand(opcodeStart, u32(g_pVideoData - opcodeStart)); } void OpcodeDecoder_Init() diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index bc7a12304f..3d5e676c61 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -196,7 +196,7 @@ void GetPixelShaderId(PIXELSHADERUID *uid, DSTALPHA_MODE dstAlphaMode, u32 compo *ptr++ = components; } - uid->num_values = ptr - uid->values; + uid->num_values = int(ptr - uid->values); } void GetSafePixelShaderId(PIXELSHADERUIDSAFE *uid, DSTALPHA_MODE dstAlphaMode, u32 components) @@ -229,7 +229,7 @@ void GetSafePixelShaderId(PIXELSHADERUIDSAFE *uid, DSTALPHA_MODE dstAlphaMode, u *ptr++ = bpmem.tevindref.hex; // 32 - for (int i = 0; i < bpmem.genMode.numtevstages+1; ++i) // up to 16 times + for (u32 i = 0; i < bpmem.genMode.numtevstages+1; ++i) // up to 16 times { *ptr++ = bpmem.combiners[i].colorC.hex; // 33+5*i *ptr++ = bpmem.combiners[i].alphaC.hex; // 34+5*i diff --git a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp index 7026522cf6..48f84b9aca 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp @@ -41,39 +41,39 @@ namespace DX11 // TODO: Find sensible values for these two const UINT IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16 * sizeof(u16); const UINT VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; -const UINT MAXVBUFFER_COUNT = 2; +const UINT MAX_VBUFFER_COUNT = 2; void VertexManager::CreateDeviceObjects() { D3D11_BUFFER_DESC bufdesc = CD3D11_BUFFER_DESC(IBUFFER_SIZE, D3D11_BIND_INDEX_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE); - m_vertexDrawOffset = 0; - m_triangleDrawIndex = 0; - m_lineDrawIndex = 0; - m_pointDrawIndex = 0; - m_indexBuffers = new PID3D11Buffer[MAXVBUFFER_COUNT]; - m_vertexBuffers = new PID3D11Buffer[MAXVBUFFER_COUNT]; - for (m_activeIndexBuffer = 0; m_activeIndexBuffer < MAXVBUFFER_COUNT; m_activeIndexBuffer++) + m_vertex_draw_offset = 0; + m_triangle_draw_index = 0; + m_line_draw_index = 0; + m_point_draw_index = 0; + m_index_buffers = new PID3D11Buffer[MAX_VBUFFER_COUNT]; + m_vertex_buffers = new PID3D11Buffer[MAX_VBUFFER_COUNT]; + for (m_current_index_buffer = 0; m_current_index_buffer < MAX_VBUFFER_COUNT; m_current_index_buffer++) { - m_indexBuffers[m_activeIndexBuffer] = NULL; - CHECK(SUCCEEDED(D3D::device->CreateBuffer(&bufdesc, NULL, &m_indexBuffers[m_activeIndexBuffer])), + m_index_buffers[m_current_index_buffer] = NULL; + CHECK(SUCCEEDED(D3D::device->CreateBuffer(&bufdesc, NULL, &m_index_buffers[m_current_index_buffer])), "Failed to create index buffer."); - D3D::SetDebugObjectName((ID3D11DeviceChild*)m_indexBuffers[m_activeIndexBuffer], "index buffer of VertexManager"); + D3D::SetDebugObjectName((ID3D11DeviceChild*)m_index_buffers[m_current_index_buffer], "index buffer of VertexManager"); } bufdesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; bufdesc.ByteWidth = VBUFFER_SIZE; - for (m_activeVertexBuffer = 0; m_activeVertexBuffer < MAXVBUFFER_COUNT; m_activeVertexBuffer++) + for (m_current_vertex_buffer = 0; m_current_vertex_buffer < MAX_VBUFFER_COUNT; m_current_vertex_buffer++) { - m_vertexBuffers[m_activeVertexBuffer] = NULL; - CHECK(SUCCEEDED(D3D::device->CreateBuffer(&bufdesc, NULL, &m_vertexBuffers[m_activeVertexBuffer])), + m_vertex_buffers[m_current_vertex_buffer] = NULL; + CHECK(SUCCEEDED(D3D::device->CreateBuffer(&bufdesc, NULL, &m_vertex_buffers[m_current_vertex_buffer])), "Failed to create vertex buffer."); - D3D::SetDebugObjectName((ID3D11DeviceChild*)m_vertexBuffers[m_activeVertexBuffer], "Vertex buffer of VertexManager"); + D3D::SetDebugObjectName((ID3D11DeviceChild*)m_vertex_buffers[m_current_vertex_buffer], "Vertex buffer of VertexManager"); } - m_activeVertexBuffer = 0; - m_activeIndexBuffer = 0; - m_indexBufferCursor = IBUFFER_SIZE; - m_vertexBufferCursor = VBUFFER_SIZE; + m_current_vertex_buffer = 0; + m_current_index_buffer = 0; + m_index_buffer_cursor = IBUFFER_SIZE; + m_vertex_buffer_cursor = VBUFFER_SIZE; m_lineShader.Init(); m_pointShader.Init(); } @@ -82,10 +82,10 @@ void VertexManager::DestroyDeviceObjects() { m_pointShader.Shutdown(); m_lineShader.Shutdown(); - for (m_activeVertexBuffer = 0; m_activeVertexBuffer < MAXVBUFFER_COUNT; m_activeVertexBuffer++) + for (m_current_vertex_buffer = 0; m_current_vertex_buffer < MAX_VBUFFER_COUNT; m_current_vertex_buffer++) { - SAFE_RELEASE(m_vertexBuffers[m_activeVertexBuffer]); - SAFE_RELEASE(m_indexBuffers[m_activeVertexBuffer]); + SAFE_RELEASE(m_vertex_buffers[m_current_vertex_buffer]); + SAFE_RELEASE(m_index_buffers[m_current_vertex_buffer]); } } @@ -100,47 +100,47 @@ VertexManager::~VertexManager() DestroyDeviceObjects(); } -void VertexManager::LoadBuffers() +void VertexManager::PrepareDrawBuffers() { D3D11_MAPPED_SUBRESOURCE map; UINT vSize = UINT(s_pCurBufferPointer - LocalVBuffer); D3D11_MAP MapType = D3D11_MAP_WRITE_NO_OVERWRITE; - if (m_vertexBufferCursor + vSize >= VBUFFER_SIZE) + if (m_vertex_buffer_cursor + vSize >= VBUFFER_SIZE) { // Wrap around - m_activeVertexBuffer = (m_activeVertexBuffer + 1) % MAXVBUFFER_COUNT; - m_vertexBufferCursor = 0; + m_current_vertex_buffer = (m_current_vertex_buffer + 1) % MAX_VBUFFER_COUNT; + m_vertex_buffer_cursor = 0; MapType = D3D11_MAP_WRITE_DISCARD; } - D3D::context->Map(m_vertexBuffers[m_activeVertexBuffer], 0, MapType, 0, &map); + D3D::context->Map(m_vertex_buffers[m_current_vertex_buffer], 0, MapType, 0, &map); - memcpy((u8*)map.pData + m_vertexBufferCursor, LocalVBuffer, vSize); - D3D::context->Unmap(m_vertexBuffers[m_activeVertexBuffer], 0); - m_vertexDrawOffset = m_vertexBufferCursor; - m_vertexBufferCursor += vSize; + memcpy((u8*)map.pData + m_vertex_buffer_cursor, LocalVBuffer, vSize); + D3D::context->Unmap(m_vertex_buffers[m_current_vertex_buffer], 0); + m_vertex_draw_offset = m_vertex_buffer_cursor; + m_vertex_buffer_cursor += vSize; UINT iCount = IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen(); MapType = D3D11_MAP_WRITE_NO_OVERWRITE; - if (m_indexBufferCursor + iCount >= (IBUFFER_SIZE / sizeof(u16))) + if (m_index_buffer_cursor + iCount >= (IBUFFER_SIZE / sizeof(u16))) { // Wrap around - m_activeIndexBuffer = (m_activeIndexBuffer + 1) % MAXVBUFFER_COUNT; - m_indexBufferCursor = 0; + m_current_index_buffer = (m_current_index_buffer + 1) % MAX_VBUFFER_COUNT; + m_index_buffer_cursor = 0; MapType = D3D11_MAP_WRITE_DISCARD; } - D3D::context->Map(m_indexBuffers[m_activeIndexBuffer], 0, MapType, 0, &map); + D3D::context->Map(m_index_buffers[m_current_index_buffer], 0, MapType, 0, &map); - m_triangleDrawIndex = m_indexBufferCursor; - m_lineDrawIndex = m_triangleDrawIndex + IndexGenerator::GetTriangleindexLen(); - m_pointDrawIndex = m_lineDrawIndex + IndexGenerator::GetLineindexLen(); - memcpy((u16*)map.pData + m_triangleDrawIndex, TIBuffer, sizeof(u16) * IndexGenerator::GetTriangleindexLen()); - memcpy((u16*)map.pData + m_lineDrawIndex, LIBuffer, sizeof(u16) * IndexGenerator::GetLineindexLen()); - memcpy((u16*)map.pData + m_pointDrawIndex, PIBuffer, sizeof(u16) * IndexGenerator::GetPointindexLen()); - D3D::context->Unmap(m_indexBuffers[m_activeIndexBuffer], 0); - m_indexBufferCursor += iCount; + m_triangle_draw_index = m_index_buffer_cursor; + m_line_draw_index = m_triangle_draw_index + IndexGenerator::GetTriangleindexLen(); + m_point_draw_index = m_line_draw_index + IndexGenerator::GetLineindexLen(); + memcpy((u16*)map.pData + m_triangle_draw_index, TIBuffer, sizeof(u16) * IndexGenerator::GetTriangleindexLen()); + memcpy((u16*)map.pData + m_line_draw_index, LIBuffer, sizeof(u16) * IndexGenerator::GetLineindexLen()); + memcpy((u16*)map.pData + m_point_draw_index, PIBuffer, sizeof(u16) * IndexGenerator::GetPointindexLen()); + D3D::context->Unmap(m_index_buffers[m_current_index_buffer], 0); + m_index_buffer_cursor += iCount; } static const float LINE_PT_TEX_OFFSETS[8] = { @@ -149,13 +149,13 @@ static const float LINE_PT_TEX_OFFSETS[8] = { void VertexManager::Draw(UINT stride) { - D3D::context->IASetVertexBuffers(0, 1, &m_vertexBuffers[m_activeVertexBuffer], &stride, &m_vertexDrawOffset); - D3D::context->IASetIndexBuffer(m_indexBuffers[m_activeIndexBuffer], DXGI_FORMAT_R16_UINT, 0); + D3D::context->IASetVertexBuffers(0, 1, &m_vertex_buffers[m_current_vertex_buffer], &stride, &m_vertex_draw_offset); + D3D::context->IASetIndexBuffer(m_index_buffers[m_current_index_buffer], DXGI_FORMAT_R16_UINT, 0); if (IndexGenerator::GetNumTriangles() > 0) { D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - D3D::context->DrawIndexed(IndexGenerator::GetTriangleindexLen(), m_triangleDrawIndex, 0); + D3D::context->DrawIndexed(IndexGenerator::GetTriangleindexLen(), m_triangle_draw_index, 0); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } // Disable culling for lines and points @@ -177,7 +177,7 @@ void VertexManager::Draw(UINT stride) texOffset, vpWidth, vpHeight, texOffsetEnable)) { D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); - D3D::context->DrawIndexed(IndexGenerator::GetLineindexLen(), m_lineDrawIndex, 0); + D3D::context->DrawIndexed(IndexGenerator::GetLineindexLen(), m_line_draw_index, 0); INCSTAT(stats.thisFrame.numIndexedDrawCalls); D3D::context->GSSetShader(NULL, NULL, 0); @@ -199,7 +199,7 @@ void VertexManager::Draw(UINT stride) texOffset, vpWidth, vpHeight, texOffsetEnable)) { D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); - D3D::context->DrawIndexed(IndexGenerator::GetPointindexLen(), m_pointDrawIndex, 0); + D3D::context->DrawIndexed(IndexGenerator::GetPointindexLen(), m_point_draw_index, 0); INCSTAT(stats.thisFrame.numIndexedDrawCalls); D3D::context->GSSetShader(NULL, NULL, 0); @@ -270,7 +270,7 @@ void VertexManager::vFlush() GFX_DEBUGGER_PAUSE_LOG_AT(NEXT_ERROR,true,{printf("Fail to set pixel shader\n");}); goto shader_fail; } - LoadBuffers(); + PrepareDrawBuffers(); unsigned int stride = g_nativeVertexFmt->GetVertexStride(); g_nativeVertexFmt->SetupVertexPointers(); g_renderer->ApplyState(useDstAlpha); diff --git a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.h b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.h index 9e6b7f2dca..b5d0d21757 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.h @@ -37,22 +37,22 @@ public: private: - void LoadBuffers(); - void Draw(UINT stride); + void PrepareDrawBuffers(); + void Draw(u32 stride); // temp void vFlush(); - UINT m_indexBufferCursor; - UINT m_vertexBufferCursor; - UINT m_vertexDrawOffset; - UINT m_triangleDrawIndex; - UINT m_lineDrawIndex; - UINT m_pointDrawIndex; - UINT m_activeVertexBuffer; - UINT m_activeIndexBuffer; + u32 m_vertex_buffer_cursor; + u32 m_vertex_draw_offset; + u32 m_index_buffer_cursor; + u32 m_current_vertex_buffer; + u32 m_current_index_buffer; + u32 m_triangle_draw_index; + u32 m_line_draw_index; + u32 m_point_draw_index; typedef ID3D11Buffer* PID3D11Buffer; - PID3D11Buffer* m_indexBuffers; - PID3D11Buffer* m_vertexBuffers; + PID3D11Buffer* m_index_buffers; + PID3D11Buffer* m_vertex_buffers; LineGeometryShader m_lineShader; PointGeometryShader m_pointShader; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 17a7aa1498..884f16f826 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -44,7 +44,7 @@ namespace DX9 //This are the initially requeted size for the buffers expresed in elements const u32 IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16; const u32 VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; -const u32 MAXVBUFFER_COUNT = 2; +const u32 MAX_VBUFFER_COUNT = 2; inline void DumpBadShaders() { @@ -67,52 +67,52 @@ inline void DumpBadShaders() void VertexManager::CreateDeviceObjects() { - NumVBuffers = 0; - VBuffers = NULL; - IBuffers = NULL; + m_buffers_count = 0; + m_vertex_buffers = NULL; + m_index_buffers = NULL; D3DCAPS9 DeviceCaps = D3D::GetCaps(); u32 devicevMaxBufferSize = DeviceCaps.MaxPrimitiveCount * 3 * DeviceCaps.MaxStreamStride; //Calculate Device Dependant size - CurrentVBufferSize = (VBUFFER_SIZE > devicevMaxBufferSize) ? devicevMaxBufferSize : VBUFFER_SIZE; - CurrentIBufferSize = (IBUFFER_SIZE > DeviceCaps.MaxVertexIndex) ? DeviceCaps.MaxVertexIndex : IBUFFER_SIZE; + m_vertex_buffer_size = (VBUFFER_SIZE > devicevMaxBufferSize) ? devicevMaxBufferSize : VBUFFER_SIZE; + m_index_buffer_size = (IBUFFER_SIZE > DeviceCaps.MaxVertexIndex) ? DeviceCaps.MaxVertexIndex : IBUFFER_SIZE; //if device caps are not enough for Vbuffer fall back to vertex arrays - if (CurrentIBufferSize < MAXIBUFFERSIZE || CurrentVBufferSize < MAXVBUFFERSIZE) return; + if (m_index_buffer_size < MAXIBUFFERSIZE || m_vertex_buffer_size < MAXVBUFFERSIZE) return; - VBuffers = new LPDIRECT3DVERTEXBUFFER9[MAXVBUFFER_COUNT]; - IBuffers = new LPDIRECT3DINDEXBUFFER9[MAXVBUFFER_COUNT]; + m_vertex_buffers = new LPDIRECT3DVERTEXBUFFER9[MAX_VBUFFER_COUNT]; + m_index_buffers = new LPDIRECT3DINDEXBUFFER9[MAX_VBUFFER_COUNT]; bool Fail = false; - for (CurrentVBuffer = 0; CurrentVBuffer < MAXVBUFFER_COUNT; CurrentVBuffer++) + for (m_current_vertex_buffer = 0; m_current_vertex_buffer < MAX_VBUFFER_COUNT; m_current_vertex_buffer++) { - VBuffers[CurrentVBuffer] = NULL; - IBuffers[CurrentVBuffer] = NULL; + m_vertex_buffers[m_current_vertex_buffer] = NULL; + m_index_buffers[m_current_vertex_buffer] = NULL; } - for (CurrentVBuffer = 0; CurrentVBuffer < MAXVBUFFER_COUNT; CurrentVBuffer++) + for (m_current_vertex_buffer = 0; m_current_vertex_buffer < MAX_VBUFFER_COUNT; m_current_vertex_buffer++) { - if(FAILED( D3D::dev->CreateVertexBuffer( CurrentVBufferSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &VBuffers[CurrentVBuffer], NULL ) ) ) + if(FAILED( D3D::dev->CreateVertexBuffer( m_vertex_buffer_size, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &m_vertex_buffers[m_current_vertex_buffer], NULL ) ) ) { Fail = true; break; } - if( FAILED( D3D::dev->CreateIndexBuffer( CurrentIBufferSize * sizeof(u16), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &IBuffers[CurrentVBuffer], NULL ) ) ) + if( FAILED( D3D::dev->CreateIndexBuffer( m_index_buffer_size * sizeof(u16), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &m_index_buffers[m_current_vertex_buffer], NULL ) ) ) { Fail = true; return; } } - NumVBuffers = CurrentVBuffer; - CurrentVBuffer = 0; - CurrentIBuffer = 0; - CurrentIBufferIndex = CurrentIBufferSize; - CurrentVBufferIndex = CurrentVBufferSize; + m_buffers_count = m_current_vertex_buffer; + m_current_vertex_buffer = 0; + m_current_index_buffer = 0; + m_index_buffer_cursor = m_index_buffer_size; + m_vertex_buffer_cursor = m_vertex_buffer_size; if (Fail) { - NumVBuffers--; - if (NumVBuffers < 2) + m_buffers_count--; + if (m_buffers_count < 2) { //Error creating Vertex buffers. clean and fall to Vertex arrays - NumVBuffers = MAXVBUFFER_COUNT; + m_buffers_count = MAX_VBUFFER_COUNT; DestroyDeviceObjects(); } } @@ -121,34 +121,34 @@ void VertexManager::DestroyDeviceObjects() { D3D::dev->SetStreamSource( 0, NULL, 0, 0); D3D::dev->SetIndices(NULL); - for (int i = 0; i < MAXVBUFFER_COUNT; i++) + for (int i = 0; i < MAX_VBUFFER_COUNT; i++) { - if(VBuffers) + if(m_vertex_buffers) { - if (VBuffers[i]) + if (m_vertex_buffers[i]) { - VBuffers[i]->Release(); - VBuffers[i] = NULL; + m_vertex_buffers[i]->Release(); + m_vertex_buffers[i] = NULL; } } - if (IBuffers[i]) + if (m_index_buffers[i]) { - IBuffers[i]->Release(); - IBuffers[i] = NULL; + m_index_buffers[i]->Release(); + m_index_buffers[i] = NULL; } } - if(VBuffers) - delete [] VBuffers; - if(IBuffers) - delete [] IBuffers; - VBuffers = NULL; - IBuffers = NULL; + if(m_vertex_buffers) + delete [] m_vertex_buffers; + if(m_index_buffers) + delete [] m_index_buffers; + m_vertex_buffers = NULL; + m_index_buffers = NULL; } -void VertexManager::PrepareVBuffers(int stride) +void VertexManager::PrepareDrawBuffers(u32 stride) { - if (!NumVBuffers) + if (!m_buffers_count) { return; } @@ -161,31 +161,31 @@ void VertexManager::PrepareVBuffers(int stride) int IndexDataSize = TdataSize + LDataSize + PDataSize; DWORD LockMode = D3DLOCK_NOOVERWRITE; - if (CurrentVBufferIndex > CurrentVBufferSize - datasize) + if (m_vertex_buffer_cursor > m_vertex_buffer_size - datasize) { LockMode = D3DLOCK_DISCARD; - CurrentVBufferIndex = 0; - CurrentVBuffer = (CurrentVBuffer + 1) % NumVBuffers; + m_vertex_buffer_cursor = 0; + m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; } - if(FAILED(VBuffers[CurrentVBuffer]->Lock(CurrentVBufferIndex, datasize,(VOID**)(&pVertices), LockMode))) + if(FAILED(m_vertex_buffers[m_current_vertex_buffer]->Lock(m_vertex_buffer_cursor, datasize,(VOID**)(&pVertices), LockMode))) { DestroyDeviceObjects(); return; } memcpy(pVertices, LocalVBuffer, datasize); - VBuffers[CurrentVBuffer]->Unlock(); + m_vertex_buffers[m_current_vertex_buffer]->Unlock(); LockMode = D3DLOCK_NOOVERWRITE; - if (CurrentIBufferIndex > CurrentIBufferSize - IndexDataSize) + if (m_index_buffer_cursor > m_index_buffer_size - IndexDataSize) { LockMode = D3DLOCK_DISCARD; - CurrentIBufferIndex = 0; - CurrentIBuffer = (CurrentIBuffer + 1) % NumVBuffers; + m_index_buffer_cursor = 0; + m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; } - if(FAILED(IBuffers[CurrentIBuffer]->Lock(CurrentIBufferIndex * sizeof(u16), IndexDataSize * sizeof(u16), (VOID**)(&pIndices), LockMode ))) + if(FAILED(m_index_buffers[m_current_index_buffer]->Lock(m_index_buffer_cursor * sizeof(u16), IndexDataSize * sizeof(u16), (VOID**)(&pIndices), LockMode ))) { DestroyDeviceObjects(); return; @@ -204,15 +204,15 @@ void VertexManager::PrepareVBuffers(int stride) { memcpy(pIndices, PIBuffer, PDataSize * sizeof(u16)); } - IBuffers[CurrentIBuffer]->Unlock(); - D3D::dev->SetStreamSource( 0, VBuffers[CurrentVBuffer], CurrentVBufferIndex, stride); - if(CurrentIBufferIndex == 0) + m_index_buffers[m_current_index_buffer]->Unlock(); + D3D::dev->SetStreamSource( 0, m_vertex_buffers[m_current_vertex_buffer], m_vertex_buffer_cursor, stride); + if(m_index_buffer_cursor == 0) { - D3D::dev->SetIndices(IBuffers[CurrentIBuffer]); + D3D::dev->SetIndices(m_index_buffers[m_current_index_buffer]); } } -void VertexManager::DrawVB(int stride) +void VertexManager::DrawVertexBuffer(int stride) { if (IndexGenerator::GetNumTriangles() > 0) { @@ -221,7 +221,7 @@ void VertexManager::DrawVB(int stride) 0, 0, IndexGenerator::GetNumVerts(), - CurrentIBufferIndex, + m_index_buffer_cursor, IndexGenerator::GetNumTriangles()))) { DumpBadShaders(); @@ -235,7 +235,7 @@ void VertexManager::DrawVB(int stride) 0, 0, IndexGenerator::GetNumVerts(), - CurrentIBufferIndex + IndexGenerator::GetTriangleindexLen(), + m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen(), IndexGenerator::GetNumLines()))) { DumpBadShaders(); @@ -249,7 +249,7 @@ void VertexManager::DrawVB(int stride) 0, 0, IndexGenerator::GetNumVerts(), - CurrentIBufferIndex + IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen(), + m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen(), IndexGenerator::GetNumPoints()))) { DumpBadShaders(); @@ -259,7 +259,7 @@ void VertexManager::DrawVB(int stride) } -void VertexManager::DrawVA(int stride) +void VertexManager::DrawVertexArray(int stride) { if (IndexGenerator::GetNumTriangles() > 0) { @@ -350,7 +350,7 @@ void VertexManager::vFlush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); - int stride = g_nativeVertexFmt->GetVertexStride(); + u32 stride = g_nativeVertexFmt->GetVertexStride(); if (!PixelShaderCache::SetShader(DSTALPHA_NONE,g_nativeVertexFmt->m_components)) { GFX_DEBUGGER_PAUSE_LOG_AT(NEXT_ERROR,true,{printf("Fail to set pixel shader\n");}); @@ -362,9 +362,9 @@ void VertexManager::vFlush() goto shader_fail; } - PrepareVBuffers(stride); + PrepareDrawBuffers(stride); g_nativeVertexFmt->SetupVertexPointers(); - if(NumVBuffers){ DrawVB(stride);} else { DrawVA(stride);} + if(m_buffers_count){ DrawVertexBuffer(stride);} else { DrawVertexArray(stride);} bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; @@ -377,16 +377,16 @@ void VertexManager::vFlush() } // update alpha only g_renderer->ApplyState(true); - if(NumVBuffers){ DrawVB(stride);} else { DrawVA(stride);} + if(m_buffers_count){ DrawVertexBuffer(stride);} else { DrawVertexArray(stride);} g_renderer->RestoreState(); } GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); shader_fail: - if(NumVBuffers) + if(m_buffers_count) { - CurrentIBufferIndex += IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen(); - CurrentVBufferIndex += IndexGenerator::GetNumVerts() * stride; + m_index_buffer_cursor += IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen(); + m_vertex_buffer_cursor += IndexGenerator::GetNumVerts() * stride; } ResetBuffer(); } diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h index aa4e9ed57b..51cf9b953d 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h @@ -34,18 +34,18 @@ public: void CreateDeviceObjects(); void DestroyDeviceObjects(); private: - u32 CurrentVBufferIndex; - u32 CurrentVBufferSize; - u32 CurrentIBufferIndex; - u32 CurrentIBufferSize; - u32 NumVBuffers; - u32 CurrentVBuffer; - u32 CurrentIBuffer; - LPDIRECT3DVERTEXBUFFER9 *VBuffers; - LPDIRECT3DINDEXBUFFER9 *IBuffers; - void PrepareVBuffers(int stride); - void DrawVB(int stride); - void DrawVA(int stride); + u32 m_vertex_buffer_cursor; + u32 m_vertex_buffer_size; + u32 m_index_buffer_cursor; + u32 m_index_buffer_size; + u32 m_buffers_count; + u32 m_current_vertex_buffer; + u32 m_current_index_buffer; + LPDIRECT3DVERTEXBUFFER9 *m_vertex_buffers; + LPDIRECT3DINDEXBUFFER9 *m_index_buffers; + void PrepareDrawBuffers(u32 stride); + void DrawVertexBuffer(int stride); + void DrawVertexArray(int stride); // temp void vFlush(); }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index ae20649433..3a98332562 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -53,20 +53,6 @@ DECLARE_IMPORT(glColorPointer); DECLARE_IMPORT(glTexCoordPointer); #endif -class GLVertexFormat : public NativeVertexFormat -{ - u8 *m_compiledCode; - PortableVertexDeclaration vtx_decl; - -public: - GLVertexFormat(); - ~GLVertexFormat(); - - virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); - virtual void SetupVertexPointers(); - virtual void EnableComponents(u32 components); -}; - namespace OGL { @@ -75,8 +61,6 @@ NativeVertexFormat* VertexManager::CreateNativeVertexFormat() return new GLVertexFormat(); } -} - GLVertexFormat::GLVertexFormat() { #ifdef USE_JIT @@ -221,6 +205,46 @@ void GLVertexFormat::SetupVertexPointers() { #endif } +void GLVertexFormat::SetupVertexPointersOffset(u32 offset) { + // Cast a pointer to compiled code to a pointer to a function taking no parameters, through a (void *) cast first to + // get around type checking errors, and call it. +#ifdef USE_JIT + ((void (*)())(void*)m_compiledCode)(); +#else + glVertexPointer(3, GL_FLOAT, vtx_decl.stride, (GLvoid*)offset); + if (vtx_decl.num_normals >= 1) { + glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[0])); + if (vtx_decl.num_normals == 3) { + glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[1])); + glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[2])); + } + } + + for (int i = 0; i < 2; i++) { + if (vtx_decl.color_offset[i] != -1) { + if (i == 0) + glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.color_offset[i])); + else { + glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.color_offset[i])); + } + } + } + + for (int i = 0; i < 8; i++) { + if (vtx_decl.texcoord_offset[i] != -1) { + int id = GL_TEXTURE0 + i; + glClientActiveTexture(id); + glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), + vtx_decl.stride, (GLvoid*)(offset + vtx_decl.texcoord_offset[i])); + } + } + + if (vtx_decl.posmtx_offset != -1) { + glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.posmtx_offset)); + } +#endif +} + void GLVertexFormat::EnableComponents(u32 components) { if (s_prevcomponents != components) @@ -284,3 +308,7 @@ void GLVertexFormat::EnableComponents(u32 components) s_prevcomponents = components; } } + + +} + diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 501c4969e5..03927413d8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -48,38 +48,194 @@ extern NativeVertexFormat *g_nativeVertexFmt; namespace OGL { - -//static GLint max_Index_size = 0; - -//static GLuint s_vboBuffers[MAXVBOBUFFERCOUNT] = {0}; -//static int s_nCurVBOIndex = 0; // current free buffer +//This are the initially requeted size for the buffers expresed in bytes +const u32 IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16 * sizeof(u16); +const u32 VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; +const u32 MAX_VBUFFER_COUNT = 2; VertexManager::VertexManager() { - // TODO: doesn't seem to be used anywhere + CreateDeviceObjects(); +} - //glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*)&max_Index_size); - // - //if (max_Index_size > MAXIBUFFERSIZE) - // max_Index_size = MAXIBUFFERSIZE; - // - //GL_REPORT_ERRORD(); - - glEnableClientState(GL_VERTEX_ARRAY); - GL_REPORT_ERRORD(); +VertexManager::~VertexManager() +{ + DestroyDeviceObjects(); } void VertexManager::CreateDeviceObjects() { - + m_buffers_count = 0; + m_vertex_buffers = NULL; + m_index_buffers = NULL; + glEnableClientState(GL_VERTEX_ARRAY); + GL_REPORT_ERRORD(); + int max_Index_size = 0; + int max_Vertex_size = 0; + glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*)&max_Index_size); + glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*)&max_Vertex_size); + max_Index_size *= sizeof(u16); + GL_REPORT_ERROR(); + m_index_buffer_size = IBUFFER_SIZE; + if (max_Index_size > 0 && max_Index_size < m_index_buffer_size) + m_index_buffer_size = max_Index_size; + + m_vertex_buffer_size = VBUFFER_SIZE; + if (max_Vertex_size > 0 && max_Vertex_size < m_vertex_buffer_size) + m_vertex_buffer_size = max_Vertex_size; + + if (m_index_buffer_size < VertexManager::MAXIBUFFERSIZE || m_vertex_buffer_size < VertexManager::MAXVBUFFERSIZE) + { + return; + } + + m_vertex_buffers = new GLuint[MAX_VBUFFER_COUNT]; + m_index_buffers = new GLuint[MAX_VBUFFER_COUNT]; + + glGenBuffers(MAX_VBUFFER_COUNT, m_vertex_buffers); + GL_REPORT_ERROR(); + glGenBuffers(MAX_VBUFFER_COUNT, m_index_buffers); + GL_REPORT_ERROR(); + for (u32 i = 0; i < MAX_VBUFFER_COUNT; i++) + { + glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[i] ); + GL_REPORT_ERROR(); + glBufferData(GL_ARRAY_BUFFER, m_vertex_buffer_size, NULL, GL_STREAM_DRAW ); + GL_REPORT_ERROR(); + } + for (u32 i = 0; i < MAX_VBUFFER_COUNT; i++) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[i] ); + GL_REPORT_ERROR(); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_size, NULL, GL_STREAM_DRAW ); + GL_REPORT_ERROR(); + } + m_buffers_count = MAX_VBUFFER_COUNT; + m_current_index_buffer = 0; + m_current_vertex_buffer = 0; + m_index_buffer_cursor = 0; + m_vertex_buffer_cursor = 0; } void VertexManager::DestroyDeviceObjects() { - + glDisableClientState(GL_VERTEX_ARRAY); + GL_REPORT_ERRORD(); + glBindBuffer(GL_ARRAY_BUFFER, NULL ); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, NULL ); + GL_REPORT_ERROR(); + if(m_vertex_buffers) + { + glDeleteBuffers(MAX_VBUFFER_COUNT, m_vertex_buffers); + GL_REPORT_ERROR(); + delete [] m_vertex_buffers; + } + if(m_index_buffers) + { + glDeleteBuffers(MAX_VBUFFER_COUNT, m_index_buffers); + GL_REPORT_ERROR(); + delete [] m_index_buffers; + } + m_vertex_buffers = NULL; + m_index_buffers = NULL; } -void VertexManager::Draw() +void VertexManager::PrepareDrawBuffers(u32 stride) +{ + if (!m_buffers_count) + { + return; + } + u8* pVertices = NULL; + u16* pIndices = NULL; + int vertex_data_size = IndexGenerator::GetNumVerts() * stride; + int triangle_index_size = IndexGenerator::GetTriangleindexLen() * sizeof(u16); + int line_index_size = IndexGenerator::GetLineindexLen() * sizeof(u16); + int point_index_size = IndexGenerator::GetPointindexLen() * sizeof(u16); + int index_data_size = triangle_index_size + line_index_size + point_index_size; + GLbitfield LockMode = GL_MAP_WRITE_BIT; + if (m_vertex_buffer_cursor > m_vertex_buffer_size - vertex_data_size) + { + LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; + m_vertex_buffer_cursor = 0; + m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; + } + else + { + LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; + } + glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_vertex_buffer]); + if(GLEW_ARB_map_buffer_range) + { + pVertices = (u8*)glMapBufferRange(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LockMode); + if(pVertices) + { + memcpy(pVertices, LocalVBuffer, vertex_data_size); + glUnmapBuffer(GL_ARRAY_BUFFER); + } + else + { + glBufferSubData(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LocalVBuffer); + } + } + else + { + glBufferSubData(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LocalVBuffer); + } + + LockMode = GL_MAP_WRITE_BIT; + + if (m_index_buffer_cursor > m_index_buffer_size - index_data_size) + { + LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; + m_index_buffer_cursor = 0; + m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; + } + else + { + LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; + } + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[m_current_index_buffer]); + if(GLEW_ARB_map_buffer_range) + { + pIndices = (u16*)glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor , index_data_size, LockMode); + if(pIndices) + { + if(triangle_index_size) + { + memcpy(pIndices, TIBuffer, triangle_index_size); + pIndices += triangle_index_size; + } + if(line_index_size) + { + memcpy(pIndices, LIBuffer, line_index_size); + pIndices += line_index_size; + } + if(point_index_size) + { + memcpy(pIndices, PIBuffer, point_index_size); + } + glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); + } + else + { + if(triangle_index_size) + { + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor, triangle_index_size, TIBuffer); + } + if(line_index_size) + { + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size, line_index_size, LIBuffer); + } + if(point_index_size) + { + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size + line_index_size, point_index_size, PIBuffer); + } + } + } +} + +void VertexManager::DrawVertexArray() { if (IndexGenerator::GetNumTriangles() > 0) { @@ -98,6 +254,31 @@ void VertexManager::Draw() } } +void VertexManager::DrawVertexBufferObject() +{ + int triangle_index_size = IndexGenerator::GetTriangleindexLen(); + int line_index_size = IndexGenerator::GetLineindexLen(); + int point_index_size = IndexGenerator::GetPointindexLen(); + int StartIndex = m_index_buffer_cursor; + if (triangle_index_size > 0) + { + glDrawElements(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } + if (line_index_size > 0) + { + StartIndex += triangle_index_size * sizeof(u16); + glDrawElements(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } + if (point_index_size > 0) + { + StartIndex += line_index_size * sizeof(u16); + glDrawElements(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } +} + void VertexManager::vFlush() { if (LocalVBuffer == s_pCurBufferPointer) return; @@ -134,13 +315,17 @@ void VertexManager::vFlush() (void)GL_REPORT_ERROR(); - //glBindBuffer(GL_ARRAY_BUFFER, s_vboBuffers[s_nCurVBOIndex]); - //glBufferData(GL_ARRAY_BUFFER, s_pCurBufferPointer - LocalVBuffer, LocalVBuffer, GL_STREAM_DRAW); - GL_REPORT_ERRORD(); + u32 stride = g_nativeVertexFmt->GetVertexStride(); - // setup the pointers - if (g_nativeVertexFmt) + PrepareDrawBuffers(stride); + if(m_buffers_count) + { + ((GLVertexFormat*)g_nativeVertexFmt)->SetupVertexPointersOffset(m_vertex_buffer_cursor); + } + else + { g_nativeVertexFmt->SetupVertexPointers(); + } GL_REPORT_ERRORD(); u32 usedtextures = 0; @@ -153,7 +338,7 @@ void VertexManager::vFlush() if (bpmem.tevind[i].IsActive() && bpmem.tevind[i].bt < bpmem.genMode.numindstages) usedtextures |= 1 << bpmem.tevindref.getTexMap(bpmem.tevind[i].bt); - for (int i = 0; i < 8; i++) + for (u32 i = 0; i < 8; i++) { if (usedtextures & (1 << i)) { @@ -217,7 +402,7 @@ void VertexManager::vFlush() if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); - Draw(); + if(m_buffers_count) { DrawVertexBufferObject(); }else{ DrawVertexArray();}; // run through vertex groups again to set alpha if (useDstAlpha && !dualSourcePossible) @@ -230,7 +415,7 @@ void VertexManager::vFlush() glDisable(GL_BLEND); - Draw(); + if(m_buffers_count) { DrawVertexBufferObject(); }else{ DrawVertexArray();}; // restore color mask g_renderer->SetColorMask(); @@ -238,11 +423,12 @@ void VertexManager::vFlush() glEnable(GL_BLEND); } GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); - - //s_nCurVBOIndex = (s_nCurVBOIndex + 1) % ARRAYSIZE(s_vboBuffers); - s_pCurBufferPointer = LocalVBuffer; - IndexGenerator::Start(TIBuffer,LIBuffer,PIBuffer); - + if(m_buffers_count) + { + m_index_buffer_cursor += (IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen()) * sizeof(u16); + m_vertex_buffer_cursor += IndexGenerator::GetNumVerts() * stride; + } + ResetBuffer(); #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h index 5cec1bf97e..ac45151999 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h @@ -24,6 +24,20 @@ namespace OGL { + class GLVertexFormat : public NativeVertexFormat + { + u8 *m_compiledCode; + PortableVertexDeclaration vtx_decl; + + public: + GLVertexFormat(); + ~GLVertexFormat(); + + virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); + virtual void SetupVertexPointers(); + virtual void SetupVertexPointersOffset(u32 offset); + virtual void EnableComponents(u32 components); + }; // Handles the OpenGL details of drawing lots of vertices quickly. // Other functionality is moving out. @@ -31,14 +45,24 @@ class VertexManager : public ::VertexManager { public: VertexManager(); - + ~VertexManager(); NativeVertexFormat* CreateNativeVertexFormat(); void CreateDeviceObjects(); void DestroyDeviceObjects(); private: - void Draw(); - // temp + void DrawVertexArray(); + void DrawVertexBufferObject(); void vFlush(); + void PrepareDrawBuffers(u32 stride); + u32 m_vertex_buffer_cursor; + u32 m_vertex_buffer_size; + u32 m_index_buffer_cursor; + u32 m_index_buffer_size; + u32 m_buffers_count; + u32 m_current_vertex_buffer; + u32 m_current_index_buffer; + GLuint* m_vertex_buffers; + GLuint* m_index_buffers; }; } From ee72852491dfa2c6246d9e2808b782444e2ce4ca Mon Sep 17 00:00:00 2001 From: rodolfoosvaldobogado Date: Fri, 26 Oct 2012 23:18:09 -0300 Subject: [PATCH 179/625] implement some code to reduce the amounts of calls to setup vertex format, in d3d9 it gives no noticeable speedup, in opengl it still does not work right. thanks to neobrain for the idea --- .../VideoCommon/Src/VertexManagerBase.cpp | 3 + .../Plugin_VideoDX11/Src/VertexManager.cpp | 3 - .../Plugins/Plugin_VideoDX9/Src/D3DBase.cpp | 226 +++++++++++++----- Source/Plugins/Plugin_VideoDX9/Src/D3DBase.h | 11 + .../Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp | 30 ++- .../Plugin_VideoDX9/Src/VertexManager.cpp | 43 ++-- .../Plugin_VideoDX9/Src/VertexManager.h | 1 + .../Plugin_VideoOGL/Src/VertexManager.cpp | 96 ++++++-- .../Plugin_VideoOGL/Src/VertexManager.h | 2 + 9 files changed, 305 insertions(+), 110 deletions(-) diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp index 4118e3dcbd..7c1fe9ff6c 100644 --- a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp @@ -159,6 +159,9 @@ void VertexManager::AddVertices(int primitive, int numVertices) void VertexManager::Flush() { + if (LocalVBuffer == s_pCurBufferPointer) return; + if (Flushed) return; + Flushed = true; g_vertex_manager->vFlush(); } diff --git a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp index 48f84b9aca..347d294eb7 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp @@ -211,9 +211,6 @@ void VertexManager::Draw(UINT stride) void VertexManager::vFlush() { - if (LocalVBuffer == s_pCurBufferPointer) return; - if (Flushed) return; - Flushed=true; VideoFifo_CheckEFBAccess(); u32 usedtextures = 0; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp index ff3f68a6cd..31466d1c84 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp @@ -66,6 +66,7 @@ static int numAdapters; static int cur_adapter; // Value caches for state filtering +const int MaxStreamSources = 16; const int MaxTextureStages = 9; const int MaxRenderStates = 210 + 46; const int MaxTextureTypes = 33; @@ -83,10 +84,23 @@ static DWORD m_SamplerStates[MaxSamplerSize][MaxSamplerTypes]; static bool m_SamplerStatesSet[MaxSamplerSize][MaxSamplerTypes]; static bool m_SamplerStatesChanged[MaxSamplerSize][MaxSamplerTypes]; -LPDIRECT3DBASETEXTURE9 m_Textures[16]; -LPDIRECT3DVERTEXDECLARATION9 m_VtxDecl; -LPDIRECT3DPIXELSHADER9 m_PixelShader; -LPDIRECT3DVERTEXSHADER9 m_VertexShader; +static LPDIRECT3DBASETEXTURE9 m_Textures[16]; +static LPDIRECT3DVERTEXDECLARATION9 m_VtxDecl; +static bool m_VtxDeclChanged; +static LPDIRECT3DPIXELSHADER9 m_PixelShader; +static bool m_PixelShaderChanged; +static LPDIRECT3DVERTEXSHADER9 m_VertexShader; +static bool m_VertexShaderChanged; +struct StreamSourceDescriptor +{ + LPDIRECT3DVERTEXBUFFER9 pStreamData; + UINT OffsetInBytes; + UINT Stride; +}; +static StreamSourceDescriptor m_stream_sources[MaxStreamSources]; +static bool m_stream_sources_Changed[MaxStreamSources]; +static LPDIRECT3DINDEXBUFFER9 m_index_buffer; +static bool m_index_buffer_Changed; // Z buffer formats to be used for EFB depth surface D3DFORMAT DepthFormats[] = { @@ -170,9 +184,9 @@ void EnableAlphaToCoverage() { // Each vendor has their own specific little hack. if (GetCurAdapter().ident.VendorId == VENDOR_ATI) - D3D::SetRenderState(D3DRS_POINTSIZE, (D3DFORMAT)MAKEFOURCC('A', '2', 'M', '1')); + SetRenderState(D3DRS_POINTSIZE, (D3DFORMAT)MAKEFOURCC('A', '2', 'M', '1')); else - D3D::SetRenderState(D3DRS_ADAPTIVETESS_Y, (D3DFORMAT)MAKEFOURCC('A', 'T', 'O', 'C')); + SetRenderState(D3DRS_ADAPTIVETESS_Y, (D3DFORMAT)MAKEFOURCC('A', 'T', 'O', 'C')); } void InitPP(int adapter, int f, int aa_mode, D3DPRESENT_PARAMETERS *pp) @@ -215,14 +229,14 @@ void InitPP(int adapter, int f, int aa_mode, D3DPRESENT_PARAMETERS *pp) void Enumerate() { - numAdapters = D3D::D3D->GetAdapterCount(); + numAdapters = D3D->GetAdapterCount(); for (int i = 0; i < std::min(MAX_ADAPTERS, numAdapters); i++) { Adapter &a = adapters[i]; a.aa_levels.clear(); a.resolutions.clear(); - D3D::D3D->GetAdapterIdentifier(i, 0, &a.ident); + D3D->GetAdapterIdentifier(i, 0, &a.ident); bool isNvidia = a.ident.VendorId == VENDOR_NVIDIA; // Add SuperSamples modes @@ -233,17 +247,17 @@ void Enumerate() //disable them will they are not implemnted /* DWORD qlevels = 0; - if (D3DERR_NOTAVAILABLE != D3D::D3D->CheckDeviceMultiSampleType( + if (D3DERR_NOTAVAILABLE != D3D->CheckDeviceMultiSampleType( i, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, TRUE, D3DMULTISAMPLE_2_SAMPLES, &qlevels)) if (qlevels > 0) a.aa_levels.push_back(AALevel("2x MSAA", D3DMULTISAMPLE_2_SAMPLES, 0)); - if (D3DERR_NOTAVAILABLE != D3D::D3D->CheckDeviceMultiSampleType( + if (D3DERR_NOTAVAILABLE != D3D->CheckDeviceMultiSampleType( i, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, TRUE, D3DMULTISAMPLE_2_SAMPLES, &qlevels)) if (qlevels > 0) a.aa_levels.push_back(AALevel("4x MSAA", D3DMULTISAMPLE_4_SAMPLES, 0)); - if (D3DERR_NOTAVAILABLE != D3D::D3D->CheckDeviceMultiSampleType( + if (D3DERR_NOTAVAILABLE != D3D->CheckDeviceMultiSampleType( i, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, TRUE, D3DMULTISAMPLE_8_SAMPLES, &qlevels)) if (qlevels > 0) a.aa_levels.push_back(AALevel("8x MSAA", D3DMULTISAMPLE_8_SAMPLES, 0)); @@ -251,7 +265,7 @@ void Enumerate() if (isNvidia) { // CSAA support - if (D3DERR_NOTAVAILABLE != D3D::D3D->CheckDeviceMultiSampleType( + if (D3DERR_NOTAVAILABLE != D3D->CheckDeviceMultiSampleType( i, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, TRUE, D3DMULTISAMPLE_4_SAMPLES, &qlevels)) { if (qlevels > 2) @@ -262,7 +276,7 @@ void Enumerate() a.aa_levels.push_back(AALevel("8xQ CSAA", D3DMULTISAMPLE_8_SAMPLES, 0)); } } - if (D3DERR_NOTAVAILABLE != D3D::D3D->CheckDeviceMultiSampleType( + if (D3DERR_NOTAVAILABLE != D3D->CheckDeviceMultiSampleType( i, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, TRUE, D3DMULTISAMPLE_8_SAMPLES, &qlevels)) { if (qlevels > 2) @@ -296,11 +310,11 @@ void Enumerate() { strcpy(a.aa_levels[0].name, "(Not supported on this device)"); } - int numModes = D3D::D3D->GetAdapterModeCount(i, D3DFMT_X8R8G8B8); + int numModes = D3D->GetAdapterModeCount(i, D3DFMT_X8R8G8B8); for (int m = 0; m < numModes; m++) { D3DDISPLAYMODE mode; - D3D::D3D->EnumAdapterModes(i, D3DFMT_X8R8G8B8, m, &mode); + D3D->EnumAdapterModes(i, D3DFMT_X8R8G8B8, m, &mode); int found = -1; for (int x = 0; x < (int)a.resolutions.size(); x++) @@ -440,8 +454,8 @@ HRESULT Create(int adapter, HWND wnd, int _resolution, int aa_mode, bool auto_de dev->GetRenderTarget(0, &back_buffer); if (dev->GetDepthStencilSurface(&back_buffer_z) == D3DERR_NOTFOUND) back_buffer_z = NULL; - D3D::SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE ); - D3D::SetRenderState(D3DRS_FILLMODE, g_Config.bWireFrame ? D3DFILL_WIREFRAME : D3DFILL_SOLID); + SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE ); + SetRenderState(D3DRS_FILLMODE, g_Config.bWireFrame ? D3DFILL_WIREFRAME : D3DFILL_SOLID); memset(m_Textures, 0, sizeof(m_Textures)); memset(m_TextureStageStatesSet, 0, sizeof(m_TextureStageStatesSet)); memset(m_RenderStatesSet, 0, sizeof(m_RenderStatesSet)); @@ -452,6 +466,15 @@ HRESULT Create(int adapter, HWND wnd, int _resolution, int aa_mode, bool auto_de m_VtxDecl = NULL; m_PixelShader = NULL; m_VertexShader = NULL; + m_index_buffer = NULL; + memset(m_stream_sources, 0, sizeof(m_stream_sources)); + m_index_buffer = NULL; + + m_VtxDeclChanged = false; + m_PixelShaderChanged = false; + m_VertexShaderChanged = false; + memset(m_stream_sources_Changed, 0 , sizeof(m_stream_sources_Changed)); + m_index_buffer_Changed = false; // Device state would normally be set here return S_OK; } @@ -516,7 +539,7 @@ bool CheckDepthStencilSupport(D3DFORMAT target_format, D3DFORMAT depth_format) D3DFORMAT GetSupportedDepthTextureFormat() { for (int i = 0; i < sizeof(DepthFormats)/sizeof(D3DFORMAT); ++i) - if (D3D::CheckTextureSupport(D3DUSAGE_DEPTHSTENCIL, DepthFormats[i])) + if (CheckTextureSupport(D3DUSAGE_DEPTHSTENCIL, DepthFormats[i])) return DepthFormats[i]; return D3DFMT_UNKNOWN; @@ -525,7 +548,7 @@ D3DFORMAT GetSupportedDepthTextureFormat() D3DFORMAT GetSupportedDepthSurfaceFormat(D3DFORMAT target_format) { for (int i = 0; i < sizeof(DepthFormats)/sizeof(D3DFORMAT); ++i) - if (D3D::CheckDepthStencilSupport(target_format, DepthFormats[i])) + if (CheckDepthStencilSupport(target_format, DepthFormats[i])) return DepthFormats[i]; return D3DFMT_UNKNOWN; @@ -533,13 +556,13 @@ D3DFORMAT GetSupportedDepthSurfaceFormat(D3DFORMAT target_format) const char *VertexShaderVersionString() { - int version = ((D3D::caps.VertexShaderVersion >> 8) & 0xFF); + int version = ((caps.VertexShaderVersion >> 8) & 0xFF); return vsVersions[std::min(4, version)]; } const char *PixelShaderVersionString() { - int version = ((D3D::caps.PixelShaderVersion >> 8) & 0xFF); + int version = ((caps.PixelShaderVersion >> 8) & 0xFF); return psVersions[std::min(4, version)]; } @@ -653,14 +676,14 @@ void ApplyCachedState() for (int type = 0; type < MaxSamplerTypes; type++) { if(m_SamplerStatesSet[sampler][type]) - D3D::dev->SetSamplerState(sampler, (D3DSAMPLERSTATETYPE)type, m_SamplerStates[sampler][type]); + dev->SetSamplerState(sampler, (D3DSAMPLERSTATETYPE)type, m_SamplerStates[sampler][type]); } } for (int rs = 0; rs < MaxRenderStates; rs++) { if (m_RenderStatesSet[rs]) - D3D::dev->SetRenderState((D3DRENDERSTATETYPE)rs, m_RenderStates[rs]); + dev->SetRenderState((D3DRENDERSTATETYPE)rs, m_RenderStates[rs]); } // We don't bother restoring these so let's just wipe the state copy @@ -671,6 +694,13 @@ void ApplyCachedState() m_VtxDecl = NULL; m_PixelShader = NULL; m_VertexShader = NULL; + memset(m_stream_sources, 0, sizeof(m_stream_sources)); + m_index_buffer = NULL; + m_VtxDeclChanged = false; + m_PixelShaderChanged = false; + m_VertexShaderChanged = false; + memset(m_stream_sources_Changed, 0 , sizeof(m_stream_sources_Changed)); + m_index_buffer_Changed = false; } void SetTexture(DWORD Stage, LPDIRECT3DBASETEXTURE9 pTexture) @@ -678,7 +708,7 @@ void SetTexture(DWORD Stage, LPDIRECT3DBASETEXTURE9 pTexture) if (m_Textures[Stage] != pTexture) { m_Textures[Stage] = pTexture; - D3D::dev->SetTexture(Stage, pTexture); + dev->SetTexture(Stage, pTexture); } } @@ -686,7 +716,7 @@ void RefreshRenderState(D3DRENDERSTATETYPE State) { if(m_RenderStatesSet[State] && m_RenderStatesChanged[State]) { - D3D::dev->SetRenderState(State, m_RenderStates[State]); + dev->SetRenderState(State, m_RenderStates[State]); m_RenderStatesChanged[State] = false; } } @@ -698,7 +728,7 @@ void SetRenderState(D3DRENDERSTATETYPE State, DWORD Value) m_RenderStates[State] = Value; m_RenderStatesSet[State] = true; m_RenderStatesChanged[State] = false; - D3D::dev->SetRenderState(State, Value); + dev->SetRenderState(State, Value); } } @@ -707,7 +737,7 @@ void ChangeRenderState(D3DRENDERSTATETYPE State, DWORD Value) if (m_RenderStates[State] != Value || !m_RenderStatesSet[State]) { m_RenderStatesChanged[State] = m_RenderStatesSet[State]; - D3D::dev->SetRenderState(State, Value); + dev->SetRenderState(State, Value); } else { @@ -722,7 +752,7 @@ void SetTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Valu m_TextureStageStates[Stage][Type] = Value; m_TextureStageStatesSet[Stage][Type]=true; m_TextureStageStatesChanged[Stage][Type]=false; - D3D::dev->SetTextureStageState(Stage, Type, Value); + dev->SetTextureStageState(Stage, Type, Value); } } @@ -730,7 +760,7 @@ void RefreshTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type) { if(m_TextureStageStatesSet[Stage][Type] && m_TextureStageStatesChanged[Stage][Type]) { - D3D::dev->SetTextureStageState(Stage, Type, m_TextureStageStates[Stage][Type]); + dev->SetTextureStageState(Stage, Type, m_TextureStageStates[Stage][Type]); m_TextureStageStatesChanged[Stage][Type] = false; } } @@ -740,7 +770,7 @@ void ChangeTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD V if (m_TextureStageStates[Stage][Type] != Value || !m_TextureStageStatesSet[Stage][Type]) { m_TextureStageStatesChanged[Stage][Type] = m_TextureStageStatesSet[Stage][Type]; - D3D::dev->SetTextureStageState(Stage, Type, Value); + dev->SetTextureStageState(Stage, Type, Value); } else { @@ -755,7 +785,7 @@ void SetSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) m_SamplerStates[Sampler][Type] = Value; m_SamplerStatesSet[Sampler][Type] = true; m_SamplerStatesChanged[Sampler][Type] = false; - D3D::dev->SetSamplerState(Sampler, Type, Value); + dev->SetSamplerState(Sampler, Type, Value); } } @@ -763,7 +793,7 @@ void RefreshSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type) { if(m_SamplerStatesSet[Sampler][Type] && m_SamplerStatesChanged[Sampler][Type]) { - D3D::dev->SetSamplerState(Sampler, Type, m_SamplerStates[Sampler][Type]); + dev->SetSamplerState(Sampler, Type, m_SamplerStates[Sampler][Type]); m_SamplerStatesChanged[Sampler][Type] = false; } } @@ -773,7 +803,7 @@ void ChangeSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) if (m_SamplerStates[Sampler][Type] != Value || !m_SamplerStatesSet[Sampler][Type]) { m_SamplerStatesChanged[Sampler][Type] = m_SamplerStatesSet[Sampler][Type]; - D3D::dev->SetSamplerState(Sampler, Type, Value); + dev->SetSamplerState(Sampler, Type, Value); } else { @@ -783,67 +813,155 @@ void ChangeSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) void RefreshVertexDeclaration() { - if (m_VtxDecl) + if (m_VtxDeclChanged) { - D3D::dev->SetVertexDeclaration(m_VtxDecl); + dev->SetVertexDeclaration(m_VtxDecl); + m_VtxDeclChanged = false; } } void SetVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9 decl) { - if (!decl) { - m_VtxDecl = NULL; - return; - } if (decl != m_VtxDecl) { - D3D::dev->SetVertexDeclaration(decl); + dev->SetVertexDeclaration(decl); m_VtxDecl = decl; + m_VtxDeclChanged = false; + } +} + +void ChangeVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9 decl) +{ + if (decl != m_VtxDecl) { + dev->SetVertexDeclaration(decl); + m_VtxDeclChanged = true; + } +} + +void ChangeVertexShader(LPDIRECT3DVERTEXSHADER9 shader) +{ + if (shader != m_VertexShader) + { + dev->SetVertexShader(shader); + m_VertexShaderChanged = true; } } void RefreshVertexShader() { - if (m_VertexShader) + if (m_VertexShaderChanged) { - D3D::dev->SetVertexShader(m_VertexShader); + dev->SetVertexShader(m_VertexShader); + m_VertexShaderChanged = false; } } void SetVertexShader(LPDIRECT3DVERTEXSHADER9 shader) { - if (!shader) { - m_VertexShader = NULL; - return; - } if (shader != m_VertexShader) { - D3D::dev->SetVertexShader(shader); + dev->SetVertexShader(shader); m_VertexShader = shader; + m_VertexShaderChanged = false; } } void RefreshPixelShader() { - if (m_PixelShader) + if (m_PixelShaderChanged) { - D3D::dev->SetPixelShader(m_PixelShader); + dev->SetPixelShader(m_PixelShader); + m_PixelShaderChanged = false; } } void SetPixelShader(LPDIRECT3DPIXELSHADER9 shader) { - if (!shader) { - m_PixelShader = NULL; - return; - } if (shader != m_PixelShader) { - D3D::dev->SetPixelShader(shader); + dev->SetPixelShader(shader); m_PixelShader = shader; + m_PixelShaderChanged = false; } } +void ChangePixelShader(LPDIRECT3DPIXELSHADER9 shader) +{ + if (shader != m_PixelShader) + { + dev->SetPixelShader(shader); + m_PixelShaderChanged = true; + } +} + +void SetStreamSource(UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) +{ + if (m_stream_sources[StreamNumber].OffsetInBytes != OffsetInBytes + || m_stream_sources[StreamNumber].pStreamData != pStreamData + || m_stream_sources[StreamNumber].Stride != Stride) + { + m_stream_sources[StreamNumber].OffsetInBytes = OffsetInBytes; + m_stream_sources[StreamNumber].pStreamData = pStreamData; + m_stream_sources[StreamNumber].Stride = Stride; + dev->SetStreamSource(StreamNumber, pStreamData, OffsetInBytes, Stride); + m_stream_sources_Changed[StreamNumber] = false; + } +} + +void ChangeStreamSource(UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) +{ + if (m_stream_sources[StreamNumber].OffsetInBytes != OffsetInBytes + || m_stream_sources[StreamNumber].pStreamData != pStreamData + || m_stream_sources[StreamNumber].Stride != Stride) + { + dev->SetStreamSource(StreamNumber, pStreamData, OffsetInBytes, Stride); + m_stream_sources_Changed[StreamNumber] = true; + } + +} + +void RefreshStreamSource(UINT StreamNumber) +{ + if (m_PixelShaderChanged) + { + dev->SetStreamSource( + StreamNumber, + m_stream_sources[StreamNumber].pStreamData, + m_stream_sources[StreamNumber].OffsetInBytes, + m_stream_sources[StreamNumber].Stride); + m_stream_sources_Changed[StreamNumber] = false; + } +} + +void SetIndices(LPDIRECT3DINDEXBUFFER9 pIndexData) +{ + if(pIndexData != m_index_buffer) + { + m_index_buffer = pIndexData; + dev->SetIndices(pIndexData); + m_index_buffer_Changed = false; + } +} + +void ChangeIndices(LPDIRECT3DINDEXBUFFER9 pIndexData) +{ + if(pIndexData != m_index_buffer) + { + dev->SetIndices(pIndexData); + m_index_buffer_Changed = true; + } +} + +void RefreshIndices() +{ + if (m_index_buffer_Changed) + { + dev->SetIndices(m_index_buffer); + m_index_buffer_Changed = false; + } +} + + } // namespace diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.h b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.h index d1e7eeaa91..7be482a55f 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.h @@ -100,12 +100,23 @@ void ChangeSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value); void RefreshVertexDeclaration(); void SetVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9 decl); +void ChangeVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9 decl); void RefreshVertexShader(); void SetVertexShader(LPDIRECT3DVERTEXSHADER9 shader); +void ChangeVertexShader(LPDIRECT3DVERTEXSHADER9 shader); void RefreshPixelShader(); void SetPixelShader(LPDIRECT3DPIXELSHADER9 shader); +void ChangePixelShader(LPDIRECT3DPIXELSHADER9 shader); + +void SetStreamSource(UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride); +void ChangeStreamSource(UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride); +void RefreshStreamSource(UINT StreamNumber); + +void SetIndices(LPDIRECT3DINDEXBUFFER9 pIndexData); +void ChangeIndices(LPDIRECT3DINDEXBUFFER9 pIndexData); +void RefreshIndices(); void ApplyCachedState(); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp index 9510ad444c..222d7849d0 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp @@ -198,6 +198,8 @@ const int TS[6][2] = void RestoreShaders() { D3D::SetTexture(0, 0); + D3D::RefreshStreamSource(0); + D3D::RefreshIndices(); D3D::RefreshVertexDeclaration(); D3D::RefreshPixelShader(); D3D::RefreshVertexShader(); @@ -217,9 +219,9 @@ void CD3DFont::SetRenderStates() { D3D::SetTexture(0, m_pTexture); - dev->SetPixelShader(0); - dev->SetVertexShader(0); - + D3D::ChangePixelShader(0); + D3D::ChangeVertexShader(0); + D3D::ChangeVertexDeclaration(0); dev->SetFVF(D3DFVF_FONT2DVERTEX); for (int i = 0; i < 6; i++) @@ -236,7 +238,7 @@ int CD3DFont::DrawTextScaled(float x, float y, float fXScale, float fYScale, flo return 0; SetRenderStates(); - dev->SetStreamSource(0, m_pVB, 0, sizeof(FONT2DVERTEX)); + D3D::SetStreamSource(0, m_pVB, 0, sizeof(FONT2DVERTEX)); float vpWidth = 1; float vpHeight = 1; @@ -389,9 +391,10 @@ void drawShadedTexQuad(IDirect3DTexture9 *texture, { 1.0f - dw,-1.0f + dh, 0.0f,1.0f, u2, v2, sw, sh, g}, { 1.0f - dw, 1.0f + dh, 0.0f,1.0f, u2, v1, sw, sh, g} }; - dev->SetVertexShader(Vshader); - dev->SetPixelShader(PShader); + D3D::ChangeVertexShader(Vshader); + D3D::ChangePixelShader(PShader); D3D::SetTexture(0, texture); + D3D::ChangeVertexDeclaration(0); dev->SetFVF(D3DFVF_XYZW | D3DFVF_TEX3 | D3DFVF_TEXCOORDSIZE1(2)); dev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, coords, sizeof(Q2DVertex)); RestoreShaders(); @@ -424,9 +427,10 @@ void drawShadedTexSubQuad(IDirect3DTexture9 *texture, { rDest->right - dw , rDest->top + dh, 1.0f,1.0f, u2, v2, sw, sh, g}, { rDest->right - dw , rDest->bottom + dh, 1.0f,1.0f, u2, v1, sw, sh, g} }; - dev->SetVertexShader(Vshader); - dev->SetPixelShader(PShader); + D3D::ChangeVertexShader(Vshader); + D3D::ChangePixelShader(PShader); D3D::SetTexture(0, texture); + D3D::ChangeVertexDeclaration(0); dev->SetFVF(D3DFVF_XYZW | D3DFVF_TEX3 | D3DFVF_TEXCOORDSIZE1(2)); dev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, coords, sizeof(Q2DVertex)); RestoreShaders(); @@ -442,8 +446,9 @@ void drawColorQuad(u32 Color, float x1, float y1, float x2, float y2) { x1, y1, 0.f, 1.f, Color }, { x2, y1, 0.f, 1.f, Color }, }; - dev->SetVertexShader(VertexShaderCache::GetClearVertexShader()); - dev->SetPixelShader(PixelShaderCache::GetClearProgram()); + D3D::ChangeVertexShader(VertexShaderCache::GetClearVertexShader()); + D3D::ChangePixelShader(PixelShaderCache::GetClearProgram()); + D3D::ChangeVertexDeclaration(0); dev->SetFVF(D3DFVF_XYZW | D3DFVF_DIFFUSE); dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(CQVertex)); RestoreShaders(); @@ -457,8 +462,9 @@ void drawClearQuad(u32 Color,float z,IDirect3DPixelShader9 *PShader,IDirect3DVer { 1.0f, -1.0f, z, 1.0f, Color}, {-1.0f, -1.0f, z, 1.0f, Color} }; - dev->SetVertexShader(Vshader); - dev->SetPixelShader(PShader); + D3D::ChangeVertexShader(Vshader); + D3D::ChangePixelShader(PShader); + D3D::ChangeVertexDeclaration(0); dev->SetFVF(D3DFVF_XYZW | D3DFVF_DIFFUSE); dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(Q2DVertex)); RestoreShaders(); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 884f16f826..874fc6316c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -105,7 +105,7 @@ void VertexManager::CreateDeviceObjects() m_current_index_buffer = 0; m_index_buffer_cursor = m_index_buffer_size; m_vertex_buffer_cursor = m_vertex_buffer_size; - + m_current_stride = 0; if (Fail) { m_buffers_count--; @@ -119,8 +119,8 @@ void VertexManager::CreateDeviceObjects() } void VertexManager::DestroyDeviceObjects() { - D3D::dev->SetStreamSource( 0, NULL, 0, 0); - D3D::dev->SetIndices(NULL); + D3D::SetStreamSource( 0, NULL, 0, 0); + D3D::SetIndices(NULL); for (int i = 0; i < MAX_VBUFFER_COUNT; i++) { if(m_vertex_buffers) @@ -160,14 +160,14 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int PDataSize = IndexGenerator::GetPointindexLen(); int IndexDataSize = TdataSize + LDataSize + PDataSize; DWORD LockMode = D3DLOCK_NOOVERWRITE; - + m_vertex_buffer_cursor--; + m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; if (m_vertex_buffer_cursor > m_vertex_buffer_size - datasize) { LockMode = D3DLOCK_DISCARD; m_vertex_buffer_cursor = 0; - m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; - } - + m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; + } if(FAILED(m_vertex_buffers[m_current_vertex_buffer]->Lock(m_vertex_buffer_cursor, datasize,(VOID**)(&pVertices), LockMode))) { DestroyDeviceObjects(); @@ -177,13 +177,12 @@ void VertexManager::PrepareDrawBuffers(u32 stride) m_vertex_buffers[m_current_vertex_buffer]->Unlock(); LockMode = D3DLOCK_NOOVERWRITE; - if (m_index_buffer_cursor > m_index_buffer_size - IndexDataSize) { LockMode = D3DLOCK_DISCARD; m_index_buffer_cursor = 0; - m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; - } + m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; + } if(FAILED(m_index_buffers[m_current_index_buffer]->Lock(m_index_buffer_cursor * sizeof(u16), IndexDataSize * sizeof(u16), (VOID**)(&pIndices), LockMode ))) { @@ -204,12 +203,16 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { memcpy(pIndices, PIBuffer, PDataSize * sizeof(u16)); } - m_index_buffers[m_current_index_buffer]->Unlock(); - D3D::dev->SetStreamSource( 0, m_vertex_buffers[m_current_vertex_buffer], m_vertex_buffer_cursor, stride); - if(m_index_buffer_cursor == 0) + if(m_current_stride != stride || m_vertex_buffer_cursor == 0) { - D3D::dev->SetIndices(m_index_buffers[m_current_index_buffer]); + m_current_stride = stride; + D3D::SetStreamSource( 0, m_vertex_buffers[m_current_vertex_buffer], 0, stride); } + if (m_index_buffer_cursor == 0) + { + D3D::SetIndices(m_index_buffers[m_current_index_buffer]); + } + m_index_buffers[m_current_index_buffer]->Unlock(); } void VertexManager::DrawVertexBuffer(int stride) @@ -217,8 +220,8 @@ void VertexManager::DrawVertexBuffer(int stride) if (IndexGenerator::GetNumTriangles() > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitive( - D3DPT_TRIANGLELIST, - 0, + D3DPT_TRIANGLELIST, + m_vertex_buffer_cursor / stride, 0, IndexGenerator::GetNumVerts(), m_index_buffer_cursor, @@ -232,7 +235,7 @@ void VertexManager::DrawVertexBuffer(int stride) { if (FAILED(D3D::dev->DrawIndexedPrimitive( D3DPT_LINELIST, - 0, + m_vertex_buffer_cursor / stride, 0, IndexGenerator::GetNumVerts(), m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen(), @@ -246,7 +249,7 @@ void VertexManager::DrawVertexBuffer(int stride) { if (FAILED(D3D::dev->DrawIndexedPrimitive( D3DPT_POINTLIST, - 0, + m_vertex_buffer_cursor / stride, 0, IndexGenerator::GetNumVerts(), m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen(), @@ -307,11 +310,7 @@ void VertexManager::DrawVertexArray(int stride) void VertexManager::vFlush() { - if (LocalVBuffer == s_pCurBufferPointer) return; - if (Flushed) return; - Flushed = true; VideoFifo_CheckEFBAccess(); - u32 usedtextures = 0; for (u32 i = 0; i < (u32)bpmem.genMode.numtevstages + 1; ++i) if (bpmem.tevorders[i / 2].getEnable(i & 1)) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h index 51cf9b953d..2a165aa9af 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h @@ -40,6 +40,7 @@ private: u32 m_index_buffer_size; u32 m_buffers_count; u32 m_current_vertex_buffer; + u32 m_current_stride; u32 m_current_index_buffer; LPDIRECT3DVERTEXBUFFER9 *m_vertex_buffers; LPDIRECT3DINDEXBUFFER9 *m_index_buffers; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 03927413d8..2bd5936099 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -114,8 +114,9 @@ void VertexManager::CreateDeviceObjects() m_buffers_count = MAX_VBUFFER_COUNT; m_current_index_buffer = 0; m_current_vertex_buffer = 0; - m_index_buffer_cursor = 0; - m_vertex_buffer_cursor = 0; + m_index_buffer_cursor = m_index_buffer_size; + m_vertex_buffer_cursor = m_vertex_buffer_size; + m_CurrentVertexFmt = NULL; } void VertexManager::DestroyDeviceObjects() { @@ -153,18 +154,20 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int line_index_size = IndexGenerator::GetLineindexLen() * sizeof(u16); int point_index_size = IndexGenerator::GetPointindexLen() * sizeof(u16); int index_data_size = triangle_index_size + line_index_size + point_index_size; - GLbitfield LockMode = GL_MAP_WRITE_BIT; + GLbitfield LockMode = GL_MAP_WRITE_BIT; + m_vertex_buffer_cursor--; + m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; if (m_vertex_buffer_cursor > m_vertex_buffer_size - vertex_data_size) { LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; m_vertex_buffer_cursor = 0; m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; + glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_vertex_buffer]); } else { LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - } - glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_vertex_buffer]); + } if(GLEW_ARB_map_buffer_range) { pVertices = (u8*)glMapBufferRange(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LockMode); @@ -189,13 +192,13 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; m_index_buffer_cursor = 0; - m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; + m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[m_current_index_buffer]); } else { LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - } - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[m_current_index_buffer]); + } if(GLEW_ARB_map_buffer_range) { pIndices = (u16*)glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor , index_data_size, LockMode); @@ -279,11 +282,33 @@ void VertexManager::DrawVertexBufferObject() } } +void VertexManager::DrawVertexBufferObjectBase(u32 stride) +{ + int triangle_index_size = IndexGenerator::GetTriangleindexLen(); + int line_index_size = IndexGenerator::GetLineindexLen(); + int point_index_size = IndexGenerator::GetPointindexLen(); + int StartIndex = m_index_buffer_cursor; + if (triangle_index_size > 0) + { + glDrawElementsBaseVertex(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } + if (line_index_size > 0) + { + StartIndex += triangle_index_size * sizeof(u16); + glDrawElementsBaseVertex(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } + if (point_index_size > 0) + { + StartIndex += line_index_size * sizeof(u16); + glDrawElementsBaseVertex(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + INCSTAT(stats.thisFrame.numIndexedDrawCalls); + } +} + void VertexManager::vFlush() { - if (LocalVBuffer == s_pCurBufferPointer) return; - if (Flushed) return; - Flushed=true; VideoFifo_CheckEFBAccess(); #if defined(_DEBUG) || defined(DEBUGFAST) PRIM_LOG("frame%d:\n texgen=%d, numchan=%d, dualtex=%d, ztex=%d, cole=%d, alpe=%d, ze=%d", g_ActiveConfig.iSaveTargetId, xfregs.numTexGen.numTexGens, @@ -318,13 +343,18 @@ void VertexManager::vFlush() u32 stride = g_nativeVertexFmt->GetVertexStride(); PrepareDrawBuffers(stride); - if(m_buffers_count) + //still testing if this line is enabled to reduce the amount of vertex setup call everything goes wrong + //if(m_CurrentVertexFmt != g_nativeVertexFmt || !GLEW_ARB_draw_elements_base_vertex ) { - ((GLVertexFormat*)g_nativeVertexFmt)->SetupVertexPointersOffset(m_vertex_buffer_cursor); - } - else - { - g_nativeVertexFmt->SetupVertexPointers(); + if(m_buffers_count) + { + ((GLVertexFormat*)g_nativeVertexFmt)->SetupVertexPointersOffset(GLEW_ARB_draw_elements_base_vertex ? 0 : m_vertex_buffer_cursor); + } + else + { + g_nativeVertexFmt->SetupVertexPointers(); + } + m_CurrentVertexFmt = g_nativeVertexFmt; } GL_REPORT_ERRORD(); @@ -402,7 +432,21 @@ void VertexManager::vFlush() if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); - if(m_buffers_count) { DrawVertexBufferObject(); }else{ DrawVertexArray();}; + if(m_buffers_count) + { + if(GLEW_ARB_draw_elements_base_vertex) + { + DrawVertexBufferObjectBase(stride); + } + else + { + DrawVertexBufferObject(); + } + } + else + { + DrawVertexArray(); + } // run through vertex groups again to set alpha if (useDstAlpha && !dualSourcePossible) @@ -415,7 +459,21 @@ void VertexManager::vFlush() glDisable(GL_BLEND); - if(m_buffers_count) { DrawVertexBufferObject(); }else{ DrawVertexArray();}; + if(m_buffers_count) + { + if(GLEW_ARB_draw_elements_base_vertex) + { + DrawVertexBufferObjectBase(stride); + } + else + { + DrawVertexBufferObject(); + } + } + else + { + DrawVertexArray(); + } // restore color mask g_renderer->SetColorMask(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h index ac45151999..db80f87a2b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h @@ -52,6 +52,7 @@ public: private: void DrawVertexArray(); void DrawVertexBufferObject(); + void DrawVertexBufferObjectBase(u32 stride); void vFlush(); void PrepareDrawBuffers(u32 stride); u32 m_vertex_buffer_cursor; @@ -63,6 +64,7 @@ private: u32 m_current_index_buffer; GLuint* m_vertex_buffers; GLuint* m_index_buffers; + NativeVertexFormat *m_CurrentVertexFmt; }; } From 53b62ab169b971627614b2e948e10b747e090015 Mon Sep 17 00:00:00 2001 From: rodolfoosvaldobogado Date: Sat, 10 Nov 2012 11:37:08 -0300 Subject: [PATCH 180/625] This should fix the bugs introduced by my last commit please retest the games that where showing graphical glitches. --- .../Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp | 2 +- .../Plugin_VideoDX9/Src/VertexManager.cpp | 21 ++++++++++++++++--- .../Plugin_VideoOGL/Src/VertexManager.cpp | 17 ++++++++------- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp index 222d7849d0..d24720e6f9 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp @@ -238,7 +238,7 @@ int CD3DFont::DrawTextScaled(float x, float y, float fXScale, float fYScale, flo return 0; SetRenderStates(); - D3D::SetStreamSource(0, m_pVB, 0, sizeof(FONT2DVERTEX)); + D3D::ChangeStreamSource(0, m_pVB, 0, sizeof(FONT2DVERTEX)); float vpWidth = 1; float vpHeight = 1; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 874fc6316c..96ae538ff4 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -203,6 +203,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { memcpy(pIndices, PIBuffer, PDataSize * sizeof(u16)); } + m_index_buffers[m_current_index_buffer]->Unlock(); if(m_current_stride != stride || m_vertex_buffer_cursor == 0) { m_current_stride = stride; @@ -212,7 +213,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { D3D::SetIndices(m_index_buffers[m_current_index_buffer]); } - m_index_buffers[m_current_index_buffer]->Unlock(); + } void VertexManager::DrawVertexBuffer(int stride) @@ -363,7 +364,14 @@ void VertexManager::vFlush() } PrepareDrawBuffers(stride); g_nativeVertexFmt->SetupVertexPointers(); - if(m_buffers_count){ DrawVertexBuffer(stride);} else { DrawVertexArray(stride);} + if(m_buffers_count) + { + DrawVertexBuffer(stride); + } + else + { + DrawVertexArray(stride); + } bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; @@ -376,7 +384,14 @@ void VertexManager::vFlush() } // update alpha only g_renderer->ApplyState(true); - if(m_buffers_count){ DrawVertexBuffer(stride);} else { DrawVertexArray(stride);} + if(m_buffers_count) + { + DrawVertexBuffer(stride); + } + else + { + DrawVertexArray(stride); + } g_renderer->RestoreState(); } GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 2bd5936099..462ddc1ff8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -150,10 +150,10 @@ void VertexManager::PrepareDrawBuffers(u32 stride) u8* pVertices = NULL; u16* pIndices = NULL; int vertex_data_size = IndexGenerator::GetNumVerts() * stride; - int triangle_index_size = IndexGenerator::GetTriangleindexLen() * sizeof(u16); - int line_index_size = IndexGenerator::GetLineindexLen() * sizeof(u16); - int point_index_size = IndexGenerator::GetPointindexLen() * sizeof(u16); - int index_data_size = triangle_index_size + line_index_size + point_index_size; + int triangle_index_size = IndexGenerator::GetTriangleindexLen(); + int line_index_size = IndexGenerator::GetLineindexLen(); + int point_index_size = IndexGenerator::GetPointindexLen(); + int index_data_size = (triangle_index_size + line_index_size + point_index_size) * sizeof(u16); GLbitfield LockMode = GL_MAP_WRITE_BIT; m_vertex_buffer_cursor--; m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; @@ -206,17 +206,17 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { if(triangle_index_size) { - memcpy(pIndices, TIBuffer, triangle_index_size); + memcpy(pIndices, TIBuffer, triangle_index_size * sizeof(u16)); pIndices += triangle_index_size; } if(line_index_size) { - memcpy(pIndices, LIBuffer, line_index_size); + memcpy(pIndices, LIBuffer, line_index_size * sizeof(u16)); pIndices += line_index_size; } if(point_index_size) { - memcpy(pIndices, PIBuffer, point_index_size); + memcpy(pIndices, PIBuffer, point_index_size * sizeof(u16)); } glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } @@ -224,14 +224,17 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { if(triangle_index_size) { + triangle_index_size *= sizeof(u16); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor, triangle_index_size, TIBuffer); } if(line_index_size) { + line_index_size *= sizeof(u16); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size, line_index_size, LIBuffer); } if(point_index_size) { + point_index_size *= sizeof(u16); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size + line_index_size, point_index_size, PIBuffer); } } From 3936c06ee82a45f964d4fef77eb774e6e521114a Mon Sep 17 00:00:00 2001 From: rodolfoosvaldobogado Date: Sun, 11 Nov 2012 22:39:27 -0300 Subject: [PATCH 181/625] more fixes for my last commit, player problem in twin snakes is fixed --- .../Plugin_VideoDX9/Src/VertexManager.cpp | 54 +++++++++++-------- .../Plugin_VideoOGL/Src/VertexManager.cpp | 33 ++++++------ 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 96ae538ff4..88fcca27cf 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -218,43 +218,51 @@ void VertexManager::PrepareDrawBuffers(u32 stride) void VertexManager::DrawVertexBuffer(int stride) { - if (IndexGenerator::GetNumTriangles() > 0) + int triangles = IndexGenerator::GetNumTriangles(); + int lines = IndexGenerator::GetNumLines(); + int points = IndexGenerator::GetNumPoints(); + int numverts = IndexGenerator::GetNumVerts(); + int StartIndex = m_index_buffer_cursor; + int basevertex = m_vertex_buffer_cursor / stride; + if (triangles > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, - m_vertex_buffer_cursor / stride, + basevertex, 0, - IndexGenerator::GetNumVerts(), - m_index_buffer_cursor, - IndexGenerator::GetNumTriangles()))) + numverts, + StartIndex, + triangles))) { DumpBadShaders(); } + StartIndex += IndexGenerator::GetTriangleindexLen(); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumLines() > 0) + if (lines > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitive( D3DPT_LINELIST, - m_vertex_buffer_cursor / stride, + basevertex, 0, - IndexGenerator::GetNumVerts(), - m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen(), + numverts, + StartIndex, IndexGenerator::GetNumLines()))) { DumpBadShaders(); } + StartIndex += IndexGenerator::GetLineindexLen(); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumPoints() > 0) + if (points > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitive( D3DPT_POINTLIST, - m_vertex_buffer_cursor / stride, + basevertex, 0, - IndexGenerator::GetNumVerts(), - m_index_buffer_cursor + IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen(), - IndexGenerator::GetNumPoints()))) + numverts, + StartIndex, + points))) { DumpBadShaders(); } @@ -264,12 +272,16 @@ void VertexManager::DrawVertexBuffer(int stride) } void VertexManager::DrawVertexArray(int stride) -{ - if (IndexGenerator::GetNumTriangles() > 0) +{ + int triangles = IndexGenerator::GetNumTriangles(); + int lines = IndexGenerator::GetNumLines(); + int points = IndexGenerator::GetNumPoints(); + int numverts = IndexGenerator::GetNumVerts(); + if (triangles > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitiveUP( D3DPT_TRIANGLELIST, - 0, IndexGenerator::GetNumVerts(), IndexGenerator::GetNumTriangles(), + 0, numverts, triangles, TIBuffer, D3DFMT_INDEX16, LocalVBuffer, @@ -279,11 +291,11 @@ void VertexManager::DrawVertexArray(int stride) } INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumLines() > 0) + if (lines > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitiveUP( D3DPT_LINELIST, - 0, IndexGenerator::GetNumVerts(), IndexGenerator::GetNumLines(), + 0, numverts, lines, LIBuffer, D3DFMT_INDEX16, LocalVBuffer, @@ -293,11 +305,11 @@ void VertexManager::DrawVertexArray(int stride) } INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumPoints() > 0) + if (points > 0) { if (FAILED(D3D::dev->DrawIndexedPrimitiveUP( D3DPT_POINTLIST, - 0, IndexGenerator::GetNumVerts(), IndexGenerator::GetNumPoints(), + 0, numverts, points, PIBuffer, D3DFMT_INDEX16, LocalVBuffer, diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 462ddc1ff8..bbd196ba78 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -68,7 +68,6 @@ void VertexManager::CreateDeviceObjects() m_buffers_count = 0; m_vertex_buffers = NULL; m_index_buffers = NULL; - glEnableClientState(GL_VERTEX_ARRAY); GL_REPORT_ERRORD(); int max_Index_size = 0; @@ -243,17 +242,20 @@ void VertexManager::PrepareDrawBuffers(u32 stride) void VertexManager::DrawVertexArray() { - if (IndexGenerator::GetNumTriangles() > 0) + int triangle_index_size = IndexGenerator::GetTriangleindexLen(); + int line_index_size = IndexGenerator::GetLineindexLen(); + int point_index_size = IndexGenerator::GetPointindexLen(); + if (triangle_index_size > 0) { - glDrawElements(GL_TRIANGLES, IndexGenerator::GetTriangleindexLen(), GL_UNSIGNED_SHORT, TIBuffer); + glDrawElements(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, TIBuffer); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumLines() > 0) + if (line_index_size > 0) { - glDrawElements(GL_LINES, IndexGenerator::GetLineindexLen(), GL_UNSIGNED_SHORT, LIBuffer); + glDrawElements(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, LIBuffer); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - if (IndexGenerator::GetNumPoints() > 0) + if (point_index_size > 0) { glDrawElements(GL_POINTS, IndexGenerator::GetPointindexLen(), GL_UNSIGNED_SHORT, PIBuffer); INCSTAT(stats.thisFrame.numIndexedDrawCalls); @@ -269,17 +271,17 @@ void VertexManager::DrawVertexBufferObject() if (triangle_index_size > 0) { glDrawElements(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); + StartIndex += triangle_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (line_index_size > 0) - { - StartIndex += triangle_index_size * sizeof(u16); + { glDrawElements(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); + StartIndex += line_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (point_index_size > 0) - { - StartIndex += line_index_size * sizeof(u16); + { glDrawElements(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } @@ -291,21 +293,22 @@ void VertexManager::DrawVertexBufferObjectBase(u32 stride) int line_index_size = IndexGenerator::GetLineindexLen(); int point_index_size = IndexGenerator::GetPointindexLen(); int StartIndex = m_index_buffer_cursor; + int basevertex = m_vertex_buffer_cursor / stride; if (triangle_index_size > 0) { - glDrawElementsBaseVertex(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + glDrawElementsBaseVertex(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); + StartIndex += triangle_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (line_index_size > 0) { - StartIndex += triangle_index_size * sizeof(u16); - glDrawElementsBaseVertex(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + glDrawElementsBaseVertex(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); + StartIndex += line_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (point_index_size > 0) { - StartIndex += line_index_size * sizeof(u16); - glDrawElementsBaseVertex(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, m_vertex_buffer_cursor / stride); + glDrawElementsBaseVertex(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } } From 0809ba79ae12dd55bb5c2d7608fa24ca041c753a Mon Sep 17 00:00:00 2001 From: rodolfoosvaldobogado Date: Mon, 12 Nov 2012 19:37:08 -0300 Subject: [PATCH 182/625] fix for point rendering in dx9 backend, that will teach me to read the full documentation. if someone founs a games that use points a lot i will try to implement a faster path for point rendering. now the map in twin snakes is functional in all the backends. --- Source/Plugins/Plugin_VideoDX9/Src/Render.cpp | 12 +++++++++ .../Plugin_VideoDX9/Src/VertexManager.cpp | 27 +++++++++---------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp index a59adb4793..b4625f0157 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp @@ -64,6 +64,7 @@ static int s_fps = 0; static u32 s_blendMode; static u32 s_LastAA; static bool IS_AMD; +static float m_fMaxPointSize; static char *st; @@ -329,6 +330,9 @@ Renderer::Renderer() D3D::BeginFrame(); D3D::SetRenderState(D3DRS_SCISSORTESTENABLE, true); D3D::dev->CreateOffscreenPlainSurface(s_backbuffer_width,s_backbuffer_height, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &ScreenShootMEMSurface, NULL ); + D3D::SetRenderState(D3DRS_POINTSCALEENABLE,false); + m_fMaxPointSize = D3D::GetCaps().MaxPointSize; + } Renderer::~Renderer() @@ -1301,7 +1305,15 @@ void Renderer::SetLineWidth() // We can't change line width in D3D unless we use ID3DXLine float fratio = xfregs.viewport.wd != 0 ? Renderer::EFBToScaledXf(1.f) : 1.0f; float psize = bpmem.lineptwidth.linesize * fratio / 6.0f; + //little hack to compensate scalling problems in dx9 must be taken out when scalling is fixed. + psize *= 2.0f; + if (psize > m_fMaxPointSize) + { + psize = m_fMaxPointSize; + } D3D::SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&psize)); + D3D::SetRenderState(D3DRS_POINTSIZE_MIN, *((DWORD*)&psize)); + D3D::SetRenderState(D3DRS_POINTSIZE_MAX, *((DWORD*)&psize)); } void Renderer::SetSamplerState(int stage, int texindex) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 88fcca27cf..925617f3f5 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -158,7 +158,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int TdataSize = IndexGenerator::GetTriangleindexLen(); int LDataSize = IndexGenerator::GetLineindexLen(); int PDataSize = IndexGenerator::GetPointindexLen(); - int IndexDataSize = TdataSize + LDataSize + PDataSize; + int IndexDataSize = TdataSize + LDataSize; DWORD LockMode = D3DLOCK_NOOVERWRITE; m_vertex_buffer_cursor--; m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; @@ -199,10 +199,6 @@ void VertexManager::PrepareDrawBuffers(u32 stride) memcpy(pIndices, LIBuffer, LDataSize * sizeof(u16)); pIndices += LDataSize; } - if(PDataSize) - { - memcpy(pIndices, PIBuffer, PDataSize * sizeof(u16)); - } m_index_buffers[m_current_index_buffer]->Unlock(); if(m_current_stride != stride || m_vertex_buffer_cursor == 0) { @@ -256,17 +252,20 @@ void VertexManager::DrawVertexBuffer(int stride) } if (points > 0) { - if (FAILED(D3D::dev->DrawIndexedPrimitive( - D3DPT_POINTLIST, - basevertex, - 0, - numverts, - StartIndex, - points))) + //DrawIndexedPrimitive does not support point list so we have to draw the points one by one + for (int i = 0; i < points; i++) { - DumpBadShaders(); + if (FAILED(D3D::dev->DrawPrimitive( + D3DPT_POINTLIST, + basevertex + PIBuffer[i], + 1))) + { + DumpBadShaders(); + } + INCSTAT(stats.thisFrame.numDrawCalls); } - INCSTAT(stats.thisFrame.numIndexedDrawCalls); + + } } From ba8264c2acc88c277e49f78504a996a3bddbacf2 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 15 Dec 2012 14:43:01 +0100 Subject: [PATCH 183/625] use VAO in VertexManager to use VAO, we must use VBO, so some legency code was removed: - ARB_map_buffer_range must be available (OGL 3.0), don't call glBufferSubData if not - ARB_draw_elements_base_vertex also (OGL 3.2), else we have to set the pointers every time - USE_JIT was removed, it was broken and it isn't needed any more And the index and vertex buffers are now synchronized, so that there will be one VAO per NativeVertexFormat and Buffer. --- .../Src/NativeVertexFormat.cpp | 282 ++++------------ Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 23 ++ .../Plugin_VideoOGL/Src/VertexManager.cpp | 306 ++++++------------ .../Plugin_VideoOGL/Src/VertexManager.h | 21 +- 4 files changed, 193 insertions(+), 439 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index 3a98332562..8669d32711 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -27,8 +27,6 @@ #define COMPILED_CODE_SIZE 4096 -// TODO: this guy is never initialized -u32 s_prevcomponents; // previous state set /* #ifdef _WIN32 #ifdef _M_IX86 @@ -63,19 +61,13 @@ NativeVertexFormat* VertexManager::CreateNativeVertexFormat() GLVertexFormat::GLVertexFormat() { -#ifdef USE_JIT - m_compiledCode = (u8 *)AllocateExecutableMemory(COMPILED_CODE_SIZE, false); - if (m_compiledCode) - memset(m_compiledCode, 0, COMPILED_CODE_SIZE); -#endif + } GLVertexFormat::~GLVertexFormat() { -#ifdef USE_JIT - FreeMemoryPages(m_compiledCode, COMPILED_CODE_SIZE); - m_compiledCode = 0; -#endif + VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; + glDeleteVertexArrays(vm->m_buffers_count, VAO); } inline GLuint VarToGL(VarType t) @@ -88,227 +80,69 @@ inline GLuint VarToGL(VarType t) void GLVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl) { - s_prevcomponents = 0; - - vertex_stride = _vtx_decl.stride; - using namespace Gen; + this->vtx_decl = _vtx_decl; + vertex_stride = vtx_decl.stride; // We will not allow vertex components causing uneven strides. - if (_vtx_decl.stride & 3) - PanicAlert("Uneven vertex stride: %i", _vtx_decl.stride); - -#ifdef USE_JIT - Gen::XEmitter emit(m_compiledCode); - // Alright, we have our vertex declaration. Compile some crazy code to set it quickly using GL. - emit.ABI_EmitPrologue(6); + if (vertex_stride & 3) + PanicAlert("Uneven vertex stride: %i", vertex_stride); - emit.CallCdeclFunction4_I(glVertexPointer, 3, GL_FLOAT, _vtx_decl.stride, 0); + VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; + + VAO = new GLuint[vm->m_buffers_count]; + glGenVertexArrays(vm->m_buffers_count, VAO); + for(u32 i=0; im_buffers_count; i++) { + glBindVertexArray(VAO[i]); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vm->m_index_buffers[i]); + glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[i]); + + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3, GL_FLOAT, vtx_decl.stride, (u8*)NULL); + + if (vtx_decl.num_normals >= 1) { + glEnableClientState(GL_NORMAL_ARRAY); + glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[0]); + if (vtx_decl.num_normals == 3) { + glEnableVertexAttribArray(SHADER_NORM1_ATTRIB); + glEnableVertexAttribArray(SHADER_NORM2_ATTRIB); + glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[1]); + glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[2]); + } + } - if (_vtx_decl.num_normals >= 1) - { - emit.CallCdeclFunction3_I(glNormalPointer, VarToGL(_vtx_decl.normal_gl_type), _vtx_decl.stride, _vtx_decl.normal_offset[0]); - if (_vtx_decl.num_normals == 3) { - emit.CallCdeclFunction6((void *)glVertexAttribPointer, SHADER_NORM1_ATTRIB, _vtx_decl.normal_gl_size, VarToGL(_vtx_decl.normal_gl_type), GL_TRUE, _vtx_decl.stride, _vtx_decl.normal_offset[1]); - emit.CallCdeclFunction6((void *)glVertexAttribPointer, SHADER_NORM2_ATTRIB, _vtx_decl.normal_gl_size, VarToGL(_vtx_decl.normal_gl_type), GL_TRUE, _vtx_decl.stride, _vtx_decl.normal_offset[2]); + for (int i = 0; i < 2; i++) { + if (vtx_decl.color_offset[i] != -1) { + if (i == 0) { + glEnableClientState(GL_COLOR_ARRAY); + glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); + } else { + glEnableClientState(GL_SECONDARY_COLOR_ARRAY); + glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); + } + } + } + + for (int i = 0; i < 8; i++) { + if (vtx_decl.texcoord_offset[i] != -1) { + int id = GL_TEXTURE0 + i; + glClientActiveTexture(id); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), + vtx_decl.stride, (u8*)NULL + vtx_decl.texcoord_offset[i]); + } + } + + if (vtx_decl.posmtx_offset != -1) { + glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB); + glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (u8*)NULL + vtx_decl.posmtx_offset); } } - - for (int i = 0; i < 2; i++) - { - if (_vtx_decl.color_offset[i] != -1) - { - if (i == 0) - emit.CallCdeclFunction4_I(glColorPointer, 4, GL_UNSIGNED_BYTE, _vtx_decl.stride, _vtx_decl.color_offset[i]); - else - emit.CallCdeclFunction4((void *)glSecondaryColorPointer, 4, GL_UNSIGNED_BYTE, _vtx_decl.stride, _vtx_decl.color_offset[i]); - } - } - - for (int i = 0; i < 8; i++) - { - if (_vtx_decl.texcoord_offset[i] != -1) - { - int id = GL_TEXTURE0 + i; -#ifdef _M_X64 -#ifdef _MSC_VER - emit.MOV(32, R(RCX), Imm32(id)); -#else - emit.MOV(32, R(RDI), Imm32(id)); -#endif -#else - emit.ABI_AlignStack(1 * 4); - emit.PUSH(32, Imm32(id)); -#endif - emit.CALL((void *)glClientActiveTexture); -#ifndef _M_X64 -#ifdef _WIN32 - // don't inc stack on windows, stdcall -#else - emit.ABI_RestoreStack(1 * 4); -#endif -#endif - emit.CallCdeclFunction4_I( - glTexCoordPointer, _vtx_decl.texcoord_size[i], VarToGL(_vtx_decl.texcoord_gl_type[i]), - _vtx_decl.stride, _vtx_decl.texcoord_offset[i]); - } - } - - if (_vtx_decl.posmtx_offset != -1) - emit.CallCdeclFunction6((void *)glVertexAttribPointer, SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, _vtx_decl.stride, _vtx_decl.posmtx_offset); - - emit.ABI_EmitEpilogue(6); - - if (emit.GetCodePtr() - (u8*)m_compiledCode > COMPILED_CODE_SIZE) - Crash(); - -#endif - this->vtx_decl = _vtx_decl; + + glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[vm->m_current_buffer]); } void GLVertexFormat::SetupVertexPointers() { - // Cast a pointer to compiled code to a pointer to a function taking no parameters, through a (void *) cast first to - // get around type checking errors, and call it. -#ifdef USE_JIT - ((void (*)())(void*)m_compiledCode)(); -#else - glVertexPointer(3, GL_FLOAT, vtx_decl.stride, VertexManager::s_pBaseBufferPointer); - if (vtx_decl.num_normals >= 1) { - glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); - if (vtx_decl.num_normals == 3) { - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); - } - } - - for (int i = 0; i < 2; i++) { - if (vtx_decl.color_offset[i] != -1) { - if (i == 0) - glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.color_offset[i])); - else { - glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.color_offset[i])); - } - } - } - - for (int i = 0; i < 8; i++) { - if (vtx_decl.texcoord_offset[i] != -1) { - int id = GL_TEXTURE0 + i; - glClientActiveTexture(id); - glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), - vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.texcoord_offset[i])); - } - } - - if (vtx_decl.posmtx_offset != -1) { - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); - } -#endif -} - -void GLVertexFormat::SetupVertexPointersOffset(u32 offset) { - // Cast a pointer to compiled code to a pointer to a function taking no parameters, through a (void *) cast first to - // get around type checking errors, and call it. -#ifdef USE_JIT - ((void (*)())(void*)m_compiledCode)(); -#else - glVertexPointer(3, GL_FLOAT, vtx_decl.stride, (GLvoid*)offset); - if (vtx_decl.num_normals >= 1) { - glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[0])); - if (vtx_decl.num_normals == 3) { - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[1])); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.normal_offset[2])); - } - } - - for (int i = 0; i < 2; i++) { - if (vtx_decl.color_offset[i] != -1) { - if (i == 0) - glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.color_offset[i])); - else { - glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.color_offset[i])); - } - } - } - - for (int i = 0; i < 8; i++) { - if (vtx_decl.texcoord_offset[i] != -1) { - int id = GL_TEXTURE0 + i; - glClientActiveTexture(id); - glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), - vtx_decl.stride, (GLvoid*)(offset + vtx_decl.texcoord_offset[i])); - } - } - - if (vtx_decl.posmtx_offset != -1) { - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (GLvoid*)(offset + vtx_decl.posmtx_offset)); - } -#endif -} - -void GLVertexFormat::EnableComponents(u32 components) -{ - if (s_prevcomponents != components) - { - VertexManager::Flush(); - - // matrices - if ((components & VB_HAS_POSMTXIDX) != (s_prevcomponents & VB_HAS_POSMTXIDX)) - { - if (components & VB_HAS_POSMTXIDX) - glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB); - else - glDisableVertexAttribArray(SHADER_POSMTX_ATTRIB); - } - - // normals - if ((components & VB_HAS_NRM0) != (s_prevcomponents & VB_HAS_NRM0)) - { - if (components & VB_HAS_NRM0) - glEnableClientState(GL_NORMAL_ARRAY); - else - glDisableClientState(GL_NORMAL_ARRAY); - } - if ((components & VB_HAS_NRM1) != (s_prevcomponents & VB_HAS_NRM1)) - { - if (components & VB_HAS_NRM1) { - glEnableVertexAttribArray(SHADER_NORM1_ATTRIB); - glEnableVertexAttribArray(SHADER_NORM2_ATTRIB); - } - else { - glDisableVertexAttribArray(SHADER_NORM1_ATTRIB); - glDisableVertexAttribArray(SHADER_NORM2_ATTRIB); - } - } - - // color - for (int i = 0; i < 2; ++i) - { - if ((components & (VB_HAS_COL0 << i)) != (s_prevcomponents & (VB_HAS_COL0 << i))) - { - if (components & (VB_HAS_COL0 << i)) - glEnableClientState(i ? GL_SECONDARY_COLOR_ARRAY : GL_COLOR_ARRAY); - else - glDisableClientState(i ? GL_SECONDARY_COLOR_ARRAY : GL_COLOR_ARRAY); - } - } - - // tex - for (int i = 0; i < 8; ++i) - { - if ((components & (VB_HAS_UV0 << i)) != (s_prevcomponents & (VB_HAS_UV0 << i))) - { - glClientActiveTexture(GL_TEXTURE0 + i); - if (components & (VB_HAS_UV0 << i)) - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - else - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - } - - s_prevcomponents = components; - } -} - - } +} \ No newline at end of file diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index a6121e1436..d4b945199c 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -62,6 +62,7 @@ #include "Host.h" #include "BPFunctions.h" #include "FPSCounter.h" +#include "VertexManager.h" #include "main.h" // Local #ifdef _WIN32 @@ -310,6 +311,20 @@ Renderer::Renderer() "GPU: Does your video card support OpenGL 2.x?"); bSuccess = false; } + + if (!GLEW_ARB_map_buffer_range) + { + ERROR_LOG(VIDEO, "GPU: OGL ERROR: Need GL_ARB_map_buffer_range.\n" + "GPU: Does your video card support OpenGL 3.0?"); + bSuccess = false; + } + + if (!GLEW_ARB_draw_elements_base_vertex) + { + ERROR_LOG(VIDEO, "GPU: OGL ERROR: Need GL_ARB_draw_elements_base_vertex.\n" + "GPU: Does your video card support OpenGL 3.2?"); + bSuccess = false; + } s_bHaveFramebufferBlit = strstr(ptoken, "GL_EXT_framebuffer_blit") != NULL; s_bHaveCoverageMSAA = strstr(ptoken, "GL_NV_framebuffer_multisample_coverage") != NULL; @@ -1415,6 +1430,10 @@ void Renderer::ResetAPIState() glDisable(GL_BLEND); glDepthMask(GL_FALSE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + + // TODO: remove this after merging with immediate-remove + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); } void Renderer::RestoreAPIState() @@ -1432,6 +1451,10 @@ void Renderer::RestoreAPIState() VertexShaderCache::SetCurrentShader(0); PixelShaderCache::SetCurrentShader(0); + + VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; + glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[vm->m_current_buffer]); + vm->m_last_vao = 0; } void Renderer::SetGenerationMode() diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index bbd196ba78..ceb04daeca 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -49,8 +49,10 @@ extern NativeVertexFormat *g_nativeVertexFmt; namespace OGL { //This are the initially requeted size for the buffers expresed in bytes -const u32 IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16 * sizeof(u16); -const u32 VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; +const u32 MAX_IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16 * sizeof(u16); +const u32 MAX_VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; +const u32 MIN_IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 1 * sizeof(u16); +const u32 MIN_VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 1; const u32 MAX_VBUFFER_COUNT = 2; VertexManager::VertexManager() @@ -70,82 +72,77 @@ void VertexManager::CreateDeviceObjects() m_index_buffers = NULL; glEnableClientState(GL_VERTEX_ARRAY); GL_REPORT_ERRORD(); - int max_Index_size = 0; - int max_Vertex_size = 0; + u32 max_Index_size = 0; + u32 max_Vertex_size = 0; glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*)&max_Index_size); glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*)&max_Vertex_size); max_Index_size *= sizeof(u16); GL_REPORT_ERROR(); - m_index_buffer_size = IBUFFER_SIZE; - if (max_Index_size > 0 && max_Index_size < m_index_buffer_size) - m_index_buffer_size = max_Index_size; - - m_vertex_buffer_size = VBUFFER_SIZE; - if (max_Vertex_size > 0 && max_Vertex_size < m_vertex_buffer_size) - m_vertex_buffer_size = max_Vertex_size; - - if (m_index_buffer_size < VertexManager::MAXIBUFFERSIZE || m_vertex_buffer_size < VertexManager::MAXVBUFFERSIZE) - { - return; + + m_index_buffer_size = std::min(MAX_IBUFFER_SIZE, std::max(max_Index_size, MIN_IBUFFER_SIZE)); + m_vertex_buffer_size = std::min(MAX_VBUFFER_SIZE, std::max(max_Vertex_size, MIN_VBUFFER_SIZE)); + + // should be not bigger, but we need it. so try and have luck + if (m_index_buffer_size > max_Index_size) { + ERROR_LOG(VIDEO, "GL_MAX_ELEMENTS_INDICES to small, so try it anyway. good luck\n"); + } + if (m_vertex_buffer_size > max_Vertex_size) { + ERROR_LOG(VIDEO, "GL_MAX_ELEMENTS_VERTICES to small, so try it anyway. good luck\n"); } - m_vertex_buffers = new GLuint[MAX_VBUFFER_COUNT]; - m_index_buffers = new GLuint[MAX_VBUFFER_COUNT]; + //TODO: find out, how many buffers fit in gpu memory + m_buffers_count = MAX_VBUFFER_COUNT; + + m_vertex_buffers = new GLuint[m_buffers_count]; + m_index_buffers = new GLuint[m_buffers_count]; - glGenBuffers(MAX_VBUFFER_COUNT, m_vertex_buffers); + glGenBuffers(m_buffers_count, m_vertex_buffers); GL_REPORT_ERROR(); - glGenBuffers(MAX_VBUFFER_COUNT, m_index_buffers); + glGenBuffers(m_buffers_count, m_index_buffers); GL_REPORT_ERROR(); - for (u32 i = 0; i < MAX_VBUFFER_COUNT; i++) + for (u32 i = 0; i < m_buffers_count; i++) { glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[i] ); GL_REPORT_ERROR(); glBufferData(GL_ARRAY_BUFFER, m_vertex_buffer_size, NULL, GL_STREAM_DRAW ); GL_REPORT_ERROR(); } - for (u32 i = 0; i < MAX_VBUFFER_COUNT; i++) + for (u32 i = 0; i < m_buffers_count; i++) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[i] ); GL_REPORT_ERROR(); glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_size, NULL, GL_STREAM_DRAW ); GL_REPORT_ERROR(); } - m_buffers_count = MAX_VBUFFER_COUNT; - m_current_index_buffer = 0; - m_current_vertex_buffer = 0; - m_index_buffer_cursor = m_index_buffer_size; - m_vertex_buffer_cursor = m_vertex_buffer_size; + m_current_buffer = 0; + m_index_buffer_cursor = 0; + m_vertex_buffer_cursor = 0; m_CurrentVertexFmt = NULL; + m_last_vao = 0; } void VertexManager::DestroyDeviceObjects() { glDisableClientState(GL_VERTEX_ARRAY); GL_REPORT_ERRORD(); - glBindBuffer(GL_ARRAY_BUFFER, NULL ); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, NULL ); + glBindBuffer(GL_ARRAY_BUFFER, 0 ); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0 ); GL_REPORT_ERROR(); - if(m_vertex_buffers) - { - glDeleteBuffers(MAX_VBUFFER_COUNT, m_vertex_buffers); - GL_REPORT_ERROR(); - delete [] m_vertex_buffers; - } - if(m_index_buffers) - { - glDeleteBuffers(MAX_VBUFFER_COUNT, m_index_buffers); - GL_REPORT_ERROR(); - delete [] m_index_buffers; - } + + glDeleteBuffers(m_buffers_count, m_vertex_buffers); + GL_REPORT_ERROR(); + delete [] m_vertex_buffers; + + glDeleteBuffers(m_buffers_count, m_index_buffers); + GL_REPORT_ERROR(); + delete [] m_index_buffers; + m_vertex_buffers = NULL; m_index_buffers = NULL; + m_buffers_count = 0; } void VertexManager::PrepareDrawBuffers(u32 stride) { - if (!m_buffers_count) - { - return; - } u8* pVertices = NULL; u16* pIndices = NULL; int vertex_data_size = IndexGenerator::GetNumVerts() * stride; @@ -153,141 +150,82 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int line_index_size = IndexGenerator::GetLineindexLen(); int point_index_size = IndexGenerator::GetPointindexLen(); int index_data_size = (triangle_index_size + line_index_size + point_index_size) * sizeof(u16); - GLbitfield LockMode = GL_MAP_WRITE_BIT; + GLVertexFormat *nativeVertexFmt = (GLVertexFormat*)g_nativeVertexFmt; + GLbitfield LockMode = GL_MAP_WRITE_BIT; + m_vertex_buffer_cursor--; m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; - if (m_vertex_buffer_cursor > m_vertex_buffer_size - vertex_data_size) + + if (m_vertex_buffer_cursor >= m_vertex_buffer_size - vertex_data_size || m_index_buffer_cursor >= m_index_buffer_size - index_data_size) { + // do we really want to set this? this require a reallocation. usualy only one buffer with reallocation, or much buffers without it LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; m_vertex_buffer_cursor = 0; - m_current_vertex_buffer = (m_current_vertex_buffer + 1) % m_buffers_count; - glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_vertex_buffer]); + m_index_buffer_cursor = 0; + m_current_buffer = (m_current_buffer + 1) % m_buffers_count; + glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_buffer]); } else { LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - } - if(GLEW_ARB_map_buffer_range) - { - pVertices = (u8*)glMapBufferRange(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LockMode); - if(pVertices) - { - memcpy(pVertices, LocalVBuffer, vertex_data_size); - glUnmapBuffer(GL_ARRAY_BUFFER); - } - else - { - glBufferSubData(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LocalVBuffer); - } } - else + + // this replaces SetupVertexPointers and must be called after switching buffer and befor uploading indexes + // but could be deleted, if we only use one buffer with orphaning + if(m_last_vao != nativeVertexFmt->VAO[m_current_buffer]) + glBindVertexArray(nativeVertexFmt->VAO[m_current_buffer]); + + pVertices = (u8*)glMapBufferRange(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LockMode); + if(pVertices) + { + memcpy(pVertices, LocalVBuffer, vertex_data_size); + glUnmapBuffer(GL_ARRAY_BUFFER); + } + else // could that happen? out-of-memory? { glBufferSubData(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LocalVBuffer); } - - LockMode = GL_MAP_WRITE_BIT; - - if (m_index_buffer_cursor > m_index_buffer_size - index_data_size) + + pIndices = (u16*)glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor , index_data_size, LockMode); + if(pIndices) { - LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; - m_index_buffer_cursor = 0; - m_current_index_buffer = (m_current_index_buffer + 1) % m_buffers_count; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[m_current_index_buffer]); - } - else - { - LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - } - if(GLEW_ARB_map_buffer_range) - { - pIndices = (u16*)glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor , index_data_size, LockMode); - if(pIndices) - { - if(triangle_index_size) - { - memcpy(pIndices, TIBuffer, triangle_index_size * sizeof(u16)); - pIndices += triangle_index_size; - } - if(line_index_size) - { - memcpy(pIndices, LIBuffer, line_index_size * sizeof(u16)); - pIndices += line_index_size; - } - if(point_index_size) - { - memcpy(pIndices, PIBuffer, point_index_size * sizeof(u16)); - } - glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); + if(triangle_index_size) + { + memcpy(pIndices, TIBuffer, triangle_index_size * sizeof(u16)); + pIndices += triangle_index_size; } - else - { - if(triangle_index_size) - { - triangle_index_size *= sizeof(u16); - glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor, triangle_index_size, TIBuffer); - } - if(line_index_size) - { - line_index_size *= sizeof(u16); - glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size, line_index_size, LIBuffer); - } - if(point_index_size) - { - point_index_size *= sizeof(u16); - glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size + line_index_size, point_index_size, PIBuffer); - } + if(line_index_size) + { + memcpy(pIndices, LIBuffer, line_index_size * sizeof(u16)); + pIndices += line_index_size; } - } -} - -void VertexManager::DrawVertexArray() -{ - int triangle_index_size = IndexGenerator::GetTriangleindexLen(); - int line_index_size = IndexGenerator::GetLineindexLen(); - int point_index_size = IndexGenerator::GetPointindexLen(); - if (triangle_index_size > 0) - { - glDrawElements(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, TIBuffer); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); + if(point_index_size) + { + memcpy(pIndices, PIBuffer, point_index_size * sizeof(u16)); + } + glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } - if (line_index_size > 0) + else // could that happen? out-of-memory? { - glDrawElements(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, LIBuffer); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); - } - if (point_index_size > 0) - { - glDrawElements(GL_POINTS, IndexGenerator::GetPointindexLen(), GL_UNSIGNED_SHORT, PIBuffer); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); + if(triangle_index_size) + { + triangle_index_size *= sizeof(u16); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor, triangle_index_size, TIBuffer); + } + if(line_index_size) + { + line_index_size *= sizeof(u16); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size, line_index_size, LIBuffer); + } + if(point_index_size) + { + point_index_size *= sizeof(u16); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_cursor + triangle_index_size + line_index_size, point_index_size, PIBuffer); + } } } -void VertexManager::DrawVertexBufferObject() -{ - int triangle_index_size = IndexGenerator::GetTriangleindexLen(); - int line_index_size = IndexGenerator::GetLineindexLen(); - int point_index_size = IndexGenerator::GetPointindexLen(); - int StartIndex = m_index_buffer_cursor; - if (triangle_index_size > 0) - { - glDrawElements(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); - StartIndex += triangle_index_size * sizeof(u16); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); - } - if (line_index_size > 0) - { - glDrawElements(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); - StartIndex += line_index_size * sizeof(u16); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); - } - if (point_index_size > 0) - { - glDrawElements(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex); - INCSTAT(stats.thisFrame.numIndexedDrawCalls); - } -} - -void VertexManager::DrawVertexBufferObjectBase(u32 stride) +void VertexManager::Draw(u32 stride) { int triangle_index_size = IndexGenerator::GetTriangleindexLen(); int line_index_size = IndexGenerator::GetLineindexLen(); @@ -296,19 +234,19 @@ void VertexManager::DrawVertexBufferObjectBase(u32 stride) int basevertex = m_vertex_buffer_cursor / stride; if (triangle_index_size > 0) { - glDrawElementsBaseVertex(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); + glDrawElementsBaseVertex(GL_TRIANGLES, triangle_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+StartIndex, basevertex); StartIndex += triangle_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (line_index_size > 0) { - glDrawElementsBaseVertex(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); + glDrawElementsBaseVertex(GL_LINES, line_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+StartIndex, basevertex); StartIndex += line_index_size * sizeof(u16); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } if (point_index_size > 0) { - glDrawElementsBaseVertex(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (GLvoid*)StartIndex, basevertex); + glDrawElementsBaseVertex(GL_POINTS, point_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+StartIndex, basevertex); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } } @@ -349,19 +287,6 @@ void VertexManager::vFlush() u32 stride = g_nativeVertexFmt->GetVertexStride(); PrepareDrawBuffers(stride); - //still testing if this line is enabled to reduce the amount of vertex setup call everything goes wrong - //if(m_CurrentVertexFmt != g_nativeVertexFmt || !GLEW_ARB_draw_elements_base_vertex ) - { - if(m_buffers_count) - { - ((GLVertexFormat*)g_nativeVertexFmt)->SetupVertexPointersOffset(GLEW_ARB_draw_elements_base_vertex ? 0 : m_vertex_buffer_cursor); - } - else - { - g_nativeVertexFmt->SetupVertexPointers(); - } - m_CurrentVertexFmt = g_nativeVertexFmt; - } GL_REPORT_ERRORD(); u32 usedtextures = 0; @@ -438,21 +363,7 @@ void VertexManager::vFlush() if (ps) PixelShaderCache::SetCurrentShader(ps->glprogid); // Lego Star Wars crashes here. if (vs) VertexShaderCache::SetCurrentShader(vs->glprogid); - if(m_buffers_count) - { - if(GLEW_ARB_draw_elements_base_vertex) - { - DrawVertexBufferObjectBase(stride); - } - else - { - DrawVertexBufferObject(); - } - } - else - { - DrawVertexArray(); - } + Draw(stride); // run through vertex groups again to set alpha if (useDstAlpha && !dualSourcePossible) @@ -465,21 +376,8 @@ void VertexManager::vFlush() glDisable(GL_BLEND); - if(m_buffers_count) - { - if(GLEW_ARB_draw_elements_base_vertex) - { - DrawVertexBufferObjectBase(stride); - } - else - { - DrawVertexBufferObject(); - } - } - else - { - DrawVertexArray(); - } + Draw(stride); + // restore color mask g_renderer->SetColorMask(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h index db80f87a2b..91319b54f2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h @@ -26,7 +26,6 @@ namespace OGL { class GLVertexFormat : public NativeVertexFormat { - u8 *m_compiledCode; PortableVertexDeclaration vtx_decl; public: @@ -35,8 +34,8 @@ namespace OGL virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); virtual void SetupVertexPointers(); - virtual void SetupVertexPointersOffset(u32 offset); - virtual void EnableComponents(u32 components); + + GLuint *VAO; }; // Handles the OpenGL details of drawing lots of vertices quickly. @@ -49,21 +48,21 @@ public: NativeVertexFormat* CreateNativeVertexFormat(); void CreateDeviceObjects(); void DestroyDeviceObjects(); + + // NativeVertexFormat use this + u32 m_buffers_count; + u32 m_current_buffer; + GLuint* m_vertex_buffers; + GLuint* m_index_buffers; + GLuint m_last_vao; private: - void DrawVertexArray(); - void DrawVertexBufferObject(); - void DrawVertexBufferObjectBase(u32 stride); + void Draw(u32 stride); void vFlush(); void PrepareDrawBuffers(u32 stride); u32 m_vertex_buffer_cursor; u32 m_vertex_buffer_size; u32 m_index_buffer_cursor; u32 m_index_buffer_size; - u32 m_buffers_count; - u32 m_current_vertex_buffer; - u32 m_current_index_buffer; - GLuint* m_vertex_buffers; - GLuint* m_index_buffers; NativeVertexFormat *m_CurrentVertexFmt; }; From 1919a458e88fc1a06567b9496c6c47d34b9df5f2 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 15 Dec 2012 17:28:58 +0100 Subject: [PATCH 184/625] only use one buffer, orphaning should do the rest --- .../Src/NativeVertexFormat.cpp | 92 +++++++++---------- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 +- .../Plugin_VideoOGL/Src/VertexManager.cpp | 76 +++++---------- .../Plugin_VideoOGL/Src/VertexManager.h | 8 +- 4 files changed, 72 insertions(+), 106 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index 8669d32711..506c1a707d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -66,8 +66,7 @@ GLVertexFormat::GLVertexFormat() GLVertexFormat::~GLVertexFormat() { - VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; - glDeleteVertexArrays(vm->m_buffers_count, VAO); + glDeleteVertexArrays(1, &VAO); } inline GLuint VarToGL(VarType t) @@ -89,57 +88,54 @@ void GLVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl) VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; - VAO = new GLuint[vm->m_buffers_count]; - glGenVertexArrays(vm->m_buffers_count, VAO); - for(u32 i=0; im_buffers_count; i++) { - glBindVertexArray(VAO[i]); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vm->m_index_buffers[i]); - glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[i]); + glGenVertexArrays(1, &VAO); + glBindVertexArray(VAO); - - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, vtx_decl.stride, (u8*)NULL); - - if (vtx_decl.num_normals >= 1) { - glEnableClientState(GL_NORMAL_ARRAY); - glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[0]); - if (vtx_decl.num_normals == 3) { - glEnableVertexAttribArray(SHADER_NORM1_ATTRIB); - glEnableVertexAttribArray(SHADER_NORM2_ATTRIB); - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[1]); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[2]); - } - } + // the element buffer is bound directly to the vao, so we must it set for every vao + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vm->m_index_buffers); - for (int i = 0; i < 2; i++) { - if (vtx_decl.color_offset[i] != -1) { - if (i == 0) { - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); - } else { - glEnableClientState(GL_SECONDARY_COLOR_ARRAY); - glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); - } - } - } - - for (int i = 0; i < 8; i++) { - if (vtx_decl.texcoord_offset[i] != -1) { - int id = GL_TEXTURE0 + i; - glClientActiveTexture(id); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), - vtx_decl.stride, (u8*)NULL + vtx_decl.texcoord_offset[i]); - } - } - - if (vtx_decl.posmtx_offset != -1) { - glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB); - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (u8*)NULL + vtx_decl.posmtx_offset); + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3, GL_FLOAT, vtx_decl.stride, (u8*)NULL); + + if (vtx_decl.num_normals >= 1) { + glEnableClientState(GL_NORMAL_ARRAY); + glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[0]); + if (vtx_decl.num_normals == 3) { + glEnableVertexAttribArray(SHADER_NORM1_ATTRIB); + glEnableVertexAttribArray(SHADER_NORM2_ATTRIB); + glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[1]); + glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (u8*)NULL + vtx_decl.normal_offset[2]); } } + + for (int i = 0; i < 2; i++) { + if (vtx_decl.color_offset[i] != -1) { + if (i == 0) { + glEnableClientState(GL_COLOR_ARRAY); + glColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); + } else { + glEnableClientState(GL_SECONDARY_COLOR_ARRAY); + glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, vtx_decl.stride, (u8*)NULL + vtx_decl.color_offset[i]); + } + } + } + + for (int i = 0; i < 8; i++) { + if (vtx_decl.texcoord_offset[i] != -1) { + int id = GL_TEXTURE0 + i; + glClientActiveTexture(id); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(vtx_decl.texcoord_size[i], VarToGL(vtx_decl.texcoord_gl_type[i]), + vtx_decl.stride, (u8*)NULL + vtx_decl.texcoord_offset[i]); + } + } + + if (vtx_decl.posmtx_offset != -1) { + glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB); + glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (u8*)NULL + vtx_decl.posmtx_offset); + } - glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[vm->m_current_buffer]); + vm->m_last_vao = VAO; } void GLVertexFormat::SetupVertexPointers() { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index d4b945199c..a03ac84b8a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -1453,7 +1453,7 @@ void Renderer::RestoreAPIState() PixelShaderCache::SetCurrentShader(0); VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; - glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers[vm->m_current_buffer]); + glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers); vm->m_last_vao = 0; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index ceb04daeca..29cf903c04 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -53,7 +53,6 @@ const u32 MAX_IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 16 * sizeof(u16); const u32 MAX_VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 16; const u32 MIN_IBUFFER_SIZE = VertexManager::MAXIBUFFERSIZE * 1 * sizeof(u16); const u32 MIN_VBUFFER_SIZE = VertexManager::MAXVBUFFERSIZE * 1; -const u32 MAX_VBUFFER_COUNT = 2; VertexManager::VertexManager() { @@ -67,10 +66,6 @@ VertexManager::~VertexManager() void VertexManager::CreateDeviceObjects() { - m_buffers_count = 0; - m_vertex_buffers = NULL; - m_index_buffers = NULL; - glEnableClientState(GL_VERTEX_ARRAY); GL_REPORT_ERRORD(); u32 max_Index_size = 0; u32 max_Vertex_size = 0; @@ -90,31 +85,18 @@ void VertexManager::CreateDeviceObjects() ERROR_LOG(VIDEO, "GL_MAX_ELEMENTS_VERTICES to small, so try it anyway. good luck\n"); } - //TODO: find out, how many buffers fit in gpu memory - m_buffers_count = MAX_VBUFFER_COUNT; - - m_vertex_buffers = new GLuint[m_buffers_count]; - m_index_buffers = new GLuint[m_buffers_count]; - - glGenBuffers(m_buffers_count, m_vertex_buffers); + glGenBuffers(1, &m_vertex_buffers); GL_REPORT_ERROR(); - glGenBuffers(m_buffers_count, m_index_buffers); + glGenBuffers(1, &m_index_buffers); + GL_REPORT_ERROR(); + glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers ); + GL_REPORT_ERROR(); + glBufferData(GL_ARRAY_BUFFER, m_vertex_buffer_size, NULL, GL_STREAM_DRAW ); + GL_REPORT_ERROR(); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers ); + GL_REPORT_ERROR(); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_size, NULL, GL_STREAM_DRAW ); GL_REPORT_ERROR(); - for (u32 i = 0; i < m_buffers_count; i++) - { - glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[i] ); - GL_REPORT_ERROR(); - glBufferData(GL_ARRAY_BUFFER, m_vertex_buffer_size, NULL, GL_STREAM_DRAW ); - GL_REPORT_ERROR(); - } - for (u32 i = 0; i < m_buffers_count; i++) - { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_index_buffers[i] ); - GL_REPORT_ERROR(); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_buffer_size, NULL, GL_STREAM_DRAW ); - GL_REPORT_ERROR(); - } - m_current_buffer = 0; m_index_buffer_cursor = 0; m_vertex_buffer_cursor = 0; m_CurrentVertexFmt = NULL; @@ -122,23 +104,16 @@ void VertexManager::CreateDeviceObjects() } void VertexManager::DestroyDeviceObjects() { - glDisableClientState(GL_VERTEX_ARRAY); GL_REPORT_ERRORD(); glBindBuffer(GL_ARRAY_BUFFER, 0 ); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0 ); GL_REPORT_ERROR(); - glDeleteBuffers(m_buffers_count, m_vertex_buffers); + glDeleteBuffers(1, &m_vertex_buffers); GL_REPORT_ERROR(); - delete [] m_vertex_buffers; - glDeleteBuffers(m_buffers_count, m_index_buffers); + glDeleteBuffers(1, &m_index_buffers); GL_REPORT_ERROR(); - delete [] m_index_buffers; - - m_vertex_buffers = NULL; - m_index_buffers = NULL; - m_buffers_count = 0; } void VertexManager::PrepareDrawBuffers(u32 stride) @@ -150,7 +125,6 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int line_index_size = IndexGenerator::GetLineindexLen(); int point_index_size = IndexGenerator::GetPointindexLen(); int index_data_size = (triangle_index_size + line_index_size + point_index_size) * sizeof(u16); - GLVertexFormat *nativeVertexFmt = (GLVertexFormat*)g_nativeVertexFmt; GLbitfield LockMode = GL_MAP_WRITE_BIT; m_vertex_buffer_cursor--; @@ -158,22 +132,14 @@ void VertexManager::PrepareDrawBuffers(u32 stride) if (m_vertex_buffer_cursor >= m_vertex_buffer_size - vertex_data_size || m_index_buffer_cursor >= m_index_buffer_size - index_data_size) { - // do we really want to set this? this require a reallocation. usualy only one buffer with reallocation, or much buffers without it LockMode |= GL_MAP_INVALIDATE_BUFFER_BIT; m_vertex_buffer_cursor = 0; m_index_buffer_cursor = 0; - m_current_buffer = (m_current_buffer + 1) % m_buffers_count; - glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffers[m_current_buffer]); } else { LockMode |= GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; } - - // this replaces SetupVertexPointers and must be called after switching buffer and befor uploading indexes - // but could be deleted, if we only use one buffer with orphaning - if(m_last_vao != nativeVertexFmt->VAO[m_current_buffer]) - glBindVertexArray(nativeVertexFmt->VAO[m_current_buffer]); pVertices = (u8*)glMapBufferRange(GL_ARRAY_BUFFER, m_vertex_buffer_cursor, vertex_data_size, LockMode); if(pVertices) @@ -284,9 +250,16 @@ void VertexManager::vFlush() (void)GL_REPORT_ERROR(); - u32 stride = g_nativeVertexFmt->GetVertexStride(); + GLVertexFormat *nativeVertexFmt = (GLVertexFormat*)g_nativeVertexFmt; + u32 stride = nativeVertexFmt->GetVertexStride(); + + if(m_last_vao != nativeVertexFmt->VAO) { + glBindVertexArray(nativeVertexFmt->VAO); + m_last_vao = nativeVertexFmt->VAO; + } PrepareDrawBuffers(stride); + GL_REPORT_ERRORD(); u32 usedtextures = 0; @@ -385,11 +358,10 @@ void VertexManager::vFlush() glEnable(GL_BLEND); } GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); - if(m_buffers_count) - { - m_index_buffer_cursor += (IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen()) * sizeof(u16); - m_vertex_buffer_cursor += IndexGenerator::GetNumVerts() * stride; - } + + m_index_buffer_cursor += (IndexGenerator::GetTriangleindexLen() + IndexGenerator::GetLineindexLen() + IndexGenerator::GetPointindexLen()) * sizeof(u16); + m_vertex_buffer_cursor += IndexGenerator::GetNumVerts() * stride; + ResetBuffer(); #if defined(_DEBUG) || defined(DEBUGFAST) if (g_ActiveConfig.iLog & CONF_SAVESHADERS) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h index 91319b54f2..4d820692b9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.h @@ -35,7 +35,7 @@ namespace OGL virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); virtual void SetupVertexPointers(); - GLuint *VAO; + GLuint VAO; }; // Handles the OpenGL details of drawing lots of vertices quickly. @@ -50,10 +50,8 @@ public: void DestroyDeviceObjects(); // NativeVertexFormat use this - u32 m_buffers_count; - u32 m_current_buffer; - GLuint* m_vertex_buffers; - GLuint* m_index_buffers; + GLuint m_vertex_buffers; + GLuint m_index_buffers; GLuint m_last_vao; private: void Draw(u32 stride); From 85ac76e8e2ea428e2a4523cc3700b3c712105bef Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 19 Dec 2012 23:42:22 +0100 Subject: [PATCH 185/625] fix gcc compilation --- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 22 ++++----- .../Src/TextureConversionShader.cpp | 26 +++++----- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 48 +++++++++---------- .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 28 +++++------ 4 files changed, 62 insertions(+), 62 deletions(-) diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 1a0e8690c8..b2bada299f 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -647,18 +647,18 @@ const char *GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform PSBlock {\n"); - WRITE(p, "%sfloat4 "I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); - WRITE(p, "%sfloat4 "I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); - WRITE(p, "%sfloat4 "I_ALPHA"[1] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ALPHA)); - WRITE(p, "%sfloat4 "I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXDIMS)); - WRITE(p, "%sfloat4 "I_ZBIAS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ZBIAS)); - WRITE(p, "%sfloat4 "I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXSCALE)); - WRITE(p, "%sfloat4 "I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXMTX)); - WRITE(p, "%sfloat4 "I_FOG"[3] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_FOG)); + WRITE(p, "%sfloat4 " I_COLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%sfloat4 " I_KCOLORS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_KCOLORS)); + WRITE(p, "%sfloat4 " I_ALPHA"[1] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ALPHA)); + WRITE(p, "%sfloat4 " I_TEXDIMS"[8] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXDIMS)); + WRITE(p, "%sfloat4 " I_ZBIAS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_ZBIAS)); + WRITE(p, "%sfloat4 " I_INDTEXSCALE"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXSCALE)); + WRITE(p, "%sfloat4 " I_INDTEXMTX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_INDTEXMTX)); + WRITE(p, "%sfloat4 " I_FOG"[3] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_FOG)); // Compiler will optimize these out by itself. - WRITE(p, "%sfloat4 "I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); - WRITE(p, "%sfloat4 "I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); + WRITE(p, "%sfloat4 " I_PLIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PLIGHTS)); + WRITE(p, "%sfloat4 " I_PMATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PMATERIALS)); if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); @@ -1355,7 +1355,7 @@ void SampleTexture(char *&p, const char *destination, const char *texcoords, con if (ApiType == API_D3D11) WRITE(p, "%s=Tex%d.Sample(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", destination, texmap,texmap, texcoords, texmap, texswap); else - WRITE(p, "%s=%s(samp%d,%s.xy * "I_TEXDIMS"[%d].xy).%s;\n", destination, ApiType == API_GLSL ? "texture2D" : "tex2D", texmap, texcoords, texmap, texswap); + WRITE(p, "%s=%s(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", destination, ApiType == API_GLSL ? "texture2D" : "tex2D", texmap, texcoords, texmap, texswap); } static const char *tevAlphaFuncsTable[] = diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 5f1eaf855a..225334d45a 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -95,7 +95,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); - WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%sfloat4 " I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); @@ -155,7 +155,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * " I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / %f);\n", blkW); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -163,17 +163,17 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (xb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); + WRITE(p, " sampleUv = sampleUv * " I_COLORS"[0].xy;\n"); if (ApiType == API_OPENGL || ApiType == API_GLSL) - WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = " I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); + WRITE(p, " sampleUv = sampleUv + " I_COLORS"[1].zw;\n"); if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); + WRITE(p, " sampleUv = sampleUv / " I_COLORS"[0].zw;\n"); } } @@ -186,7 +186,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // Two were merged for GLSL if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140%s) uniform PSBlock {\n", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? ", binding = 1" : ""); - WRITE(p, "%sfloat4 "I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); + WRITE(p, "%sfloat4 " I_COLORS"[2] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_COLORS)); if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); @@ -242,7 +242,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); WRITE(p, " float yb = yl * %f;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); - WRITE(p, " float xp = uv1.x + (yoff * "I_COLORS"[1].x);\n"); + WRITE(p, " float xp = uv1.x + (yoff * " I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / 2);\n"); WRITE(p, " float xb = floor(xel / %f);\n", blkH); WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); @@ -254,17 +254,17 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); - WRITE(p, " sampleUv = sampleUv * "I_COLORS"[0].xy;\n"); + WRITE(p, " sampleUv = sampleUv * " I_COLORS"[0].xy;\n"); if (ApiType == API_OPENGL || ApiType == API_GLSL) - WRITE(p," sampleUv.y = "I_COLORS"[1].y - sampleUv.y;\n"); + WRITE(p," sampleUv.y = " I_COLORS"[1].y - sampleUv.y;\n"); - WRITE(p, " sampleUv = sampleUv + "I_COLORS"[1].zw;\n"); + WRITE(p, " sampleUv = sampleUv + " I_COLORS"[1].zw;\n"); if (ApiType != API_OPENGL && ApiType != API_GLSL) { WRITE(p, " sampleUv = sampleUv + float2(0.0f,1.0f);\n");// still to determine the reason for this - WRITE(p, " sampleUv = sampleUv / "I_COLORS"[0].zw;\n"); + WRITE(p, " sampleUv = sampleUv / " I_COLORS"[0].zw;\n"); } } @@ -283,7 +283,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; if (ApiType != API_OPENGL || ApiType != API_GLSL) - texSampleIncrementUnit = I_COLORS"[0].x / "I_COLORS"[0].z"; + texSampleIncrementUnit = I_COLORS"[0].x / " I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index d0379e697d..27a0ecbb08 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -225,15 +225,15 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "layout(std140) uniform VSBlock {\n"); - WRITE(p, "%sfloat4 "I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); - WRITE(p, "%sfloat4 "I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); - WRITE(p, "%sfloat4 "I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); - WRITE(p, "%sfloat4 "I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); - WRITE(p, "%sfloat4 "I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices - WRITE(p, "%sfloat4 "I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); - WRITE(p, "%sfloat4 "I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); - WRITE(p, "%sfloat4 "I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); + WRITE(p, "%sfloat4 " I_POSNORMALMATRIX"[6] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSNORMALMATRIX)); + WRITE(p, "%sfloat4 " I_PROJECTION"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_PROJECTION)); + WRITE(p, "%sfloat4 " I_MATERIALS"[4] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_MATERIALS)); + WRITE(p, "%sfloat4 " I_LIGHTS"[40] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_LIGHTS)); + WRITE(p, "%sfloat4 " I_TEXMATRICES"[24] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_TEXMATRICES)); // also using tex matrices + WRITE(p, "%sfloat4 " I_TRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType),WriteRegister(ApiType, "c", C_TRANSFORMMATRICES)); + WRITE(p, "%sfloat4 " I_NORMALMATRICES"[32] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_NORMALMATRICES)); + WRITE(p, "%sfloat4 " I_POSTTRANSFORMMATRICES"[64] %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_POSTTRANSFORMMATRICES)); + WRITE(p, "%sfloat4 " I_DEPTHPARAMS" %s;\n", WriteLocation(ApiType), WriteRegister(ApiType, "c", C_DEPTHPARAMS)); if (ApiType == API_GLSL && g_ActiveConfig.backend_info.bSupportsGLSLUBO) WRITE(p, "};\n"); @@ -359,11 +359,11 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) WRITE(p, "int posmtx = int(fposmtx);\n"); } - WRITE(p, "float4 pos = float4(dot("I_TRANSFORMMATRICES"[posmtx], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot("I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); + WRITE(p, "float4 pos = float4(dot(" I_TRANSFORMMATRICES"[posmtx], rawpos), dot(" I_TRANSFORMMATRICES"[posmtx+1], rawpos), dot(" I_TRANSFORMMATRICES"[posmtx+2], rawpos), 1);\n"); if (components & VB_HAS_NRMALL) { WRITE(p, "int normidx = posmtx >= 32 ? (posmtx-32) : posmtx;\n"); - WRITE(p, "float3 N0 = "I_NORMALMATRICES"[normidx].xyz, N1 = "I_NORMALMATRICES"[normidx+1].xyz, N2 = "I_NORMALMATRICES"[normidx+2].xyz;\n"); + WRITE(p, "float3 N0 = " I_NORMALMATRICES"[normidx].xyz, N1 = " I_NORMALMATRICES"[normidx+1].xyz, N2 = " I_NORMALMATRICES"[normidx+2].xyz;\n"); } if (components & VB_HAS_NRM0) @@ -375,13 +375,13 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) } else { - WRITE(p, "float4 pos = float4(dot("I_POSNORMALMATRIX"[0], rawpos), dot("I_POSNORMALMATRIX"[1], rawpos), dot("I_POSNORMALMATRIX"[2], rawpos), 1.0f);\n"); + WRITE(p, "float4 pos = float4(dot(" I_POSNORMALMATRIX"[0], rawpos), dot(" I_POSNORMALMATRIX"[1], rawpos), dot(" I_POSNORMALMATRIX"[2], rawpos), 1.0f);\n"); if (components & VB_HAS_NRM0) - WRITE(p, "float3 _norm0 = normalize(float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm0), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm0)));\n"); + WRITE(p, "float3 _norm0 = normalize(float3(dot(" I_POSNORMALMATRIX"[3].xyz, rawnorm0), dot(" I_POSNORMALMATRIX"[4].xyz, rawnorm0), dot(" I_POSNORMALMATRIX"[5].xyz, rawnorm0)));\n"); if (components & VB_HAS_NRM1) - WRITE(p, "float3 _norm1 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); + WRITE(p, "float3 _norm1 = float3(dot(" I_POSNORMALMATRIX"[3].xyz, rawnorm1), dot(" I_POSNORMALMATRIX"[4].xyz, rawnorm1), dot(" I_POSNORMALMATRIX"[5].xyz, rawnorm1));\n"); if (components & VB_HAS_NRM2) - WRITE(p, "float3 _norm2 = float3(dot("I_POSNORMALMATRIX"[3].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot("I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); + WRITE(p, "float3 _norm2 = float3(dot(" I_POSNORMALMATRIX"[3].xyz, rawnorm2), dot(" I_POSNORMALMATRIX"[4].xyz, rawnorm2), dot(" I_POSNORMALMATRIX"[5].xyz, rawnorm2));\n"); } if (!(components & VB_HAS_NRM0)) @@ -389,7 +389,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) - WRITE(p, "o.pos = float4(dot("I_PROJECTION"[0], pos), dot("I_PROJECTION"[1], pos), dot("I_PROJECTION"[2], pos), dot("I_PROJECTION"[3], pos));\n"); + WRITE(p, "o.pos = float4(dot(" I_PROJECTION"[0], pos), dot(" I_PROJECTION"[1], pos), dot(" I_PROJECTION"[2], pos), dot(" I_PROJECTION"[3], pos));\n"); WRITE(p, "float4 mat, lacc;\n" "float3 ldir, h;\n" @@ -468,7 +468,7 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) if (components & (VB_HAS_NRM1|VB_HAS_NRM2)) { // transform the light dir into tangent space - WRITE(p, "ldir = normalize("I_LIGHTS"[%d + 3].xyz - pos.xyz);\n", texinfo.embosslightshift); + WRITE(p, "ldir = normalize(" I_LIGHTS"[%d + 3].xyz - pos.xyz);\n", texinfo.embosslightshift); WRITE(p, "o.tex%d.xyz = o.tex%d.xyz + float3(dot(ldir, _norm1), dot(ldir, _norm2), 0.0f);\n", i, texinfo.embosssourceshift); } else @@ -492,16 +492,16 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) { WRITE(p, "int tmp = int(tex%d.z);\n", i); if (texinfo.projection == XF_TEXPROJ_STQ) - WRITE(p, "o.tex%d.xyz = float3(dot(coord, "I_TRANSFORMMATRICES"[tmp]), dot(coord, "I_TRANSFORMMATRICES"[tmp+1]), dot(coord, "I_TRANSFORMMATRICES"[tmp+2]));\n", i); + WRITE(p, "o.tex%d.xyz = float3(dot(coord, " I_TRANSFORMMATRICES"[tmp]), dot(coord, " I_TRANSFORMMATRICES"[tmp+1]), dot(coord, " I_TRANSFORMMATRICES"[tmp+2]));\n", i); else { - WRITE(p, "o.tex%d.xyz = float3(dot(coord, "I_TRANSFORMMATRICES"[tmp]), dot(coord, "I_TRANSFORMMATRICES"[tmp+1]), 1);\n", i); + WRITE(p, "o.tex%d.xyz = float3(dot(coord, " I_TRANSFORMMATRICES"[tmp]), dot(coord, " I_TRANSFORMMATRICES"[tmp+1]), 1);\n", i); } } else { if (texinfo.projection == XF_TEXPROJ_STQ) - WRITE(p, "o.tex%d.xyz = float3(dot(coord, "I_TEXMATRICES"[%d]), dot(coord, "I_TEXMATRICES"[%d]), dot(coord, "I_TEXMATRICES"[%d]));\n", i, 3*i, 3*i+1, 3*i+2); + WRITE(p, "o.tex%d.xyz = float3(dot(coord, " I_TEXMATRICES"[%d]), dot(coord, " I_TEXMATRICES"[%d]), dot(coord, " I_TEXMATRICES"[%d]));\n", i, 3*i, 3*i+1, 3*i+2); else - WRITE(p, "o.tex%d.xyz = float3(dot(coord, "I_TEXMATRICES"[%d]), dot(coord, "I_TEXMATRICES"[%d]), 1);\n", i, 3*i, 3*i+1); + WRITE(p, "o.tex%d.xyz = float3(dot(coord, " I_TEXMATRICES"[%d]), dot(coord, " I_TEXMATRICES"[%d]), 1);\n", i, 3*i, 3*i+1); } break; } @@ -510,9 +510,9 @@ const char *GenerateVertexShaderCode(u32 components, API_TYPE ApiType) const PostMtxInfo& postInfo = xfregs.postMtxInfo[i]; int postidx = postInfo.index; - WRITE(p, "float4 P0 = "I_POSTTRANSFORMMATRICES"[%d];\n" - "float4 P1 = "I_POSTTRANSFORMMATRICES"[%d];\n" - "float4 P2 = "I_POSTTRANSFORMMATRICES"[%d];\n", + WRITE(p, "float4 P0 = " I_POSTTRANSFORMMATRICES"[%d];\n" + "float4 P1 = " I_POSTTRANSFORMMATRICES"[%d];\n" + "float4 P2 = " I_POSTTRANSFORMMATRICES"[%d];\n", postidx&0x3f, (postidx+1)&0x3f, (postidx+2)&0x3f); if (texGenSpecialCase) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp index 202f7dc58e..e682da83c2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.cpp @@ -114,21 +114,21 @@ void PixelShaderCache::Init() "%s\n" "%suniform sampler2DRect samp0;\n" "%s\n" - "%svec4 "I_COLORS"[7];\n" + "%svec4 " I_COLORS"[7];\n" "%s\n" "void main(){\n" "vec4 Temp0, Temp1;\n" "vec4 K0 = vec4(0.5, 0.5, 0.5, 0.5);\n" "Temp0 = texture2DRect(samp0, gl_TexCoord[0].xy);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" + "Temp0 = Temp0 * " I_COLORS"[%d];\n" "Temp0 = Temp0 + K0;\n" "Temp0 = floor(Temp0);\n" - "Temp0 = Temp0 * "I_COLORS"[%d];\n" - "Temp1.x = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.y = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.z = dot(Temp0, "I_COLORS"[%d]);\n" - "Temp1.w = dot(Temp0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = Temp1 + "I_COLORS"[%d];\n" + "Temp0 = Temp0 * " I_COLORS"[%d];\n" + "Temp1.x = dot(Temp0, " I_COLORS"[%d]);\n" + "Temp1.y = dot(Temp0, " I_COLORS"[%d]);\n" + "Temp1.z = dot(Temp0, " I_COLORS"[%d]);\n" + "Temp1.w = dot(Temp0, " I_COLORS"[%d]);\n" + "gl_FragData[0] = Temp1 + " I_COLORS"[%d];\n" "}\n", (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", @@ -150,7 +150,7 @@ void PixelShaderCache::Init() "%s\n" "%suniform sampler2DRect samp0;\n" "%s\n" - "%svec4 "I_COLORS"[5];\n" + "%svec4 " I_COLORS"[5];\n" "%s\n" "void main(){\n" "vec4 R0, R1, R2;\n" @@ -170,11 +170,11 @@ void PixelShaderCache::Init() "R0.w = (R0 * K1.x).w;\n" "R0.w = floor(R0).w;\n" "R0.w = (R0 * K1.y).w;\n" - "R1.x = dot(R0, "I_COLORS"[%d]);\n" - "R1.y = dot(R0, "I_COLORS"[%d]);\n" - "R1.z = dot(R0, "I_COLORS"[%d]);\n" - "R1.w = dot(R0, "I_COLORS"[%d]);\n" - "gl_FragData[0] = R1 * "I_COLORS"[%d];\n" + "R1.x = dot(R0, " I_COLORS"[%d]);\n" + "R1.y = dot(R0, " I_COLORS"[%d]);\n" + "R1.z = dot(R0, " I_COLORS"[%d]);\n" + "R1.w = dot(R0, " I_COLORS"[%d]);\n" + "gl_FragData[0] = R1 * " I_COLORS"[%d];\n" "}\n", (g_ActiveConfig.backend_info.bSupportsGLSLUBO || g_ActiveConfig.backend_info.bSupportsGLSLBinding) ? "330 compatibility" : "120", g_ActiveConfig.backend_info.bSupportsGLSLBinding ? "#extension GL_ARB_shading_language_420pack : enable" : "", From cf8f936abbb41128374578e9fa65ef6a2167f1d9 Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 19 Dec 2012 23:43:05 +0100 Subject: [PATCH 186/625] fix efb2ram decoder --- Source/Core/VideoCommon/Src/TextureConversionShader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 225334d45a..5a2f2c87d0 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -282,7 +282,7 @@ void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYP // the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX. const char* texSampleIncrementUnit; - if (ApiType != API_OPENGL || ApiType != API_GLSL) + if (ApiType != API_OPENGL && ApiType != API_GLSL) texSampleIncrementUnit = I_COLORS"[0].x / " I_COLORS"[0].z"; else texSampleIncrementUnit = I_COLORS"[0].x"; From 9209253e0df031dd2bb6a1f1186b6352f7f44f69 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 24 Dec 2012 11:09:52 -0600 Subject: [PATCH 187/625] Initial removal of Nvidia CG. Still some more cleanup to go --- CMakeLists.txt | 17 - Externals/Cg/Cg.framework/Cg | Bin 21806072 -> 0 bytes .../Cg/Cg.framework/Resources/Info.plist | 42 - Externals/Cg/cg.dll | Bin 6371944 -> 0 bytes Externals/Cg/cg.h | 1354 ----------------- Externals/Cg/cg.lib | Bin 81986 -> 0 bytes Externals/Cg/cgGL.dll | Bin 363112 -> 0 bytes Externals/Cg/cgGL.h | 243 --- Externals/Cg/cgGL.lib | Bin 21740 -> 0 bytes Externals/Cg64/cg.dll | Bin 9542248 -> 0 bytes Externals/Cg64/cg.lib | Bin 80248 -> 0 bytes Externals/Cg64/cgGL.dll | Bin 453736 -> 0 bytes Externals/Cg64/cgGL.lib | Bin 21328 -> 0 bytes .../VideoCommon/Src/PixelShaderManager.cpp | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 2 +- Source/Core/VideoCommon/Src/VideoConfig.cpp | 5 - Source/Core/VideoCommon/Src/VideoConfig.h | 1 - Source/Plugins/Plugin_VideoOGL/CMakeLists.txt | 6 - Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 7 - .../Plugin_VideoOGL/Src/PixelShaderCache.cpp | 432 +----- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 23 +- .../Plugin_VideoOGL/Src/PostProcessing.cpp | 4 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 148 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 5 +- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 213 +-- .../Plugin_VideoOGL/Src/VertexManager.cpp | 27 +- .../Plugin_VideoOGL/Src/VertexShaderCache.cpp | 212 +-- .../Plugin_VideoOGL/Src/VertexShaderCache.h | 24 +- 28 files changed, 197 insertions(+), 2570 deletions(-) delete mode 100755 Externals/Cg/Cg.framework/Cg delete mode 100644 Externals/Cg/Cg.framework/Resources/Info.plist delete mode 100644 Externals/Cg/cg.dll delete mode 100644 Externals/Cg/cg.h delete mode 100644 Externals/Cg/cg.lib delete mode 100644 Externals/Cg/cgGL.dll delete mode 100644 Externals/Cg/cgGL.h delete mode 100644 Externals/Cg/cgGL.lib delete mode 100644 Externals/Cg64/cg.dll delete mode 100644 Externals/Cg64/cg.lib delete mode 100644 Externals/Cg64/cgGL.dll delete mode 100644 Externals/Cg64/cgGL.lib diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a32308c65..e39df1f31b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -466,23 +466,6 @@ else() add_subdirectory(Externals/GLew) include_directories(Externals/GLew/include) endif(NOT GLEW_FOUND) - - if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - check_lib(CG Cg Cg/cg.h) - endif() - if(NOT CG_FOUND) - message("Using static Cg from Externals") - include_directories(Externals) - endif(NOT CG_FOUND) - check_lib(CGGL CgGL Cg/cgGL.h) - if(NOT CG_FOUND) - message("CG not found, Building without") - add_definitions(-DHAVE_CG=0) - set(HAVE_CG 0) - else() - add_definitions(-DHAVE_CG=1) - set(HAVE_CG 1) - endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") diff --git a/Externals/Cg/Cg.framework/Cg b/Externals/Cg/Cg.framework/Cg deleted file mode 100755 index e5c268a826fe9ba20647f5d2cb74e1a43b1fdfc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21806072 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�{#=juS$5ifbV5^yM)&Wcsj%HNVr_?mGF82zsPWZ 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

6XTF6K$8t&SJUH~-!n0N$KL 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%0AXg&Ps%&Vw)d=)EY+FXqca z@Cb_e3f21!|8b{$Ulw6kbjo)eI6*m5W&8*P2qRPjG)Q}K*Mi&|>{O#XmtXmVVb=?( zq?|4{-SlMpby~07MH`@AO4Z9S4aoE;j`<(~m7)&dP zB^#W_$8cD#c%U@N#S_Hrq`r~~N^x1hA1|aW9ORht3}*(}5Zs<9_iiHysqlhi7}Jge zqXO{T0MIs8|IxKz;QC1h?mlSZ0i=?P#LY_l`^}1T)^VJN>s|L9vHkN#!EH`A4MIz# zQ7+}F*7#ljQ<%3oC$UN4jqn5I3N0I zL%B>TTT1-bCgcB&HlwmW4JQagwOW*GPKq@=;tsI}xMn!dv&-p0xkmb)q_W|XKyDwMV zeJQv*CI%mQYLrxLBoV^cPe|_0V-z^M`vNI?9ka}{j!~xGU74w+33x9JH+$=@i3}Lc@bHqC$00c!l8$2K2u+eg{oTak8)x zYdj?tZPtuZ$Y}of$6D-(&)lii4)#|Z;8;`ZtvnOclLvuB8guRkPe|xrI{9aS_FFAk zwe_cI>l=;uWi%qGz5>Ir>QF!Zxa*SQRKCCc)rCvHDk)Co+v>-CEh$drd(4Yd6C?Kb z*v3;(S$_x% zpV7G5L&Nguh)|D0JQhJI319e_T2(DN2#I)L10|G7AyBF=G2c~m*MWat#dxOd{^MQd zuy_xgcyZoK9>7&VxRAkkmWYJe$12F0OhJxqfW)rqjz7VZEy>#|zW?nod@5y`H@L(K z4I!3eCt2wrzaUmv;CCfJXQp)n4DfIxL(+bX2L|Ldd&$ln$8Q++Kq06?Ir=pMGbz~q zo38sug8>N?uxjL(giZFY1DL&_vZlV+1!M;2ap?)+Ykq%S;YiB2*!oWiK16mw!#o() zdLZN3y?H|otiKa=_zYC=FXJ2fYk|qbm$tsYKe+Ec3j?uhgzjU=8d%f?^W<)>F=Fu{wN*vC(G)&)xig0!vS&p)|!vV?4jGgS1$^7dh<8EDQtHoh`qC3=O3^dNe-c?LOcvxEF?- zZ9D@Tw5pjKLp6Tr%|7sJ+WhHY)%pJSOPQzo07~tsCN!X^m|T)1HCa#JyJ;G8KnK$r z*}N7YuqKkD ztSX7b^<`yS*b^S=ylzAdwyQPetz-1Jm|r9+(Oh!)5oG; zO`kBXmWp6m6#Gb2w9t}o;oca#*fl;{&Jt+opAAy8?x&$0l}a+F%wLN)i>|*&4dM=o zA`B9rfy4*}t%ygmdoL!g(LtkxuNtd`1dqTQB3oc2zjU5axQTD7a zq}(of!wbx9@QmZUcNo2c9a4E|!HfNTFErbk$X>&(h6kJygv{3*M|Gol$hjP$)cY@J z-y#=i!ODdlz8cl=mK&??ptXa(uIML30ijr$vu`yHzaxD;5N6bdsDdl zbcNd;3%u@Vc#YkfZ9~xwx&XpSE|wpCZ43GIxZ2Ly?nkzc1?14p0w91$cFyKchfzi- z(@(5Hq96AOwEr3V7vkQ{+a|Y-j9+#x|3Z{67aMr?{lE|PL#ZgDco}MgB2zJ0+Hw;? zxI3*LqNe7eC}tBlOyELJJAZ+?h!j$#-_GaIPMC`^2^d}~4#vGo9DJ?aovZvj)ySi8 zkRtvTqrEtQfIGWz+oQ6TaV)2gnps@^+O_O2?w5DzGJuBd1{x{20@BNbHwD&{P_Hu{ zvrxj`UG58$KHP`2(3C1onxNU=uTYDdwIDs;5X9{#$OoLRa&ZtwVUp85tso#ZaMB!l zZbA=+$(B{v#_xYFfMv$#QsR?28>qid$pqHZ3)ice+BWJ{!k{~0W3s-ok<;?wpQ)bc zZdxuv3QWtaIR19SG|ay3Ym%q!$6lHiNXTmywD%{4VBq+d(g~@EshEC(qJ;1)P=PZ2 z0AG2P)pKG5suP6p zZNRXi9Q9Y$3m6X>Xsrwh7}6iG%E!8$2Ul`GXXo+8LJ*m@cm?0USnq@o622E$lJRj0 z0^Se_a~1+}u!Sk3WFi5%&mAQ`<6Vl@vz!nNT1jDwS@_ZCZ6_}QYR`r~E; z$R4na+RozzEwM_cXdBY3k`1UxIweb6h1W7AmwkGLd<$bN{8h{M`GTb(P^{`?*+=m5<$UZim38pKIDHs>?hg5xp zU2-3pM}HJS3GlILa%AP1;}*3F`xWg^%X$chiH3tcS|vKV=(L%z%H9Qer+zo$rVLunrgRISrrs2u=g;w7L=@+g4g&O~e#Z_2|_1rPbeDQ#H zvCyO5nh^apdD5``Nhjto04p+$`unKBdj5?!h6G}hgSfF7B7rMk=Y5~XHKbX78G+~^VvNn{M)QdFQ;f~MBF(FT1mnp0TJ%zpdNWzn*D%@C4Ci~I zwpUyo|^pOexTcAtKVUD88`$q`Aj6Lu0Ysad^&;CST5^H-H=^Q3PN8Jn zMJ$aR)RXI2f*qd&O+D3H`#heYYF2+SaO}!@tD3cOm{u;AwF&a!1b}hio95>5&#A$g zFA1nD$fl6NSQiQ{b~jrE$8e!F)&r6(1z6)iU#?yzNTT}4!7VVtf@wwM;51YzmK}O_ zg6_e(EN7lY`T&g0SDKsu`A8kY0lhC5 z6WaRm9T#j-4&N-f*TV{}f>~;RBeW8itgd9CXa<+weR}l`!n5iOWuCVx87Rx zA$fb0Zy9hZiZ{*&PjABqps_hbnIK?>qekO>kp^~SzQH&XH$`AC5&nUmxev%h9iReZ zb54FQWI>Qwyr_p&l=*2si~*=CP?4Njy(B+H67y9HrV#M!BKO0T7!5f_V@^KK=7d+k z+lwh*wdgfSY0t?q;kxCX9PWMoDq_2L~^qH(G!&^ ztUVVlw~%I{q?wqSW~LTx1Dy6;`1C@WnUZE^N}2`a)UY;^WIdVeS$<*4=OmB>TmAxa zH06TNo{LpI67!2BmOx74CPe8!u;=!cgnW~P5=cqd#)RL*25_W-!APV0Z9a@Jm_ah) zOu>;B9Zy6b%!eamo9rM|KT0TnY2zpv3QMWaiT)G$(HF7(vrl1{z_Ay(I~HbBr-C!7 zj@VF?g>~iZbFFZ6Ii4DBR1q4+!IjIA3iok?m2>Gir;YQW0=s%U2D@+{X0 zIHj3dZaT;IhEMmwit^$v1zGe$1eG(DNZ!3@g?smUj1;g58}Nbs1wl~$uesaLgHb#M zCk8BdW{pBTo|&W*JjInG`4`w&d`89>@G~by0xM!$-6mIgO|H4lYqC^=a$%PCdCNHw zHpLmnY(SzQFS-V`L@HbRAx7N?Ya0Rb44CaGmWYF+tbO8H=mad_q(q-L62X7Lex9=v z;>57mZQ%k|aZAv-71O;46|;>48QP)@G(vEVCDJwR@OECgl%>9k+Q~I}?m<>w4}%@E z;&>1nhR*Bg?@sG&7gl|W3uom@fyf1xWo~1c5T1M>IWu6od5Zgx!vUv|k3JD-k*v*; z8stFl1f2eewT(EZ1W0QF(4_gEL?&nu1>x{PsaS|lX3_6pBNyuf#c(~Ku$b(wgzTj0 z z==0;3buT+r=A&-PN~ZzGRSC)4pKp`=5!`1R;cY_#cFhhD6*R7>)?V_#LZA#LB~Zgv z@qQiLQlst>OL2u$xdpo_GWD$McIu%rXby7IBBl(t>*V0RD7P3X^(cj{J!)Y~Sy)Ar z@o^6JG#%=e>=9MC{CtDKgOW5 zjos)(oO&cxar|&Og)wyYkv^Pa{q9r}0M~RFFBr$9!9!_BI-K8$;0CL-HSUE8Pf9%r zj;Td+2nwVpRTYlyvM`hZ&3AnL7pO-yHA&~^)vz2jq+lnuOJMFtQY^2-O=F=Q(0cOj z>ws~`4lL?-&^c3d0&s|ntpR^Yf!~Dg@Yi}2{OM1Ms(QOMv$*a&bW#3O>;mOCI{&G? zpn$c5^n1+L)}CuPBl4eQq<&lelZ=2Hdb36UUTOZ5t$5Qb@}K0!h+T9`s#!}Fh==ArDtWjclsoE?I%fH+uEsXzjZjZYZG`$bnU>vk&YyU#-32UjNA1%Z2 z1-;er1!(LLbGcO0#9T-1@kfx}KSN9Mtv@RH&c?*!k?+P%ZM?A)Xx))-KB{sqW*5^bZ|Vco^_q-`TS5S3c9Q3jU%XMAm?I;6lG0E9VXW>Nn)6+6*RlUWHIYGD$?#` z4SkW_TO0E!>tp&Sf*v=V*?uPQA3yLx-vCzN63)c6c3ASCiGwDL`qM6XeaC20Zac(B z4Zg?J_r5sZh`|8W+r>zs?y&Zxkh?w$2J%a?!%e(<)+))?FA;t#_tCy?Ef@^$kLfyi z4#pA02xZ>~DC*th;WwqF5HM(850GA#?MWB@TyY-}&O|e6LZ1`Ta}`9It7DK`#4-LE zH9)oRZwwE?{cWga3d8mCU7d&U8lpw-2S8Pop9l04+RLEN7kKBW`*SH?AQs#B*#MdF z#cx-@?Py=1=EvqxmP&!mVHo_wFB2hgLP#cM4EE6TolldF%(#UOl)^N*eMl+}zcQ@e zxddO6_2E!w4+7Bu7?Bm@tZ%9{e~ODxzPgh-)kqMgY~va*4TLh{l`r(ge$*hitV-6W zO>q~`72bU@xYiu{FW9bf3jzz5!|?sYgH_mc#MT)lYY3qa?4jutyk#Y=jBCB-=_>Lf z%rv$!5}UVXDBCW{MOt78CxbA#9N=DEr`YV0oCI?1+OW!r*d+hS9d%>!!3%2p}awy12o z;ZUn$x14(iE`lUAHVgA^HPkP30EW%alg%u+#Bxz|HtyBJlw@Kc2x5sorKK=K!0P*d zPwQs?-q@q;H?X1L+Aqy8=JpMQ2ZF58p9AbAFo)^LD<7_(xW8birsp&l3`e=Vmc_S` zDfZ7tmrlXX>w9MTaE~7GbcX<1KZTttnSo)_qAQI5YdzKgCE4w(lzug_wL!AW5`yyy z+$#``1}W3u4GJQKcxA_b{~SsKt#j{7K8wQ_q=HxrE<`?~fZ&L|hlvv;+tt1yvS&40 zOGvoq0$}27!Bngd`x@~}XTT!y?g1$Zp=5idlAIaFY+&=RxDysr2*wKnAS}WhpNjPawg@`>&4b{Ra#_k{xkHGbvB0c695Hi_Wmr~3rhQ8Eh5udKq0&;$)njXFi-DU%!@# zVZVXl%Y~Ngwh*@W2A#lx*Q}Re*wASax(*$P?!ZJ)kKIbhZ#ZXJGQhc)BS)cO@TItB zI|-&+J(yku#+)Cbr6@&sCC&(0m8e!0cigH~V>2Uxr-eOu(`qYkc^+cIy-{H~`M?$} zN=7f(cke?fFCD`TsG5mHBvv>fEPi%d*A~N}60aeG%|k^~TB9&c6tIIwnxS!8&*a$&?XaV*wwGNm1{d~~G~#fmp& zJj+OX`4Zmbz9qk?RI{fc1@+q3;VEv`c35NJO}~j(-|Vo0ea+G3vTl|U`E8dLIV)AY zLsDsK-;rt`5!q8i(7?aIY(#mj_>JNtXIe9}xo7i8$ zAxQHw;5Y7TtO(kvnc3~QgxpOQekXt2^l+;PTkWr6FBx!6wjE2$`TfuM?>u4NkI9?}i!?;S6SpaCAgMww4fHVn$QlKDZ zlGP5lrMWqN#_zCk-)Q5q-U9{Nf^PvhJG2^fXEqQ>%&Ein$M>v)wVj-*i?<_aFS(F= z{IB&0t=b&8*q)t+tMN+28i-3`Fr}X{Jw^B~%5`i)i?%;RRT?mpB~!pFCn;z@6M|jA z``5_-z!xz?#=p(d5^Y$OXhZj3f^e1 zS|}ww{S{04+lg$Y4)(sn`IE4ROlKU%3k^_fiXj^@}b5DGmTw~`)o7Ihk6Oen&o3jJ7eIgW1?9; z(V8&DET3XcxZW(kUZpXMhJ&okLW(G)o$EndtQFp~g`Z>UmhOVM;tLP-I)$@(oOrKz zTm%m1UM@C^`YOW<82SpYcxMuXwFZ!t^9WkpRlZQ(8#z#b9yqds=a~UCCa%aa%l24h zxn?MinFZ!otSRSBu2NJCXntX&y z1r*`PM=g3c$A`FY+=h~r$Sb+FAVGd;w|{ zhUBkrm8Ifbt1NC6a@_&BWiRW$#Vf~Dh3{eNiK?8~T|hVI_zdCB`&h-#DqLZ=O$oc~ z0MsVy0y>jKk-h#Ka&JZ4xe~d31#uP9$dWQZX+{BM3s7401omoYz*^oLsa}6!k~*9Cx1H$l(PJ_DZw{Z@UY@XzQl48zs+prSyq8OJAwAw4AOFXD?BVcV$jVY< znm~WbM@y4it`@CD)z~q{@$z=fpHIaz%pAY`<`P*8;cCwmCrS0JtpGsUCBsn}VSqn6 zKETiF@c=)o!voWRw9H)w{e#LK#3S=R-}L}mlCr<7+W#hFS!Wy3hK8QzvpS%wO29-?!d>tO0 z0Dt)t04^?WUQQi<%!GQ+6JP{{GZ-8{76RFM)`U!0yqsbcamFvze`>yF!Oh<5;eS|@ z$9f;+G#mrbny<#BYx zbi3HyDs+17Wj-7nEzH#9PBC+QIiPZGCV!Bq(POdiK&CXhoTzs0KsZ%i^QoH)&@8O7 zU^bV(S}H-O9oM>S^Ww#%`WjeLI$3?Wd;VPd;uAW+6GFHy5X)d%a+KBG@Al#6d(aLC-|6 zS0dP(H}FOd1pq|&SGI9e1CUuAMd^a9=IWUUGSXw22_WJafZ5yB5DGPqk zn4I|f^Qt~TQnp{3*mrftkDp)Y7nPF&gfH6$@3c^(-4lOE51(%lt)X9Rl0w97vL+|GF{ysFX5w|3l zp_RW=trWFJ^fb^YT_!;0_O%;ty#Z^s2Vkb2o>HYZ$AF_jsNq2gkOLd^@XMSRwCGec z*D8QW6~150jw#5cw?Cgc9-(i=0t6L$+R=rMgW)BgJlAfV{laFS_TTezz8pJi5EEE3!LQzvc13w2(X-R9r$Y? zGCN3n75&6W6Du{h2$Qv6n1aT8(>G5`Kz~CV$Ov)mv+qkMsj0SY=H!le|G3;(MS32) z{I88b5{}Z*WD4Easi@20Sx42++97RkNsJH5*O;|3t40i@f51%cS%CPW02X)*XIbl4 zArRXS58c|Ljc5uxH=Jo@SaUP;@^Hx8S8(f%(FXIQzaoqnG6(Z5 z#0_TLgu!`pvbE?9_{tN@Vq+tUw1*LkOVjmP#(|&?pL;!VUG0Hh`Wfi{j?i9vc$$@N zG-ey9f|p{RCE#=y)8nWy4r=JWG@4g*AH!RDyN~&W#Oy7|5AD&Szf#EnrBR=q_f6$5 zj4;EMdi~(Md$RSPcyA-~?is9q-+L?1yJw{S9q(;=-aX}d$a|Zech7YFO7+%rA!^9G zXSV)zBeXYz-{f-JNaIR;kA(K|0ldU+1#yTxV1Bx}Fbnl#V?{bP5%T#X`yWz4rrUd1 zV1W|gLJng;rT637qF)iI7%Y$*`@no5f0!0s!cXD2x$Rl@Il87fvJx5PtH z{~{AS%igzeejbNFL)i0RmciKeQYTf7%2v?ABm7#~3ax6j3iZ%$#d}a6hrd1bOYygt z-oFD&h*v=j4OkFo=Y{ra(Y`3I>(_lKqw7}^W!JBi1-gFaN%gK@SKuqiz9bKg$E7OK z{dl+G^Y2xxE$zFoPHn-h>iK>3Sv-?ej_n|vvf2x6YW~UkbO>^l+w;d|+vS7x$@$|3 zn{V6YBlWWUaU&Tj*T0oNuAHIidL9%z49&)B6D!=e?T1MLxRC*CU%Q53U^2gCwvx`; z`*LgsV7d!Gl~^d_Scw=(`Rvgu{$?hYDCCmEkrxalBW`Yi7=mH`@H+KHI11P*8UJJ3 z!BwgmA%s&--e8qOXSf&V&dsuY&R?jcsEFIa2kntDBnz}J=z89|)ZHAYJWP%7<$7Q2 z2G9!q018w3|4a4rp--P-%==N_@GfKC?Lqxa_3|cO(!#G|qA~iWwKvyV1-b2SQiEHN z11J0hvF|xl>gy1{p%TclN^@k|h0}=i_Kl>~31s9?f$tDH3x~heAX-XHNs8*1p&g40GO z#u(HS@xnYDy++Q1Ue3#rljb9#tT%Rn5}~h6<`*p>>ymBeLa-UcF+gxXd_BaWTmEG!rg5j5}@j3ZWz--Ze-PjNxn9&IH4sN2%x&<;76+M`p zKv)@zAaNu_joV&OmZ{&a>xlM=(kMoz#FT z6oB*5;mobW>LISE`809}PA&s$gW>0xGQ~eaVt=vfs(!dw!{0tsoLc>r6Y(d8cPYns z??Sl9f%Yc+IvsiFaPO6cb>qt%2O!|}m`H=m}!EYa52i) z1TKCNFEaLbzd_WG+KI}v1ySm}q7fMM1=6;_xA&g_1ns0>z>hvK8UDZUqs{l5_`QeU z-|+i8e*ePn3;cQl<`ePjhu>NForm8y@VgwpQTT=ME5ok>zZ>wo8NWO53*%RbUkpDR zzlZSqC4Rrd?=k$I!S4n9UdHeL0uGX4_$AuSckh`T_y5BG_xdZjPkx7fd(7>>XYl0s z+-gT|o_kT?B|M*H)Au)f3`^<8m1Kek>`yA{( zhq})Z?(@nvRbHX{zRZ39w)_6M`(EL`PyRrqztMf);J)ADzMr;B#sAcOpXI(+y6JegE8jzi78g_k`Q-Mm{SPYXg_8fJTTjlpWbU?Sg=Q#oS^w zk=c>J5Ac5eTwTp&cI0!$_m3QEm(*|KEnMXB+s^ZsnilQI$IP=UatIF6QNuRAwW_(y zj(ozm&FF#q=K#Xg`8RUtUgQYxLTo0$cnSPm?cXY!m1IK}?9gyRs2ULnpFXU^!-f;QY}OHF(6GRfE^>T( z$3@J+ssAWB%2w4;PJq9I=yjOHB-i<>9tzn<$yKqcj&l#4r3~_N-FuTj$72mg$yK?k zj=~4`Q~p6Yj}Ts=>f)Swlw4>N*f^<%3jyjST`p=detKX9T!`ZIxu>;>CJL*Wn?7zugPt>Y*$*ipy9g8qvQWUhoA z0r1gTUuf*XNn5OLaDLVEcO^$f2iZoHHL(MR4~nO^(x!J!(wDt&e39f!ftTuO1f*7XZz?$vT}#@N(^%``%?LZy_+uQn911c7Mr|NcV|O7) zd|Q*oHne37-QTC>M5@irlCjQYL@9quX7eQTE#6poZH8U+Z*=F~r{kcz7NvgO-9z@* zQ_Ufn0MOmB`nkIZ8+L88Ys>@jr`YmP91GgrW@BDS>D(s9X4fKW8KWw87Xj9}kNaOE z>Z{Qxz51~K{TA=L>dAZf>XlUH#i`!=UUJ+pFHZGXQF2^AFHZH6*q?f39t0v_8zwrA zc-}amlb#iwbo_xnRScoAD($GH(PDl{Iqb`rVX>^}9^f7e*=#GmY3sAot%!~bWksh8|zlTO<}7^&M07%s(h0nLFH zdQDX11SYhX47FSuviC)#!6hQ0Jv}P+!TJ2>EyjnvbJLB=y=nFsXuB>%Dlo8X=wbd! zdYHf1IMM^Y42}f#9OFn&{Z!*fFTHPWQ5wC@+hfvm(?%C|_sgq<3XBf@a?^0lb8cZ; zZeeHYrVkO9xo7NE4&jG5ijv)aQ7adQJ8~SE+IPwnGp$7DIUd+?^*{{ z9B!U{NF)eBfmNKI3FT)bgPfs5YP4+D3qSIvq?9>A^rF|Ef_FLGjo9q>wanTRxNflfqq6B@C+M})TR4gm+c4V27FF#FA5a= zTQR{ux5+Dj>%&u|ZK5wClGt88xf|rR_o=&3Vkj%pMADEw6V6{qD1g$6TNyw>J0|^g z%B|Qp1*#ey&L^&t^L*ruPq{^o4x}_N3G}Tesiw*&Ro3}vjkh-w+DYJ8kPBEJ6lW{H zJc!9)Oj2pjLuA9}#28TdhpSW`u>GC}alvHDHOq77nX5P8D`|=(x2OS(!C8fo3W`m^ zLKVvL{1ssQcJePL=Llu|hb|IHwFUu#KPGFak%dZg)){ zV7LoQD%E|iJW*BoHpbpxFr;8wZ)MmKPxaNGF34~Nt`?h*p--50_4 zTRgKNo_T7B)g znfc@Jelyy2+DkmcN+CI-wN~mTC515ze#1R;xgEx$s>H1#l_<#)`ouS2aBtX@o!y{Rb0_owIi6+Pa6q2H6=%uXL4{d|# z@8pa=Fe?u2bpFVuxn=EEdA~wgk0;8i*eUj1EUN@?<$h(jrlpkiFODmmYwahf-)Z%A zity#QEd?>*C=K|5Yr20T3&ls!%(ZN?bDxy^KO>Zab%bfB^TYq3jKfb8-#eYl{(~~= zSO(yD4c402i-?s2-+%cseTTz43DkVHMWIIFWjM;hwzyjwOnZ(`RVk&dN-3?0c3^H< zk*^Hdl$5d_m$Lq6J+=r!w)5Tppnx(KFyucdAd>|=gJUwdm_0fVPuuvR%Y;D884IY} zPi96tpA`DAGMsCX_-HKcm_szFk56ho+~L5x5o%qXRBLtTT4$hE=j%w9%M=+?&Qg#5>Y-UP;hj9Z#b4i|M%)dgMSsk~$dR?^WeBn^a$w8_K}cc7BPsWE ze8A?0@1+eQY%s;SI?qR1{SzBeacmXx$O^7r0aP#qdfPTOl&i_ervu)z%g&3x{RH-S zorL)nCXVld5{ptxA6}4}L_}p}J#LbvvqJZnxA~kNVX` z(T_km;4T!b=P1BU+cvC7=` zIFM0iNna(74_r$Nnqv>{H+*DMS=zm)U`l6pwS zjNj190hA+t)vyJ8veQduQ8w9`!QlTG*c)B~urfFFcTPr0{&*aVgD_M~s0ElS55_ub zLT|Xnv%V=UXYqg*UC+M*F;3nHz{86^*%}{=9Q+AHL7WdpPil*=#ox%mZ&A-5#eK{H zZP6n9jU2pLzI-ga1$T4an9=(LFjHp1P-CGh=IlE`|-i5c^Me&FX1y6Bi%}1 z_0af%vLS&j`LQQ~C7HW@v<5hXdASx-`U-A3y2JKMNK!w!wOdK5aT6t}j1);qW6Ch=j9&39u$~ z?Is4XT|4FiVinj6v}ez#-NY`kjkIseSK=BcZ>_Np?ZCeA5Ar_MqO`wC1`@Vp(w-ns z5~8(aX%_4y`dY;?+|W6Q3!DZ?XL0l9A zxMaza66>S&Ala)(^+)UdM!(MI%iKD@!1#(B98JW;HX^)ja&35TuBdOH=<-b>few|V8ybuS~U%g zwU=CvzglsNZQOzYyO?(RT#fLMF}m?LnEdF6LOMBxvC29=NSmaTRYm;CO%x!%+F1Q$ zMz>?N|MSNltBN`N9bIBHUGM4|6upXmY>Mo6&|X)uN0>9=tV;HlMwGV#Rvo-p zjvZ>T$3cDTvN4!>67dW?aY71H-)Xo3mP_>65L#fTi;vAz zp<^++y+;_{-cL#?UC*vMI8}>Lv7ThlVpX;dt0w?U>(e&JI_BO$b^+5io_Uz4bY);% zw(+-8)$45C;0=9n#k=!9DV$|SuVI;+UW*)}LQGpg?YL#^xOrM&e{t>QK`r_WJ~&h> zRb4ezA5?V}_}faRNy4SehE74b)W+L$)3o)Pc|=gt$aaXC)~`{12^!Yva}BFqKOWw_ z(^F#fyYLlWy?dm7y&hkK_N-v)SCl)xr#-7@>Q`J_I=+`Zt5@pRGw`*yJ*#)hS1ne; zCIXl0it&=Psu35{RUr>sRn1Pj*q(`_VT zhF?{)d*Y?179&Hdn%xU8y|ma1^3oeGz4c!>bUBkee_$_=#DKA88*Of%aV_iG`vq>B z7I1b_IB~6waSBs-Ji7QDH+lSBOo+|~BvSm#^H<(!eBit`&<+-3M^<9-M=RfD@WSYT zr%7*xrw`j7Id~HoBNSm;D4Y$MI{E^#*v9q{XD1Of1k%uMFb7Yg1{E5pT5%ZJo%yaT zQwP96Iem66lt22JN%Y%kFA^*WrcrQ@CA(zPXt7;7Y=7+axo_hx29Y-~NL)sQDv-9= z3a*6+AH*AXr#WEhoDHVvkD#oQyt_*0z0&@(#Qb){zBl1c0qHlW(Jw9e-- zT>V|D^4omNs^QKBk#ZwOGFdB{Q0LvTOa%; z7|r@E`n7f;eI=jMV7{f7Abd`PeOH=3(ha5Sm%5=I`d~K{)X#Q9J@srigxw7{)I0q6 z=)B4;;h%H!TKR?DZniWW8u&S`aDbC3YrYul6=dXX)@)k)LK~G8&`Y71btTqRVbz+W zbMu@>hizk7v62mVpbOlK7W@1*z9<`1I4!a8UBNN5FV{ft<;<@0`w|h%F8hiuq^9 ztw4Jb_UJj zz8H$IXjfBpDt*FW5i4{kHJkFWZ9}_VT)`XKIjjSQ;+xo6r8ty;Ba2$Jg_V~z$@bi) z!F;J`!nzUzi^+_J!TCkmTJ#E(KxY!ZTM2B$Mi^gN-$S2)zd`-m_}fz-iod<|ekN?& z(?%Pcvr%7Os7;H~wRe|~ZQXr*rMr*oyZiW??mjNWM{Gdn!#&U2aDc~7geH8ieP=cf zBbZ@$y=jG>5{DUSwtpiM;~G7CCSvOF*}f-D{1LV?vPdH9?3vgYRFUZtxg-BhU_|a7 zD?{u^FP4|bz_KF$&cRw#ma2>`_hN%y>_{yd2Tj4LggtY*7u(Z|E!U#kyx7@ZY%ec% zx)xo7SoZ*xW?2%CLz$FbYF z7H;>(GQaom@ch_Q@c00b8K6yK8cR{gBr+^zZ}5}T*_^YwGwTt-Q;A7GqgBZEnH zAZPPv*>?886?f8NKckYsj}()zF@7V&ABr^@#|^aDzYuSZ4yq=_zJap6`IA6Iv4a>; zDWm5isMMJQ$xOp-&`zEJsfilKH<+yVD53#JrSPIHDnp`CarqFzN`4gE4m2RB@QWsl zQv2oAOxZ5cGmv!@Vb!7;Na@W)(D8q%t)w4Z=T1hcTS*O%aZ$B1MFGOCq@A6%l2ZAz zbi#MoH_}thy`}dcx6)by`-i6yeKyh8+ZlyVo%My1zkulPO^Wa+A+}!zJMTXC7HS0=GN@j}0Kyq|;Sn|rgL-8)rN;GH7n(Ud{-`CZ`6V0o;R!2X+qT{k>6DdeM#7%r0TBSuOXcVbLi+&e>N0Fek*t7WR4Uyy$K~u8z$yDr%o_K=Vm2j3Q z`HWveZQ+f=*geN7jD60+hIL=qpH=|Ou>_L|(R2WzEv7w&3-{{`3f$3V1fc*W%LPTV zQ0k!DPqB?DN#E4oOcJ$kgEg3Q50Hx-BB0{wV-ZD4n>{eQv>Cz%M91?9X5=_!aG*O` zWV8Qa-z{H*+IAo6==cU1As3blsLTUDCcASUN6fL>B5+*74994&*U4S_MK$>HUjT%4 z$Ek?WIaGEWt0G}ik74k-Gmi7gK?##xJO7Qa&j72?7lDL4Ug_RnT2+||qUHX643c*f z6Jh4yUs=z7MFrYR*LKV6-~2szJr_Y-8@Ou^<)cs59-hvuAP_lHL8WVy=W8NI9+L1N zP*FF!oNFP~Q@fX>_Wo#+Da|j zOi;N>yB<9;!z?d%cwdMw&yWV{*(xmxug@K#;e}T}yuN~uGitTPW6&FsgWr*FT!=;v zPL%K^C@*sGA_?aq47DFOUZUkl(+Qp!H-B*DJ(uZIJ9RFPvileR`FN@SAK+!!5=f=0 z@2}tt$PFfGN{q+Hlp;BJE+FA$H4utFICO{>&(RA35kZH>>N2Rp#|O~{WN_spi0#ML zpI@2^<2>eLlQqS-l!1K1=S-0>>laxxWWn;^vP}54LeXAaL@5K-(Dj z$BP2aHxUi_oWV;JD7Nw4dt}_fCBvXAB?LgmD|MeB;l8ub-@f;V0}lfUKbK<8L~@6V zI&7RUNc&SoHZQQtM#FiGw&*DY0bzz6-U4SVssb^Aw@l9Jh(Cu*M9ngpnCs=81|?TVO%pw#JlFIkF1(I!Goi z?vQDv1+R)!Fe1~MluYL*GOg7XHG!a;L+ezgHSojeW#YZ_iJD%5l<(HGQCn0cnd((0 zTnSL`Wok;vbWEPATZPm_{ zY|9hb+CUYOZ8z&m($`Wpz{=dsA5Y020CaA(d*;q?-4(Q-pSr#nE&a1kTMR!tIJLhQ zw%B>0J^Gb6Lyd#^EO=xMZcbO-b2qk97Fy{AX8QioC#LBDJ;O}%GlgH7QQIMYO7qIv zwAlACDDloSBza}6TI^)JcR>AGwmlE((ipWj9lX$>KCf(}7UM2OM`#^-E3a&=7W_K-6D@ z6A1tSQEt@_BSA+9{m@j}`f~V@39KBP(k1;QsA3E!rq-2InPG0e_E+ z5C!$b8fujiZE8%8;#NT->i5Y}SRp4xEliGLFC}u_nH&Y1*rX_UOiX|=ASEh4IVvY5 zDi={ks0JG-Y$Y7CpwZ|YCmWsNjRUwSP;_-F5uoVGr}%-$;PjCQHEOJ~7L|G*i&Clm z0r4EFb3T>`FLjej{bnMyKVBv?^(!f<>s0FXiPZjZ+6U3w!7?BT?lmg)vPA0D-e}`Z zhK`L0@+S|Ll`8$+iS+((9K!UsOL~#F|2OA@UnE%jm!A(VOl11<^TFl>Yya}|!L&rC zFFzj~Nig>R`}0BB-n_Eo&j)#-jJdBx#%FTQ;e;T$!rNp%fO`-q_7n2~uS-dq4?^4X z-~ij74?^{Mp``gBv@S1{G#`Xk=Y^8ygV2gR$QIqr2l=6l$~~AABG(8^?QNbstLPc< zYKv~(3xZ(m%?JO# zoezYrP9w`N+v(F4OtlorpA8=A;BGaa4NLOR$x_Q&{Ny+mriMfvd3;*1G^vCdqVW57p(bQJ(R&E={}4@ zh(~+*zy`d#P^hM6o@d(jL23%f+*Aw)NBG|i?MF?qmwQiYwgtTzac3#rv+dLtoyE7% zP8*JqD*(+p4)h{5(0MWk&U`L{O3A3)38`a)2*LW83R-Q#H zrNnnWBt9JY;ep36mIrI)9B2(!B&zT~9{_ZrwcSTPd928#$BLYFtjOz*6*QjL^P>)Zj;NAiE4-H9Ca%R$7DVpickCGBBMO_i7IK|@ z-^TB_pr{bCEz?7&lkZRQyN|VrHQ9+OmUXHE5}jn3*QtseTm$JwO-B@)6ke+jK}X1$ zH|l=&kb36AZ%s)D;R9LT)WqA?(Ps*l50m zx40%Gb#lhGLoddrqdJA_nk2~GXxjSB-qw6&Pf|mdzV3!3Hc%k^$4@H3(mcGy*H3V> zzO1QXS33Qp0cF7~Z*R1Sl8Az4HAvH~e63Uta+M1#VH?RS(y|$kJ0-+9DGXYA`KNxl zHLRSF&d$a#T15LIF_C~h32ex))J*$KTVK@Cw|H1bO%eKYi+lF8ik?gJXJ%{m{em@Y zo$pRNq>^6MVb4nICiU#>%A05&mt3elKE0ciGqWqNU`mv^O_g~P%Iwii%F=9YA+=YY zz6pHQnlk|Pn|I>obr)JeLM`BgT}+H?HLGlkdl8q5FFhag{IL+_VhI=K;Pw^j@RZe8 z{Cmahua@Q#*%~1IqMuMY1_Zi_c2T0J&4~ZtMevnz6Jcf8)DddKK4$*RQf(m>+qk`b zOlF$VbdxM^!&{sTNF#oGID$mYkWJE#AFhWr{&JV0?U)B|*n6GB;I^1??6Q4gs{s9DEya;RKU?6LoPS#dT);363 zTU00sAZ-*50cQXdkEF<5e|N`kop8On(RBUHmGqW)Go#p$uDRA6J=X(A&vp0Fb4^85 zUgZv4J_;-*SDJuyL`v?7b&$k7NY7#v`VNpztmCm_w{bna?=bgZlrXd5gW`Y3bR(72 z36rZ6W`^%?^1I9A>X07G(=8ad@fY|VM1p%mP|L(Ra5Asz-!jUpItNG86SXfu6x$RV z0!nxKuwmgQ9(Q-kp)BbYGZkr_?=p$cV;L>{a{OnUSl5DE1)Qmv=X`x0d@0ENZR+^G zB?rsRiapjOIFf_S|1??_>XF=u*x^z^L4ftD1Wu#BEHOXW<1vtEP_* zc=0o4XConJs9{^p1LkM(U(39pBm^X@XUyyH0AaRpCqhM!-Zrf-Oh8;b%9+8$juCU%<>#4oXpSQW}*$AxGi8AuK0^`hQ02H z2Z)M29b>ZbB7PA|;GrHTx=^fKf9>$>I>3ZU>mhvGU!tWw3)BR(C{43f^~hh8?NC+a z`wuYRo&*c}v2mmfOobpeteywDh~8oQjjQ|4y4UJ$MU6ptPutPaHlwy2p)L4bgR=QM zh~McT8t!dfiyt{DpZr;)b8*(&HMWETS=8{D)3Ts=h6(LZh(c6BBL?#YdvObAxsq@9 z4ba3I_B`{jV+D2>(0v=3Z@aA5`PdhwcH~m#oRTu;}!RJY{Eq zbtOTNnNqLJgz-O*=}Qn$wHe-SO~(CDsN0%67#mbzQ!RV}`<@rXJW;mU9-h?|wCzaa z+ywYs=L**3;mrCFKKFpxH*7~I5B*AjDTG{3z{*;ClWo90fh1s z-8H6dZhsoDtnvorOf<*GF7S;$&UDU90C!nRO5h$_BwwOOMqY!4&kLeQy5jmKz#=Ed zlK2Vwzm9|zj;^@@aG6_PWaAnR z^cj_gr#AM0RXqsn9-L9=nb)k1$LnCcJ_q^(e{TgPl=A8Ut9pne!W%YU3bSSpMX~4t zn%HHbnP}(r2xc&-#77Lxfop&eZXrL5!HB}@I6z&2*P1~4Um43l)isSQF0|VYwXt8j zE9{9!-NJ5XVYs8Qs3QiG7#&26q9b#}SPU0PoogFEI9=^w6QIQ~z(`p8-E=p{Un_Q$ z(6B`%$cr}H=x&yQoA(AF;~ZW+rEHHeo&Gfj+v6@5mU^J$+3k6JPlBFleMPI|H-@{L z|EX5TI~E+x>KLs75F#2T1I2zoD**?-W@JJ;2)t(6)#8MJU9ulKe%SeT$y0c}n};Px z9^+N78|ROuQ~j|rFnla7=5DI_nj;(Jq0Gn!9l$CELm+^QvYUkXqEuD@O_HkqTP;C33qEQQbFAkOM! zz!FT&&siM-hc?XaIuMSFh@ou&CfA%i)S3*#ZrmTu*CWU`__A0dHXhrq5@x-aL5&h^4kUbWM6)o+PXVgXx zDx;1jq~I?3(e~;|Sc&73^Db9ojye2o>QCb}R-~q||Y1nb)KSlo4Nva;8fU@a7{073PEnsinvPULwpj2MXs9LZtavHCAp^tQZ8+*u*F$=ZR+pv0>=|WPt_UF|ViC;}q1R}^!(GG1w|$R=)tTwIs+!J} zd<9(<(dpUujZ}BJ=JK1OKdUzoIDn17GmAz}C=^W?pz6)G3IxNTAvc( zd?f>{qFfVB_=^UaC4;P@!Dh)|Zz1~bKoaptbFY$MaZfmo%Jsscu6OuEENi(gTn@!K zFTuX{6zMwK{IhuL!pK`o<9O+-c?wb zxjI*iU5>Za8CvuUCgWFs5nTmoL`nQaB@PH!Ra50IDs)qZJr{>nYCr)vBvA{><|;rA zi2Um%h#3uLFL5`b)r{wcCtO69Ew#!sl#fPj!E30?IMkDp#M036<`6w>K@6g@buk6S zs>re1^aN4BvY==Gs<%AYSnutQ_q-6eQZfSot`Q0j8ik2WH7i+Qe zAj8Y#qt%FeElh-BDHr5mfj%dG!yhqz>3@xtqGN62doFYw-I@--2ue%M^YA(X7XK#b~hyuAw2bEX{V2tDTM=jbD zsX$xY@2FUtKLI!0cAygIKg|+|llA5#AZMdF4s=z=6Koah%>Jm}AMR0t#Qw=EE!7su zQnisvwu&e%l+d~4KVlpwGJzbnsX^;8^K#P`ph+< z&3aKwZG>#WX$%L-*TKQZ@@H9VUd39ic#9=@YRZ-a1<`*Jg_s^~mg6eH%QK-$*$N=E zVzLhJR@{!)QRg|Kg`iS%C$bR(!0RxCY9WjB1Ubi?95>7mb_!9+*ezt|h+QC}l$~h& z@H2e^VroG`Ezh+}GMh^>Q9ws?NtWB)IX2ovWC%$OuptgHGl)Y*C}{z7U~B+aJIR>= z-jYne9>3T~Tqld5SAs(l$_czn0*9+X+0fd7kC4PuIL2p?KpH+i3ra3elIvYlv4qfs z7Q$Mm>ojFA*)bJE@*!f&{T%j^!pEtn1%p3D<+%6R^Z$lZH$ zXi1tnmQ)i3995M|0$Nn|V{lN$d}ubR&|=wMTYO%0HCh2)L`DRT=vsI+#B;#I%}~@T zBvV>crJ8D2w0Q&Mq5Dvt^9Vrl$A_G!5huc6;qa;l&c~5bL%6k?>F6Vc?xgWTX5)^R zvfqOi-0?D^%Xpbb05D!4Ct$oxmhm!P#tXzcjF;1nK3-@OiG!WkF{)T=*#w)Yv4%sE zNuZV96+>;{kdtAA8xm>8JkG>Y79+BIT%CZvv55%C03a8jmI@N8_@%} zSkuz5ql#N#mUGFj#!y2I5FBGRcJ8Yf44mm)-VlmHxa%Dmmx)2|R{?|d% z*rR#s} zintKiofN$a4zX!M-T9|!QLeM0zPe5oc0lOJn;30EdDOXa><-(w*v-mmZIYkwcYt2aUFPTi3$xdsp2F-EhMfZ@ECpDxR8ZrL z#8XkO;(M8$_yu@{Y|#bd-+i8p!g&j&Cewv5ZW%bc5T68r#Csc*>YWB~%fbuO+mQR#n#mdn| zv<>_z(QOJLIaAq6H7$@@UH*SNv?icd=f4Q9Co|mOp&sP??pI(cqimGkCvIr z(wavn<|<6i6k>cPJf3CU2eeQ~a@*ay79D>vHa4+~Q3ZT@@&@Ls$Q~{PeU~$E zHlw86s;m3yS)Dx2V1EJ^CY%_K!wwwG<^%D^{4RXwMGk%+oErKd*W(6NLgDWye;fL@ zBL~G_^HY$)o2%Bbdi(?WlO`lt;Hynw+n9u75A4+VC|JGofV5l*=0Kw$czR(h1L9d2 zqIit^C_H*xvkIkB$IlB`hix79I&v0Ty*3wT;WpGz7CaZ{OA^iQ$AK5%t!c4AC`wY; zg=yw9!&z`RE5DjWX*SQa;#jtP-dsF13t0yHiR{93FWvXLrW=`*u7{WIimvI(lhOsf zbSHI9H$5p`PcPkvY$mjvfC0ZNK-h{vx+H7Ru@Algh%3ayV@!4bHQJ_?*qvw$$S89WgW+ZZ047ZQvFoV^L>L&9~QVSUIXdlRe?l%n){ zlyehVntmeidBuZ5QZX@{*%YC~SHp9F8RHmrZpPGLJ;Tni9wK?L9S}TFjG`HKCGg*? zoB+wFM!}Tj+@gMoQ)hBm)cnku27XNYH{5rD8IeVxP9@7KJX%$Q06oiFKOrsP-*+bd z1#+O@P;AZGKz?Bxi?O|lbrJ#@2vjdeS+?;aE^jfbt0b&ppTVrIk?<3AU{cMoV;eV0 z`ly6|BH>yI;|LhiES2z!D;aK)@OUVK&1!r=-b(q?9`2r5Mcp<;wrtQW2Qe7`4{93{* zB>aSgS4;Rs39pgx`x0)GuyzXb#w9#Z!h0lqiG=q`_-Y9sknng3)64=uN;m)(1UMzU zPrlESa8SN4mN4gJpi9D;5`IF$ocYl;0uSxb(7JVmXMjpm&oEt^0&iG)o7K4zzVStd z2dOmu8J;NNSF;%&Ea6WiJVe4;KYkx7;Y%b;H4)&KFjrQZYj!*oDE0dn* z-Re8>4$p=Gh_`YDylvcpaC7wzH(hh}Za){chiD?HN|B4;5o{I*U+UX^er%N=8sUdV`k?|pRP2Y! z{m?`|G{p~H?}u*kL(~1xkKB;DslK^-5AcK;sH3@hFG5tZG>c=bPbG8!-}XxAFhZY5 zh*#RvPN%uL#xHdtLJ-cNa?VjZ!^>9Ujr!BmAwD%%uS9PAN1kKGEj(2h`;;Op^mL2p3e81$^17M@)M>&x#czkf;+Cq#qREHjWCJYV{PK}hRHc- zEntbH>W^MM)L||l(p_T?q^~9Bz1Ka;eVkRrG$snip)}0Y6`5O|Kb1TcD)sGYcp-MEP);QP$i#9MUS+ISe3JgC1;G<|2t7W`#5L^9R(bcP( z!VkAU;a;){^^JRpdNkthbL^!0VUQCs&&{{PYTHQ-Sd*ZcWcV8zrMG-|Z8Mny%Xtyo$~12&{= z5|98Y3tGi$s}!wPYj=fO0)e{=++J>oLX;|6th7c&r3#o5(i>7~>?dvL~XGVzkBRCa9Idsv?yz@)Yge{U`my_4ushF%% zO3H@f{=1a;*>3z~eTlM9@-JG2JZ{qLz&vr7BE-f0ym`) zsJSW36&Q|``K_ghmgnH}`r8YbXZ~hJk(yyXouxQK{SQl<@S8QzR1d-@%nypc8a%<% z8oa>^8%hJ$iTOwt^J_Wv*fpGXz&KGk9824hN-UJb!735np5Usb4?(ojzJ^+cH>q>Y z2`(&>{G8VaEQp*9HG$Vt*p!o+UBd~D8Kx*H9YTX;e-!eD!zuB-_1ScJnEtI=n;id{ z@AdUe$GY@Oz|Vx2DPQPMfcM;9#CvWK{Wy;h`BlY0&MT+U8-(7q`$rGN?X><*adjubIA^i85<#Puu0_M+v11g!!J06lxVlr{_lBqH`v)Eb0X6t>paKbsDK(N0I z@2n3T5hyTQ3as|a+?h$y%Q5GCD%;Uw_*iue1yia8WiXtwP;U4ums#y7$@Mpesk#4{ zS*HmnOLebyJh*)T?&&^ytJR)y|2(X4h)devd(40G-Zsw;W#Mt&X9+)jJX!C9T?*tv z!WEb~Xrl0f4m|%4hlqSSv*ooS0b{q!W7mp=m`}|ReRB%ln-JGRtBx^fN9u#`HB#ud zOOVoAt`L(+??nA8zi|E3LeuMKOz-tynNojhuFU$`a!|?DnM7TrayM|xfw(>pbvt!l zv>6^^IHLgL+hngwu@*3;xB7eOk4*X>{=26jjt$!TVYChN3?yZCKIf)VKVfZl<-k1H(q(|oWmxV`tkmgJo$(PzSWDBs?8KBZP zxI=61D>N3~fyh=LO$->m2UFXZ%y#^&x1cMJM;1OnZ)3tf4}YiN?-u;=b=JX1<1fG8 z!QTY@t=E5yXI}oX9RHrze=Ntm%)|8$by9b}M3v9zD(h0~WEr=d8}94Ztur;9ajcVZ ztdqaQ8^W1urn@k6qT0Oqd-2>~?j zv=b@0)qDbZ`FZ*O{3Y|BdHR=w|JyH_|G_i99Q+f8e!2YCm(0IEBY%4TJvAt^f79iy zJN4_^v&{~}+;`NhN*qW!7QMy;Np&+2;Bx5?_^ZcX7=Lr|Hw%9k_VVY(^Vc!AMnzw6 zw^%MXKOS#<94V^*F~>l|X#5i*VxKiW%%5FwRISd>#olf|)*9QH{BGd)wni>%V$U@` z#Ghw+=sTJ1OaK0|@-#EQTE7-SPQta${HULKAp4fH@cgmJ?OF6zkdQheG7k4@&AYzx zANYvCib9QAm9>^$#vn*7(e0!w6&YT+?aGJtWJYL6CKI4xyVt8L^y3l{ zZ;7wV37iu*CbjRyt;k&`Zy}Be6j%Ugs0W7uc8pcE%X*$?ndl@o_gZOIzC8+BuUs_9wWaCI&_&4K1xGG8(gO4ISYjm+LRSac}+6&m$FICQL&XJOXzHmvY z4%P*;DHp5R;tITHeLMRjkZrrS2 z@gQx=_q7?{mu7sA%lIzN_&zh^`-JrGTWTOoRR3%lki~PPw@lXkhHs$tm$QMR!uOVw z=Fgps-GQvfzk!Eb%kv&T3+99)%?=ODUMDm;lg~6;@>9;QZW)kGc(a~_i7m2e=rLJ; zIUS&^W~YW%9eL{ zryLu58}camqg+9sc2g^R_^>sUo+zPGMV0esJ{ z;JYDBbBAa0FS%}Qxj+$ajr*u93%ev%9jBheZK_diIvc)zoAMtfX zaQcSN5%7)qt&$6_c|CJ+kJ*_fFV5eOTxM%7-fHhHe z0#EPxyXyGiTWwdb9^Q2DvxkRE)wjzO?QgIb(0+{rz4iiS!rl&Zr^M{A7bx@NPJ02Z zi*%M=Fhl~K=t>Dh>;=kxxyxQa1EbimXk*k@YwEj`F%lHRsQ=-fYFDjp?#Q(R*?f6( z=~KWk?rSltTl&Et#Qeh-ZH`}+k>Huv`r9HmOrKd2Oi)z|B3UrW=zUP$|*TuGLj zo%VGKFk)Kqmf)|Ww}Un3|Ehp1NTc?o0a;lU&V{-*Dgn-glU3C`jo@53TYWU}JC`#Oy9_OeyyJ`)y7FR9D{Sowgs#+171je%bixs>a zbhhnZX>Oiu`9ms-*FmJs7k1SuT>1q(&E{OQX?F3;IP=5ne?zzc9w&mx3xNvzR|WIq zibv)60K_GH#??}wh6B0PvlyL|<*p7^=m)s?`c~D`i}P}TS{x_a{L4WLt7@fHRaa*D zS6R;stA&(1YMnhhQOjdOyU(emu178Ym8d0!0wMa7!y7sU^6B(+{5<>@_XRmY$Pizk zvTscwJoAen9LfX>Y@@$UWh@`Mry@E5p2P``{2mali2jw%#o)8jg3;^;oXjw4ulXWP zY09h<_xG||I=7|ZKMkGuxn$|ltpxO=bU+V$5u|zrB<{~iitha)6zvrd-?xA$i}r)} zG1?>>+nQJ1DX9E0OhNF{rj477i<5(%A(6`uT&32{je6%#uFSD;=0a@*R;5+f=<;=A z^i)yEGk^@3-(<5xr7> zy}3{2enEB=L-=+F@jQ;iG7ndaBHaY2E0E-(-$MGs6cgwd`gc=i~ zmolF8TSCuvmxeAM9a=-}XGwyMXsr-d8no|o$euPX6)Ry}Hb$REBY}r7ZAJ&*hRS-f z(gS-xr=}iE%WCRbP466gRf=OT=w3JgRT3DJNf!eeTVH zt8`4=4pxxJJ^4yiu|583Vz!r^Q@zbuAcO@1K z&`TOjlmHMJxA@=kLJhK$g^efY?@=WS?D_jt2sTO{BNA&PSGK0bPDf!S`4jI`J~~Ev zS!1j)P@W0$Ow1g8Dm)=bR2OAMFA+T?Z+JIhI_CV>(9NLRzdpMP7KcQs@iR#Qu2Ik< zeN#aCDS8kf6ZenI-z9!csprLcJGRwTXO1+C@M{QjPyV}jN*6)9v;G(i4K!ibqwO<6g_5YrgrRfm8M@-F9T6^dl(!XCwj-YK8nq zU?cI%v%f_^9rX}aGx6E)wd7cV`7Y0$!`w64f%Cf&`Ww2{So#^dbo7Pz4+}o5K8&S* zh71@@4bTV`V0Xf(oeWpL(Pv1+(n17F84TO_->zrd>1SEZFKMh(-GTn|+N%9DC5YiQ zvKTMb+3T6#+Sr6{Y4veQnq{@B(-mgxU{%Dn&)Eg>=DCeV7rUNWX>*x8XSb2>>)34! z0{Q;>3350ju)R#>{*CQ0=Udao2?mo;ylw|M*;nUGL-X5^=1laK77L2T?{I^Zz8~jB zc8cI?w&t5#@@-Q97Sy2wSvBV~0ZrraMX5-X6A3AqKv|(nB-n0;wX&F?V*2WEl}}v{ z48r};j3^KDCilP5P13)ckd)HNtZg)PZA@1dJ*rxdv` zvS>`-D4dCH2FiC(^W%Bw8R^80l>q2mZ8a0GB zM}o$>m*pt6wefmnG@HG}>)BY#;WZ@e>TccD{{R-YjNx(=cR6Q)6;5=tRH?Wv6Zs0@ zsgb`)@F5?bo56=J^5DiyBE4-1&2OQw6K`n8T>VPg?%+3YIl}0_iVWcUn8woIV16CF zTq1sn^9)AqjgUyA@05taaQGknJc7ZM_C^`*@xbkNy^xqDQ5lBPC`{~_$yZf_o7AY3 z?1@w51;9_Aq>}SZ4rn1QGq((m%>$Q+&H=6v1%ir5X`}$6fGltc%D#1v7ys`zE)Vlp zjXdP`b+9vCp<&mPR3PLEHE=B7&;0=#j1*B(Lb;Yv&#U(kIj>BE!)HHTEtx=x4HP0 zmb#5pK)(i{ikBF#fL<6=x4{wL1#!eU}$R- zr{ydriMD9DyQPQRrDUj=JR)};n_TA7JO2np>)pnMl*U)I0b^XR!SO0ZVC7DZOPI|4#MZL$MJ40Ef1M4Vh`N)52ipCP!hpE19-hC6^SMlN6y-81D|!Ll|!jWi|W_trBX zxo9GgHa80PM(92*4gzcO~i)nNQIODnR#u6 zO8`o@bdwkKhzku&X|k4xE+n8Z`fgj;8IV7rIGH z$U$GS8467Yr`Bak)SwlMHe(!*1o7;=I>fVIDEz~W5_yy8p$pv}I$Wb{A(b;NUujv2 zSl}Nhv8+RekDa#w0R;JA+|LwQf?bvFdRq%6ST>8w29GsGU9Z~MFkG>W|-3ZlVKT$oIH~PoehA=|sQ=z$m!SE}* zkUFt&Y2lYB2EFRWuLKgb;{`dZAV+Yg&kD9XWdcoKiipH=Bu|_LYKBIPi2P@(mr=q&HhaI;Jnt-FXBid!`K39KI z2tAo35_Hwf^}+az9u@MiWMVbgo=%h%Aj*m!LH0hdeUFCVksy|4YrnhA> zTOq3eYyA*XK(2vcahynkxOc8bWULeyHO-Ow?^EUkj`A* ztd=G@%SnMPGLNz4(FKThnMf8Hy-7kTls3pQ=Untox&)L~F=t{>?_ymjrcFGnF{oGf zq|UVvVwyVcLRG1?QfqSdg9t^fJKsjF=~Id=jbg2u2lXVd+L;RL7Ln+65>U3K*e9tZ zeU)E*lk{Cok|`_3CPmUYLej&p7$r|;Tkh+vEzH@oEltvvuD;q58bZWBZ$c9!GP`jw zkxi^J-t%!PHN*Vs+ZeL!dY78|T1h=nlLioOk#qf* zj-KKUrYUO_^aI!S`P`ema0hetr05c%=r*MF${nFs_}Eiz_ka>*nMdmHr<&rO9ev&2fC}j_%c5e(7~C-mN~mt!DM$oYkOkU!23V9-Om!M=zYioIN>bxp2--r1j1@D`IZb z52IWP5}BNH5|PN{92W`U9M+n`Im^L0%lqJ*K}4fZ&WV16)b%6LdDIvG&M(m`6(8BM zcS3H`Y{irGC%Psbcl9E+ozNMWnjG^**NUoaYaixuEmy<7QDzwKO9fd=-_q5b>GrDF z;~H7mazboz%5ox|JW3WY4_H!lsv@8x=3mzw2LXYl&?_^Hp)kp9e!kxfV@fk3w$3o7 z;#VTQIglgEXw73HCbJoa|9Pah+4TgE*$4Lj9;Q<~8{XJMs}l7mdRz2x^uLy=a=}!w zv?z1rJ`Jn$VQ4k&r!KABk-J97rAO`@^eaZL8e;s=I*V_OjNCOcav9&t$o*Rcn5ECK z86#JzLP@X~xnfjeAK%8(efRP2X1I7uAFot>yi)r3ODZK&D02jLZ|`LUF(-$yjG!H? z3&pfjvJxX`WseaQ+WsNCXA~%u6klTcm0B|=@*38fPBPnZYfV>5R*LW-61@r!HH}VX z?Fl{ae0{n+$6M3e#dakeWj1kVHh#O>kRe&%i)Cm={$6y$fXcw&!O2}g^P{1(oAPh|AIpygxhpgRT9Stg(ZcAj@n7nD41!}C ziq^&kv=7v>!kq{Rr5X5~7XOjdbeIvR929R^^)m^H2Gdc5q*Ts=`3YktR06l>G{Yu) z?yMAeIWD}b1z!Gt1Mg8Z+?E#MP=(o4n92)*nLP%y^s(5e1;eBeNMIOhA~I?x(g-j7 z2TxY$eaP@^e5t+3=v~N_vY#z{4SrkfM;5iWLhhpnyX{ONr&q%ZHgx1o4MVfG`2Lo) z*tf&Jlg=i%6+Zd2#~{&^;EoVJTU_Bf9OL-loTv=rD9Ua-N+ir zOuA~$1Bt3>DhiEe2H8-w>!k@(+V|Nx_C+35f0QUW<^Y$NO1)g1L-kU%ALnc4@1hqL z&dgiW_e4mO%W%;cynd<=2EW=Wt`R~g3E9*4sH?-aK8pgCv){3U1vr!9%<0$I8Xkhm zm^FKgGqzuY6(&nDmrODp{J>)ffg@^04l+Wx85PolIa=v~m(@zkf86{8$Aj{5WOw5w z__8-Lz0~~JV};uhLMlD@|BCF%eZPem%6i`~@C$d(Z$wH>uOLI~07AEAE4`J>k%i~g z2=QZ&`3S4>u;wIo`~HhEcOJeB2!T3uZN*Z%5#CCfypeR{t5r*Zk^RKrR;ojcvz0Nc zfAhOJmQ%n8Pn}&^YB|FgRxy(=vGWF6YFF}hD*cw)i7maH4p}u4BfdR2VC6bzf%L}G zcY&^U&Kk$f_4LxSocHQZowf z+=-CoY?uEp=l>hIZDE%mOz?X#dwM-%Tl)hU3|i*XH3&Rs(m{K@0x=m$=0_f@{z^iT zRB)nX zXRhfx^EE2-#AN1+`_4R4W&S7q4^#tBPvYDkS_d107i*>MM-ub(B(T*#x;oj+&mK)Q z6Gfz>-6A`1e9d0Z&P9=-$s$cCVy_qeQuM(9A`hxD2s;0c1syUOsPsp4iFU=ZWW>J= z7Syg-e7wzAdK4tDwv88XzdzUz?zYxbw>N5Y}5-+TxPMc~e9HCo>u!xq<@jW7@7lPZFpqDB5v&dVwoxF+|_CXOP zm+i0=Nu`L}`d&5_Z`?vUutbs$w(4|(%MG)_WP1Z<@kYUX=`6POTI~F5kA_>o%Er>G z$l+>F@dWP5t3Ab$bP&LKlO|{+((E%B;V;OXy#~RZRkf8yOmw4jYPLrn`QBoONW4Z*uywu_2gaJhr9W8JjKhk4%EN)*`QDz2N2iR@?^& zAr&enQBsrh-ADkm9jU@sU_V8uDbr-WJwQeqD7PhLf`m{GPh~;0Sk0$7_VF09cEKRy zvDej z3Wu_XKB_c%C<&3H_8oFLklLzIyOLY&eQ@CX4szfekRycyXOq5taG)z@q(~|Usx2A# z6;|y~BmhgAgKOw;c||kC57ZN6N3ZKq#!6DSZfWsGVmoh9bnhN;oN}4@2el*RGV=yv z?P?roGHSOm2=s6!M5Hz?6AX({F1!mEk0y8 zSLsR>n+*b^B}K1d1_isP=;b1C1n6Lxzd!?>Wux|-O}`izb19NPY{Gu9%{V2ST*-tS z^qleSkcUjP|Go)nqy6_=xot0UIJg+h!LL5L_};hK#VsUvawcga8T#mASI9__)Gl^~ z4AAxhZM9|8hfrY!Dc!rQxO(xt+UQq-r*=%f4b!7ICL7^@bK_j~Z5M;oCn*y=GO(4G z`;ND=vv_u?K9Xoi?5D09E(n$4b$st8nGIxv;H`V8w9yfVzshhXWc_b=U^@yJ24>2N)Afw}I; zk-Gsj9T+N?d{Ib;xb~{Li0q`is%CSiUQO!(Kr?E8%7{KVY65)It@Xyg zqohc0#8JLgBLO1v`bKgVb0)-ya#KV(yJcN}n@iq)6`#jQsU!HjFv?7&5FN*#IbC z)pZy$5$>C-p1D$b<^@Ldf%xNZ67fJf;x`=zaaWv6kvP0$;}ZSIf$c7iqLlbP?Qwuy#_$(=v?1$81!9H#mqe= zFW3VE?E0sOK6CUypT%>-tRM~j>Kf4fCb|YFp>!F8Y8IZ%py(~d!KZ^>y!{?J3k!M2 ztk5&CK9pm1aS~pGoy*#j7qo@4jC-4~zz^q3Pv$bEp5fu$oA5sn!Et0N7X%D}@N{#2gg968r7t z#X%?!gJe}om{djTq1Krj`GuW?`=I8lkDR~+@R~OAdIs9I7zv=*ptiBZI8DJJB0|X# zNXn>q6)GtIAHf>=KZJF%OOWvGAPDq}#ntp`v7jcVj~wM`Qg3 z<%;6g`nA%v{};MX$2^P2q`^d%99vQhM0V-5FC~wwupX{IeF7J^UI6Y)VkwN-H(ciV zB5+@T&W9(hg++f(xDdIA2c6Kb4})�f36y_zy(4vCD7mO^`kGC#>S5w;&Q}H)f=b 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

DKtl{vewG8T{2eW%LXDq$65c}4M1#Sq}a$;Vw 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�`m54mMvAeW6GJF@soa73{G_)A&) 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 z

(*&rF=_QZDE-HpmJz9UP~# zmRk#m&>+Af)T)vbi(TdnY7nHivJQ7DtScUIhAQ|%*OdmzjBmB@_V+)aS|!hBB?JCy z7i6qzXTRlliSF*if0uQ%%$Hal${gq^N(@3(lyb)fu8#8&X04v!i8jPA##A|Q_0>u9 z^}<-~ZOxih!-==u_+Ma)e;Tm0mEK@%v*lpRiLI$N2$E+x3m*Fq+9e3D7s5?-hHSbi zpNCU2L^TaY`Dari`SpnPW2O16!r`^$4g$+6aqRV0O*u5mT2pFW)oBf*rB!Iv)aq)z zH4HwEf^4ChaFoEY0F;N{MQ=7tHP5SnC-VCavFde3jQ72o#>;zucZ4S1> zMEa$Y&T^#idb!S`^#Bgi*9#YCgkN6+)n^xZN>E@1$z|WxG|?$;6MC02P_vJQH(kLq z*|?F8fu`uQ(db?AI&?epl)An;e-%ATWA7g*+8BGecc{xdT@^-(~*Wp^X-dI;ACE~7E?Va;%=Y~9APEq1}-5D!{Ygim~0AC1TT-T(3;I5b1 zeJA3FH>Dzdn-k)9-xA8CW{2;*+@`nt*`)^EoZfO-de=%m!)uxHR_KMJLVqq-<8-d# z(+_Xef9HK2m4dn~q=r{0ml55vsR@EE0oJm|no!M9ApS?$%g}8{k!In#d%3?7`kSuL z4j;B|y`tOf4DBkRa28g7c4^M*kT?U*^G}1Nd(&1(bfQN&4)=UAvy6`*yN+_9d*&My z?7aE9L1wsX!Jf6c7>^qUZzG8DxB-Lz?oSQG`Rye*uQ9>!pmENUyr~X+|Db%KNDswe zPllnfC&SR#lVK?KlvRV!)vJR}QPwb&j>W_Tjl9Hh+= ztF9PGyU9h&vOUx#e+}jNT#d6x?kQ(YnG~kk-8fH!w)24M+9jtRes-7shdcR?ZGjEF z=<=gbsmd`+?&F#N9SwikiW$kw(XW95>-Q1HSVgQlM>3PKb9pYl!IowZtP+O_8wK?6 zpi6+lv3{7i&rQZch%0omdk8P@MG1mw5Z>Czlgmn=;DwpZj*Tl2T_}w83>1`7zO2T3 zp*v6X4OYvBuv2{$vetE~VBE#y1GSU=i)7{oK`Cm}d>>A)OZMXpDS*Jv z4g1gPwICRVv>}F;VtT=mu%1%6OO~9dy82#VbuPI}a$Iux1FUKzYP+*RbH{QDMg(I# zCg{KPUA2w+?!uQ?Y_yM+vnbefUm51Rs*7tYw3?zVkFAzFd$P)7LiQ;yXFlZ>u97EO z$?K$OvGBrqSpz_uEdQ>o-E7R{oO?eGzACp@_pW5-@EV~k@Z6r1YkXagW-dnq&bEoE z`~g{75ePICu~+n++s10{kbuB?pMOE8`bu!9nbBVisNkw9ze^i)l~*O|?8WbzBs`Zs zVKd|`-i1LfJ3D$q$S7a0;2^92Q&T<3rJp1%n&`2*9kXEt8sMuqx!rji^GhlI#a) zLzKxBTh^9?l}o3RDdpRKe~BXG?M6e*-fs?oI;Z1@(URzL8p@2KuTs;9zlRD zm_+>VsCjIWafMkc+Z54dc;HycYfmSMYyU568AT%oSZhEC>oF5Q*I@u7Zi{&G^&nVH(GW+olo6-h@| zS0f#n101t-&skGK-I8_=6AS&9!c4~`+R%Ri&cet$DOBH(x};JpbtY{oI+uby zIUc{v_H)PoL0JycBvGx1^#g`=|Et5=LAvMv0H>(_W)+!Vtp=VBmmZ4E{t_B~+|f|O z51&R6{ofnhY&Cf_eexjsS7y(n6-x4#wgI=Du_g(*50wV}faahgX#plG%kRj+Ml+x(p(a)x)#;88uG%##xdHQ$Jsm4Aaa7(Gqw( z$+$WOi!qG?^q6iGNC1%b@xoxe3J4Sb&?pU-juP0QaSQ^$z*}Ab?V5jTL(Tj*+FYML zHfZd+eQHA@eMDfw2&MveP(XiUc5BnW12-97NA`a+>j$Vat7xllR@S-sL#cEylVi~7 z!y-h{0Z2OPv??zs4-@|yQ0t1pwRY7qvd*lTKi1V6VCz+DOiD_CRlGW2$xz4HyiIgP z*Fu+IxAyPQZ2qyq=ec~Rq>6nK1guq?UR|>$LtVh+zi3C7BWX_lQDfp||3e>xTRK0B z(1O0g$$%5A6FDk5cQtOR$~+MF4_nSf^W8heooq50p0$^bx_pHa+wD+U-STqK`P!AZ zYd^Ri^6O;wcl-Fl1|aG0&#yuvDR4Wm(q1*|Np}+LA^fNtGxn z#NKfUSeCBWlQ(zcH4)#LZg4u9l^$Vst9Acb_=zrJ8oXW)$5O^2k7&KVgUNvPx&mC{ z()IeMZN085ErzVug=NsC|8-p^@@5W$et}gz=n^r4^&&>;dR>JiGjqq#FAHmSR7bXE zzdKs9e=Fn`^z?R4zR0;-crhSC&YwJk7hzGbHli4J8EoTjqROPIpT^@QrCJ()5%0urv<)Qa=(I~H5Y0NvBX=Z|q zhkhY&&TxU33>PRrKSQ!#GhE<;;Q~Jj>EnuIM^S;iSCY){N*Dp^`Cq{8ZQ}Y-Es(ZL zqw0wYEDwiThfi{TNs`LplSqJxp(KV+vbZG4sNs{WDoHYW_$2p~BpDO4b`Q}rN*-6) zgx0`1L$F?*p>BRT6N*m376>s6rLw;!>CkLCPFKh_fPPtZ?V%a$0O8A0HT&IRGv0at za8btLX`Nj;Y{rk3WE{Q)vI~aIs3V_;?pC?>lAFhb>#TPihs|@@z*N;btA`L zsrY}eMdn9o_|e9wb7Rzq>B{3h)#cAe}ZOcjtne(#_@ z^f_oW8x-;(i3iSiZvJ1SDIsM-QnpR+wwMeuKP*iDA6BTlf%C{`c|F+a|4-bk5_%6u z%gwW1nuDhRH;q5?SH&FK=r-+6AtpaX*RVKQ;h0xb$R6dBRK=MO;pwE@WcI827$W~% zuTWP?^Q$T4SS6mBKrGKbqyi6?1gn&INWb%Giu}J2A_umIDZ-Q4Mk1UtJYUCaaCI$~ zcv*jsofog?#N%K+9ek`Te=hOvoKn7$T%mVQMBQH>fVy`*&CptRznTc|zDL5?QBO8VF1fm{M`;F-9|L=v74fu5YCfwofi6LvcT> zxWdRU);vDAHJsp^x7!GZ#F^ZmuOy#4U6X&iPD|j@V})r&&G||G!@CQW{_sP38FqOaADVY*;u*>zg-YYHA6pbm3G^F#3c@M6wN559Sw{DXgpUI_{ zF?C9{v{z|5_lY}22X14_sU6=pyQSvOevpdmvvk z7P671Zde*`B+(!vsDhSmSW@07sOaaMpNGh1$*D0bBAX?DotY~QFjWfc)peJenNrZD zc91m_85UW?s*%mq>6J~GlHR8g41!K&!3ODF&X_4!AASFCO`5Q0+I(aiDj(>@glGLJ;D{L7%Gi(z??Zr;CC_}B@1CJT z#4iHdw~$?mblrj3k4VqmJOsK^j$$QpG0>eveSqHH>_lqmHl^uK4$0?;56B5|KATvY zwJ+qhD}?f63kKK5w5tNS=NDMgSZ$J-C4Zq9N%KYbg zrN5`XeU}c&Q$ROud2}5EJJ_n}K!o2qBxeEPsg_f2h?T_v6zKYN``~&O=$a_j(>5mZ zU&)iUu=DWH*ner6lD%1>Hk`Z#+-~yxg0Z3Z;fTjS`y6v?aUW?}=btqLERJHgDK=6F zUqB3stWqxO_K9o~Ih- zl_vc8S0~)Oz_N_NIMoEDWad-MtXhnHMV+3_?D<-VU7>~8`Gu=eCTSt|`XJQU^>Gbn zgIM?OmSL5c8>5%NCIJ7uC5h<`ew4yLZ@Ipb|8882VosVagCBk#>xw0qsw|0$7-;?% zCsKm3;pa#3sCCE=F$D~{4`PhJ!4;9dE&nmfaLv*2_<-j4-XBWa@#941R}p0Lr^}Gg zoL^}8>$Jejr%A$n;DtSkg(nr)(np;|TS3YG{HK4bPWRrZ(|u$gV#kT(4!z$-L9+dmr}HHV-#Vce49p0|^ItOeqpq;0#a95!m-U>f#3Hl7B9-&2*LS z@w<<-h@J7q-38|=Yjz#e`=G*93@j$0OdVv>C|huB=zaAKPD)+&_c^-k+u|QN4=8xX zG>eE_>RusB{+iJH)~W(hRt3hLF<9KQ!3s|lGO2qv?37!3VK`X&xZ^u)N3~byQfmw( z=J!#FUsq079I7abbTO{ju82;3xpPR@#O{Gm-w>hx%V&$I9|h{T>qK=%P9D1q0CwGg z1yhb+Nd1NTJiEFOQBV7(x1B2< z#2E5W+FeOvoOU671ZPQ7U$zd2;g9no0(JQLGjr%rM;z~3vzsqAaMdlqqOZ)lMO_s6 zO+}{VST`ZIh`Sq##KpvKpZK!tVv3_!*BN9_-Um1{S zz_5x&#;um{SF4K&p#}g4r0x4Gsp1|U^~Eu}9lMOC(yoJt8AoGOhPvC6DGTrwTv@F3oDc4xx^4qJ+Z?7)Dy}JCZOTy*~PzleU zArQ9S`ZqvS8i*_FHY{ib1EivkO)G@Wt3f5T1Y3c+7m~}h88Aq{ts!n+&B1qi|4%lo z-;0j6@{(g#W4%+}t*d-ju!i<~xi_Z-UBzRCMR}P=D zAp%=R~B@@I1i{V80G z8qA*J&mJ4hp61W44QAK-v&RLq8@U~o&dB+T;G9Hw_Jo;r8y9?%@x@t+O%+~lhFuu( z@4*D%%(`cj%jU3%)BRi<{p@zCo^Pd=PQRC4;-9ZEFB7E&m_)8BwK)GyG*|5S3yhx& zPdn}s1Z-u@$5rA0%JqK(1BVi!_ebE?J3qgVBl9z3K+7q zgF{~jYL8+9D-Eh4sLHE*cQQK_WWD<{ls6`seTO=OOE{fFe@AiX&*fS~Jl{3>w~)du zINX2y3Wl7HNGD94#ab0&fx!j`@LoWM#hf9GNJtEJzP zKQb;XY3>NVqaJ0_pFslV! zZPWnqNU~YqoR5pX?7=28?>)xgxlLI1me6jDQ%ZM~qO(@-+HKXYtC^D;90V#tv2(v% z@e-BY#C*ty_?$1J_$XO5Q)-pKk{pBTE0r7!B9ZCK=2l=;FmsyUE7k3>YP8vHSO#Xd z@rs47yI-eXezUMsu_5PlOiSc35JAb7r^`ONpB`Z18Rd;tVhIG%vszDyZ4w~Xt1Un= zMqx}A7Vsvr(_XDh9wgGOmI7v|$K2GEFGD@grbcS@!}Id*?V6B7a5AsF?_P9uZFR_)p|d=SmE?|ZpQG+8Amdl}U#RAj+N z=+5B`^dcM7g;F?LTmvGqEsuSLXcJl%+nHrjvh!LUG%nNmI?iW|6=uct(KjzqCFc=1 zwW%h#{5V;rXvvmFDG}4Cyg;MpF;#Q(N2l7`T`uNqsu?&zmk|JC1!vDsfkRqS-4PP8 zrZYZ}nRXBaXuGO8Y7-N13Y;SQYjxIV^BWHU#5&-ho@Hm6j1ryJAX=D&*0ap!zR)0A zP~qeUl650M=uyDS= zej;!KJg!T|2+ldV$+u%|{zfNngx*7uh|%)|B8HosNQk5o@%Gl+Ki#2q`5P+DpcMlj z99fTJAau9V%IGrWb+wMhMFk5d3Z}ru68#$!Y@}l4;GcydFjSlWj!>OKO znry)?-M6D_$>m+l%`Wi`ynQJi%+8D(o-o@>h=~=NZsBn zb^99uOSa5wW#%>A%q!nXzv@Wc8bgQ@)D#n(H*A8W5?ocSoxsnLK!rz891h8F8@T3w zz;s`NdivI&$?$F#-p?x2MwRSu_B&;ji`A#!xmndar^}5Jv;TZt9Ti_7f@-2G3`%HdXYDXrS3By?A}17-FJOr`gL2>@oYqsX zWx1~*ZBmRdU;;JK0QM_s2Ju7#2aabl(!M{;alJMBZm@UVF_!jZZjH2fihE3vMmkqN zO*L{Q`LpYtm3gjyhKrn~NPqTu{)|R{#_XWW#uFah_A{q$W)7|oI*mJoCkq86DA1O` zRV(ftBkGLy-Ar+Ni5T_w^QpD-zTMzJe#Sti5ouQXX0H{569l+(JpTjxUnqnER8X-H zqnb@eaUp6E_JRV+(F9&dYGfrdQ}^wl70XoTqO2R3&Oi=HcM|F36byGzokB0L|GwEy zIPZnKM%ThAdcWl5uGQez<TzDdOC8pF&j0n2uywq;OC7M4tXi#OQH0dfAZXGPK~Z51qdJ%>tPN+hp)pBM@= zY3ThRn$l`_%n>il9!885zN(!QT#NJaf?I*qQtOvX3vLSQGeWQRjc!hS695YGHhqo$ z9}T8h&Tg&6mwIvf?tL32wO37k&gP|MA7QTy{a^%b+wXw(-=_F%m1^F3Jkke)3BASHFs?OLea~FIyb_DwyH^* zCBB6iiGZcqqy3K$LMHAd6mNO(F6DK!vQrt6M>t!Ejj|P(JC)o}(`mXr)GD_EGt^$y3hYwXJ>wPF^>7vq?SU&Wfu+~O;y$kA>P1eqS^MHY z=`XADH;E2eE!qNGPKRR`g$duCU5i)0wm9bUC14r(uCB=+gZYdkrr+=D@7L5G-t+=8 zOz7?7e=@bv^}3fLvF01UiNzWv4XTC;CD~6SLhXKiftPW;8~VVOTwO1c#;h0fUm^O_ zo8I8u0ff_P5Fj=@g%EV~_~5*wky6Cn94ql#S2!WY$7x}S93wF(KT3j{o9+Lp5nuvG zKBv(3T7PejIndk}KsC2}lKJmLIB;0Ly?^JDHtf^$P;dMIZMw{05%u9$!sA}`F8*%wtv1sozFRKWQr|xFSoQ;o4VyVocbzevZ#Cg zfc9c#RnomW$B9f~ts2{w`Nmn}TWp+8g)!#%&*e&6WbG5VK*73KoXi&Z<-*Gr5_99^ zZgcPc=jmQ(D{M`lIe9N7+JzjxU3ShzP=!jAj1eo6F>)8vLsW?sk}l&hVjIA(YK$1f zB5V8DnNcMMXek8Njgk3OBLCQd0S$ws_Sv!G3_Gz<%gZh8ijrna-5Sib*e4Y$x3ugR zl*Hrn@M??SrT7oIc&>`gpZ0f1a!!rJn*Rm?Z=S@Z1xQt|ATDJqp94^ty6kMr{q;ib z4LgI+RGzfH zE$Z*Id1}C--WaZ$%X;H5i~7Oq%%5}B_|ye8$z_K<4dM%G@}qbLHK576nVX7GeoQD(E-(jzLy}sFAM;*&+t-Yr7 zdKj<4^a%s4i0WZ$bm6jmR+D}GNU?U(f5celtz)FTs~8d*yl2Ba!?8c{dyya_HT#T7 zoEURD`Gj`cOIL3tdFT=^yYBc+gOxGdy2H#NO&GRy zM}94%!R;EDqo~ItQGQh~LX{B_A>Ga@`Co&X<1KE9R7KiNY5RVhll_Ks>A_L@(LwzT z923f!2f{R~2I-QBY#%*nNKV#|78bv`5+bCk@|Q4zLa$xGBvv?CdRE2Wml<>$B@T`_B>(cV zu}4b#IAY$@EOzYB!LA7_zv^$~tS+)~QEcQ-G5F^IwIs*jd{0|wP+Hvc1JObOCTl;Vz=f)gLoNn;aQ^yU3i)cInP2y zD`cVzX|Rwn3c;WXJn(GT_jUrOUYkfR6CZWu<~tz_$JkC$CvS@OQR43WiFY;t^7WO%=qUH!cak-@+>u{_)cA+blex@L8qd zzJ-rc_$j5~S6TRIg^yEsO9sqRRa|z{cRo>8O;hL@dGqg3`%fRKMc+aDhu#a($QrX1 zb@`Vy4~&?>w{A5OxVIR%!q{>On!PVQt;4i$0WOcP>9H|?G!NI8X_5YX#tB8Bxb!XQ5GzU&jD;(h+W!IK3-snMh5R0`(bWtxJ>?Qv48aT zT!~FxpJFZwBx*0y{vszwxl)_^ol|QS{Jd_2ZlG;J=iU^2sL= za~DrtB6^yq9ks)N=Jmgn%)HrN{*}zgnPb@cu-AWp8^hYp{y!Q8hQMGj0K0?)Yi(O5;>+c`7%Rw2_PHiDcg0nH`+?+r?b3@DaYq@(y``yc?6&uS zKc2w7>v%~vs^NQrrdhIQ{(u}_?XRFeBs25X&O~ZqjEiS9L7}%vSv6%~fQKZZ_Ni3e zaaD84zCmt`gQgjFbod_NEcg%k>dE|uS1Tbw3F&X(`u;&FS!nmepQn1CaTSaEpXG0B zN-l4A*=7i>>=n?sB;&1MwEGn8?*Z7QXdaki(vOcR+kIq7mRibUeXDweT&{;xbE+|I zvzl;S{?LJ$tAy9DWZ*ryfOs<+3AjfA%Ldxl(0(0zjB~ah zkgUS}E9w2wKs}m$?lXes1U^sRJQ-I*OR`DuN?*Kay`E*^wbkj@1Wo(Zt#z!ng!m=< z*_M4n&|EdOxjKEn(*8>Wx_J^?!Qb^3o>E~pBI&R1{<_=$O-XCdps6i%T)ccneW>r3 zJ?tmA(v#U)D)ZVZ-2NO5I5jOdQ0yPYIdeQXWj`bt4S$m~Y!xjhjzxOWn;takIeHNE z{xU%x^I8HFCP%9TS&QCbXQz(yb<6h%)W?DL8!Ia9Bhlx>iOH)QH!Tf~yUh zxlZf|D&VMFBaZb2@{}~1)$>49&jB=x>N!tk=!%&VepR5?1OasXvSMLmVYE^v3RX zOrWpop^`o!HyhrQS zxMnW4Qn7M_?5!UQy}{_UMU3L4jtJYkNxHN&>F6RxaZ(5MZYBMwm1!8ou@2C3#lGKS z{{p_n0YOi#X+GHQdZwWKOG^c{$>DI3A^at3lUYi6o0Yd>D1FKmyA?R0_uZkfPyU41 zdo0%S4y?&Tiv3(MZyf8W@EyfoL~P_$8UC&X=V_zbMs1ng&HY*Cer8`VXQJ_4IDDVv zw8DLGHXq0?nAuxPGA7j4vBg>aTAUoy!0M(>s=x{$ys7L@$Cb6cCAn-NZG%NXc+( zH}NXaALaLcewwZ%@jXlUT99*`k_%DQON3rxXl%7&Pb9WL-|TbYO?N^4Waf)7>dBAh10Dn0_xy7^_UwdY^x7K0$4&Lt7@QQvDDmEaVkmvv?pbEaZU6Cdwbav&`UYWXW8oUlhT1;!D$MITP_FZQ26d}OJPy|U} zKx>{jjyB3@@uDVERVdDe)3fUbwTV?;u{w{j7of$%=g5q6zw5hK4HiE3B2KRvbXNiH8w8|pdGoDwdd1x-4f`*9$ zCdTllzdsIHHN(Xs>)n50%3}ofwSq(FEmy&ssWfCc9(M+z>N5GOVd(LE8KhbFvc?G- z#y=qJ(s;S%Hi7InY%D;}3ABBuK2o(24->bE#b;*|T;MZr&_+4UZv+|A{14s_X>!0C zIA4^UUtI?VT8bnlpq6%ZnffCZ5$(0v{459a{VNzIKAm5P&(rjLIfUfe) zf7zkK-7{3uSXsuulinGfY5N3;<+!Zcv{B~P3hcdZ&HfZytztzeD_(jbCWO9jsHZF~ zClj}+7BOF=N2*+*B zj$G?_I&x(mVNk(2RH64;30Cc>@FHb4ssBQjQDdcKBJm-p5FMFBwU|_+Ob4aCW}~o? zt?v)GZ_skbs+;ILTS!2tQ-uU~dqmv~{?oT@4c*Kci`}V~Ewo*>QDeU#zXqwHSgKW6 zfr683;J(MCJEb98E$zUDJP*oQbE_)%kTCx)$6PY1IomXCjLymZCz~mVG|p|V)keGyP-kP4h?#EXwc(BgIb3MT~He2uuo?8 zfoUKUuk7J;LU-wNwvyNIs`6mQjBxf04YxkBMsA3HZ?7}LnKPsSdPrY#{+i4_px4DK zfEV7N{|dXc7=5EfZ?|auSF{|z1!tOA3y0c@d@!INOiasQYiQRgi=yOZK6F^c!lPnqw zV*h>9e@NH0?m}M)6OV?84S{t7cfe@W?MiE7sH*%Cy#3KZBKxG4@xYkrJ;4D)nVc1_ zY1Ms?HnU*U*ms(STbFueu>MN^H+AIp0C8&9Tt4Vk%=kf8*;T*0iSf+luDtEz?xmvb zy~em1A39uY+m$v30Io6cTaD2Y_?#i^$jNGVK&~cajF;h#MlD(8>YE~K5!&m1Btr(YdrZo&*A z`L^Db{|awWp!sjRrTG2ELZYLKfyWmDUsnvAR0w=)F|eu-_)@XpV+w&urL?h^IY#nU zQZm?Lb${3GZ-_=h_Bj&n{*}X4S8lmC-AU-)K2dm^R(LBG^LNS)y^v86w2Xs}rltb+ zICjf+W7l^=BC+dx)h!N^UB4!VRAkqO4Go$wH0S_m8w$mYuN|7|`k|@((xAGQ?aV*m z>v;A1fe`WPDZCEg)vs5aa~XG}y~e!yMF2*;`f0rm;?<87qc>UfKwf=^!W^&uszndv z)eDQc+bnt@ua>?xD*H5x9>}YYBFu;+UQH`Sj9PmW;?0k$XFIj|*wTK&cn-Z;^dNDN zZ{0<2!3AuAG1K8N*`5*7W~GzjD!gjD|W$bB*nvi zjAP#MXG%`*3fgzTizghGD4Uwznas3_Wu~^NhkZwVh+AmeKEeNrw)d#J!z3#T>=$?i z=mxU20Mgj+l>jZxRA8(_GLBQm67VCZeD+T;G9mgiuw$@gcz|(9UaO|qd|Yuu?E&&3 zOyQph?pPh3ja(u&j8N%q)bc~?7l>n=cv+P8EZx~!9WEC)ewpMSiIdAk7|A1+?0E6Z znljA4;&nM%K6Ez4eAZvR#I}^GjP3*s$T}^AH&_amp z*wiR%93*RwSgO7I{vabT)LiX7Q|Bd;;TOemAz6=77xGHEfg;LIqqqqQ$+JL`uQ(9l zGQkcnDEC{sr_KgelVG9zh;!>A3mv|o?^&no7PZ|(Cs=kn``Iz9CG`04f{GZ{i;@AV zyj*3+rmc2i&Z`0XqP#n{R8Pgn=F(pw3g_<tJ32p-s z@dUS+cZbpk3vZJOZ(|B?y9&iT$eYY0;`wV9V?WX~>gss9Oyqtn`)J#{y`EXoU3V+g z(H3u}+pEn&@5$ddKJ>FY;X}nN>Hl#(#9H;3r*yoa+J8(w*A}mIgVKM=$1%0{G#xyb z+C>Ktan@b_TNstAwHv--;K{WCH&_>VjA)Lg`UsaOV=@uYTHJ55(1Lny!WI*pkZnT+rWX7Y}=r`9%Cs@ZAx&KTWx zjCaP-YfZN^M(kk}i9^%CqLDud z=cga#-EmI$pZ@RdnWFN{azGxn+7FZrgm-d&YQc>1w!^*CkLKdprWwM5(~Uz6HDY^< z>xzS8^kZ&t-1BWVPk!Xega3uzpAjD8Y6y3+TjSiW+H3zvLolD-Y-8nfRX7Ur`p5Xw zs}^1%_Icj@6Tug?WQD(B;i+ueI&Plm+i88@DAx)ZCU@sXSBW|csvx2fp@=ovf<;AC zTO(8}L6ym4_no2lE(H|_)-}I*8oiqM#kmoAWL0H5B-?*xj>k6QY^<_WiKrBP)V3dwv+%-doMIjQG>JF`iZolNKHmq&z7IQY`*3= zUzBNb_wHpS`-iFO+@iQ2*sdWvhOvBL?SHvzeE-+9z5ff$dxDCnj#6*?LSz4N$*j%x z?C@jGqYl@Q5P3o_j(5f{x8Xs;>p%3f<3!t-(%i+PdN&sIhnXLL1bDWee=09>{j{Bm zewAPRRQPN2UZmvyY=eR6?=@dGtuKwePQbtDfYXaV9T$9E zG_2vlR^a|WJl&sv9=3t`E*G$>mP#kV*J#;fZMOz_i^J^ zklKfyZR(7wwII!4+m}o2pn*9mx8K_^(QEHRmA02}E!H}CvRG@o+l5nxt2I zkMwF2Os_WeD$Eaei2EiRUjP_KrwQU6SpBIT|C@KFn!47$wod}Xe>j{zF`0U7>f9<$ z^o8flo_aMeI3ArBh1|Fr45Gjev6VPnHHpJ(sV3nZ<4e8Ru|d7sOYMMh@2E@lrEk%i zN83S6W$up4k7`dTdruTZzsHkJY7c9h`szCp$xJ5^ci<=chm_!LF8A@5%H8NFfW%BR zKI4u4zO`I%6r}b@2AMscwlN-{24Zuk8^22vCW`*#VM15d@tU{f!9@PEYn4p`aH=qY zYZ#D0V~w^gD;pK{f7T5q49uu`vA<(RbvaN0z=Uh^N5itc&Yw{J_e`ebl?kcv(&nW^ z;?_MfAJXh-oTVx{JL_O>`~3^JFxac2w~opj&6HR6l?ug{^#5NCO-1U6FE=O_9Qc@ zyD!l|sFyDi5u!&cceTr6!}#Y1y%#4WufJ2(%-jgyU^ObcqAuRn^LvQj|M2@2zu)uw z6TiRm)6Gf$;wPg#*-5;P-|P9kh2Puxy@%iX_@(%@@N4BKBePHN`wYJ{zjl6Eej&e3 zeqZJHEq-_N>*BYb-$VSqM>+q)Gwf*Ib{zLTZu#k!up?+crcBRgdXKZ`f#^Br5%+ye z^qdeq-xEE*y4}S$M&IX0&ugOR4bk(P(K8o4^U<^NQJ4RO=-C`SKN&r5ik|DD=eFp% zCwh+lrOSVO^gKO!&WxTPi=Lm4o;OC%??=x~(eugZSqVu*hqpz~Ux*Ha+Ph#Mov!j* zyMy*_O^+?>9A9*^Xs}2&*M4d{ZcJKsXshtoZ`Jo!rWAFo&HBQ%Qnz#quOTUxvcVk8 ztR>-QUPQw4+P8AOG5KyX4+!|};D9ZI12l0A$Rd5rfPk9`z(4Txx?lJ$y~)f8)FH&**qlk4R6a)} z7rnFi3Fb};XQSC|yCS@*!cX^-Ae_r}j%^Rf#yBc4?~%&lwfR zbELKH#PF)oaXhv-ED1J@p=8THPWvowOSn-arj^@1q!zxqhMaF^NBz*`bt$Mnc}v*T z7&$7*^6k%nWpxKvk<5Rdo2hB~x^yqoHPWn7@Oe+IqkzK$ zx}ZBt`5iTEI}YQvLlJ-evXgU-%d{B|D!s9_dU5|P^Qhkr#l%viID0W@yYWh?z9owV zjW^N>+778pZA)g)RMAwCo8Nyv^#*mCX|Xy&-R|+OZTdf_U_=&pc!X7TBT`1=|3j{e3|y}vB2G-8y?Xx)&;`PupGfgJy>DIaX8>mn`+k#DN#Bl6}h}1 z10JEeYRa-nGJyao?_JMtE7UK49F;7Qe=}@2ZcnDtTm5I%VH|a{-(bq}AIX28M}fU$ zXd-HF&3S~H^UNAd?^_`K-_U2|Qri@rXUQ{QJ%@P|#&_*75og1yGat{O5gx_B{U=Wi z;A8kHTt9`!VK(2Td-HXMhAY4B5p4LSiS-`uWS*V2BpACw_WZ4zBXTt*xWlv1E5Nc;An@kg^@YSU}DWrRR{ z+}>{;N;O0WWGD423m81&*;*Ss3AZ6D@h%@v?y1*OY%_v-SQ$3cDdZQJ}@<-@R#pZGUN5y;SY{AXe0ZYgULSuvWUiK%WekLrI zs`ufkK-G^n-miPKSoiM=UQ17qUKiYG@S1AWp-To&kY>u*S?uvc5&(T%(7uz02APP2 zFX?Dt34<^ia(2&aG*{%`q@GyNr=5%_i83LY0NZPzBI|Jw3!O7Ym%U?z43ZtwR&!Q~)25s0pO`^d+g^v_BIPEKa zA1tgmUFc;nNYCE}n+d(Y&tL$AvuWU1~i|qACy{7H;^?G${*>~vmBNlq| zFL*uAUf-wCGwt%x$eVEr(#T@i}gCsUa!&XXYBO`z5a*2-l12`m!bC)y<+Re>khrj-9YFa(Cd5c_09C?{7Lq@ zS)?A%E9;+veVDh0QEMk|{vUhq0v=U$wE<7U5CTL`z#ynmqoPJd1;q*q8d4@fN))I8 zFL-Iae$}>UX8nWj|Wh^wWW&nQoQ386qSI;fTALzqM}BNI%8->r5I96{`Xyb z?=xqT2_m)s|NYPN@i3V^=d8W`DqiZcufp7!>m2nh=3*Y|zXzi9}b}RI) z(6+tf9oLFU%p_b?iDKm-yqG0_lj-xX~3{mhn?LiFOG?i z2zuNd*326oXZ{i^yS<~E6@47+%-+%6ie5oH0_OC$ccO%@e6#ZaEQ>6PcUkwsh|7}! zNVsJQp1rFl6SsHnZ$-~WKoDxqqK`>J4s7kv2ezUs0EPQ6*=b{n?Nf@Zx3byIU(&Y=B-`mon-g8S12D8%-JFCN+4}KTa5vxM{`&E|>5p-V_r*Y!ICQTxXoI9X zA6IO)m-jDmo?@A?77Q7}1Thn3!;v_W6I+$M52Gad*;6s?eGnkbDKCE6YVSlNKH-SU z0O^QVs^k%kwCB?Aqh$>i4wB@K1ZPAC3TY9fqMh3mtfISi758vDn`#N_; zII4ONA(3&4js8IPb-8`5y1O`Ps?f>}x~)%R<_^F)%#|@*CVlYo=7YsO{%qt?HU=E4 zOEm%3Q@lVt)L3M7Vic@_5Uy5Pvz`JDh-(^kX}(*q-7UD$k?ZYaBSn-QnMz-8Y@5%?OXf^f^Gv!>z|wGMqwm_#Ut4OL5SKisNr+0x&u*PM1;$Z^hT9= zE)Sa5=B~1vvZ4X@#aW2|CRM6<2%D~0WTA6Lo-@8U@os`0^^obt&?4Q(6^l}RoY)3S zp6b^NP^=Sr$f;OlPs!_oxJK5@0H&AfXU2&S)*{9>N5rXEhzRi9=8eybP3em`@VamJ zCkhFZrblNcMRlb{aG*Gt4^e9RAZmPLp#{$Pfw8TLd%(bAp?j#g3)Rr`W-F_HkW{^f zmzk9J!*vwSh+LkjD*@0fXc%IZH#n1^c$*bNl*D2A?qX5oAz0YheBBjKO(W&dJX3l5 zfc3fy5?yp-p~A3c{hDmMj&K9kBWk_rCU1@<-bL^Qc1Pp>H8H&fBX(Ob&2! zr?MvTfCjf_?L$~>F(rPTTd>A0m>Vw*?ngqXSW7P;nHAEX`sqD7G8^n5q?Z^77%fI< z#Sw4`xIJE4z^6Jkd2A%spc;%3SmX(i#8t#|3=rZty1^ODSa}2E^jFMfb_@~X^j9pv z#qNbpXudrNs#iIDSUw0dM^z;@{6>V?oPfpwO>EkXzIr@Ia#29E`l$USgnyBF8$rSr z_`n!^uE3`XpLzHkj?bz1n6@FtU#)l}CYO>%b&KUGpb(I+?Ne~(Kypsoryw63I&1q> z_8*tDeagv|#6f}d(qz|iGM;)H)EdCS$foLqlfXicDtw;IBWHZS#9nZwi%D={XS|tS z;vwmbl(|(!4-t7_sGyFv4L!qLrhSua&K5Jtn(3h}PMElOnZ%@!o{_ITFQF<|7d7*= zP_7l_R)Nz!`jLMsI=4)bv8q+^=6N*(ZnQ&@n35_CCu00UrQ)8$hX~~`zQ63=G~I&4 z*@Ij}K82eOm0yg{!x?sqnV#&}hd? zi=oClz64cw2w>lBj}_b2F({B6kdj$vF0kkx_(L6_#j{)LAtMRTbZxVcQ6urxbJ%E0 z+(T!aTAYUxZJAn}2QaOc7`38JVrAPe$QPwQHY@K!&<2)RLSPehgc(Qgpx}W4s{6(pAlTw{{x~8zak+bL*Q;AY;x};SR9yHS z27iK*O|{CbZeSn1&}Y!5BoC&WXZ>o`gV@gPW0rmCYSpz^sd~>uhYBn9btne>(xs3I zsupDFAuZUxUxVFn2pB*x`2^TjJk$uxAO$Qw`@?)S=z#DTdr;vE=oXxmIfa#*SnQPa z!#>xw9clvy!~+F_)%Dl+gHZyP8lox{!vQ+omENG7fM*<( zC$Z+3$s1atN2qd%Z`y9eDx^kb81W!>MY~ZUV|FT@OiEOg@dKYBZ%b8-#LkLM$IX14 zW$PhHIpqV*yewo>$oJaksL(kUNRB~fUKS;BM$pP(k3XgT| zLw#l4g0h-!N?#u!azUEC669-7r8IjXQsNl_k!&o|vDHnF`tjq4WM4>Lql;tB)Q1>1 zf;Gt(;Txyy&+u2#o2NK7PwjgL*C`$l9`9V+kJpA^m-7sp#opl#%C)alEl>51_zjR; z*%w2WaV(mjP4&*y#b5f)r%3<#KFIXYXdL_Xl_xzkJFUHR z5vaSI{Zq~UA>(u=72Btwe@3hRc`OZ{{qunCpWMX5;@r0x!V$byAil?7;Dqj}Bwx!q zvC{lhAL@8My8qC1#?y!U^vXuqrtD|gN8nJO;|piZHGTcn^xz|W4AmjFXzJ*rtKNjK z9Iyt@Jqghxcq}4`cZHqA;!{p^2R6XO6x-nrT!ah9D9CB=Cd@Xj762~fbc81yoZ6PK zE+7Ms2B2pMke(tpk(MGipn}*aN231z!TI>K^LL8=MzDW{{!U~6NcVDMRU0}wt#>?LItsCIQjDU5c8Po1nGZg zVy>^}^RVMnojP8)Ap8zy-2_m(I3*9Y}A&hqhuGxL?7C z&)a_9#50my5Sz2w;9>ZsdI4$~ELJkav2pZ{qD>Kk_U1$>*Bp#96g5I+YE9VqPrU3@6NbbkxYDyh##ehm-t< zF8o)kJ8%9*NF2Nn0uSLkxRCq05ykLhn)5I+08tw9ci$D{Y0v(-l+SLUg~h8KeM{S9 zJ!nb$tk(-V<-=Eipfvc2R=ulRCDm4~a z+tc1N6`#-XNK6o?P(RW?ZX{BUMzAj?he2v=L(U1j4RnE1xd0C2@sc2j!;FpImFkPK z=zIe&zm5SAv*G{K*QF%3KpZ;}`5L9ZCd!w%F{{)Pe&Jty#wL}(2K##&C6pSU5kU9x zp9e2=qPr)a&7Q+fTV2XAM?%cNNL%?3#s&7MX&;$^;!r3G)B50rZ*YVbIWuMfIrmf%h4J)iwic{@VA zH|_6Rk8qnvIW+O7PR*@4n-|N$TUL&A+#FY4=U(5*l17!fFrbs3WHmO!EcF66jH{py zT!1Dfh9=qT&tn+omjmathoDSD3ugZktd>gurh`54PuDl3%EzUB?oje$U{gW{4%jH1 zNo)^@v*}H&@7PboLmZ5DlYK08hM8E@lge!jE3#C5D)wIvG+|XwI+Y7c;P8EFX|d&g ztMu||OfS#@M)7_#=#KHDvm0>#Vy+;(F9X6yaV{lO71I#D_qeZqb^~r=&l7}|84zB$ zI|yS$Sh>&+-4nD!PhzdThxl&b?U%^_kj8k)>oFk50Z2xj$bwjCE=LqyMe zO&mL!6bYk9l=?o}WyJ21n>gwd3>&T}jntfaishb-jVJFb!G*`P&FCq&brLg2p->|Q z0gb`BI+LjqzOG>yj_$pMbl!ix()jL5YX!* z0nUxo)4TS~KP?KxW{e1eiPiE+yk->AMLj=VVStqe8 zh5O7Svg?4R?=2{>IJw*>dhH(wB({9M6(Z1m-s?}X2S*Mfp~lujf*gqkfqjy&l*JSj z7ewHb?J$yo#2*E!*MdHND6Tzf93ra(pR1eB;Ld!b>vTv)ZzYj>!? z)@G@2(tt`VkS9x3+hlh>8&9xV5YJn+Uy%Kly`_j_T$QJ0nM)y0nVy5%Qq(#& zf53WB$06{Y%bvV16uS#^!`8y0aCf)t-!Pd@>Vfq~Lj2n+i(>1*@?Jc&?G3hdav#=n3Lx+e8`gzLIhEVcy}XegtS}Gl4kk_p88_WK^nD`P zZ|Da^aT`#4h(yy;B_W2>84`(rh`o-%v0G9t;`zd-_bpdIx zck77*_Ij8-WA(R7`YlPb=7^RGElgy_Y0%9lMt#COGy`NnDE1YA+T6p8o!z z>7T(RtiBOxP-!q5m3Qim6dgLU3Ff3&{nZ%7Rl)o~so_VC_eiIPXJ;XwzzqiuFNuLL zPjS}PBs-^)IjLlqR5CYUujpFa!rDaU#p@@ce5P4L;ig^?fbRfr{4Pf}YoJiiq+ z%|-$h!XHU>Vk*c#o%tt+f4cAwivh3e6^T2NJvI?j`|zIVg2l2s(WCg13;;(lHQss< z;`Lk5bEq1q+#8Og%n)=oLvWHAg2848?s^FGzdnjOLkClY{E!9Mygo$bHE-qN*v5d2 z@rLbY2jr8p<6Ftva5S*rASz_lx{!&_qtl@l!4tP$LX?96zp}WKC=$?u+fiZshr`kk znY{Wu-8k<+RX(oSqMrA!6oqb8ymZ`CpqLpvMB<1QG+x7_CPZT(o_>rFeS8pwNP`c0 z5aR@*$Oq9EY3Vy%%JxTyBi9E(pFr9Q?3MYN-GFtc{M&};E#NtbWu>@x+l}CizKEz@ zA^XJQ(E&`FjhZ`oOYy~oP&>&{s0Cht%qj)E;hZPCk#lHWpL zs@jNK#NNhkBeYo zfO>LqY*KT)Od&2)h|3h>GKILzLtLg1mjUq(A|6M??&Q(5{@{M-hHMcr<-B%o;!MFl zdXKQT_^?kwhd}gJb>Cpb&#g;X_bIjU1#Ie`wBTQ=44x>ht=dcqv+5Ys*R^lMkU`_+ zj)v8zIQANDltVzeRpHpMAa^graGEYJHVh|U^5OT2YdmReEbS8;*2gI=j14PvN{eE{ zik#BEv6t-?#j#<19YGiyR_xe+A~C?Z-M&*2V7qrqBG0k^Dv5l@eoztxj{T@4`Z)Fz zk|=cS#gZs;?4^?Ei=J`qS1-lH4y}ua)}leOO!J#0NAg*{cn1}iX+6Z{97hMQ3D?HC zUc@sEcf4$KGw3qz4Y|{Hrxea8N7Q}=&q>=@w13ou4@Xl-XWQfTZd1V%8?^c3nZ?`z|$IjH`5u)7WU zRuxr?V=EvWt8QQJ{42q^P6nSPHxquR$?5mM;;ygpS#sN?oF18yH^hn_hn%%j^48(0 z6+H<*+>x#B=)&5mc_sLPAcWB&_=f)mU>Q}`gXK*VZfPNY6VQr|@xadUgIy$GgFLXy zJ+NQim4{U}XEGA$RJ+QeR81JyhW7Q6tx!oDuD0-08w5wJ;;Bj_FYlFVTk#wGdA+W$t81ILIz!&c{=D9J)X5E3 z{to+}40)-=GIdTHq`LF*CauZzH*Q;PUbN+9PmNq%8J>ez&=2EP+UvNRRKm^pWkp7~ zG3sfbd^3YUJcTn$gd6!8uc2_mK&)C;!1CGmEn=C@eZ`xeuie#f-rzD#p zTC$O|x>1lC&Jr>nKrt+XDtL5)&(7y|yIv|Iw})`g6J$efQ>}RJL9Z187hKNvJ#xt6St18B8He;f^2u=mVp|sCz z=w+Ah2U?y1i29C-JbOo<$tQ_)FBsnZ|r;fwGq*P_LXd@b<+0`~!Onqy!yQ+*(}P?Q*+$V0cn>Uwof$xqk#c={0+0 zUx|58g9lKtsP+Qp$Z3uETWrmqi|0t4h*Lk1Zy-D_!hYwcAg}7Ecf$c4I zRajy5EV}K^FIy4g;10+Su07zVDbNK3)hCRUHu!3Qq9PJQf%^@VcV+edmmgctRDo4b zAB48!h0qf-w6gU0@;or^&p`ko z9j)6wrQ76RBRX2tMrFnFdKbR=IUS$p@FD9k&&;=rXV>B5+SV1SYe$QQL!uO1#0y8ajg`9ZqA zu_CW_$G`9vG*`Rh&q92-5+u^McE|nr5iWFVCqsQaV7=XZ@ZRW1>-#rE-UEFhZqas#P$;3Wm84hu?X@!)8_ zo?-MgxAcNm83f6vG(k6F8_(@R;*N`H7}$*6POPjzl^I(kMQO%==lv+(w=}rU>GwfK zlx0r#@EUH}Lc(QSAf(bfSv{-m>acHm8|1ZW!*J9#c%>|(rVVcts5bB^+px*B;k}D8 zw1K#|5FWF=jY`rZ$Ql%`<0Gn(u(uTQ9`P4Me>ZajU*n%^!+)$bmV>(o;Z_}+xk;Yg zOUK!nN`KdjMx2?XTGxI_(yLWI_~#)YkZXSm3r1{agFHMOQzJHWrKEWmYHTL=W3C;7 z3O6=WY3;6o)*@b}ba^xTWMLrfbMYuv2IXCaB(RIDlmwJ_Rg!@6?t(`#1T&TL?&Fie zb!RprFFTSdGH0gg$XWY{@@}Rm<&^SnxS9Ws_f)4uf2SUb{>~(!N-|04?@SWuL0NGiPBa_gsG`*<(}k=uLAgQNia5m&9X=#me&Rm4z~a z{rWE7d8^Fy@F|B4^w9b596m)4x4?JS&_m~DrWHLrC22(upOR)s4{r&PD0=8cBGL44 znWPmxoCE>G(8DjrwWEhK@JQ%ks3brSAxVH9ek}>mLj_rfriV99^3%f(AWzZ5lpZO1 z&;#XBMe4UVgwW@j(S$zNB!3t^ApTfw3u_U%BQ8Y1G$~c&MUMzR%>R*zKuu;%2N=Sq zd_x%Wh7Ge!cQ1|)lUhPFtGA&RZ+-I7O9%RY4lDKl@P796|6nSf{$J9HUh3dp?CJkW zQ=kCgIX5}=n}k^sF7l?0Xl+$R|2 z|B0ZN`ZWIG>7GYe?Ues1{_(#?|G&2(ogYpAf7v#6x0>&j()Eh}SIU^F@!N4TWH`~@ zJ5p{2yTI*W%J>fj-e#wsn+|%x-f$P5Frd(!c}PITs{O?r`w%m7J!??bq-X4|c}@mKb#wZe!)3v^U=-cd!b zM!OYf9J_L{s_f^&Pmb=13*g7V%?0)}^o=QUDyhuFl^8|%f)Se+AVPX)$W0uTQXv=B zZlo25gMcIlr@ibgkZ*!cXi*H_x1lF7mvMt*tSsNXY+GzAng5EQvN9teC~(C?bGhw; zjJ&)h*Zu^Oau!1mWvk7hJ3Nq0AB`3qhxj>VgS@`2H&U17BDw-xe5h)SvlCk{=!T)Z zJsw(pHL%g*$j%aCpsn z8rN?oddR+v3KwjVK1QqMywn)QbDoC#h3#y!VJLt)BsdZ-~i0W064nw9DpU~a{%V+ z?oOObph~z9-mIT+0B$A>T)y;}MHC{ZQec3D1F$F^&lpqK+E!m-jsUeAfbj2#Umm00 z92dKRAyRS^=i!YE&CTtGhJY9v+};3f?LBT4V|j?i|5mB(J!t3CgwZh()}6g1) z6J2tmxC;53wTu{nF0^{Fuf{vh?G{M(1)Zk%!A&0U5+Cqd0yEZMI`Cy4FnteAhuulw zm)ijk@_?W90bfhtKeq$!?g20L0fz`o9cOwqKEz|yz~_9xeF*&1cEFE$z|Z@Do6Z5S z(%<{LF6sfl-~)bvz{z&xGu{JU<^#Twz|R5L?-3*W0iIdn%1Y6-p-q6tw6cy zP;5e49q$vUy{gi@d7x`ahpG{%k8e_oI_j0!DNk-CcJeGd*&B+(ns&4^MB&=ss1*<`K&Wma(?sKo__w*{4BRE4*vGH-#@=Q zpnp%F>FF{ZvD>UUb^_QeDWy)`6?UI?xN))w!%Uk>ZE?|9{{^cR}-P7}D3^!-e%heBcUX>QS1h z9urUx|M;Y=17GQUtUT=s3M$>6a1e6CnxG?6cOI=;%pAs^@a|cuXMTIaA8?zD@0GD9 z4D&tf$eu6`9R#T_wb8Q{m(b>P<@B-md;YYmota{-f!U@*gH3@hhXxz1nI2omwiI!{ zDTATL(^!TkJs^Yv0D0}vkDWLYg=S51VCwdKJZf7A&S zu1plLmcRnxj)_>KR)EGzs6Y1c$ISeq5##PFf+$M_rPh&&Hi}W#?F9qIgCxs!SJ!T z_da|uk9O}><`xX7IR%(*2B`O=KJ_D9t)GS?CULb%T!P!QcxS{aD{7-mg(_U(PR!ED zQg>puPM+*e?4*fE;X!$v;+ zBRth4t}%%#P2wVVSk|d9LoE+i={8j0`aYd3bw{LnVMMAIMx=USM5-4?q4m#i zWoO~W0_eE@J~Ji!J~|hUanKEw=3{azej;lKJP~5+Qf>$}XaXjHd|`f%A7^jLr(<^{ zPgAYuysowtSVnS<^Llq26VINspP+?ns&Z5J*;m2c63tgYS-zNhu-J09WUJk5O)7SW zHR5}6+_{xjnXH$sr%ShX%br!b6-Wfxg|T&T1DWf4pU?OCO)s_OSFA7GGsWLN0#mst z+;oWJ4Tua3?|K#GaeH|lCeO=gEF;MF<~%85h~QaokyLVq(nlqHnl*bPAcjWyqrjTO zOFoBI@yF3aZG1(Jjpy*4-o-Z^q&rT3#d8RYl8Pc9$odM6I)i4GG4vbGhENj;(@cT z^x~l}%a2Fc-uIcTtALszoCquvH%NzPL`3;iQ-G_cF;0Fo#S3dAO!Z7e< z`1qlWZ4*9j=u&(kjtckpa?8&go`a6(ysC2HZy@=$Jds#9I0cb!MJZmRADnT)Q^)kN zTsnR^!wTVfpOt*T%bmQFk7Wqw-0VF?#gRFXoPj5<>S%6swcIoR;jKDLtQ&LZkoyLh zS!dfuZNXXjZU_OZirmQNcxWq{ga9hrSW^sGp&QzUuRbmUyklhDPy%1P;gd>R-VJz)%jMaFH2)U=g22wiBwNIiAWk!Q!iAb6@H^<%~ z0I-exTN1F1{8JK_LV^m4$ChVMAHMwy_>6798Hid=SdX7@kmL!^8t9amP}M^*p_(MP zfJwrHYLYOanj}o9CJ7U&Noo@+>w~ahRU6bP2>xU>i`f#-5b)=Je$o0&H$3_d2T>bh z-+uET9L{5E)vd%?e@HePn5z$S)fxlw7089BZ4VSURX9^{@<`#Q1+GkFFxYE;pJK3k zyJ!;%fJU&hIbiUsdRh`ji9Dvx1gQzD{#HIqTS&V@G_mGHHpx*=TR>q*TGJG1FQd%_ zp`v(yf&PK84|%{Mwizo*{hw>krL~6Evl>JuQKmM>&K<1HU_nV>sQXLeQpYZm!~`5W zqFun|W#; zcgkOf?h*r0nt8?0yPCeyp_pQ>oo|}3NGwdZqom{@yz#9k=oIN2Glt&C-~EjmLyjz} zi|#=O@leRv5oQ2|>Eikj)(H7&9Kud$q{A`X%qOW+BKOvHLew&hNaeE^6A?Cj5u*h} zbh~j--MaRL&`4?1s4FAPv-i{Q1h&lULcu5ul3>AMDfIK zz_!#l2^4{K8YhANraKn=ge{)t*!M^ROE9K9C9n70AWsfEY*$Q^)lV)+Gn#RGoxT;X@uFz^I=m3646CJ(y81FxB-&ofE@9>V}`#TXJKCaQVZ( z^JTe{F@FSBTi2%lcsiX9_0ega&x@vOy8?%*0-eIXLTL_G(sccWkr#~24N9aVm3DVlfX+?y{z8E|$Jx*ugWDw{ znTjPS1XSq?p2tj`zw-IF8Ar1D7)YNZnQ|d3!T=c$;*V}81YO7wsd5g*R(pClu!I~8 zu7*dgi`CMINiFuI&oOrmUdbgcYd-HdG86-`>;d9s7p37nD210@t)QJ594K-EHEwXN zqeEI=ctXZO8;To^(S=fQha+|hRu=KG!^-0M*vW`V6Vl!H^1>H%JYui?9W)}DNG2TD zj)rU1pbTZI;qo2N-PL$~`A7CzTc7YEU%wuI8zFXQyjC%cq#m!=?`5uCjhA&FA*6%! zh;n=m@JjxHWAukDyD>($VwL%E#^`7iw|irBXr?mTjZyl3O3B0OB)Z~mre9D0L;83* zkCT$y&$8*a?Cz-LZzi`q_?{wo2dshuSGOwj*wM$|iXKSTDud?EYrP2tsgn)9VdO%q z5dFYmT>r&x4CCuqHh!F8yadJV-Y}k@smzXs(R9wTyE1i7FLX|lamm~4e=?2tSu*=} zH9zOf+ue~qf+0lo{QT{m%++>&f*E`K^eo}zZRcm92k`?3c1L1226p?2Ki0rrkK%T3 zU}t11lO4k)=*=~4%%)o2l&wsr@w!vyU242Knx7xtxVxh^v61uhPQb@=;@>wv_2^zS zhuGVW-5yWMp`Y)@*qw61k2Q9$eYU$}w`xF!GTTi`xnCH{{WkGI!m>n-z)1W38F-~h zCVz(1`S>Diinwp)WZ@POUm{7_c~{9U0Wk!|ai2;t?#;XD9?-*k@iqn!QWvu`pO>Am ze-+qM5Jd)Afg}fePYsLRMLO*71@@OJ?56}Y-62m7Q604bTYejQL)(d$*kmA=9gg8#l5 z13XWV=ye$aCh+kpy7oNut1+cbg>oIP?A_i9%=IosuYW=G`rc zzRqndnqk7F(wfQX1}r;~4Up-n8^9xQls!!oKRSUB6n9Ld1B#>2LU|CUAD;<_KhnXn zeuR+er%Rz|0~Z&F(LPUfpFK3qzLeSjg00$>{hhXI!tnEw@0)gc+Ti`~_fx`&=Z{gG4Pd32+Ko2>F4jR>WtG#ozl4uTPg%=+k9RkGl0!M#6Pe8b3W>o&8FU zx82e$atw}<4A66Zm>7v^y_LP2GFG2_C5_cJ=opZVvi5rYwR`r?U7qj4wlb85Yh9Je zbIH3XCfuvK7veuHd7tU7xaf7!2jOfU9jjZvXkBD`%HD3yI~ujTwx1L+_z&=w_u*Bu z$|Rv}fB8H+Pn8K6X6vmRP=G`MI#r?o^;c1VjzScm!=0Ipc5_5EAn41Xj?QX2{_?rn-qA-gy^2i7(w2c9o!nFOW$_%J z^#Y3!B?B%na=SUqHFjeb*B~I~c%@lvdW^r%$Q;jcJCc`dkvwg?=ds=t94d!~|TWz=c{X)>{Kc zv92`mAk-jZD^QR9mrY-IA*!18_UP@ub3R4RGqL2z9l9nGnu$ErOBphlF zgHjW1)CI8Xj5&_RmNvFB7wOEH7(a}=~2<>r+S&YJt7(MzNpCy&`@a28eRKDs*yu$ z!5#WwoaYpC-Gbu!0F}yf1$XT#;w1-x9q*U2)WQ7FNQB*g=N(1CHMDq!8Z!h6UKRZs z+*u49Yz9R$K7IB*Y(c<6@T{G|O6mbU`SD&EV&b^sTF=CxQNMI`8zYsWm&#|p5l*8KynhyZ4Vsw&4Ye&~xZ!%v$!F7NO_37!7X4@>Jt zCMj7!MoW(dyAg7ZU8v==@_tg6doTP_Un|NuEl%Z1C&XTX%qmKIt`jHVes#O5vDG>& z(uh0sl3xN)^shgL|J;TnRek761zQ2TrzfgJ??L4tXXrWQKj+{0rQ}aI&mB2!GyWD= z&%)n<5%Bn$ENQm5%$o=fC79qM6T_QpKO`1Hijl7U+&ADMGuKIa3y8%S(!LX;AC}zt zcm?a9W7q88mYdkk`)P~XR!Lw1%>z)ZY=Ye`ULN=Z$yD8Uh)6Obohv5ic>Z~q0(5r5 zj7Z#%l^#B2@$f#fl%+XOasJY?gjOTO<+znAiiq>?@OJGr#aCuF2ZeUSv`1G3Uu7O2e!zb5NcMB})7CyeFx_e+z_wbQ5)p>zM zdEtX=s`m;k+AG|6n4c%ijts~%5fycHD9aC0CU?W(hU zp=PF2&VYS>!1|%WM|+B>|9Doo>rmmM2R)vR3Ap@|V5iE)*zjB7K$VxA4eHU`B>tR^ zp931?=Ie}{YF5l}D%>$#)!1~Se?8LrO~zN$G~(OM#b;2^!|;)3CKkZ@i+wwyk{o_W zK*iqGIu{-3$cq#yad}fJA|ZM!>H-fZO)UAyOk#1-Q>t(kIrxb?4?%H{ ziM~Ua-k;-axZdu*u@lr~<-K zs*d#_-XMeuSh)ZzC&N*y08$>rqk!O|)j$cK(-q4oR%{4Kiwm(p~C%rXF^i$Q7p=}B|_8S4muWP5z#Wx-**zk zZcpP-B8p(!IFzd{*FpY%Am$dz7COSE3h<|6P_ETtL*i<|?8Tt`f%r4UpS&Kk5pfXR z8yApxYUM9tr7!>`ZYuguLQs-AB?RS*OfUpxToTw;y&?&OpnP2tSVP{F1VT{0BMF3{ zd|wiUj{T7&iX8iIlE9uGbNaXEfRI8P;-S@??xZ@I_MmP~{m^AP1f}jEXv_8_{A3BX zBdbxIrW`L4=x3LiyDr6dFFXkjLE0UB|m>V|{OM{7bFJYY# zbMgmbZXa)Qb!VqywZ?4XP5z$P7cW4+ns}2xuoy4a=f?=%O%|iGb7y~ z{+`u`d(y^d$w-sKK~W6qXGPCJN=Ngvq7oR=A2yM(CU+SfG8Jobm(d};D2P$+F;vOz zqeGT@0S}}1dSLBCLza564J9(9!nWMs4o)05EsSCGbr0d&en|Q#yE7JY3{23>%^qZv zACk&Ecg9LUGAd;kE6SL?Ce!W*hU_RRr57F2M5X-R=#XC5??H4(Z#;f@bjZ{o{qWF` zsgaY&kZEBhPY3a~4J$ba&%CgbH~0prZUEk-Whd>o&3>3ayMK)9c-LB5_FfsX@9oc? z8u+>{c<#A&VX_rt2~eVp@f!1mfmD)4rbw35YG^@Z&mviJCZ{)E!N&A<0@}wBM)BLJxDc5x*Qchk?ky7wMT-=9vDN^>91VqXM zBmt4~U`YVxFiAk9JW>)6DUXo^M9SkO0g>`VN%UnkZe;0{Dy3q29F#@gIjc8{yIw>} z-3-t0sBQMY-Iom&VNxL6d0!p~)>&gjO660cqmZ`6A-~}>zuN)iq^H6alv78e)+xbz zOk7Eqd`jI(qtP^+*Aq+|G33Mv-{;~cJ|w1<>&5RqAcWW3}xJnmF2%2^Ap z52;$bvP#uLRt?m`ivqWyN9I}(<1Wv)!!`JSNxYi5-1z^HkTuYk{h0A;&g#u@6m8?x z#P((M4liEK(FDRxRcY~RE+b4xU@&5dGKDBTUQKN}oO)j6N;?>-*ex}E(*<2twO*g)z5T(bf38dq> zOTjQ;knU*?-TOpT*=_(<_9K3I42go{V&c_2fH%92S2L1_d(z_7d?vMR8?UBFiuU5w zEH^-D@oN6H59{XvZ8AWs!6m#vF8iiqT5Nz6scHZGuLM(3hIlpa93y3XPrMqMzS5gz znR3$N)trHHGQ_L-gvCp6n%UtNwdUuuw{Hzan1%cbg zt2y5TUg`tBg~09O)g0#mKj#C!lECfb)ns|V&-;K+C2;$AH5>3)^~MW6;JpdlK3>gV zJz$>KHPL%M?g8N4idQpG7Ss{oFn<58p99w(`ghG%heM!~okYzH=g~J+^zXX;22ma2 zMGiNf%D;=}vAFTUmx7H8>$|$DJ#|;~< zhZW-MKPqW>Og|qta&#NhWBPeseLl{2-paNA!38r1#zqSNuDv&g#++xNpy}GLab)!w ztb<6AI#TU#PJ$Gs57V6TF`@}cgjgJ=Nu9@%V@3?;;XhWBvJaW_HNNvybQMH+4O6G7 zNCGrAQ4%~2 z#dE>-O8E&-l>AsZ)K<^Q&-{4#_Z)@#R|CebyeJ?26e};}G-Of;7vHJ#UvB~~R^Aup znSrT3d#KU$8SV`)#klJ8Qa;x`Si)+6$aj8R#Sbys^6RNocI_LF1lC%SkhOx?+q@Wv zLkS`K0u8}^K@m_>!PXZ>7?^m)L_(%z^taeg`R#8R<28{+*5LC}h7aG-uZiF0W8nU` z#Oo&rp1k7pA1NNoj~-89;Su1fi^W*;--xFG{qy(6%l}W} z$8fx8A6ARD@iv}#7^c5c*kp95#^KL{2q6r@=doNwa)zAH3En0K*Scc}+17JecHY|i zd7?lFJMxtVPUZPFZzaPL&t)8 zvb$Zjw+2d&j@!Er4rZG67D2PzzP)sWG7t??nkXB5e%Lhbvjr!&Z9ysmBKd2(^8zbB zV|i`m$@$<6V9o8;gZBA{pK@r1{CDkk{^+rp%6B0a>|Xi7|FHhSU6r5eJEqWo63+`! zx^n52^gIY=c-z}Hy#!_6IN^7rw&33=m^ioQ`$Q} zW_^K>z~W750}uY zm#V+CM)~wKtxzpps@naeriT$+0xAlW{~SDcNw_2mxOb`0i09Mc1w_L@#B(14cA?=o zo#Y^3A~qU_@v$*2@S6!=V7J0EWCMU~hQ02GS&q2ah<}YI4sb&|LGO@)zKM&EYN2N% zJw+g3&wK{5C-zrPMLsQMC+5P!dcij1sAuFq7Ocy=YZ%K@;hCh&PfVFDlE_B%5Q*~u zoE{cI>eKJ@D=a*zjzp{4Lm|}qb<>Ncy?$ugl>`-0^9UK zXXc}aoiPj=1Me6W##`SM1m`49zJg>P_849PQB#2GkHb)aToLX8%rgM02H6A#0Hi)9R(-zcbz&+{mDqj!1to_M1Na0(*{K zo!52pb=bs#nH_+^Co_ZI_NPdi59cz|Juo%+O>+GVpY`}4-ptqgOV@D0IF99GKZttH zV?8B`9LV{1PpWDr_5y$!NWBbi4{gqh?4Q==8lVO5i1G{g*A6@Y^H5eDxWr)<;o9?3 za0fQpH{caVg+)JsCryvJ_7dN-JNfL-u6@7nnZsu>*Z!mL*8_?#e94| z9;f?T@xHeUwkhe59gAL-E_LnxU!f~hrOR7sBRw3)Lg<|qP7V!V zVF>4d9e>#LIHrPIwHY%SUgVsSso5cO*-T`rjZwQVekL>RJ~C?lK4pmfzEy=Z1MywF zPR|iFcdyUJz(BxYC+3sHI7&Q1gV(Y+@E00D-@?|hMahvMfYkUvOJ|y>rrfDSm*V>v zKgcVL%#Y}(Dom=T6us~WZkZti7G?!7I`A+Tn#g^OG|?q8h=ikk(eAy zb-bG2*3+Z2O7N(6O-sMX*Zj3Aa2y^)zEo_28E;2MkClWLX;!i#0JM=@m=YPqD*00Y z`R==*-QNins*0N`*G<7#^16f@DnWJbyqdr7kE2$-VwE-4oMZ6>e9yEg`kk~%a_DA- zqOSeT@n&6)vgc1j9h}N27u0W%fm*8&3dXBgJTc{;V*)i(vW{^_XCaED75aJ=-hfEm zs##=Mm*6#53pcWwjXWDaoseK%4OGDD+W%r{6gaT737Tr|5BKeC*2|2{pAnqRe;P#i>Q_vgTQs+0_+VhVE5y(DfP4YEPp|<+Ww(*X>?>F~jvS4vA z%15!0nvt~b_!dG-Y*l1GRQp*>2x-bX?1;Se$tf@JWw@~ATM9}+Jj(UhQF0#HQTRCw zoZK&AMokxT%Ac~73;LfpZ0oq3`|zvrLe0QJ3sFt$>B=H5gfeuqDnFYQ`dpSkpQxvo zyt((FzF>m~I+4D0+rv3ds4pg*ufJtJ;4&HHm&G!lBaF4Bb@T`)$50t6>xsKqdJM#+ zHC3MltSB|H&c1+Eax$1a))3Vt{`EsqPU~14Q8}`oW*BO<*o#wp-~q*??a4E?=@T-+y5 zSITmh7JuBJ<$Q5U`f)d!9X^s@!AOZ)I}%9Ee7OVY(&vkSh2M2+Lq4#{DKNM8G~bI0 zQ!g|cw6A^n*?~y8R3lQP@E5tYFCCStM(-3FRn5U}?aRLR-|q0L>DJzb09&U1AEsXD z^4;1Od>LP8_a60wDTpgII+fC+2?MT)o@+^ptcN@0{bj^O5L({c6(dwYdKNPDlQftF z=ouJYJBt;-Z?1YnQ2`c1sZ^uo%;an$`%u%XI8{W)xQm?f(I9w@hSMrFDWvd$dZjm! z1QnGCy$vF)Pk6=QcCfKX^Yk7*3Rm#1J-CT)#Sc_K{ry}lWY{(K=GF!#2=g^+VY22x3}dFB5&^| zzX`R&SCs)D_g`3Z3J_wNGA4;a;=R&ZHn=t9KhVJZ|@JhL77lIIHd) zP{ZYOaf*H6L1U>Wdr;v%@!2-oeguz(;WxjFnRskaqHZoDY;$3qcF|vDdC*y zzq3CnvZAj8$hG^tqQ!Q2mVz(e`we)3ay7*^<+f`j-b39yfO^ZJUhh*|S7{|A*vDo4 zp=gU;viCYU7AQeqEOHv_RoUp;Qx7wXT+>^cp31l&XXD@=wZll}A~{PXgMl#4BW|{* zhI6dhkEmyXU^wLAQDrt=Pkrj$xTOQ6Fhn;E>JX_=@>d{p*PgBl*3ZU~5wbq|F?9aP zQuFLDULBLiNnUvXcF)Y{oT*=*N!p!r&Jm zo$Y1E2d(G=q>>x(r(^vQ$6fYBT89+wfvTX_@&l2Rq#q-Dr-lG@h>^Y!8{l>uo~OQ| z1OY0=6{?5mb=OUo7!^>r#Y8hKkhgSEV^F;KSytrU-7LTvC5 zjlNXm5+jeuA@`J+%>(dUdz6quvBb4k6sblN7s&sX~@R6m8S#-yo<-c46daP!yt7Rekgx7CST$ z1=NN>P0issR2mAQX+9#oOjTMT5OL4YhmsS%3;2zN0|e4eIeE1y@$$KK>mxN_v8inb z=!!c`-b{ljzg3O3=ru(OoRB;dQ_;5{-F1DZ(D0`!?D1pBr)0+B)}sV%C$nrs;L-ogq$W|rRvDu&i(yi=U$cv=CBEk#Lnx@*ks_ps-PBw%6J~*@~ ze3>e#XVbYLHod<7_~p6wh6mIVJwpbEd}WB}Kp$-qs;FU8bUi_zN}dJL!)`BCC5enz zRqfq$rq>|Jrut{__Okv~Re zJ!$$BraRf8IVBNt? zWwpblIqfpe{hs$qo4!S_mco@Yp`o1T;Pw$xBn?c-odS&&9V3Zw@z?H+=+wJk>pWG|%E`XIg(_R0cr)EN%AWu;IIA29T< zz-!fCOrbJrFUJpUCuMm@A~!z+GJNQ$VV>_QO*{t9;3NG1eg3Zx_LK%lQ;L317&?dP z`UN~96SZqGSv36`S_^@8g$6N02HYL+^x$|)&Iu0`hBmY)GiwZNLgFqUd%49}eY zv^!%5(KmOsW)4O|we3A9t7RLg#?p$uiC5EqV#bo{Gd-4d4*)dzBpxXJ#0=h*#)z@? zH}b`w1d{EwqP)+@x?w6FyEBf)bvy!f6`>+{qt<7;~gZsoO3lR_wty#VR*i(aR{o z4TQa2^Hf11{`+u(6tHjy@`BJaXn^mDIL!W z+%UC=xWfMfEc#@n3Y9KV(xb|ENTX+IbPY-NfAR zMhKz2n?CT$+a!KrD6&mqeVT5R8c`>%w!qMXZiYflJJHJciqf=lCmmnVC{X79bA&Rf zbiI^k&B}_PbMLSAE1P*S7pN-K<0~lk!}~*RXJS7Vi9J~SxW@$P^o6d#?kr7z#IB*$ zC0$F1EvK&5=v1FVYoqlmqR*U0)fe1O)O4H`dfOR`_O5oW9UWT-g~-p{s?VFc$$pRa zkHOmh!Cj>s?!vg{JL8H_FoRf%{e$`dIKa}Qm?jW0oJ8WZ6HS8JZFOub+gb4)`vrij z5s|^TBy*2!oRJrTi0ih`3cV8^jhIJVpNfervKlo&>F(0{Jdn!_34-ano%tCqd$=?3 zoBMb;IS}qoMbZ%KcL9i+p2>Jto z@-GvAaO2#iX1tT;*mT5O;@A}0VBHdWb9;Gz%euKC8hSGmJ$M`dJtw~%5E6H1SDG0v0$R{M)!%s}7Ss(BU<26&)RFANy(VWVA~~6p5OOTTrTRA{@rn&<0a1T5&s~&*yGs74sY$uZKmJY{HK8u(xOerTMbo21myN1RFV=KH zFSei;eewY2uR4Rz+E3T*53pVx)Zd+VC(FNQe<&}xt_AHa2YzM-bg+0~YQ zco3Emu&&w7p0jofvav`HR ze^w|yt8x{&+`Uq;x*yB6bGrz&0o>>H6sk-AZtho2nyjMD#EMdE zb|wy|s6%OK6{7Do?UOcsli)-UzE0~?sZ15gQ7ca8E&$cQ6#cFXx3=DB87do!qotyR z$L~IH10#1WLE7&TqfP5$hoEt*Wl5;1`aEET*3AOPXOR)t&<{NqM3*fFd5jbM-D;{< z!z_Cn3P()v^u}HF7CG+(&wkg1wE-a35~&GrVL?&nK_CJf4RC?UQ&Y7Hs8?f9c0syB z=;I{gC>{Ro28d3#APf61c?PKsi+67}+FMsJpG>3klVt!=?Gt(Y9CCh~R?#L*m{+!m z_^pp{!WKY70HPg5Hrj)`O+MAhf)eBqw24ZP%jceh6zyOyVg#>(%)AfOBkQoc9EDxi zQhYwf=S1v@cjDvc*D!6WuB~Wf-7xFvN*LJ$!GZh6k=UXOfY?Yyd=PU2;V?D31VMBZ z(r9N#W3+zL$cSr_AHNAQ%UA{?`ghh88=)CA@iajzHaWeWVMQb{={Ou4L9N0lt*2`j zn+(cyUB?WOjZW_}0N|w0CTAFVg49Nsm{-%WXH$$UDaJHCtE1WsPDfr$zg98Pc^!n}St0Ji6ZNhW;$AeK(wAGN^8-W(HV+ zh166x4D7JBT~G^P4YC0kO^mf`U!AIFDeGB5lHfr!R7iI|!KM*RwDiG5w@hWWuPpk# zgR!4&+MpW!>>JpH$xRL+Gs1F`lLWU62OLTFZg2r7T64_T#n$k=%8I?|$wb*c3OqLgkAs+2wx zddl_iXb)~bV5JnEQ(25|kNt@0KULv_r3xN-fisjT@@j`0qm9|9mj@vo^ccBG1tvp- z8oyXYZt??!naB*uAR}qL^_SP-(!bS^Hp?!`+-bWkyD?SvFLqJ(%9%zMkwHEJWv3Wn zJ~I0HUyXGqf_R;+iO0vXlJ8M(*99HG<9V2QuwH_#SHO$PoDznlI${*J#Th3Gv)w8Z zFxuXYtyf|XQNydE8u zA&3mF-C~AJ(bAW%0*hfskR-ijWh{6|UXDhf$ooaYW@1SNgj1~ZQL6YdvLxZ@Y|2k{ zQ#5n>HL>n;A!*Z&A;{p`eNEj|JC58{I|dtA)sBCy?VugQQ|+^ zg*R>eJ7hm7Cru!-V($p?nEE+N1!`{q*}#(rcy*5Q8N3O?CpzRf{B&^oY+{ie&(%CU zF*6|Qi{pH&zt-=NQUHBzz7P5wfsU*vGosWAu_6FWiT<5nx5aP_qk{{GP?qkW!Mcf^ z>Aggx_FY}2B3AV8$fm$?VvoY;!*~GyuIu$wQ|hawuW-aRJCO}e77B!Pxk(+5QS4*0 z(*srLgPbX+9Ip70jcm3sQKi0<8Hh@4=DvL_cBC}Y>{h! z`>*}mpLscq^_tmsAB?&LhoCOx_UAOHy~1Cya7sKjU)xX=#F~#@1`g|h+Qo#!bmz&8w5H;>a%1_PMxbpf_ijNKVdxBN*+|wRSEiw5>8xeMPIQZA zEmYdBNm{5Uv{W@54gF>G$&eBCeK6W{MQBv-W$CpG6$X_HZT$h+Jt`a#no2^;ptaH} zJgu;ZTXlB=PAM&3We%XI&i8hv^!4Fkrl2}V_M6zMrl0!O$9elL9uxR>_>6%(2Ws8Y z0Ou``FHSt>47n)WV@Pp$uOUZSb>ktR%dXOTdR$f+oMw--URZH|4W5RdCk-$&Y2d1* zLIZ-PX)*M1b*)x(e{KNSE=@gNjeLAN^cl3AX?*+f)$~uLMmW>uGALB36l7bxSBsok zMl2uEC!jEH=O;G*!>^A?(Mt2mI({v&+pM4iRUWn zql9>_!MsKaGuEd|8MwVI?Rfns`sfL4H1zG*r9wpsu@o+9FbwgKTg3)yC}NRy*3%Vz z!N+HXUY}L@+N_FKh1-?~RfntI7As2P=i=RdsdMJVaN5tQsd_CC>23Dk9(z&cql8zn zEsUPYQxSg0?aydDoxg$>W+J~8NPLm+O-R}hGtkymR(tsg6U-4lT*x=nPv5Yy%I ziV-h0L)H8$w)qcXV4TWzW*fYb>!sQTTTe$`#jQ#r(&E_AI#C;lY7D%V+bCJ6WG5AD zohvf}TwVlVV34)O?4QClRj&sklU%#>pVINB8p~H=0O5o?61`wWzr!lRp0J`{b0ZdM zM5n$EglsnKE9h7lR|-)R({_jj5k!Z9z8Gc}f2(WIGholE|DZuvo0pB;yqw7*BW$lU zK-#MWb!=I;>)N3>fF35G8`wLO&Mu8%eVH^WR=E=Uo_(4|`uM5%2M$j8BjTzmVizAf zRs^L>3naS9CU&qCsNE6cv@}rNh(5)F`N)f?A2^`6fA(q`d-+^7PM-mh^6WcZmlWQ* zy{umr2B@NKd81Gs#O<>&LZBBjpt`)}O51OS;53#8482hY$P^HzCdkYXWwk#)_ZXSG z?d5ONx^2q}Oe5=G^tV~y zY{{NnRUq1;mN&}6lCE<`A<(JLPse;AF&{vq7S&)%IFQ{ew!0hAX6*B&i$o|XPX3Y{ z)SG}c=yckPmH#EC|Dr1~T|fXml1E_nY5g3`q~WPfHPoa-u#RqZ%ZHQO9D%I(4iW{| z$+sqaK`HSK214oq9WCB@4%dXi?=;&i*eLY4;^znIVB2^En#=mtG|Wb3r|3J+d0f|P zza;NRO0PemccXqM?MD5`aZpcXwbi939J=H+s|5{dnO~oJF(Sw|lK}a1uI8-ogf2TBv zw2ibidn(KD&R63e$ynt!VkHSsDtQ(tnGw%&kCc+O$%Ig=*xC!eXic6B6nxDr10)Io z5~z}Ri~jLE=C`7xf3>>G<4XjsRrequmoVc|&30p#@M-0CD?DKsy}PdUy4T@?5k3ZX zo$z7so4|3$=3saqcxi^aqrbwP%CCE*{JICruUlAt-M!`4{iXc6JKgduyZMM%+?sQ@ z!r+!)cYQ2w$Fr}q`PIpaO<_Hd3|g^Y>ttsu#;L=nIaZ9aBa>aM*eE2M9#k_${Z%ax ziRu^Q(DWfF#{XXC8$3*>VRcpur(2~tf}8*|_ZT!dC1Lamue1dF54yZLX9IgJ9@@w+ zvR!m@zB6nB2SXlV&3A1J1*-WZ2A=sZ(crt0L1gLvfyGn~pj-wIr&!fle)ahIOHPR3C2n9vdqrxdEBNSOGPIWonK-F`gAgqQKx=Sy@K*d&=BFJ=* z_Qp#0`z;24bW~cuFZ9ELjLbM)=D|~xHOQUHbokV`p5(!A@%LjW9X^G>vji$Zu)Q@b#aPygK>>An&j~DURt$rcR{vZ$H;#d#CWrnFUOb>2*S=$`7J-yw zJ_`Tr8Om`DIOUmZ%^8iVxpsV-7KCt$*MoZja40ZMT+rQd_t_#b3^HC6UcFRr4M)9_ zmw>(UxwK6^@5ko{F~Xgo4t7ydo#44EEZX0 zHx$M~PsZYqX|W5GVM&ZuP;&_tS>#kbS!Txz6&J7DKBb=z^mzdd?}xMZ7$Xd=>6Pdt z{D8iIIpJ&>^Bdj_av`q@?YAT}WHjS>nFL9(~wU9dSO2!Kvl|Dvw}1nIr4=;1Pc?{ScI z93P&<_QtSfF$}H*tQ#ZU{?B&Qun`cbSCSia2~GHw^tf^A!QCIZPESk$@FJ?9?AA`P z(0nVp6Hs<5DsT;VX`%Uw*rXm9HL1P`OQ5$&tOG#n{*4)i5Lc!O{(6oDO!5P~@2KHB zQS3@9${S(rohWvl4A;tC6x;eViUnxhPtuF!+%i>rA29lUf(D!%hNI27X?5tJ^>x|k zED(!RGL6EIv}@i{wrgFia(;5F;Lr%)rGU>eI~>ir69^A%qo>ibdmO8~l-QDo=@+V) zy*PqiF)NdFoZuAMTLw&s|G^4Ouv?&*=W`gEg$v!vhws4Sln*IRl0huTL&*F+SZ+-X z9IhR3BwBEK@|qYI4R1C-XfNo2hH$% zG&&A?_T&`2bmWd{@T|24#y?ia0}K$!uF@%*;4(sX7RdR@E7A3w+fl{{kZB=fP_+Og z-P=dfpe@X)A)Hert%*pucG{Hk*W<5GYPw>TJ0NEpFiG}i`hG_$bHDUVW`a;P`2!%N zCM%HGMNJMgH7V%0COe)$O}1fBbgvpF;cwAfgjvi1sA{mMa~Av=8FctewNBJM#wQ_7 z_9LcIDMG1Q6DpC)BEgZs|6j_UaFwg{2+t5ToBv>l@eY&mRXJrBri%`5ulNmB1(GzkZFx zN_@@$HT)Z&Za~gE%rCdAyPXi*istW&QNnS6Xf6`g;<9d+a|&GsIS-qyqI=f{*tNudvW^~@ix+<5?Jpn0x-beJ> z@9^0UiLiIq@BeM`neRc!`zw69V1l2FPup*6SsBlxF^JvFArOMZMYE5XN1!HR_2IW# zNR<#JQ_oRH&h5^95*1Vk3K90ss=pmWh7P?Kea8+x5NzsveE#J7n0oEWcLVUehmREb zoPGaEhX(SkXvP1-+uOiLRb2h!2?U4`d!t50jT#j#wZ4F&B?1~^Hi?#CKo@AmmsX{; zRf~34PzfgNF5!B!5HwM$SgBG)MN1VVDr&%(fJH^5m0HwPQFjfMsE7fr`~QB=%-p@3 z7hay<^ZfJq-0Z#ca^}pLGiPSboH+xp-fW?B#c9a(x)#N%7M#Ok zsf$UD)?nNvwOBO)ZSh)k^c$nih@2MQzZ|?I#$4goSQ1Y^)0Bxy zMyLQmFAxeEugZ^%Q7@!f z^A_MZ&XiF+SwmmT*uqW4>(RfU&NM>8ZYGL@@?@al2G&;-Su04$D%7EqtngO`ND4K% z|MLogG>C)VZ+Uj?fS|>PBTF?&_u*j^^DIW3_c7u8eI9W=J)05N)AKpvdU`U^$Gp#p`1U^D z^7%dz@!n?wzUl0H6Q1pO`a)Xd;W-b_Wq5AHGZ)W8cvj=-46pO|ER?~gbND}y7aaB{ zj0G~5?1Y^98Dt2bA6dy~EZ+Grd@6qV@O?IZ`S5)ae);g7&$D>nh{qjX(6iFwi^LcM zy-~><`cW;;g|HLvqCDat>Pp=k%ZJ3_uuu9MHjSwL)Cn+Jfhx%*IXW}DFZI22`dfyP z^q~jzNQ&O{z!Q)J#W^@c1oscNufdvkIXchK#4cY$dNfq^;nDDddhppW7{Lv0Yq`tg zTNJz&ciT|}sNpa6bAq6JUgu;}l2d9yr~&=a9`v<*CN|VE4+;6!WtLzs2B?fPlmWIsu=GbYr6`zyLZARQ?}&AqKK-Djqj{mG+XkncG=E6(MV zl@bLrRv4M1_qr?<)dMT(yMj5^?IfW8N0#~xAbD77gEjw3kQctSAS~EiA-?r{{}`|9!bGyvo-G%Ty>Gk&get=Ioo<3b6*%{Mq_A4d3V)AQM z_LK^rFWDI*Ox_Iwxk%w*axb;g5hYBHvut#vi}Oo4QQ5~{(~-mBijsQfk>3C{jA{o} zLVgCsrdwvFuPj0CcfJ5+R&~jpb#ekSP4X`~>KjZ!C9~#T!T|qRg1sO_|1|CC^#G_ITWD36*2oH#t^w%wTpR9U{7Vt`P~BUGI-P5sVOKYJ_Ki; z_km4Dd;k(fLm`cd?rYCJj55D4cs6_RT*MfXN$@<>!~oCPjCm0;(a^)G(55oxVFS%u z>#>Zn4K#19hcV`Nh^b1*vHkFQ7*?$LBOth{63Y3?G4d|Q(4*Yts7fg3D_ng$v+`*9 z^)&`B$P;~<|0~EH9OCC{4JxqnnBa3J=x1XE*XR^ZvP)owIM5lLVfS-J)4&J{$k=OZ zX~$`WZ^i0(Xye=xt}N|aGveP6?czKQyB)AaHE<6Lp#tL9_bd6v)}8VYYSV1$`GAqL zpxPM5EE7<<)~a%@4$s1IYoJAFVne0<4*ZCnYDRWdg7vfJZ-X?iN@%|W3GqAd3g(=$ z+gc7vrmOelZ716Dj{-uLpiuN3^h-5wiH-jgBu&}s$ojyr z)aCkWS;OuN6NA8y(JUH)$iUAvUz&9_`_E^KLE-QJgO1Hp>U!xuy&aow9oS9{kHDL> z7bi5PH$KZeM=*xH@kbsmU&NU2c96^M)O#RiGv-6Y2sFp^V6^^J#;juup*`qn{jrRB zN}xTQx~d({plx8xX$IO# z69Z^ZGv-hQEw!c#83Wr!Rnr$t9^f{MG4GpJSmnX(TE;XXCK_6kirdAEdE7vI)dOt^ zV`>ew^(F?m9l@Ae1lsGV(7yX4VkR4CuNw@2+lP!PG|=AmKwHO{!6r{Xt@~iVeF`y7 zF^o~+ch8DcV8nbY@l6Z*Uz!yuOZhq$U!hO2sk8%%Ivg-f#cB#mXa)~PL+_-Qj}l68 zUi=>Zl1|5a=#;kz-1t9J!>z{}J{~Z{H&bu2_}}gai9d*O-ZP%X z99YD^z$le+ei%e>@dZm9L-=PRC0iElH#);P6#J#nwGXs=*%xQ%i^?}dLx&TqZ=#L} z_OfL#wzxR-Ar`E4dJ)tNG-MI<8#Iht7w;nIFZXr8K@L`o(P`=V!3|cp_$!j9jyy5| zN}y0h9oA5FXllIm3Y4hn^fCoYrgb*}0%q{cP-lueoW-eiLp08TvxwI!RPiru&c;s00h zYX@t%fc6sO>SXa1fG427!b`WH&Sv6ZZKydjR8hlqMhd9I8LQT^#~4uadIA+&s6k}| z)c2i1y~bDt>N&O~m&G_`-#u0j2&fvT0*Lj-8b!Eb2&Qjc+w5j0m8OrhaOPFE)U&el zBQm}T!N%Xw9%!ho`Sh)1d>+LRVtgLeevF>+4gzXHE6v$lIDlye5Yq98Pc2~Qy$Bx9 zDPu~x?=e_5t5brT89Wc@M3e56a#`jzC{tV{{ao-PiH)12@3tZSLIg)c$LRjAR}V7? ztp?E|!AvBD&6SL~iPWHM^Trf0Cab%cQyD|6sxEo58589mh<_=0NGlk3--BQuHUz5n zC_hktq~Mh;X@e+a-w3BbH~CVs7#LRY!l zJQxlRzE97j!JgOG1JUigyH`ei#9+~yc^f*KjPc-!iX4#{JXtmnxihdzOLIoc%Kc~O<0kl) z76d>IuC8uvF33!a$Iz|KAeMoibVt4#!0tHKxcvMaTxkZcOq43-ES@g36Ah?Xe#W=}ETIRuC(=s=IV z<0nQ8WFt8KF@j8QqxFkbvm04Fz3nqXco{Lmug^+yTys3N0u?Zg}dJ%QUJiQq(YMn;ZKVB=mnlh^2R-sdj#T&9s8By3ja4@D@?YPUTBR-t*p^i)MI0FC6pvs61 z!%P3^@5^kz?VnRlucp;S?)2AHz&d5sVeGZX@F#Du2c&kQGUd( zK{PHmy*(vxECRt$%;wCPWJNlVld786LCI#{JJ_eo;TT`CT&bXb$gXORdn$UX5}Qf+ z>AZ{O==k$^_t+ouJ{BwdXC@G5QlHE8elSG5J}t*p4;flt%L2*D-9hY5>6=+TO$$8l z=7H$MjsajLGcf~Bta5Rr^XdCp!p7&}W(|~xG_Ze+iSEdZ7XWYY`_7wE29o>dLB3usEUT_KR`fta z^~hU;yR`cR0P(bYIFm(EbH;WdF7+6nxMF^-~ify$fN=U`Gi zbQ9L6I7H>%iKp~mDd#M&yi=dE9QZs~3zs`?>YAS7&XDLOq!+aw8ePs^vapNL-YDut z@P@jdj~ekLS?~L?zMpRqz_&fv^*j@jfBavnJwQ{?hJ zPo*tnc{~g z#lt$qDV`MbnWB$LQKeI4BvV+CUxQtk>VwA=;#OF!=M?hqKI7Keid>*mu5?qLPF7PX zmwQuklaDYRH)Zc+$~oSYZDez#{DqtHpJX?=r4|}s3OTf|OoeV_(zT#q{5ia7|A*2( zILbMV*SN)goCF=f`K6rDm+4pH+9T6UOwzGbw@+)gh0vN48LwP#uSI6$eWf<}=Z?o@ zW*i|6cJM;av*6OJ6C)e_PGO!?np1Uab_v$8xag@c7kI)g3b^A4o<9wCwD>sJgE1(s zd47r;YQ^RBiO&Og5`pUDR1Ud3(~%o5ct#Nw^z)r|@i3x~gQ4`DnXNHeA3q-GbnOqk&x4)^ z)wL@)Q$AR_9D3R%FSSF!1&(o88@d=N#zD;vaRsogSDUm~6oOgl-D4*pHPQj&l$6gS zWpaD~y_NrbeY(l`J`SA1osxp1K#89I*uYQQvq3dP)>NLE9^)Nivt;NKlzA?Pfiad&ZH2gF?tN1XC-riUJfGVbJ!8r_|i65J)4) zDS)7a|GvO#jSr?q*le7TX?MVU(jsGMGyAg=;El3Iva(EX)G3lN=kWX=bs3rV8Y7%# zj_UXua1)d@a$tr;&eQDgu8P1$l~7BLC3ekP>4AsH(t#*_a}%i8mk? zCm^rHmLN_*{z87XUds)_qR2)ztYD+EOd5tpZB|zPim1;%q=*_&bRN13WW{u7-nIB{ zD{}lz#VnCT(p9+*WFx&qA#G-g(rG|5P%gHax|@=W{AtLjYE^PJM z9f2j%Knkq||NSh{c6V3#%=6dfXc~5&bKs4=shlTx4ZR8!y#m)me%ihbNHn!S?nCrt zrKU6e*GRtqEBT2zxpPwJb}v;>w*X3DnvKL02I;e{;OLj5zV;R$7SwF+odOw0$)gza;5sLYTW7$D zX5|dm0+_&4Ku}P~d|Ao0mUIlIaE##J9OqKeE1!u!1pRE0A<6zc2xD4jf>r{kIv+3h zHwDdzhG7?O1juqSa%aW{Z`sWQD@Jnb1r1Mx$^fB~LHhm$7Ij#+lhtB@YV^xhQz0Em z%TG{JR|x3*oq<54N%nJ?T|AgSaiCfE%u!hbfdeY>6_ah$0cESv*{nz|TLS)DMvDIy zGeg7p1&(kkYtV%2*TnjSTGM%Wy$EB8{O=UscOUWn_7M*=)9&DZBju+J1P;n&5W1g| zf1S$j-+g`;|AV@Vr(Fcq1fk~yX0YF=yD)+U=--@<(8}O>>FeuuKtiI{ExlkmrrcL! zRM!3g6#r#nl;e_E`omV-CaQh;BOvK_nO>MN@a32Zg|8LhATqb=u9S(^69$!`3{#5x zzlYHFZNot>_z>8d9_TB#hYok<$kK7QQ_D*~t!LK&E_GEzK)hOs#!6dsB*srO?W$dB zr4E)TGxKJSlzvZ7LlB=uA`^*ylu zQK@&KBkR8>yn>A|mHLO0`uQYmH}xl|icSs7Zk2lX$He=~ z6?&T*Z8BZ*7p7@*E`(f%5cq8n)zsx!!+PgyBG1@b&Rn*YbJ0}z9Q5)p?Lw^^>aIpW|CDK?xjP zwfi-k8Csqmz~!^<1fvoJNOK1|9bC0L&TObnTHvFhjcp&e$-_*Z#>-h7$Pcqtn*KpW z2g=_QcS&%^QB`|l_?kJ|Nv8tmVWbyK*1uAdJUvu)gFuQvUmr)>io4LEFg!_Ooj^T__dpfcG2%}POBu#UM2S}7f*FcvhCvQ zooX5-+QrkbUyJ#ZEuSC|CdPINBw|EfAYZ=*@7VpKp;!4^y%Auep_56v>do>V1m9H6 zuK{8OKn!$5Xs9Vy%NFH4rpWL=#y|Em*Z)g5-xDxAK{2A8Sv&Vo)I>vR*=VEL*(gN~ zB`uXXct=#4n_>V{4D_VP#e1G7MdNWyk>^Rl#q3d@6a~jH1?PXJlq|f{zdW&qQGCf$@~Ji?^r53}H;~OLvG?>!+A8hMKaylC~1@Mo*6VcVFN3qxMzb_O!9x z)E8~)Qe?TL=v-fKiXlgISKku>BO03aZAz`AzE6&0eTVEyiIMsq21r07jc%{llC2QaCi0f^7D|)?&?dlOl`{hc2{5OBTS0+-rdy~(-+h?dq+yG zq)Y6?yZWZIZ{mb*+85J2w>AaeGsWK8xA9x1=-hwV zVA0UkAE(qR4}r1w#>{i?gZs1;b-Po-t^U}>EHkTKGIK5P5;!s(*G(o{j7bZ zpO~6{YmD`qj%+aWepS7J-ZNFK(EE|pTD8Eh zsF&WqQU!FOcSL~ziB@`m*|;`O)P<-S8t=AFz>e+#*sCtEn;uTmdt@rG(>nos{iyCa z;Xf|0$fZeo?^xaqz2AM}KV3(Jzy3U7_th`~eD7c}kVK(-F2^ovHg5s* zZN(}Cs$4G6DAJ(HZN(21R@78MmAe@~;$c~~D5y|^YoWf|zfmsNd4JYKyTv0>WvL`9 zj0-!szER7>vtgHLmWgM>TvC>aKjmauFB5-vo>?X)S76JJ@GK9r)c9!Dhn|(-|N8o{ zg(taWeW-Bhx=N&6I271Xc!xnasWb^F>%&36*vIconp7DJCy#i`56P~5``1{9A9^b7_1Z3Fsz zh&$fRqJf^-EztEjNom14eAEf(Oa*lQgQ}Ou;t&uXpzl7?9j1X!KnJKX&|n&?R6rlT zMD_MqT`JHBfEtx)*ZUzd?OdF`!r$d0x3F{H9{UO#PS6r^P2V>f>V?xq_MDAK5)C~K zJ5_s*THDV?f~t93+jFUH&*9qM$sHsUItNq|OFUCl>nx})yX>yAEe1LGupX5-w6q0d=Rh`96tvuhN= zdizHo&-_B^r(Ok7jNn;`1LQ{VtYksdPrc5SuNFLCoMQx!bYiqhQUINKs7C<(|EHh2 z=w2g#x=NlTa(5llll)mSc^~p8h~qRyKeZA^cSO#7EH98VMnCnn$Q#AOev(e>r#_~k zt11jmyV;rQh?3W9fB*81)Fa;?DlVKDVE~wSsC_( ztWa|fhFshdrtNEj9qZ%w{h>Y8UdF6XT1o`0Gf`G!I2SzoT5`)Y8R&lntex3cGoU~W z87Ny!R|HjZA=?Vs}*gFa@xCw{tJ>gw$!U0Gae^6``lJ!&cWeea9)HIY9dKilJl<3^V7gR!U zaR@DbC2HrDw_=}|8C9m0x8Dn^Dj0R35o-sa#}zByEmkb1n5m^$co!>k$iOb}VBbaN zFVDsGrIi)gX;#rjF6U*nni2c$!uG^^Y=X!YCa+L_rX+6halmIDx%Bz;``f#@uZZx$ zcCe}89gt*C^Z|8k5YRsAv()~?zO^@fvEuh&7MJ96CXv8;8?fLx%rvp=8@yA(V(njp z-%5Bi zRP5-js_EhdU&;P|=lXEJ4O?P3;)#{LKWlw_9Sm08{WIu?*}fncYKX3?kzbOhA)^W7 zkA9PuX5>%j{kG2Eyw80w+cRmuIHP~A*e^n;c-VpSL=Xs?41dhIIb&CGdV1hp7>#IW z6~67kLdPG|Yk^qCzeKuoqM$7hGh+q)VD#c^$8y`XE^P7TkUd~zxIVt%2$*3uj__@- z=v~m(;nEQ{8JvD;TZk-}FTs9;U}3+(AK3N!x99tJR-Ec7KJqT)CEEwZ>2=21zL>+q z&coN<_6CCELCieV{2GR3)Gi;X=S#wmXj8IncIf=RfdO{A5hWtrXwkm20k`pKJquZM+gqQ(AVK!y$?X2@ z%Hf%TUh7{0CkW4PoA-r@pHQ`Z3ECOSnC1snP5cr;RfH+s%Ik?dR-vRBg&HaXVu^Y1 z@#lS!(8F^NDPFJoBH;lj_*89gAQ&@DS6*;%;3ymRtsUL=hZ2gdR#Fj}bm1ax53Qo{ ztKA%UB`W@DT>R>(# z*OtJLMPs60q}V%g{R{>eq68AmkLe{e6oXM2cJk-k2;oRymuFky5J2i{cUpu(J-zN4B4(O7u*=lxNo=OCcGH_?JWFMXT#O>vluyrAO?f>)IJe}+&+*o; zkA}ZM!G~p!hR?c7i(vgC0;7SDuoh$j~E!|c`#B2O4 z>A?hnqT|Zhk-XA2CrQL_?@&bKHSa34ZHZe>+aDl*dH%u-R%G;ih3`3hFH;zh+ek`j zD9-?S+#_s-L%>t_V&Gy>BYB;6h6a{FFIDLmhWuY~baAq9#z85&flYsZp zZRe`-56(BzBb%b7nSqnlisQKamf&Z0K06nV!kF0LhlZa@h6qZL8&DkWk4xmh+I6~B zgTD84MvPhZjm?44aE`|{_ z+epn#Wd~}>gVN@wIDJnBj^9dS$|*@0Ba>fEj~j_T4J|Pyc!NY=mKr+`c}F1q+Q0)) z@RK0`Bb6b(MPEUey-g?~^R3YK;fjB04lf6Zc;;i6lZ|_ca00N> z$z%ZF%-FHWWMj`2$C;pX;aMguT;}%P4b}*=U3k7o#&+{9{WCc~qj)_#&_5|&(UobJ ze|B&?q&cvZLoKTaNJ;j|H%q&`0S1!(tUh0MkwVwJXr46c69}Vml89Q&#VJ>K(3eSN zlqUXH+>A<3fZy6ox`X$FMRT#)|9Se5J%9`%Y(khCMFBh8;e< z|4_=B{z9h>SUu`40QP@v%TA605w0>oQE?EP!k^~+m|lWbp3nJqPvZ{|6CvglOCNKp zhoEj8P#zA-Su-5w8VLkm=HWFq51VRzyzc{M)++Kx?4A9_piJ4WHcSHTAdjw#uSUIH zc|_yL(M3W6*~v2fV99mR7bPp{`~8<3XL^#eNBr~4M5r_?&n_P6T!0h6KXazTd(-fi z;*lr|2WJEQS_pVTT0 zsBq#*F=0kgBl@8ry#r|hgGv_Z3bH;M!MmBMkaViVmRHlmia3B1r|F5B|0d~CNI7rl zQFrZ^glRtO?*}+I5&%SYe=u5etO{W$QVr*DG0Ec323)C*TChDeli9YZY&K(CJ2svMYO{vWA3zw2Ay_77!ykr_p%VX%{2uB#flPRzj;vstb4v~YZQE5m z#DaJ-CzxfSx2Q~=U=B3%=yQ@_Ib*TdrV$AEn_6${w;Jy4G$Wz@pedUhiY8>U8cX^)f8W2I&F_!#Vv1I?6hIFgu}{!K|A z{FgdSZ`ztiZ+Upz3ey)>+l#5O_p3aQI>m$9Ueo(4>b$7*cW^iL1!k#Q3rCogbBDuA z17bdLjtuR|4x9-u3wx}wc)%BG|iM4*;4b(m;V zP}7D^ah~o^6xt$C^<{d2vsHwVN4WX4ALRUzFvy0~&tBRqa8ycu-d6gqnHtjHE1MLu zPSnb}@M<_z$_I;MF8rpNBxX?DCq2Sod^~Aa971v@W{54UL>m1E`nSUcoo_ppq?w^L znRZz_vB(bocxhf>4iZ;gbQ)4-#HUk?_+bT-6D`d~`{@m^`0*0Hv+80d>&3izR`_BB zw&7rN{1tRjwVyg%uQ#z(W%?f{LTQ0R&});tPWh>qfWhBOr)tHN5bh4OFP7t!J<60( zkEI2hN8FqnT!TprkJ}#?T*ZU*vvM$FgvUdWv$u0GZj>EHF5}Q;nvN4io^wpf-K{bs zwj#fms=%z^_1UsbpA{|PBq;NDum)#xj*;cJf1Zf5dR}>na!@V{4NQ;{0~1YYXbMxH z9;$EDrS$=jl%h07Zi#5H4{t+hTPfyHwbG2XhX4*pAtg@+3nvQn*}@6BfEOFE4wzVO zmkhJZ%UepyQTMd?y#V5wkD?_>G~Ahu1_j#LP5}rNILI!U zq;9v8z;%1QdXu!*hXyl@8&m?2Q&Xl*H_ViDaL|(7oR$tXOxs_&l_x{EyHSxz^~97> zFQo+r^0t@2%~M9LP7BQRDB!pWKnF4$r?j5`&b6ZY$0~3T%Etl&zu*PjwfRwTq zz(!UT$<{SU+{Kd`JxMVS%_liWV>!F zv$xY}0;`*lGy#0Qqm&UlznR|AxAUyObl?ej%8m?#a+6|J<4h3WNtlXeCTbP!aGhG6 z@9oNpx6>?rQQvktsnR|Dp4;1TJe#{fYxBQQP6fhI5^S{4ZY5uFW3Hkd7+Jw7mtbyJ zsbLp}L+Hon&B6vO=x_tOvVX%+cuRxNlF*0HbF-D;@<1+vQq23E|Mh&HZa&LL((fIQjeBBwaj)kyE%oyY zC<&tz)ARistngq&fe&;c?;yr0T7cCg>mFIBJ|RZs^EveiwVr&^I~o#aJ2OVomD2s{ z6LLjjYt-jJ{aJy}=xzPn`h;%>)5L#;&?JA+j~MBx?4x71GM@ZZ{v%;0c*6%h( zuk^Thg%J_IjSaB=RyJn*45VurE$j^MUCl_Bj}Vz34#&I+Cr!uGz<#1Uf+S<7hp}QT3sv>{^U6Cl3LSh1O+4%M+Jn zkCGTVh4yB>LKBxQB?fAeUP%P)cwE(5-OgWd$x${5R%{ZzlMY3IiF-yh^C_-C&%UOmE z@2NaAY|UTFP8D2E5=jJ@L8c;lM>r$)^A1kRQwo5*S7xA?`eFbu1vS=q3X-xK39`k< z6+eoEzX}w2#}9RYDbj&^1wf>ymx46RiQ&O{gnwHF<|eJtXNtZ$5&)V6KyV?%==-Vk zR~JTNgR@a{0fkWPStyuL3oP_-EsGwvHoYJ-c2N#Po2o;o)Ru^iHwWDm0bln$C6FW*gKElVNRaufN`bG)^9MIqYG z_ATc%sC8EKAhC*&96h`h1h2sT|!pH9as86Nlho&a7-`ta4M<3*PB; z5xNf6VXf?F(4X98rWI@i4#O0xW_BTim6=)CErFj&CsmFYs{_=nS>eZ+58%{Av7QSP z&{Z;jqh`v`FEvlsQ|RK;1c(|351oej>=ob=fuK?0m2hd8TPJE4;)UbO2&VA0I_@s@irS%$g99gu_U8}43~C)K%<0(B#*_sM?shEfAL=-2`lq-|jT*dk+#^ZR&Sw$Q zAIM|!ncqg_=kvE79?B!*rV_jAC=uco+u4&y!khD;IUk=JI|d*2mry%k#$_==bu156 zow8O4qH3Xc(qoB|H`1}NDq3@kHeUX&0`3HNgS=YI$x6bCd`yCK{gADfEO{uK9@si! zbP!AKQ{|>MD0C+KEc$xw7&lhMqGw4#;{7EWsu>L1SKaroL9C}~pfS2Fmj}n&Hh*cI zR+!uNy6PofeZ_ElEq9oBWgR#xgX0T#Zp3E-}ed#LsmfS0WH zPMECddMnqNE7{gxdgW0Iw;o`Mo=00n$nTVI@jtSLJD6DMmG>7jY+m;g7;thLSd}-A z27Zugzv5h^4w74|#>w3?fy|+elCBS&Mxcbw(Qy?W{CAg_H+4))mzb40=E*KG_v@Iu zyTnwf7_F)AgoPEp3e_cpWpMYz7lxN$(VN3x9bzyESh?1ZQ-c$=w(GmNUCtR># zhPX|2G59$gxFx>|2Is8zq1EO0)e{1g(LJF)3~=k7$?DvozD ze;kAQ=wS}~pEG2WnZpzMVE#wg=xwpW>0l+Q`6uLP4P2pYA!M@KRxPGV4v9y81kRn2 z!9?S;am&I4C^TR;O-Ev|AOL!57RiZr@nu?d8moR36T=CUs!C5ozs<0rs4SkO6n;ue zAgSpp$xQ7*8C)%K(qJ4cK&4{uT#Ow?_-vBUA0pI{0l#XpZL*RCO1J+o@P?f@&V4FU|5p&D`63? zvn-ebb!k9F$4)?aYKYCBX)p{wb)Z>aAE8Myy$jCLay^uIkI7bWK-sR+*_5*^kq2fo ztSdb+YcgA;WI$!_Z+gr*??XbNy(Pk{fXqdNgqB9RzO!gvzx00=eU3~~{VAqeWIS(0Ksj8>MT-#u%+0dD3 z*nvFW2x&B+Bz5dIf)RPJ5m^ly2L$3LE(o4yHX!zaf-2tesmkmmy90~BSd;yLFj%Rx z!)3m-9aiQ>|3S*8bT!Z)LDIK14dC=rDEc6st-2KbLe)j`;`RjOQ4P`~C9h_7q2#lk ztUcs2)mJ5-tg{C0Fxc)_iJuSCR4X;v_N%m2I-7RtCy}Rwu?Y)mFLBFo=X#FsFB}!vvi(d$@KdPK*n`%sP-9&ZTBZno#4bA7&Tqb<*CwZ2asrEWw^a4@yMc6Y9RlH&CeZJUT)(3RfK+p5V z?y^lW*?OKYc9-o;gQz%H?RmafwVkRlTjnva?PwMumllGz)s9}b{KScJe&dYGlJ&jy zY?LDKo3-dr*;dgS6hKpKFO^BPH^tX|VPD zhKZh&QENwX@D8`iL}4J4DHN>gL$SM}g3_JQ*bTMjr6HsxGQ_~DXHF-|ZwF5EGv?ZI zl`ZyM2y3_()>T+Xs32lRSY-%tqQj7=B~s3$#10tM^F#2u3@;ilD(76hmi8tr1{u8W zK}btv8WRypJ##uyejB_3c-MH%U@}w3FR%)1jxZ?Qxvdmat$80H#ECL}i?7xo<*y}1 zzB+}DZ=svt&-}iH>CR21n4ixp#;4wlac~7;*>XKzDeCxEC=`4RZvM4sw`N~Mx^rwpuhKK-77Zwdo zIK$?`cvMks`f_Z6%l0dHYYF!DrL5v2sLX(3?D+qJ>}5NRky%m4XgkWw=<>$`G+Exl0$V5(-eix?0%aPKlv$C0 z3+=LvbNvlM8R`|WJ4#RGVt<3{(Ub5RlJHifz+0GvSC{ZD2Ybx*FB}0%N8cd4weig$ z9e&isGj$%23zH!0yddkzxh~WQxi;aeb;@ezN{qmMPvLrwf-PO6o(YrSqlDs?AiSSa z$RtE33n7GrbT-w+=GHS_$nsBBjcT+8sxcD5x-YuKi85`nD8fo9YB&OtMGeDOLZpKe zrC69-&-i3fYvQkcD@6@Kuv5?Eo?0<&vM5HT6g3b5$)a-bl@QUU1lrts#)E(rx1uV? zs$!%7CH0auV!C88gp*PX<#w_dO6P<~V<(!8*SYnKXFJvWg8IWX@q_rYHqN5#wQcvB z^NP^-Rc)^UeK7}#;V12K(MX=&!0n6P(@!_%mF@=d)T^j<3=V>dr>cn=WhYt5BNbq8 zlpxrzV16kYKK#mvhF`IMr`;U3d$w}P31VmrC+pRyzE!8LmKz`tWl)H#~}pULI_Q09BwITm`_ z*m5jeXb0Y@OGHf{Gu3X2z+@1)(7f{jiV655>FIyo!zSg{xkS^2#GoK?6>5hNC8mHWtX;r@}gJg}P%!*cV zkir3ma@fb@w+Alsyq9|3M|$3ec-~=S@8%uod8e6yh8bM!_?GgBNraaP=TFPA!g3D? z?;|BI%MGm;fri{wXNyP!LJVWPM`tz2t=#e*iDH~GW$&P|eZPQ7O#`3VuWTX|Q_?;*5bCENST6?g(^kmlY{u5ZoMRpr_Aj*N@y-|oyu^CKPQ$saC|a5b{kxyj4~8iq%EGlHf(xy18=@oY1Gj~Crw6VL z?d}!0G_<>SpfI#MBQP|yyH6l5v>PU2&^=ATac1OP6FdH(wNA#W;{T0zU=X+gz+6~G zt1@`ynklAeRVEDNJfA$=sW2#71*=l`9s9!WJB+{F_griqnokrKyc@H)u;^?3HAB~9 z{Np*_O4vFH-K_aMk^!QHZp-XvZ?qyIewHnEMvuXs)GaLqWAIHP;A?8i*UwYF#-x0m zpYk;%_Iss~L?^ za^}Yv8s!WqS(f5Y4sWs3fp2IN!44B!Hj;e0RM?LlNOi2#|%=*kzd5vsW@B2OlJs0$DBwfg1ee#)?^{uV%!w(u)2-J$?kI6ziPw z%=rDRI=XG$ow&ISNGuRD2G_a)CPOPUDRB=vyL#-t-+^{(Afe(8sE0h!&|RBosnie+ zo$&*hIpBatsPF3xX^e*Y%S)4nTlC@z&#>AR_W3UC-xIcf8Njne$(X3WjA-u;S8ewt zuR4ZE00TpuQM@GEcg{?TI}yq)JjJIZGZV!A^*70mv#>nVF$$VZu=|br#=SGt=T-Xi zc=cJXKeN^6X#JV4KF`vhUqVF*P$%inkJM+5{@koS`{1)}4okkKh%=+btQiMITxpij zI6bD4&d@pUQ=h-qpN{(cx&EA~K7Xn|Z&05j_2-r9^K|`riTXTFe-@}uOMecP&){6= z7VM`kj^EWm{{?2eUj#g<^QthX{t7XXg5?}+vl}@o`I@4ztGg}BfdNLzNG;CK;MDFS zbdO3LY-S(dW<_v2WSVn{2>4+l!z*d1QJ#&AOpPf8PPi=LD~+ydos0C?V3*ZcbGSIt zpu$#UF~5RMoIlj#72}_C1lky5W-BH{csqE;a?`BkewSB;F1TSZpOfiABNh~GKEQ^ zZCFD_C-jy?!+V0n3!tMDG9=MqJwdup67`WppX0q-oPv_5uOwQ}L}l>Z)=zLxL8}aL zB*FZ5QC$2%=AyzojP?OrVBMa|7F*ehU>7|jb9q8@$Y#YM8@(Lj5hZE&atgK;0!sD} z@JrpByMzL4j5lNy!x}FSCqpf9?xgizRCXu9_j#xW`VD8}l905{7?fB*^$q51p|yFK zfck1fjk&u@vgnF6!zx^=)YJt;0LI{09CAoz)C@Y&omBIO>z_ z3VnNGJ_CIl@)78(!!#6mNch07*>rLijikG<9;_ zQ#nds&TBmz|y?VOerEuQ>GM)$rm86 z=Dk?k6a}1z6%<{2$^LKB9!#Cj%8cS56OeIA+7rA~6|a@@I*6}9c^%Bx-^goDOK~oE zDXpbAPyGy1KZE(hWEUbCy*J=>(hKqZ@Ehn^Usr8k46edyC_5sjGvJs4mz%HTyIsGT zRD#|ix>3lLV@I~|#g~N+S-*}+qI5lEM>tei;Rblsaq0z3q1M`3)h9BLqxMd%Z9W76 zEs-#C5Pzs|;o8E9GFN1iQ_pa#D5AhN;zR8hpuHn=85Lf25Hdyi&K11uTUga6FmN;q z+3egZ`t)oBv_xuXrfja4Tv3K%ATLsvbVt;=y&@=wSxBuE@+=fmPCego$E7JG zkAbYoHeC}70WFa_Q;2^XhEFHTT&xMhQ3%1?kyiXq)?^{0!Yli+CVcnQgb_HbCpQbvUrBD)jiyQe1YkPT9kc3qPX5YQ4? zhE%F1?Kn~9)Jv`?L!~A$yx5WL1Z8Tn){ZR4H~f+jVzNEnhh9W#5!1DJodHp%ZHcVF ze^r+l`~b2R3_&dj+7@lSY7hH0)}w)u;Q#<&rz6Q%uVL_%I<)FKJcodm$Z7+;p81?8 zznx$!Mt7-0J3jRe8|pA@E&{_e-f_2k!^8~sQZ8$)VIM>f_HB_9fY!X_2pDQM4vcuKT1QB}9O&_~*v1G@AlnLj|25DPW2 zROu=g@%)~=T9G>F1DyKhC?X-<)sg=S;kV)!GPWCpM-nlOZ~@;HE2?dndeysmq7|c| zL74kAwrt|`j4;t~5#IC);WEfk2=g`2&wedl!P%3@tb|B1NB#q6tLDdy>IUJ7Ef@>P7ejL6|`rVZOrK3Ux6e{1XuhaYz0OwgVZ}4Yt=4 zD^1>MeAnc?mhbgy2$)RtlGt9&&-$tS-y=V8C~?XA`?Z8CW0E2-U#*CrdI=fX5;ER7 z@?Ws+!>F#<`obF3vbhG&nSy64i<6B>51uoKp}(?cBo}&-d}9rfWRNB)U#-Ybp{h_b zgM^Iyj{FxSzr~%t-66TiAi3Cx%{r%kE6ajP&n06S_KX(xj9aZ2x3dH{25H>*YDF$4 z0y4=-$kfM?|AN~d`04Ksw-pAr27}u&r@m2e<1Aifv7yw&c219tJJ*ZbJ&hg_jvasrBPOca5>E@G&xq zXE^0F$`m_jZBO+OlZiE7hm8B(B)P*)LboI|x#|LCvYSMd>)j>EcazNT3Ca;V3C;s_ z2jQD>3e~{4ZlkxD=(Dc-4Y2tAHkSIQ`G~2pK;fgDxWfrwwO*~9*=I|d6?qkPFM##ItQ|NwxI5kQ zt;ydw^K7IVx(Ua&WM?HcJu0En!&yVHf7OR+7za3C8{uDVjq$GzRW!i;#|o=@834mD zr$KDr-fn%YPu4&b7Xv1bWw*nvdxQpGkG0|-v{*>XgW{le`#07VBcqyG==%2bKw16nT6X;5~K>)oTb=bf)l_$oaYjik{CLx!Q7!%D*6 zfYpzGu@$}q$b~9aWLWc`pcM13&c|L?S%dZ9+WfM`aI2BIHrT(iq6Jl-hKg8G zQDcMsBj`bZ5I89ofToYQ9b!^331_Tcy<0}?#hd8sah=j?qIA)gL5nH)wO+uj-F0^1 z7yuE!^MsgAh@c7eYA__`1~o$5ys+!zh8!N{Bat#H+!YoqoJ}|$DPhzcHwF4CV`1m z44OVtwvnKBQgEPRVEoY|u|ok*f~Lz$Pb%BYRPUcFJt_WI&T}W`#cveNDvTyZ#{Y$x zqyoD{GT@XM`0N3IZF_WSX7D!P=ZroLvr(~YLk~y$cT$0k=dqH^8(c1!-7OcKde-MO znIQq=RK>%8SiY~pipWuWnr18xRV>B;`4Mo7M+L!kP9bTLkp=>Q7V#a-hK}H0-1auu z_#mtLI;8Wmavpd$xOHhGSQn}caCJSQU4VZ`-^Z$W+=a;aNc;oh2Fug=84g{H(un1hTFQ)`a5UjevkUck6uJ1QvOfe#Qt+I{ zLj7o}T}_o%_!UG0Bl2-PGZl%YBxX4DhDPFma3C(k!L%1TfEM|`oJEnpIDS8%r<~`X zhzkP>MBZfCvgn`_v6bt{Q?Mx#dttTwgtZSwhA34WwzwySV|l9M#GK8EFx(LnIUCzm zv;)FakxBt@g`P#q?3F@*(?zUSF=fn*<;!ed%1i2%&M_z^n6?wljn@alDVi? zVmS0lQks}DC-rf|1{R@cykD=StjQ+vYm zD8McyV5;#pYb)YH(G_x$FNi9wr&8XEdPlTV14#q15>Fz!MG%dl@w!8FsTa{@PBd4j zxCBB85t&-K0<$Y3`l-zG3D1M*3F0V8t#P8%!eGDHMU=U1tO$u{J(owKC-5M;7JW?+H5%N% zBA`W-n~I`JgG)H1DAgjMs1y?!jKY!>Z5Ko*5?)tC#YWwOYjh^_ilWFCb6yu?g2Cpy zVEoZeV$2W^#;&%uU6YpD+7?+SDAI~LSZubHl21rWTx~fOlEk<}F#bKVcZcy*=HP@? zb*!i;G@_?5RNd5JxRzjSG1nKQ&k&>;=t25h3;{xBqhcOTI?1Vs7STZ}VjC4RwUQvS z6sD|t)nNxwG0U_wY!hNPgr3w1?aBC7Ho>+WEN}@;Fn086{wH@#|BAF`pa<;%2JKc& z>mM^9%2X|)QdJahrS(F62113_q9&8G6r}aAT4=_hxPBDkS%8Cq>92+Hv zXv9UcC^^<~LZC)WRR&X8kx>kmt(AoAIH-LG(O&(BBeU$5=rYzxj$b0Us)=(O>XcM_ ziQI@khIo&CeT;qa@~Z6{@B=jhrtPv$=Sqh$oW}E4I$7w}kIH4o_k>091X){YUD3xP z*Mne86D$4^Rv&P^5fMR%6&V;zxe3=^ZLRQwz$$w8%9YSHRBW*8m8ju=Q#i~Yc+^!D z%!!jS!2j)$FkBTi))nltksh;9AgC0FNA(z5QB%!sM$5|t1>>|Gks%-UJYf6SFAx>=e`3oaDB*`s4L?-M za*XY2qv=}N+F^6)F z?lRa+U~7eMC+kehAbVZSS5*m_Y6Dk8dfy_}0=Qz2tE>)35Xa!4j`S6CvX$f}sIJ_}pUY6c#MRKz zOVZIi6|=k*(nT78cG+RGBVEr*bnCkZPjG zIi_yFM`TDK!5x@z+YupsBqGf!ZHA#?6kACx4A6pSN(*uamx{5`^>MWGCuz8oqf0x& zzP>Wpr|slg&h|3wvamB6j^zUf(Uv#^KJJfn{FS_G6I-XjtyN8&r-@Sdw zx%V)1dPw^=Z(#OMM!2Lh93?6HuQ9o$J)6 zL1%*cROmPpveDqO7qnCaS6Q7?7N(>D<5Vm%j08m))K=UAg30(2v>8O!a^RjuK?myc z2%dXNisOnT!R`>##5S)3TlmA!d85wuSTe=M+0lt(oL<;}u|||;1|a_1zHrj)UTtkC ze%I(M=(S~ou;etH8vQRWP&&<-SpFQkT^fwWPmq&NBmCh&|Do%56=vbGPndy^A0F9+ z+qb?9Zwh20)3?lo-^72J85{AuOvswM5n?0^7vJJ~8Vmy4dfYRyW)d!$;Qg#t_%BG1 z--0W14#mY@KnHj8raQd^xA&cr)8ZVplJ=6~Z!Q&+K>-Ql48_g|cy-afBMKVRw!| zX@^2FCvH2u9ZqF(MS8pbRjRgcCF7->?+$g$wC3|Zc%1V7wN-OAdIzVVq-fCNr2F<0 zWVu9M zL(~SOILw;!wKv{NviX!QssP+{4r;4ScQ3UM&Qnxd2^FN5YGN;vO10TSwT2X`t=)i8!(ZV|b!Gu1S`La|d(>vXHS6*8YE ziWhXjK;V3DZ{t-`5C^wPaU|#Jl7%4`6N1@E~7UH~*3ID(PeGlb% zpE$m~&)4|&J}y1H9r4XfPe(ixy5RU={A=;miO_=F>nk_={SyQf&+c3BV#E-BWt7LS zlKV;!eRl?rxh|skk{R|k^zr$(VvI5Q9JLCK_l6=l`pocq>DuEw{=a)9{@W|L#Ew2Q z_(8lY4m6C!Ma-bLElk_TjaYKnFn)h(H zzJeo3tua8c6Ip&el(mwSUILzolrU*(5uKP&t6o;d0XYu{YH`)!L?q0mR)dFHqvcMH zMz1fEV3UVhUrhKcF`@!=YO-n$XJyvLxswpRn@py(^oq$8#cZW5_|g_#6dbAnr)Y?b zXI6xw!nQ^2+jhJePkGg4Uv&J0Z!zw_$PaF_=AD4i%UL;<=nG7(-3o4SR!$}!^b-Ik z+z9hHWYJbam#y63aOh?Q6(6=ZFio_A4`6r}CJV}Zs13EkQl5)XhQ6W@pOs3PY zG)%$%eI`;0_AR~|AvlhS8fxPpJr44@bguKz`Ja_6VPOiL7kTJx`%#o{QG5>ud9-sX zx+6QGJK2LoSRqk~dcfO3*zr|*5kMV5ir4@;a0o6;xs!x?E7*oftp@1QXQFgWN`DQQ z@hRAy$NLR@|G9dit%}pR3+0`F^T;r^JdMr`{Ly{ZRG3gztUjy+O(v z0+R)}A(FBNsdp)Bpn8|Gvedhjm8RY+31_E*BW1_cTWKeclfR}g96$Mhf!-5fce#u1-9C;Lt4?Yu4~b+ROVD5 z;^fi`gm;X=ew&Q3=>ue!jjx6S&3dn!wPOFW0%>hEK3QiC6nCld-jF@nlqkkX9(&j> zP;h%MbSQB9DI{CAm?Y!6BYDsnr2EJFUed7n~{RF3?23v7F4)v0P3>_ z9vh@9?reyCoJ_=3)Up~&f#-!pFxv6|f8q*^xbofz;v=^~1w9V0veE3#EmISi%QgX( zjMy?S0MRyi0F-f2*ad)6R{{dHnX%s{0R+aU;ttAmm*0c_8J^6CBYB)RAS=OO&O=fk zB8M`NjiWx8hJ(+FGid&viDR6k{{mju2G=!UZS8sicRjZFwvkCYZ=v=Fm7^8BB_R`o zCkHjNUwZWmXfa{qPZS$>PH=&n;MMLE9OovWeC?))|2}Vu2z8%et4x|q(Ci1jyA|s|;u^#cri%`>KQG%HHuHo;IN&fDRxj%>qb8Cc$Co?u!6nAUBHuUDO2o|5FH{RHz{(uW<;9e0&NJRL&f@+E==+d8+AXOxb zhAx?7M#Ie5KR)g(T>^hi!M@c)JBX#^U_b${TJSCnLx|5=^ML{w=LK-){{TR?7r^J7 z4SHK|KdSKNwq)~*{Zo7?py-_kcm7eeeI0ohSC07?Dv=)g5O+s)@b*b8Cd=xAN4qD3 zy52WgNxe0jZS6QVn-#u|Twa0eoN&t!U&}H>`RVqXR=9{?07!=_NI$;$OSq@S{mc?v zr=?Y@=a>i#>Uo+PONPxzmS#o16OeUI#iHmlGq9HEdQTWnucv)yuat#O%U6$ZHj@_U zZ#`QKbMZ?OKUzm5f6V3x$`;8Nh{oJ^SFb!P%<9AQ9}Kabin_@9Z#G(WYvDjHyb%{N z>p_Zl%J1?m%*N?2pn^AKdyj1sl$tqnD2hXkJnR(vppSAW^CIJYgTQkcP$vns2Hg%D z7cSy(ClI_IVXQAx_upY`T#9UVaVD32PEdtnuW@!}dm{e-vGy(SQ5Dz!Nmw9Y@J1Rn zYLsZ9qM`*w1wjpwO#&qvDFJ*{td?qPE9zZ9C6IV`Nv@a0_(1SiZE3|v)mG{QQBXs~ z1kfTXDk^Hk2zN~=Q85In=KuYknR|CP55V8=??;=pEzbz=;&u!vbU|f=KVyi`sd8T!eg`2OAOk*hc&&b%5)Woa zUqk}d_PiVs0&o?pgl_RZa)$CueLMhx<0)n@s~I&H*&Wsj2O^}E;X3ojO>e@34t4-ZTuR%~egM z(LiryRs(`9M6I~0K*a&@kmCe-i3pDua;J=2MchWibyp*PfUTwY(UJt3bsvJJYh)Q( zs=)_Gr;IN`1b#;BVgLe9eGNob;S;gx603$M;J)y49E#znSdwIgWWoL{sLtW>-qT*3 z{)Ffk$V-=DV^u^9pu`c10tgtu_>{(4=}xE4oI)p?cadj#g?T}bT)#jmkYJ>%Ua@b# zI~R5Fspd7H6ek3C3bXrKWsP7$w6Iiq77}{wZBD4*z3>oOx&%c1R(aW@DdtG@nRGcn z*=^6n07jXL2euit@*aljgd{e+A0%@q1=cj(-EG0(lkCcCwIvw2CsS*U75VL>Pd36S z0Ml}Z%E|WVKKew+s9Xd@L~m+0UhZXojb!7gHL39Y6TtlvTmUSG@Y6dui32TOQnN?otA4Mw)_qm#dPLglJ9 zsp>0fPFH2j|2-K)2w!~+`>J;xDdHZVp-~c}E`k$ZIg8@! zoYm+Ys5uq19Fx0MU#97fH!USs`UR|CVJM^h8AB~5NcF{WjJ*&HJsn~wltiEI{=5K` zSGFXX@)SdWdtjfs2KFyA_}weSt?zRtp-K{?z<)u>tj3wdj$Zs z$Bx7w4img?qJ8cVZ~qd#EFFk-(d!;ZjhT@Hu;!pw+4R*Z-Q?f^VJS$3rB&blu6 zQHoPt#YHOL#3)4`Wm5iZ%=JDMa|0H#n^VfmK1vB)T#w2-JD>iC{Lz^fp5k*kO>54_Yw@WM>;x_kC64KGP)YwpoC zV<6X&;AU$?suAXm42~`(4s$gniqHVqtocKu6-|4;Q^Lmathcmjr#@bLXt-L*Yz+B+X+$^-^_Jj6MgkTRp z@s6b>cTDX3bjJ!YC|<|@w5r>V_}D1-3nQI?K<44oq5a}(mRxG0U3`wCLM z+`&e-Artl-q#z(J=(=wq=#;wjngwgkeBh#)e{q=*Z$lS1pjw3uS*bIuZJ)BCBwWa< z&BYt5wyW_dSaZMS4IA7i#JlCc*}99*;0jLlLf`Dw?bWEzxmj>Rlq*!jkx%JX_i_m7MG_e9Ij>t|-fpA3ckhwjdWK2Hftz#B+% z_CC%oDF4}kOs79zn8qj0w{e(_h>7r0;DQKXSt0Ho!AGltyWGS6Dkda$utghJp;B}O z&Z|8}d(j6N061<7wt(V~!cS{TUTBh&sYK$L<0T<0#WmC}&3fqy2g0aZ`=$1w5R=r7RsnHQ1Z@Hu7+@pS3oR*EJNE z!Rf+uYj)q$jqqx&LNq;TbY@JAw1zTcOBti=$QJQ)ZWd?urQ7HM)7GC zRv18B;SbCbdKFX&{|vnVcwJg51Vsm;`s}IB#N7IzOPK3}&HRD&N@+{zsF=8Z$7syM z_~z221D@ z!XbYL6ltMD_!BT95w;m5dr>_iQD8%Xq5bElbU50=yZ01+G5Lf5A07QA8BUyy#Y+s~ z+XJQW&1TY-F2rOt?^Jc4-iZBq&}}XJIa)QkZFPihH9sfDon{C9;1)fez*%fGCsn7u z1M84;6imr}Cy&E}N=e;R{i**1E_c~IfLX_W*NsZ(AT}6Vge}E;Sr9@mi(RDKRONUx zM>+uTA2m@|s2OjD=|K<}^q5|XhQL!}MK2~zy@SVu^RRC=Uvf&JW6+Bk zm!}Nb7l1L`3Z5YKhn8ah=e<;|Cfg@a`=juK{+MC1eYj7WwE>0G8_yGgj8Z_=O+OPY zXJXFfDkmA4@l+wujj1McxKgSOy~AgQf-S@{^Dr4Sskvlw!}68fo(=&JLv z&Go1Rzao~=ua+`!_ZAh8QZA__cT9LUn{?i(xH=8&x`rcJL#Ojc)af_gxwK$C!`-?@ z747!?vFjEe_KKbF0eVoa{ZSY59(>LNf14oZFTfiy6sJh*mYk3>WMRC!NqT{3LA zdLD*R>?}XR;0DtWDsAYn-={9ScwIfP3bwQ&O|cQHt)F?quvV+BKdyfx0Yc^#yB)k^ zU-lhjBXBW2|8M1lv(NEcr{<47iMY+8 zFO#)>ol^TShnqE%+bAjz?nfGG_tq>CY{jFM*TM^*LQ=c}tAea2;9L{QVCWwQ^-#cP zJ@AiVghz1cz-0qsQF+Na^}d$)0uN|+{)M|2Gt&ueW_N*|7W8@jt4<;3H+#md_nt-6 zW|}>*t25tqW0#+&WaMyPh%+TC;=H| zxv}=})YyN?0zo&Kv5BmJUrigj9rm@`FetnL(v|#;_rz!m0?}L18t!k<|I~`23}*yR zbE}FUg%H3?Qo+a6{&Q3n951CP2f94ZO~qXiOi*|a0~G@k?xLMSWiU|-k44UCaRVOc ziaMjOhWfC$8ZSLT#~roSU5jApg6KWhEISG^Kp6T(W+=Uv`f!*dl|In)>yGPNX$=(h z=%z3!VtqJ=4(kls72)9V&!MBP<+C8Eh}O>_r@Qa$;O=Ruji*+Y<53BSe#HQ;j3e5I z?_%NYll(w^a5X7GtKl%nksMB&b?lQ|z~K(UzK1m}kjgRI;~xZx!L1ZFz0l%>YwQ*y z2pYqFc$#Ef;$=KuXDnU|-AypmV27ZkU5)dE$k}Lw*LC<#WVN{8Lf_xu^C%c^Eakxl zJjG>~!gBK8GBF!R1{;h!Q}GSeZ7TI`#WhFOSPhw0O{RXs01#&pOUOg)P?M;*5j9Qd z#O}AXg82*>FGL|Af5lnR=3dX`LALjp_K$H2ZP2=)4^dUcg`D=-wKj~x-GBwuv{8AC z=PXEqcpRsTp@BmT07H`v*Vx9PiA_UhpI=q-{E5&J(r8Hzj-sT>v71OsdaXU{Kf7>o zpERluzsGu7CugzftKpnH!3#V)j=XU;g|R^kfQ|#{whiSrd2Q?!0$nNPVVTguS=)_A z0&%D(YAyQ;#7SYKH^-P2^lsYO9_s<-HC^7qnEKOQI7AZ40c(S=uJ9vh9BOz~w_kC8 zsP*96EcQ=KL%;uB!LMGu>C^>J?K?u?uZevl9AGucu2YXS#`__wQ_QQC=&*av6Yx|J zY=~700Odpx;WOVeO?cRzU3Ga%Qy56Ir z7jkt{4NdM?i&fjhF5S(yNALUtvWa3u-4`xxt`Ew{*^m%Qp{fyV1hGxb` z?NDjY?kar%l{#hX3c1#lkl>&VL33QVztZIOxdz|3_%GR(vJ-HGG+5`c#6-$m`LBd+2+3^^1>knqw#t(UeZAQshLs@CW*H4764Y0>f&i z`-#&(L?XnKi4a{tkmk?r_vAnrI`l6N{c9f(dWex*P)9a9kWe{z{40~N z`zDVE?r|84L|>ZQP$_EHgmT^yylN+laH`z0TwJ89a_^FYTPUy%CV&@DiShY(yG7Qp z4*G)8uu$+o@>zj&P!4EVKJ{%SQ*AZED=?S1bF*%6j{}X4D2p3v!J_AQG4WOfS@_Cn%fBAel|Ria&q{i;b$r5dZwsDNQkQHctZ(5fS|5{ zbrBlKaGeNbo?xbD9ELL9XWZYA)jSOvDe9GWVmMlR=c?1xNW0nJI=_bzUX0Xlc{he$$=Mdk^em8|1I;Mhy1@{LNJ@>qM;loFPjB5H~Zz|A^_Io z6p_pt+CA}elrcj8cX?xASxM zXdvmfmq8(VRV^4bD^T`391hC}kJg91F?BLL06q1WlQ7Dsq)7gAI^}QLNVZFB9!Npg z0xk-6cqa8p)S#AcT@Tq%aGkYw8jmPw|5BRm^yT3t<(VIc)vM|StH&qTFDMQz0eVCC zDAdB;VV9`oULHUL;1m1FvXL;1YL}#z3_j9};czS7BV&s{0H;>DCq5*-u8W-nl(IjV z4{@S7?lHA%Fv99E6h<}vT6H_`kW2e4;6AhgwmqC>;1J|3s`h^Q@_u`Go2&;AQONX^ z_h9A)zapobG7g6(oO6}u!RND8?kDF6C?D(+MenTzJs<+)DtHeHt8YzurIqIn@O*@*ftS^7(1P7 z_+}Cl87Gc+Rf2ae=`Gc6COT`CZB6ywVGFJ^!nHs=P3o4RZc>9f5Aa|lG2CJA54zC@ z1>Jq`><>EG-n%#L6X;-<^9Ck4)>1$>5YYJyqnzDG=O8Hh@PQ11E$)u0{egIYpMyc* zH*X&p#5Z9jJbxMB{BEysv=82_%@$KF%7$yr1~!Au}Kj_-!^*HL^k z`(ZbfiAPpxRTKJ#$5&*pif{jA7kO`Ua^%U}iUE9?S$y6%qBX`g|Su&xC}@(ijN`n@cUVU5=sScaRGb0 z)L)pf0GKg$@$OOM17#QRT$ySKC^N-CwgJ+vlnTAay%w8;wod*n^i!kJ?8y)4pG-+SagBu-j-T)nM7j`{THkg5^RO=oHp5&2 zkI}kS!5#R@stRs5r#Ux`hS+q;D<}ej%u6YRId9qcj;6dZ@?Y~DN$fz6$wt4S_n2o+ z%%?|v*o}ez)>r}OaHTEy*#X^wQHG+39alfALX(&EvD7=U0Ii5ugA@xPHKqz@e}%%jjYHS?dJhH)d`fV zbLSz+Y897AdvWSovArFgE`N!LNio8scn~Xfss#IM2<=s+m9*hjK0i@C#jmMsA;B*i zgp*95RQ3$;TBq)T<1G&-axH2`iYH_Th-AF#6UD7?aej$O&k=%R-EOJk^Oqw&#=KB| zMU@2No^lI$M!BksBd}pJH!|sX_LL(-c--4$M%NqR*HFLef+G;~2uNpoh{Y28#6fn8 z1MR`;L*EH#xN}(%tOV@JYbStp6qvdPplgCsHXG2^#eqE*t=h8!aemCRm(n-DUpA4y zWOwE-^|4W;K0FzPV|}?%A1&Jowh?`%Ee70x>$+RGl~XsbDN(Eytd^~V0$mR_o+{@u z0l#!B>w;@jfda8dchZQzOE>zX$I@F^+Vfygy2M#T;>W|()R_nGjpAwAvZcut9K{NP zofHi~nHpa)XUjwxY!g>rAbie~qJA|?MhYA})4a6&oD?JSJM5M4CU5zOl+alHJ6it^ z*S|yb??C;Fjh^I(iVp4&(&0wasr1AL&`y-M3^1m$F;;BT-iKo{!J1c|y||T?KacW>`+aDlz~`|fD~=Ca ze!WIMFkTR!PV;^p^})_Kli+wIB%Ox7a@der-+#@dlKD~0ghc(4)ttvwfA)k(JIvPl zfTaBO2^KZnYJZDSa$s`?SDaIZ+M8$(WSZ7CBlIcW6CqV#UJ)NV3t*BPTxa&M3$t1a zhoqXXAbr%7Ec1Exrf4b*@|+o&3HKEt+b^ocet1z$c$0be$T!VHarow()wILkzhqG) zI18~&@5ugn9myy7nivjU%+{$hGz*=)3EYFfVV8;&*ddtYqC=adL$5*g#}2)i*dZCk z#QvCn8VSquD^*{%Q(Fkw|MaTB4x>_7?Qx{QmSm*1!t9K|Hh_otz#8Gdg3<`^DU4Qw zvlYT3pf4FJ?=Dd>9LG_ND5SD4-iPbpzXS)M?88>+!&d3T)5yg>JnHu$vYxaE@&gT$ z{Gv^{RIkS?PwX7t%aXy`8ft9%fZKNT?G@OmP$9r`PQswH*Z*QjZ0(MXJ&f;UdZeYD z)>FY`4BCLnK3!U>>!FVz@^V$zEARbS18}~JIaQEFqcw9C(nrB^?HO9GVUWgST2XJ# zi3BNMb>_aNV;$Ing050Hy=qD2D#-}XVox?=?!tPnbhiz=HJl-H5Ms9rMKrQ=+hE(m z&WTLmtLC3)=hOhYMwkb6GKkodxCw(u6EqGY{N=b1ys7ke&3X2wCQvl8`sDUk!YTn-hCE;k?_2kRAouoAo2qPqCECYt^wcTp!*jx2UVm`*P7gUyk2aq`gEgVMid z_AgEP2RZ{pLYT+%xKh?M!Y2aYC$d(sXR%XBXVOW1n5X8O-aq7$f69>g!*=_xSU}t5 zDOb*7600<7YWIWnQ`(u#ykhVaBSyQ*a)zI!uDdLmewK&2%d+zduc7kpvTV>?P zjwih2{4SFhc*#HQGWic)`|2$M?tiCov6t!6x9QqyWr=zPW(BQKWuY;`UjtT<69?2+ zx>|W4o%;Bss2epm%f!vL47JK&ZqJsv-7d6ZL>^;*Ir%~lp%!IPsG2=8#-mejy-@R$ z&JdGfAmI~+PZD5gKR+3UTEc)0tA+s(VC{@AZx4;!2pe0>$n%?a&|b7K;GB&D&e`&-vNnz=**b~5j8XtX`C}E7usU64X^YfB%(_wr%;^tA{MpnUO+%$bi;HSKF z04$uPfhS`l@Hg-mbFW-%V!`=Z6cORPk)}(#{azgtdmX(>kVk|>@XR}@C9!|M?byE_ z-SiI|cad^BjQyju#2t%DIsA$tE6OyZ810xEvZl|f+1+bbOLr%!L5F>^QsoHS6n0Sv zA3^LUw}&0qe=tPo#@SPJ2-w6N0YnT&2){s`^=n_&VK4pim_Wq7| zoS`rav}hd+4j13R1uUh$54hJXf!(F=tYk5C}l=BdwT7Fy?HGTX+!s@1E0wQkq ziuw5Krc82cqdh>yV~^ku<-8Mf)yuB2^&|{wATJ5FS{Ef^i$v;Gf|HbP;7EY|c^2=& zzW5-D&e27?voA*DiIYSrF9UASD|Y^m0`yQ1&;zXee`l**L`mBb?|zOWD{QplFUR8pl^R&3V&G0sO_? zs^g}QuY+pspSoDweqGt`aw}g8Q*3P4PEO`tY@!W|R%<;%M}#%z7Vs~`PVx|4W27oCV3B?XszHulx{kL#CRKiS@hGbAkR zwDz_im*q3dr;*|CcU&iN$J2VK&vR|+se!Sj8S1pa-h`uhy*|#&gucHR8YGt2W*ocm zNi)2g?ve>Q1gOHF(o-gPNPt3>8I~IR)=A7-!%t=m|3l&Koy>*{q zjvt0&k6gP=*%*{dab5p(oFaV&pMCb(&V?nkJ6MBMXKo4Q0=rFY5|Z*elXEbtxclbd zU;(QcNC5jr^Un^h{(~sK@54de%|o;NvDjESS=GE!FIQJe-PU}ug)iM*F<#liBg1GM zIf!cL>&G|*MtCAB^@c_#?GXJ2?3|G#YaDm85n32HxQ#ZSE(kDi+8n+=ql0dAa;|e> z7H2Epz)=SwyS@h<*4qUov7Hoydpj4xbE+FH$;EI&^6;|BI|mQ~LoIaLisPr{F?zJ| z^lva;g@Y1q=dk&-&g*3!Vz*dpvwkJ^8*Grf$MEME_7IPhBq?To7lTYC=V=f;>+?!D z2J{xQ{Vw0 z_#E18ei(3IpN}WSB_-f~nU-+35m})H@RBad1(%>BqzvAa2&S)(z4YIhrwR1o!TSvr z%?kh}fhqR9;!$pXOw9dp?Kq<<_>`h*&(i;R?&1^mi{-IG(ue#wThXcbg5YSW*pc9J z&zfJVTAWI%UqC}?N)b3&A0s6FbGhlX7E{Et>35*-CrQHe470^h`XSGjzXqD0h`iK| zx1WPcX_p^biJLr5@e+E})mHqQ;J(4Qa}wbUDntHke3zF!l?wMO+IrtJ=0{s(Q_6}T zhV=MWi<&}>yYUXO$Eh{@|zqO(j1)svNSBpWTTe~CBb-e89PVbHRAQ1NC~|NA2MBgDQoqQwKk(LsH2E= zV78Vni$1e*BD|D!dbwPCDGQa`-MJ_$BHxDo1^`q(sg{BUT`k>{J&^34Y+MiJLsN14 zrEA=Py~g@1wW|0DBXSOkwFZ~w8sXhSwaa|6r-_@mvEnfNHJ8@^M&wOqO7>wj^E5uK z^h65ot3?)|C9d9wa%YGQDx5;m01Oqhti-7nyjdx~G@iBJhE=%paGMPGSe8tu%<=6L z(xb@V*;WWH%a&>Gn_r-rWjL<$O=_?xuWxq3au- z7c8N_=$DEGgv(w8mZqrgdaFGV^_}Q8jEFM$7HarlsiFp2Ujm)ZxXilXGf-L!zy5as zk)_YluUBtOqG6a=PjXH)P40n1Z`_Fr@~$2h&9HPvOjvTXV=rI~#~wNO!9hkN@rP@H zuSmx!FD!HKg!xuGFQq*>GKjU|5d`rKDhI?FXqdao0HC7WC!o$<3eK=Myq=cx8Hx}& zugEO*+-epd@5^w#3}r>uXI+Gti!l5a+4YD}*0SU^Ln5BVB<~mkC13lmc8j3o0lETPip{`% z&L7-4b+&@eedCwE{@=t+$aXo$+EVi89-(KM?bu!gL2sl6tKQ%qcI$Y8vlY-eD( zjy)x$2hq#tRXK>Z@!DBNOfE_*{!#dMMKQD|BgKr#l(S1%MI&O^+xkd9_FrN&d3e63 zdvQYE?eGL^lE!C&<&Do(A{hMW@qtsUT2OD~S>jAN#c~9$Mhed5`0OFq&VUOX`V547 zD9$3%YOsbZf%t-BC~iEk?}g5Aj`d}c1R}by!InRwH6LFLc79mJF{?Z zpJ9aQ=`mq2YGDr{YU7ncC%14!N@YwtF?YTUiQzjYL{DuixsqMxjPi?6%w#cw?^)t}}+l7ga+TiUCm*c9V8Efp~1&O)he%cmze%jDj z2S07l9dT;+px-er@-VGf__Bx&=3_?#GVEf?35))b{qg(Q(&UL}Fx<+7lQ6ru z!8`&Eeex@A&7^ZMa~OnwEsqtJV4jZ@^F#A=;i+Jq82q0A9QyQfjR=JjeJ);&8tA_( zRNu5y&KHIe+q{)+`=lyJ_7l74=KnG$5bHXq!J!x5^~U#2C(%ffIQgD47puq zcvmveRf*p_-RVQnx5Q|_(_b%Eot_-PmKXiTW)1E7&a&`@#ZT;(I${7xt+{>SJU8xvi)e$R znI!*PZU5w!6;={BUPp5OF8y!O`4+rxIY2+O9MBcO0S&pf|BRvDhW?_7?s!04EhO~l z-$*XzWx@~WPU}oO%{UBm5^k~@JGseni8*_p)T_n`_ChC zs2sA1w4F#AEbEa)v`E>5(iFf6b1>eU-F)}B-j;2fmdd#j@JP=c)Bd%#@&5>bI|Qixj#kV5=S+q~RZ z@e=bk^;7y4b-sN;YXR2gZxjSjV<~G(Omjs;-dpHOZX^wS%}I*EKa~=XoMOY_QsODL zIn8S*OEsj&@Bi4|OOPY{_WZ+O^AfMI-m3m_|J(jt5wBn4N9-q~WewPJN1xfU3**A^ z8uT~^1y4&~4qQ58E>}-%*9X^;+-z+3VZIW?3+wAr?XowpkO#zi6HX#(qT-=59eN>* z-k+DD8f3**CjW9+XnOXZctn~cfMNG{zDuR%-~&-S4~)l;v7zJoi<*@c=p?BLo|>t1 zQ8G0|1VHA`F7W!OwME%UiaG@CA6fKRYXAT|(3jAcN0GhB;mug{eDC8d@8eYO zW1#nOjQ7#s`{;uY))QJuHRIvj#)8U8%AfAQwhdd`F_%ZJY@(8KiEJCy3J8c6Jfti) zpM8uIg4iXV9$`q?EQ6ISVJOPU!X4b>IWZ`5;%1xjJ`)RFg=`5^Bl3kXDiA4E=hVK! z3VG%PyN&iw>yc)xXlpt|=*I}ZfUwXI_#kYRg<(Lu%L&0%RK5Hp&~tsvz+x*7MZR`( zaPr^uqOsz+c>oWV)@n+rH`Y0$zp5&(6kL4%C_BLp>akul72p2g`7fQ*lv+%zAJb;x z&>jMX>fTZnJk5@|9QC4{LZOT@z0m8o-ih|9w_udjlj^|NrED1N&3_i;D6CN+b}erS zz3cbGVQtOHjzVX$kPL@5#FpxOXyIo?n3r7&v+B}HxGK@_tOuX1;=9^Bnt;_OiBW+m zye&h&4o(=Kot+5dibv3#JPa_0gQi%rASl5C{IAS(P#E-0y{`d^={ZGgZGk*NV**&p zV+FQ8vh&O(OwuYBuoFC(#65NFb4bVPyvJ(J_WfznZ+iipwa=X;lODzstM+{3Jr-&9 zr?PvKctG;;UCC8uRKalbaJ!pE|jQhWF1PahaY`8 zG)jpUj3ttJcNM>CUBz68^owzMh)f3phP~Z%U-Eg6I_-&uc6&f?7xj_Z%PQNQYM!oc z+6c2j^X_%4L}pNl1`ck9)$pK4@k^_$B{kH9$d#NENe4jXh~WJmZ2p|Qq3hSU8CFB; ztDW};5OYSAW|+C$NmnR?nb4t4*{XgTlb9K!N&=y8*Gm(xt{+yD;7>}ZTGyn9=G6t?*KUZ(GhW(7iQ2^a(JxhGBJ(_J zZhEg-`Tlr8{}#3`L6xa^qH=mQjg!59dl5@}xexR|>R(wJQ{v5;bqVgT63$Per90HY zg^=Rp+`8Zn<%V7K#n3!#;uLJJ&P6-rWjo-M`+azD`UQqD23y7UYIr{#U0)!lJ53M5 z9vR`%`hrP-Af+j)!jtO@E@wD)D+(a}*!qGZ3I7h^^0N0+LP5^Z$tAH%yog&QqNu)L z0%F=@bZ9IY$4mSqacC?NCrHHQu>r{8z#E{Z&iRXZFj^uvn-ZdLkm$=}-1#R&PnGCN zu@94@$4GQh44%BWi&Xpx;|uE`kv-Ul%baR*a|pERnt6KEy6aekLHe+?_6j)e#V{X z)qZOH!8>0Muibyfcm0fi+JD9;bw+dMewwZHGF`l%OuzOr4cSkob3M2sYe6iaZ_hbF z0)1dGE2a%?2g=m=`lHG1VbV}WtsQzCHOJrhbQ_2z3&fIKA5Dqh!V`xw{={z&n|MlNa%hiVk;*&}qE@|X8Wz)ZaTy?WXegH8_}LPY6?#N} zCgXt$NGwj#SX}Fy<6Mk`d^C_S#;J4X z{p?^n^c_y9?JL^!#K9r;5p?*6BV&5|OW=12c#uhfb9_XpbxLHH>-)*{^>FdP_1Lb) zYvTO$*4s=urA~K_fT&pnB#oL;VjjyAd}318OOG9$_`0lE6P%Kgk?-LoU3(!UKS0?b z!)m-3oZsp4VrlA?-?5>sy{T4uG3urf<}1T$n*Qx&l=a)o_%buzpV(hn@6s!#QA=ki zdc=9Q)eIu{PO{~NAM7@P1oDtOKxENXpCUgHBRIlu64^ow^_~Y^vipnn1gV$g+&BzSJ6y5r@A(BP|uu1gRNa= zByZ@D@!Kvl4(^z-ylhWO=&knFJ)LwdD*uqA-AbXQKb(*gfPge zGfIG&X$j?>#q5rUDq7iq_;_E7lM1q^THsZu_;5=Wq{_HOInE}tB9k*h*E%ytz_R^m zIDxnVXo1D{u=Qx@V&2WrBEnC8!($!3vMY})IOUXZsF=#1;ANS14YTl8r&>R`Oo~_} zr(5kX`&mPqrgcin^yLFJKA6DhUp}?RR}O1EWCmnT++a5^^1p)q*C_vMnE!R6|8=bY z^%L(av>eD(?V*<^IfW)wFW+E@L}mm#2O>1A0r!K|>d40ILugwFEm9NuIs0nK5Nt7F z%#Q>gN4tK%fwN`8sIXx+)^X)=d#3awRxUm&Jti zx+n&dgi}}sWUt5c%`d-EmTcj@m_9Mc((TFgM!~8QvF$sXAeNzVpV15c7ORLw(eXU5`(;mto6Q@$rdwHa{YMn=ml~ z?)32ga-gDJVtoGtHTi!rP<#j>fh1?{{t^QPV}x)E2WmV1#P45P%~Ppwr12N7X@1u_ zCLcb4)92MX6IdohL;U@|kLdZT!JkL~H$qZ)< z`3et8JuT-o+c4LIEhFp9z{vX0T{vvPCi)Isv!l!Mg!NkJ3G3(OV8BY);EqY3U_snp z4NpCsj6B|iCv!Xq4h`A{1YoH|XQaH}C&yj!1=p6Wn_)c@U3C%gJu|gc z9tbr5G?>K&(uDJ}p;|ei_;sfm;&ZLb8sK(XosP!ajPt`zC3I`a_ETy-!YUZT(Uo{L z!P!g8AY%Vq{;^A&p&`gp4~-csa5r%`3_Kf3thN#(JOrJwwokKum}Z2Ra=bjoj=lm3 z&D|{pIVgwau5U(;bL+aWo)|Ky+TH#rpc&a(i} zjIrFeJx%;h&a(Gn?Q#c!9QD&a|C1QsFCH)B;pP7p6e#)eo`M%gt0@(CsUP=mKd!)! zd%=%8-H&_Nk2}tfyUU9+B9j1y8V}mtQy_)emH>V|GR5ZOkG(PWGvxBt+Z;&KE{X6m zr&7%e_?^Q}!IqFysb+=|9wc!LIhAT|7~vBnjv+m-LI0DW>?4^jK$YNOfg!|_?4=#N z7l{m4_vEvl{5t7KK=Zsz6=dX2I4R>fe#Xp;f55S>GrlCns!6wd+0S#jD2rdp)yi6t zf?r@@`(f7F9KEqCM~zV5==DJaZ8rP%2LfS)zLw)~ZX!^>9Jo$s zey4}mx4&PM4BSCMR3DH{oSQRwPkXE$Cr)0(A&l6N5V5Zm5&x#$gx1%J{Xft55=bxy zBTMpm5Tq3iZMC11(?Am4&!aNiM@ZFImq$cn^P?d5||iBI5v!rzxY=V zfn1!)yr3a6#l?a05d)3z?{J(W3aQmgo2i92rZZ`VbkGgp3xAP!Ss>{RAzz-wSN2bil2oSr?c#u(N2hGxiF(!X zmeRxft*-tS*$`f>oKlJJ@-XVqPHZ{@H)X%I-J)tc+=&o^*lS>J@%iCI1wp`sWlQ=QSc;qV%TT zeZ2yw*h0-Lh;sWW7@b38W5kH!yHU`2=6bd(J&LL+;nSH|wCs(J`-#K5FK9<$JF*M=JUK!qhOXbp_0Hn7;~o6?Jb~Xa-b^^Y^6N z?%pm{oplet1m{?CrS_2@S#sZ0RnnaCW7=Eml{)9glv=1u84=nJg|w zbkz+f$UO0g16xdy;x9ybpMcBJQQ!zxI#3`yeJ%Jk5!b}X;AU^KVT8LvoU&hVf0*K7 z?OCZSUhF{lUaL!*bAMF-y;4O#rqoogRDbkVj%pM59~>FQ@h82_kDF;E(?}-j;Tg0M zsRIx7ZoMYs(~}qD=NsbwDZ?2`(?zIX#FaVcEqNdp=%d>>l6*naDHy7Z0^slxW5q9D`^s3K8AofvK zBXni{`&FvH${rCH2%x^mMHK^$6~#l9xEz5EHC%UERi(FA6<6?`q&U~&I*Jap-6!{- zvaEUOy=NYmjL#$yWh_XukoE`DfIDS>P>!#}f7}*L0V(s}>jC74vHg@>5O#!C@Hj>! zjaT6_3Iv}8oW=EYTM>euj_xR+r=v3lnKoFv^)0{pU;_$53~7|H)6hS@k<4sMP!!H;OHmcOe|r=+P)nEE zN|+JTucll4^A@~Z<-loYuv)ImO&B;(8v;%mnCp~=jUZo(0Fm)N8!klf5*w6NO91m= zJ$wPAWGQn^BtnHo+cddM#h32dgG+H2XVgVSMzjqD>{&ZJ5=I!|QqH zFFcAJ2HggiP}pK;t$Z*V-bu{iSOL@Sjg0Zo#w=I9j-3;(`UID=uXgd19QAoXb9vcf za8+5;aQ7DWc6m~C$@Ka_=4G%b8Ga7#IO5GN(t`3RNtjV%(-<@%@**$oa(GerOGW}P zq_^?2RO-2c&@s7D;vP_SI||L1qm&t!OUVaV^5uB0D^g++PB+rr7HDKVn%iQ_?!ujI z%JF)xQwT?T@Yacm0B%Y;k#3^NBVcEW-NQ`G2iVH-NqP5Is9!VmYmGRWtaO9%go~I^ zoGlpUZ5ws#M*v$1qH>SsXYoq(B>gmW6FG#|(6IY0ZoE6itJ&Y({48C~{vwx<+?{QJ zOxM>}T3^lj+7E4PkKI9&W`(_72;){XlNyL1s(;bt4PxUkGx zES`AZK~iij{s0={;54MM!Tg5)TDJ zg-B{93`$_yiJNUiZ1GAoN z66HruDKZvXLQG@3Yx9=>bDKx9P1$*3MXF(&cOH(p9qY@6L7iOsfw$Z`Xc`KL)8Jq{ z*gJtI2*Ks<3wW@Y1GNS{0ZDUis$<>Z1C6np>`iO-4cJq*+;}Ruv`26VTphbrC{SKj zkz$1TDyo{xlUS`Vp1@_q2uP^>ypk07%8MPP2|&0hDWj;K3>Th8an*8+dVDN(W}mv? z6DhI#1-feH%AZcKLX1z1RY>*Kq%T1@sz3d9nT6{l{VJr(sXi2@v2)OOPru>GXSfFt z%)-i$qofpLMJN|$k(i!Ur5hD2**Kjef1>_@N9k&pi#w9(&XmmPs_`kfO6jXd_!2N4 z#R~N+FWZRRn~d-~D8{YP%yY2;#l@(B?89{kM920L+xMFe;p7rd$>j^FV~~o6E4|_Q zDT8I3SjjM5$zWz1m{7^7QpsT9eDzHHel+V~AyTsYDT6dXpzT*61+12{w(vKCsva=* z1{&~m3eWil6Om{hp9A@cUmn@3FOahxI;u4dvbO9WxT zYJ}w$pKNn+;OUeR2E3b`D-)25pu$<1Jg^|1_O?|#3k--`p$!RPJ-%As!py-{o4DUjb+?Bmv;tP$IQ zrU41|C{|mV5f&$($`RrND1v#3moV=_o*^MXrYB zM|jd6&cFhihWuSwh5QXwdFjZCVyaeMBL}`yl_0jKSdYLZswL_t;=7_S8;1Q2q{LC7 zOyk}fGysBW^ug2;vVxX*!6bZu0j%iVCa?+K#HAUym@PO3lklm>(|rIak2MhQimbf( zJsR|?rnZvWoN}=*gB;Ufgm2=M#J!-}X^CIYX;O4eJ z{kfuBG*yLpy>u*c2ACefPwY-p1r)c0Xh&+SSePP{Rrp+l%gY*5OdK3U5IkOo0>4p&&AM5Nv=GK#TAqTf#mY!<>m4@LExa`#D!` z!94+0f&TzL$)w3*lAH5q4S=-s9MQGwfSZhOC0(>C;P!%4f za&T0?3x>uFL2@|?`{#FjcdQCC(5V(-xG*#R%*?1*L5dlM3-_1ZqWt(ou~xSZ_V#7<{u>?o-_1wLMkh%@t#FJpIGrx;FpOu9Gg1iZ&5P7k#{$TM_>oLT>e z`XBwHs-Gvp{`AxJ6aKT4>i_XLDP;X{ME@K#4;|`f^eNJ;YLDHdKQoVhy!B{8!g{1m z9@0Jk{xosH;-bqde-YUvTF6ZgULg}3?}K$cqBudb9+{~eCs49G{tQT)6yx!J?DIO_ z%|ImP{8VSwRPdRsri<|Es}Y_6a>x2HGadALF8$qNLI2M+(%hHmg-_yddt@4Vr_*F) z;n1sit(HqEZ^@`82F1?AH-|R-XVtl}KK-+Z5$1M8w|T2-b9=na)X-YL^*1|Cgr=8h z))w3pUG>T#^ncv7{(2KgT`B%4^>kMJ%N8-iJ#S31{yJXlK>F)|E=m3M!I#>Yr_TzY zzdraaRB?tgD>ZYE4yQU$XwX1od>*U&l!+d13>zKEDujk!2{7%807z?Vk2~ zHSvm*CfJX!XZ!C|J$EHeFyU*MKUVW>tbg>sMOS&>DXDI{HM{Sb@MnJo+y=JEjY1`# zIe9ruI^8^i+n#u;Kfm(u+=}R{?*6sV`W9T=h_0%*8Sk<}30RP$wFt=87a3`cA)OE4 z0pb_>fYE+um#wwyzIkLNxvtsQSWy6l!bR;Tt;61Q0e1%ZXdoAc-W9Vm*Ij+p{XtU28Fj13N>ZX?jp_v`kG98zUj)1|y z4vcT}wHmOl_ET0f%?NoF7A)`N$pY4FY(yA5Mg_0a!3-6=R0qE=mCV1;!T+e>XdV1i z1y9w%O)7Yt4z5u_LkFLhV5rJ?zL1VVk2AuXKoQ15Zq^V!-3SjPhowJI7`|t!OQO!a z91Zr(sx}YoYgEt!yHo`|unSbs1N&?h^uQjhf*#mMsh|gTUlsJg{x3vokZJlU>%uI6EQV1&z_n7)^Zp@ z1wDYrOE3{&?%9lmoH7c}w2dL2jmW*ERv+R_RgnjAstS4#fBj1#1rOrSRnUWYvkH0; zzovp7#4A+LgZNPu^dMd$!8pX`5yry50y08t_E(U82~Gz{V`uZXko=+(!Y@{}df?}) zpa=dLD(HbfPz62k4_84C{9Y>Pfxl;>bln5rRY4E@4YWKRo(ch z>V~H2zeq_V+=JXqO~(Z~igxxo>J}aKaXf0ej@l59`lXI~J|2~)qr^9+s{T|RrEL3z z0UWKP=Ee*5R#6eLf0>T>`1z&k(5;LU3YtiLgHJ&lFD9al@agfoR_Uk#@u~N4*n|x?D%q#G}UPsDG%a*ww_Y58^30_0D*KY#lWx9@SGv zT^En~xJ1$=G#>SWjyg6T^@xt@8;`n2MJb$r4Xo<**$4b4UFJQd zL?Z9LQb)ZSkD8#PmdB$;>Zk|fQ9sjBcf_N9qN8TTqf&I#HSwsO7bzrM9FO`?MJd2X zBEI8&PujERLb@=XFX|f|^9JZ9)tG-Y*k`nYhTI6J!MJC7#opB^(0ZlUhEBovODX0+ z{JflE9*dt>Qbaz{8)=0ZjUPx5X;zzIgsF3fAL+Kt`rvLbI0zEGcp!;adLgI>VXgv^ zewChhKNFaJ-h8AAdaNQ{1wB@=_d+S_v5GHM&|?)Jsi4Oy-cUi0RlKBv9;^7L1mmp2 z960Y#Swy&@b>?L?9k1rsT)h$+k&l^xH(Ak#VK97vHy>ypZjy!kDpj|~?M z(Cfr-74$kWNCmx49HD|bcv!nU#qHb*rFkyQxntwW6+|u+!PE#}hPuG- zo!L`S3g!_IG4a%C_+`u;_)DIcL;qFctj@g>1}AKN1CbVNfo6}hWTXP$!_&zs=;7%Y z74-0wp@JTszMmjn_we)|74-1*sS0{{+N6RWp4Lc^cxs8`sg{&^=il*H#+@n{q&xYz z93hT71YdDn?c7OZG&>V>aqGjG$G3JOeaO$$bc)gM3`xcugTGkNs|0zt6e$$bj)R4m z90LHKL@+kGyJIoVT~JYeR_ron&&$=%N+F61Yb?lEtg*ARVhe#}ssB{gZ=N}B`>&NR}UieOidkYBYlGG&{Lv~OA`Xe*YB`#gx%YSOWul6Xu|Ab6TT%M<>O&R?s z+yga?NaI#d*b+paSw#PVa$zjsj$HJg_NetI=1{u$ObBR_JE02qCz9(Szn*Wg-9@_G zknr=t76qCe%F~VaveH$>M@U7`s55T|u$b3fB^l>3<9=FSB)R^fTUS1elAFc>6sx;l zGS()y+bbCzlJNq`7}4#%OlO1yk-qnl9>0i&zGO?*e80{HW+ZO?e(T0}-NQ~_tTRTf zo`hM&a$00mLhi^fr87|b}!*uv;9ggYni8^fP@R2&~>TquzzDhOy?JWGd9)8XIh@XvL4 ziVokZ!-WWIJ)4|dp~~Ti(pm?$Fi3)Y30A242ninV1$#>{%?q}D$Fe7Q!I%Vlc)<@P z_){$t4*F#V^TIji(k&A>Rk=oS zat%bJTb9NdSiU(aWe`(7M+#T7Lom;*wVAr3>$~uW)OCML-aAl#hi>btzegtYx8$>~ z`iuJqKF&6M(p7%}GWwgjDXCWj5a~u!+2726C#4+2ly8v2{vHEl{crj^?cD?Qx8ZfP z+G%_tZ1}xdDmgliZ(@#VA9mH>T-1T_txxKejPHXf>~HScq!ea%d+7e2f_3SC)884J z57gh5+5`1B^9AM@oItHZ@SWJ-EvY zT-OeEWK|Qk_-r|jDQ_Z$G_t3E2b{(CtB^0co)3BN90*^z(vyz!KM@-Z&mRb1OC`tt z@HI_x>n}(lzUr~AC(&3Ez93tQJa&oI zcA`=F1gdnx6=Yed>)IQh!|%KLAHTc%=jHK!neVj@`I*M}j{g|%{p*;vzc9;)cejM| z!}TlgLo8hih4G7YVVvZeDh&GY{V!!jt+Rin&W3;kZn@_EbPraQEX8cWYsJ4(V*XQ- z^Iv$N`~#BnA9tYqKS|F2pA!xMPw(XXFL%x_eX+mryeyScCP{&lz0!<|eV;(yGLN5o zO2xj{AeotGRP3XKCMC?i75hGA@@d0rP}a9+uh{n?W3wyveT3i8w)HD9+mrB3p*aEH zUAMO$k|Eopgy^^T*?!ym_~6=;u0iErv5(TAQ&k1{<{eeBkFwvKs~nnO$|idy;avZ! z>W>k=7ooYoRwxmW&Ce_LH4vb(ihW!0tFG4%tLbpQNl#$qD2oGT`Kj1PA#(22ihUGT z%{wdhQOGna;Sy>y&-*L(QRr1&uBg~I4gqs~#Xd@!M)+3{YLM}XBzjK9Z^b?ey+)Mg zD;4`F;2Pl*rC97n{H$Ne)%n$twMO_D6?++elJ6sMvrYVPAQgVhadS_s*hlGG0hU#< z?+XN$_aqevkqjmk5dP@xuVag7wGEiHlei2Wv0e~~G&R503-SPfxg9-uUEY(@?NQow z%DwSmzByy`C?wL?B^Vg#g}Gzy7}dNHo{L^p>^q87bFL=AKN6(sihYw%(cBRg`zRcn zPgU%rkZwMT#y?Z|rjTwfuGq)TMCf(R4}AVmv5z~cvcVPmD7>pjv*$bmfi^5Oouo_OrM1JJ?D@zxD zW#Tge=aTN-58{Mpz6+?K$nyQG=(n&!j94Fg88<_c>5uzsyf5eTtkK+uQOu26KZSL& zUAY99j9NXQ6R<1S;oGr#^uw8W;cP^HfrY1XD^|Ry^;8o!dX)|Mb}D(Zf!wjB-i22f zyYhOFWK)LL$4RIzkcoVZuN#{N_aWXVZ?@{#9`VmW{Ih5Lvse7HcZyXD0wvg?KS!F+yVSEz0iGYrBHN(1xJZPdCMBWM?jEoA=nP(Mg8Q#Xf3Af!nnJL{woF&?CCLGMdt{ea3p8CMXf>HXcuHS)}V}%l!}Gy zb4og+vK{LWh_VZEP#7d`7YuZ)>m+7`W1Ym0`PInmSU1Wy*&_P}H=`wH^qvTTDSg8( znGIY3e2-XOea(f|iQY*wpu|KKqk$e%3@`3yv9Ywa+^o`T!q z1l;qk0J`oIbm1le4wg9))=x>50Zp#|YSho$T~F)EqSiX~C0B?a0$#^Y||7T(y>Xcq17Pvti5{wZ78LsH;za_M#gF zF#-3if8psY61ps?y}B)y3Ub)om0A~ z^A{cl7ADs@pvyX6c$FAfmyCfqcCaC8P1nspL8hRc;?+Dnx#rhOyTZVgsF@hBd}x>Y z&^GuO_=k!MxD7B>Pr$&9UDkOB>I60WGyHiUM491kxdQZl53Q%LQe29o1u>>~4l0F> zudJg=FVTrV!&zs#p7EILzW`T`THol&ea2Vu$^8yyyf?Xj3Af>Day!;3z5O|jc`Y;e zY(&xc&l)8kn9AqNN1kI{ARl8L>*xH?llu($ZpMVwfKt{KsRQeW)tqkU3{)(M-BLX1 zA+VaL^|glcZ_w#`Oeie@&bRTc`3-rVup=jDptRzkE?N1?(XJ;ib=%$1QzE~8H(^MgOKAEx2}AO6FMmifHJgnhO2*~| zeki=h8R_9{CC*5Xl}5W}q_@^|%ScaRu|!6?rcpD}Z^4T?G1BshT}`5+Q9mb9zOF24 zO;uk>jI`dX`A?`hVG<4Lvd+3!RGq)_>zv(1oo{({7ADuZ1)h95FDN&m&TbfKg>J@Y zq@Vs?5EF2Bf+HnBJGaZ4vo*B$`_QiRp^Y=r|9W-apIqn3UDmnwWrczDew{nIsPiKa z1Ht4v--GM8&KQ`1I=f+{t-2YXk?!znZURF}z`&d?Yd%6l`;$qEprY1L^#vM;GtzTa zT)#Th#nUNOiy0xg}G18N+*F&{!QW7J5=b{dbG=V?K`#88R9uliJzD28* zy>>08E?lbjHcwRdV`$+fTMoQ^3yB%`v|$Tp!^>Kc63XF`sR-8KFo7H^p5uEvMVW9) zdXg@UH*WS@0qjFP=N{^oC!EIME@-X!O4NGgEcKQg#f`_)#lrOO`ZZ73TXwJzUQerI zS+Ze87%35yz!Yr=W;gB&Cy;FmBP)60i*7jFhdt+5~ELI+nwc~&kB*OyPg z_gfGG>DD~yKjF9X9)ZH2AdgF$caU(|6S#w_JRl0ZtXtE2VmzwkS&fUcqxq@!m~6ZqWKV|2FreKo z8S7Oyy&6)2tfR{o!Z{86;OUd9MGO|;Ht<~dYuqgm@Q`sV&owiu9r!>+Wm&h|ZSHMY zp%9xta&i%lQ0G33hS&-+VTiM;k>e7{(aaok=XXx#Z8#jkTD57&U@W|f!A^A?&e&kH zRnuc+K@kpFjXQZQAT}I-I<5E6Ezz+7rcye8@rv=ySQ6svt@!I0;?uAuJ%#+dz`3G7 zC^}bZ2>M}_JC_;;BitXKQS0*tbsz_BksgKa-s$b3?CHFn&}G4SwRU3_Ce~73tU_U@ z@*4idYZ1h@k`&#i2f{}QF5+d8=A6n29B&9TO@D3?moX&70k}qi>}-p532`2BHi}_o z_p15ta+vU<=A=qiJcUZIP@(?3+=Sv8ad1Bm!hsO(j#3i`@ryU-&`do2p2MjM^PDY@ z#d*5OD=+rI23h>f>hR&{S&X_5pI-pK70s0Aa5oK?y)~<-3jWEtdnz*52dj{Vn}k(S z=f(+`d8JR<>+rIl6RIj?F91}!wgxpW0*r(TSFP)Ke-J}T935G%>=0fcQt%`iuAj4{ zF7?5MU6=Z7o+@Rr_0p1Cl~pqR&h{i^y(ZB{r_pVe7A#ppFs z>SdIR!wDnx`Sl#l&?|WSm9CrN0XOul*a+i3J6_rXf}P+}2d@g@anP`H@mStgIT|3= z2bZz`a7mB{9|F$AbSy`gMT=5xT=tc~h0z&lHXdP=z?f)J4?ksi6b3I|%8AjUo_@;F z(HXt`lzvuCZ?EdmVl)H|*22F)@rchg4RX$l=VBHJ>;W`3Wh8x~= z@9omlGH8>cV0cNY3qBh)1Vn+Hg=3TwudZ@XU03(KO%% z_baA%Um)AYeUu3Ed1WqFWlrxDy%J#MmIbL^`-A%#R$WFk3zb!e~f7hB$?TqI=i~Fx*v66)v@dg{Y+0Te`#e}!SzQR*ojmSjhELk2C$yVIx@364dC2*M0 zjc~_?6+@yFtGsS8m|-zr#g(mey))liTkl+q(!;5!3AnG`4^I)O8a2y1*W~!JxIF%I zy}**ms~Q(GioxOdWU?|Q)i%bPV#+kl2_P9#h}00T=oK!Lan za7(q_1(0$TS{5W^Nq4`!p3Bi%NH6d^VXaGp^B6lHSJxlo?3+d6DSm7iIPh8r!seI~ zJ8%vjL$T@u_DgffP1f5{5#7QQ2=qD!ZZF1-wWE`e=HwywNJrA6g#i>(FF?l25LUG6 zOdM-3lFI?(O6-g@C&C(|Q{V|5e9mMmHMYbV;qB5n)y4#`jl-NpQsSZv(xtpRiF?Zu z2Y2Nx0q8LuB1J4QvBb`T&qOH!21%$WfySY_oh39>V_6~zDtSRvyhM6X;c-9R>%2}7 zWeY^tuzn2@E@TJSf2mO!)uwQJJ8!G%Fj zBB9uCsg*IZ9U7Totx0L5091pK%)yIy7<394a4-QO!d(FacJBR_%6);THRjW}R6L(j zu}|v{oC#B};8LlmbZIOdEW#r<{ALN+dGyAkG?_S^=`Hd*&|5(Xoxhae`HK<)RWtz~ zR?(z1hJksE73P!n(e_#;tcW~MemsS zZcnt2#^LLj?N2VT594!MyhPE(eIWQ9n>^i`*EfYvQDosX>4fNv5?-7(kE+HqXZE^5 zBQT3c1+&blRp9o?$xxRi~8lg6I@FQHdA=VqrSyp zq76=dIxW5DyiBmO^Wmq234_ae+qMc{RjW9`t7lwy3>rZek1osw12`Ak>u9J&&pdB{ zO1Rg>L-5=PAOjrvz*EIBsGWiW2FQKoCQuCKC-i4xJgV9F;G2PMlxl%)jmOeBOYrSQ zpbzr=%*imz6Z(sB)HEAp#+as>)WeEydaQw zy?B2)Nf=BIBV3LAMMl`h59N1m#OY>^0>1m~i7}`T(zp-8SBg#PJ&E%U$r z$N#GKzvg>iMr1bGgD!7G_*$YDG9Qc4?t=cElY0HbjWOBLvS;My*b#FYVMP$67(+0_ zV2D3C*O{2bH_{74Hq@zWRN?d|(O;Q9s?dl3U?F(5>CofapZPsbuqUZ6%w^-rHUC!E z`~-yJre#_)m7qVd)|S)z4vtTYH^=B_l+{`Ygpbs(`oQEH59p`NFBH}zs*Kv0HJ2fA8o&dicTX>E8fgA0kufDq#KuH+!#fgG;r(foF+p*QZ(AU{%&CB?Zo@G_H- zgBt=VOQ$?sKf|U#m}Z3ULXy?i!@SvQ3z(%=TTkjo$Tb2ZJvgSBnFX7!tH-P$+D ze%}b+2NJ=i1OBt(H2B^BqwZb6qbRce;Yk=^!01E_8kLo(=%S*6;srrXvP=j_AYLM_ z;B^&IQBh|A(Lh4a0Bt*5)F57V)%AvoiY{sZ#RM@S$m>Q$#a&cTT&H)Ui;5wzO8&p! zsp_7dT+sLbJRXyI(6z4cx4Pr#_$DP)|70KMc24o9%xb`ULQ7^ zD@}@dpZ^hbPKSD+&k;G+xLh&~NkOK8Qkf9r;WehKQzg37GszsRkMm)-MI`fV>p<%Q zKmL=o@YO8z8%-5*jJX6t2_2ZpikJ-3cvcNDP;~KdTkfR@Roh~jQnJ}9D2CR1>-1Vm zVWB|nwoK4`$&*lcpvl$Xe5h^93DnGO-34b)8Gu1R32jV_zex>38GvX58|qJ7`y2t> zDkBxvA~MJaNlJ|*Hp8q-yoqT;#xFAIWXDU^%_0&$Y31~!*I3S9TSNfhI-z7!;P7Ox)iZHT~TuUucmNB1Z7cWmH>j7RUeGB;PlGVTqnF!zqpvwgM zxsp;bDbTS%e~?UYY0RdAS%EwXuZhkewO|j>TC&WzDd9KDm$kybKVgJlV$`LXR<2aX zg}Rp~9wns%++_~9^@;CpbdfFU1fqHdm^}%PYJs%0k9viA#X*1pah^9V3B-EXUdm&z**lJp8f=IjGLBa0#N}$RO}N9 zLjyPQarFwbls37M5W4XzWBL{6or?o1qo3FQxES zz7FoIZeqny5~FS`4u@r0(}qDm3HH(e_M+;(kP{~A21fNb*ChGfQ^Y8zHCBERdT@_Z zH%_nvtj5;Ra^t2I{vjpHgV8+JS+c@@gZ!$araa2xI&O-e#i0=Zv}AKW#|*rDmaTwt zjDX*j`E$ou`$AXM4)VdBL;fHPDWJ)+pmi>5EFjL_#|80%waYPVaf_sy=7(hvVePOL zJ(BE(14KMt=w7=2=5|#6@{?qe_75_i)WmIHfzifNu_l8eTVweW=1rFqA}ViEXsJ!| zaEFjWEQ}))OLIH4*LlIC0@588UEN-ew$MDxH$f&lG*(N)#bs&C_t}AV>=Q z_sOw9ngL8fQyM)1ErLdU0viCCeJpBBd~;n#!}EIpNm?X3TB?UxhZVKJsK>ZzDXR!Z z-z6K+%oQ`wJuDgqzA}>ulO~f~{9B9uGm4In0AE?E>Dc&BrtzH!!>4pu@-R=y*-8Q6 z8G#x@i6RAYfDp&V0R46j!EQ?=w5|8VD4(w89A#9W+81po$i3k4y??4sHAi zz6DJ-eY2)ApSNq5c7i19C=9CVNf0<=t&yI|+t9vq!NP8UTl6-=bD(*izcw>$WyMmLaqNCf0^ky{xwf>*q5Pe-3%3MDA$X)FU)9~ zVwSCkD^VyUHaenxHds0}QHML4s4p0?ZVCk;$37d}6?!p9kxJU%uFs_7jvff(n^}WJ z579H%JL^ZRJVtobRf0&eZOj}SIrfG=hEXnloCq|Hig*N98 z9RXFwjR-hOCiq_V59G3g#j5!gS=h(hAKh26W$TeFL7yT?46`mBztE(%gJt?|-hUd5y-dzJ6>dW#pHfa` zV^N@0*q;FZ?LinXp$T;+*{4b0i0fqFQS$>a)+$*KaU?N12e;C2LJmf+W^wuO!WxW@ z!|RaxU=%k?x$9@iOgu-{V=_z}gp9f`)yh@9|VOO~uf$h(%~t9%94tm}{fZ&Esjl1v~k~{n}1G(XnhNpMsr#q88H% z)nFal7>vFH$s`Vu0h|2(*?`!Am21QJG?4fTeqv)Xt>LerS5#A$%V#VI(>_DBr9N{- zAIFUx>7QZf#?RrYh>uUpk%Bj|V4!RG>>TXv^Xnz?X;|o{m7A+GLfwaqecEK~gZ&a_ z>}!N-uosqxL>gch^)Ye_ngGf$*zOP(DY1tpEUs7V*C|G+yP~Wcu)u{0TyWmwq$O~$ zNH(pn6yGRvI3G%MsCgtyh~SUw4^`>=^n9yk+UsPdy-Llr2PQ9Z`L#RWa$40>Zh=4Y zjh=G9;FL=igBAo|D+rk1gBfv~5J(Or-lJ3?lkOVL<~p2j)qPT&3Qh|jptmj@{;&P% zX&=W^=-ssYL}TWpo}5IqF5Gi|4sq7>Jj|i677(>~@({(SobqPnwc>8$*6>=ZWT!E6 zvR|zX?uX(b@|88NKbEc5h<>uw0zd2G3q^S{ZR=Dp0j7%0&?fw3L**na78l0??RW)! z%FH`v*|)99d(d-sp-c-(-tnFv8cm+U;~ym(t-@@_wyb$1ja@J|M7MBI$dv7{C@Hrd`}Pqi0^B z8Rcv5+M}`84OHgm4TbG}Xj3qH5Rx);fm||DHYo{CM`I=h7Hr(OT0-j+XPtqp*fA^0 zk>s#o$U`Q^6y}ORk=`Gep~0wec<6ix2Eo`y@P{^ch85(YTvV*DIR|dHvm)h69hu{h z#Bt3?ylg9ea$raRsHnrCa0bH!2w>FWum%<+hID{6aocq?ZrUO$zhhA=C()VLCABf0 z^dOtF8qI-v2%B@VeGhpe>MU#MwR|0UOOrKxr z{e>H>xWaSkiF>i2liZ<&x#s)9*cN24r{RwtZ*k+BfZ8i2ojDx>W&w1vD-x^e+g2z* zyxnViUyKIMwp^&dSQ3%(^@n49 z=p#(qVrEzJ9oJ~NMniw7-jOm_&_bgKvD3uJhQ08sI6cBVZb>3eQM;44=?COT`wK6s z&o5@)`uySiv2LTk&B4jrfpy5c-I@!7*^yFnEgV0$w*L27q=2_+-qmVs-HW~iKN_jf z4By)`1NB8pkcHUwNVk^OvuO^Z6r}X$g~N(P1De<6ho4Yl4{K+KWpoEKXpO+_B?iky z7PiL=E`hkPHl%5Qyd|R6&{Us4<$Va{&3EeFKX4X(1K8~J)MJ|Sj<6Y(5j&Jf=mt~ z93KQ9$+6DIehrGss?Q%yD44pS)VeLlnsJF)SXz&ZXz&jkh2z$XMWV*UFT`DuXl6$Pq1mL>ZDqJd zvI=8YQJVUz_y3?!tF}sEsvn$>^HxCCa46OX!XgnSm*67mQk2YT2U=r_V-2&;^2|4( z>JdYyLkvG!WwQoXORn$+RlczYvBFrI;!rPr+H4n+I3OAkiRGExUr#{lhDoKiE!xcHJeF6)E%24v6@+fkfT-37!&PrW+tW*x{CW*g{K|w zC)Z;yU-#?|UBxX(ge^Zo7mqhM6xZFN?Zm9(tWctrmM%@eSos3xFKKexqRI%@+s6x> za_9l9OnQRrMMvB`2ErgDOl+4D887Ig4cLOs!A($-TKvVib>l*#1bswCYr^l?@8LyH zocc%fEuYZk%49RN99NcEqp}lhz<8Q~aq-wZBA6fUX<;G2VQZafjSCoiU>79k7YhH2 zE&OT68GE`0qZxjTvJu6Dn$gt$yz3Clb>@P8V#u`7!39@wI$AebEDBwEWeRL;VmvQM7-dWkQe-v3t zn-MPcMUNv@?4t(p;mSN+WC=eM71{^jkK#uFJ$~QwdwctE5e24kB`rEqqB4~Ln!#d^ zp2$lfWf86n5Cd3%$C{^~6EDgz3&B&DTa|Lf0dDT{iYj5XwHP-JTBObj0!J+G)FY^X zSOME!YZ?te61^^itQl@&?t|S7s4#Y&fT<5mo9ikr4~V@L*mxqkS3?+adWrTA3+0GX zghHt_gXSfaba3#V@)Ns30MO#{*gS~K7|1{fNOmjehvIP`B|Jlh-i#1r=uP;ci7E?G zSW%FjJpofnBw)`4#S4G7#$nPh%T@#z$bLR%sEl}N2F&G9aoi~S-Jw2vmzr`E|3k+W z2~dvGhjTq?1Dp@7+aKi)1u@2N=P1);l$I2GCXzbwCB_Q+V(18@4*hEC6_PqrQggWO zyX-lVx{IWi;kr*qE|JuJNxd5H`!4%fM(<_$Fif8j$PCVnF#uWVR*s+o3l~UYo^EqbCdB;C#?G$8C_93myn)$2 zgG#V!Yf2s#9UMm+{+Mj9v&8-uB%YW0i_NzzQE`hNXj;*-`nv7+6fo5&;}?!HY%aajh$<3ZB&LQrFKeFuB$K*4{WI|NC$M`I#Vjq?8IB#E zY%m*xFBOdD*$*}ERl{)EvF>@8Q+Zi68W?z3*Crzf#M8Wc2K_mW@o(t`-lZ&r5>p_Q0mn%xMA~_G~0FzF zIF5oq(ZFEjKl-wS=(+T3GwTorQ)?>fvxgStgd4D6h+8-G#-$U}{mLTh0j_zlp${uG zGH@tU^z^|+`qV=(d7){v;@RvdsVcDz#?1p+FoX04TQYzih|Mm72=qK|N`(jSg+G^gJ z-^nB$D#I^iIv|CxOA%-9zl%A92Hme%Ps0XTzMr^1v{^XMAS8v;0Qtiy<7^K`za?;L zC6PSTOJ5@cIP*|~6g{NRwl^1m%4{B@B3Y@H%6)!i+l{q(ICzL^MHPVWFr?VdgGM5c zbkN{ijsY|*1}C3@;Cx_Ga>!jkYlo47gY&sfiZTUlNGw_ywlCG_^+#ch%1VbWgPs9Z zr=%7KF)MNeF$ywTd})~20oYr22tbguxnCMs&;BG}+26CzOSap#{ASs!$eZ+jsQIzc zl+R6IjNL<_6Ec4QNgRa5p4rHiuV=jsxeP-Ht^MJ9oos;9I-E}H!Mg8!(wd*L2fh-f>s6+w9sQ-zM1Ko7lPKr;%Qn%z@zn6aDRXZn!0Gi1 z9Dj#4i{Wn=>+Vf(3-0jajPs!VVc+Wm=eN!V-J;Aoltim>C9juaPh*R!;#d+>Du3;$ z^!$U6AKm{DeT|27ple48xqI$2mt!mS0Q z;b!UICd(2h3u|d|YXMETS$-Os-j-{fEUaaRTMLN6&9b&lmQ$Q8tOZudx-FmrH_L)H zSz0S}^Wj9lC2=JA1c<55ljE{BIsQlGSn54rApQzQYw-bF`J9qf^@ZH}f!Y;9;oum= zh+uRh7$KL5v_=Ba?k%Jt5>np*#D^XIZ5sWk{j^iDdFs49=e|AWzAbj&uzMwE0#1$0 zcHV+99=CHs;bk^&*L2nw=l6jc2DW-~GYjW_ww^p5ToyxlLb2``GG1lL*)WTT5=M*O z0UBK%5gptw@nI9kynCg@Iu&$o8F*C%om&Q;Rzc^Mfd^F3xn*FU3Oct8+@XTbEdw{G zpmWQ>cnL=488fqbOdEou$X3+27gJxx=GLv?zpLH=Hgj| z2kKLtgU4teit>z>KrmW_)J98|-nDP>2cv^1aq$!d#?>r6=AxTKp3vd!gYg2_MA%s79m^xU zTO~3pqSmZsSn!X)9?w?xWT};3jI>zUTl=e>7~QR9kUQv&U_`0(wd&X%FVU~cR%>jj zIb$#_<>I!i=K0=9a_?OyMc6$=yH}q`0Qo`<{9jnY5ir%EL^ibT4Z0 zruK*gtlJ&16a;Is09L*I07l|lzW~AZb$n~(+hu(7p{MK%`IgDIk$ig%D7Vk$+s{mQ z8sGNvjn^!`mBDmsWTVqW0n`o%!vR8({1631FJvd=i+DO2%H3!`MpW{&G`d%GJ!nGW z@UO*{2S>Cu+d0Vm@r^tNZT~=|F}~w^??S!FIeH-KAIK+_P3zguI6H*3KaTle$t!o+ zIUFWxmQ~Oe;IweBG_hCB7y3jH7W62@D$T*w8E8Gt+22fF9f`AKz!~xI?fSZNp;XY~D z_6O(Q$?lCBkD)FOxQPq5;;k=w6C!^^c!wosG< zdcz$m8wx?TOp_*XS;=}9%t~sI8ck!$$5cwjzPle{0U{5w^pPQ=U?}ec?ofUY&r{wfU5QQUD($yc?3sX zu*Jn>nomeNou(VpTnH^jD-A}U zz=}bkcB860qdv3(B;^Z6Z(_Bfg$$(QP^@@ZUK++&s9UmsdZcrrH7l}Kow34LhEy7)y^o6M?9K;N}3 z-J!8y6QDsd;}Z}SjJ}E0Up3yq6r#HtyWqq)j)KIdFd`FhJ4+_a42{GMJ65(foq4A9 zG%PsdEZ&rbINM4f9QyrA`G;YYiv~>{bsRx&?Zo5|T8g7_uy8gDupC^sQos?Ac@ks@ zys<1d%c_IXzj7v1r|uhq(Ysj-+<^QhFfSpPCDk3m`16**13-mwKCHB zs?zN%*|+B0fNn`#$g0b#&BCAAk8V#XT5sNlvg<4<-8ei*BRO-<>8MKLuEioZbC&{VPE2VgwKJIbD9n$ysqGFdBlo<lr{F!DoW@$i-=z71(4-Wn z22DV<7EYp+1mr&hi3zQSus>?Y8L-eYA{xha3jMQ|uJNPvL1bQB!|^1RwC!-@B&~o_ zK7j9dR3?K4zX3wS%2_*btE#@N7o-rJ1oensLOf0zKYI`61w?uY#5d-CU4iBxFaEuQ zJgcmtE;GZvr$t8ZSUp6w0Qg!V7;2r|flW|&k1N@(hP3#0VYiC2)q!Uz&NdFyoZ_YR zAs+byZ<~*(PFQN$5`rfOWG_PBDja;bgPd)N{TA%@P-sSQelHY{gn||L6=EJih-L#I ztWgJ2Fe84#5ZEy7?Jh_|q^cv8{%+I(w?XzJn4N_P!MS4OXTrSh!iyEUpN`)oG8oO2 zHvC3baUw2t+XqK`@AG|gi|_v94iaG$%Fj`Io))984&_}b7+sG&7Ar=;Ifv{aKhX_f zs$led&MLo^!%QB?28cVRj#%>kztVsc+ccmxP8g&C#tSUfKU89Zu?qmFy+1%tmluCC zKYIIQ04n~aOi{;@GDviqlCJp-m;_ZUb;hVZitVtY=yxur)zl#_s4M}FXWwLr$pY>l zX~w4ma8g8VFnSxMj^D~N`vOK&3}apB)G)5wvTr*0*S9WoiVg&XRR9A$&BgCX9;4b| z3b>|#9*ov-56Ii|v6m>}hu+|-tq(HUk0M-o?Ys)0$ta%(e@QsJS<}Ugk>%OV%wBRo zxAmh)0Eh!u!x4}pk0_~8fj^=b7(i%+9pcHZ$o;T1D`)bn+9g+`I+w}o?8kVXNm5VU zSL%NsD5*^x@nN!SJ1O*SCIbw$D3$51X_rpTI}fYkj{cQoVU_G4)G9~_Ki_fX3IRnb z^?OWRc0U(W=L3Zu=TKneXmEQG34-P5O`T>@m2ArvL{#wLkm^Kwbhl@65e5o;S?1~W zc319ghVEx4KZX7!5SIfNN$ev^B#&7*k@m@`Q~DqnJ6y+KfyB1h91*PWD5mXfxiE$x zg~+)(z_;q`6BN|lKut_`UAt~kjq|5UYEL!_W!r+%{x>iebPSWKa21nv29v7n0aem% zC`mV-UO!pr#CG7RLa$8~D#(0R_rQ&4mi-;e(ZdSJw;x5MV_zlqY_2`%WGj-}v0&b2 zSH&_ueRixn(TS{K{10OA=4^7T{pLILJ9Q*tB#K|zOu(=3J<1>40N7!y&xMB83iXNA z#1R$~$=>e+!bd}^abRk7<-ahx^}bhN9`tsYGLK!4)zRJzY|9*4bBwR1wY94+--kuv zvW^W)gV9Qq0Xqos9@K3Y&U3Cvo&aNCD9pMw=fl)=430DJYCN)$mZsf;u>k0xMEExSl!Xj%wE)6EJw zVua!%1xSK{D5iNqDRzs9B{cY>wOIGSbtTHBT%*d(N4aTb((bcV_SLd!x13|$nq%E@ zNoDZ>%w3rtV^3@au|}-%d}+3uk6zP>v1ex)Zf>6;d^rpk+|s?Kqy-%$9@JUMIqegt z8+$?zk(0h$jMbpM!C0I#9#m`j!)ZHE{s!%Cv8Jk};p%J(8zpZf@ihR2A@=^GlM!Xs za+l6rA4vdkV#NnzSw+gS1M$s2WgD9EH&N-;4_B10hTI5O(U8j5F{djYa8g1+*lG;D zL3|*IR#*lSQ$M2IxDLJR=c#=;`|!a4>Y|}apyvhlGTaMXjyMVgo?-Rw_3U(4AV0-Z z>XrWz8GbXyg8>WMrZl*IL5qMH zNR0eC9W8={6bkkXR6cOr#->nl1-#b6_{M2|DS`Diu$A-MVQBWzIEjw&j}2~)dSzbz z*Uh_H?Ki2ggLeM3k3>5kz}@2Z6`T--K&>e`j2MH6bbf3!O-T7)9_Ozg(Vw(bKcb)d z$x}aaXv4YM=N_;u9*T)<1e5E__f6oOND_>-U};t#YGkHeFw(_UY{A$yh}#7f4A@UF z_6dhfXj5&Xr&&v91n)tlLKGAKj^DW`V`2=A$T@N2S-<#%n|*A(T4%BHI1Bw^>RLd zpS#paV|C5;5q}4|adLN@-!4P9@ciTsV@F2twHl{hM^rMk|%V3bNz z^9LN+jDAE6VKa%f!eMOwMTGPt<^sdOQDc&B?UU%&u>ljuq3W=03?Qt633O7VN6+~u z!jn0+lR+Zb8`eDhu8&D#*zn`L05_DtNjGll6kY-kM`YRHIXvb|!(~*79)M4EkGXx* z<-)R|C#S_fYNUxiINSPQ^l_#wOJ(y~>A$M8t#6ZUUHInCvdq?5*0sq}6CT=Gma#fZ zO`9xRFvCjsk^c#MK-URy-fKp-u4P*yo#f{)bHDxB2 ztp+~P{rNJcP<{vW26-eS)r%i``u=isAu-PLO^VoDVntP*5Zy|M$eQS0Z@)eaiKVGS z>J)_lF?`oLMD)I=`Y)cK0v1d;n(ROhHG{Fm;8lyUi6F}5^GKd z$&ct`pTemDDPNbI6#&PXCq@2L_v3P}r6}O+&i@!i)>LrCjI`jZtJ8u9U$a-(>>5b6 z%tYspIO|CFYWAgXp~YVRZ{see^~peP3}eFy%z4S*g*o30Ud*7Wf>-F^3>7TZ!5dYu zKnEwN;3+y-qJl^3;5jNtF3*xrR>7_aCg(6>&8Mt6(p{h7JEeYM0BRXtL@3giw zxos&?RXA-qM+Kd>oUDRQTk=%UY0H5s=(HtM1)aA1xKZ%nv}L;rI&Jw#f~qaof8w+S zhCL$YHtn-5BMZI#vcqjlrK-Yd%WW#?wB=7K=(Ob`6?EDXQbDIJr>mgTmfx$O)0SKn zblTEGf~qZl#`LKAWruFdj(xVJyujO*oo-uReOIvOwB>0PblUQO3Oa3>r-Dvf?odIe zEjOs3)0Xin=(J_D3Oa2$TY{=B?~4pb8r!McvU8tpc{yLTW%_U|LN{1AXpceHv>~k_ zpQ)hJkoQ#3X~Hk{=0Kk6Q&HuF?5`$#R3+`p0*~Yl21?K;U@VKuY#32}%*p&Aq}NQZUqf0y_EtfsAG@ib(~rBL?trSo z>Boc$I{o;m3OfC`K?R+DT&;pmKQ5D?>c{*KS!^(N2}NtdoF_1Q!7Nv~opE!s3OZn3 zp@I&Wr7GxvS)hUrn5U?q1Ln~x=zy7{f)1EnC8)rB@B;z6?A}{se%rWx2T{4Fhl~zy1SHNmeK%0 z{0v+PNI@QnZNoqsn9F4_d;+3f$uG2gzm9ro84fkx=u$WOS#R_ZH~L<0^ifVU9Ly`) zcgydd`ZS@-H>7Ip{aHU zqi0bm;Hl+Cx2R~}HlIpUpZsk;otFA!b2;rP@UYaU_u71FrT$wr_HS)IZBKn#(&ke` z>Qi}}PcOQkV*P;v`!alY6+ji}U98(&e3T+cI{5S~FFp)N>I9!(NekoMBBPVqe9BLK zDrxiSnAE3J+I;Gn`gBN}PyZ1gU&8!&ZpsVBrqrixZ9c6`eX48o=`Zdlg^#E4y$wEa zFdpk4y&jSUO-cnR3uQPRcw&imI$%7Y-u#L1`#5BP8zsSPE5-D0gOxv;GV#`MG1kxV zzr9tDFWfWuT2X88wXvVx>Rx|-|! zV^@5&8VleFfGN$&kU}WDWxhg|v3L=xF$yJ`qbq!J;Y^JpT4iP*4 z2qkKBC^sW~M7(nO)?6&_VTg}abB&82Z z*&FiCa`9(kH1!AkN*Jps2P)8QksN75cKBpSVxXgJUof@}U5wXEU*u9xDK0v6`E(WH zk4$e~7YN1{AV>4M%*d$bb=l!}8|;5P4)9$4Lfm-q%7fb{dKHPp zJ~VE8i$bLFI4AZOM2mBh>|m6e+R2CG#s{A7GoA0ShrS)(CoY6@8_)O4o$oN&yM*~4 ziyK`(NR@w%`Yx>wMmbB1ANX{C_+mdljMQDGkIF+B6hvZSU!H@bZI-?WjW>Y9SO2&H zyVe3Tnc-9D)XMJ*A8&~_pqi|2W#1}ptodBQptTsUV=GXw{COjPn|yymH|7aT)iqFr`UoU z{%{y#GszK$i{76X`cPenSyBF>&$?IE2J?tisEfm)=88C8L3TVsoVuSS7$a|UKYr#0 z{K44CV0SJ7SD?w*`NABz1?aPQq#P5(Cj7w9W)5a0z0m_8H*;WexkgiPpmNaPQ#8}_ z(PlW@{Llw~;V3U|JUb2pn}Zef`rTie!38e3I~B79G1gQ#?+IUs#(o&T@1qKQgsVvy zGHy@$7gDV|S|5$4=|0YKp)7s;Viv`zBB&_f+6mqaaSjJyB}^$2Qb}Yj_zNKeZ!3pn zEk_>g8~7PU-86+1T7kSNO=GhhmeXJK|JJDfFb|0?r|<}W8`)ODK!>n2UT`c=?S6HD zl*-RiNcri{Z1`VQ49xjo@O=9e-*_@ec0D}(7A3qAG-%!)}{`hR36*gM>PCWzoP}HW1_Xne25Z~Nv&{|eB zr3N<>im zdo=|$%q<-0a@OW0dGUuQx$9WS!1q1-k6ho%06v+YbS$SvkHFNT&Oel43v!cH4(kS- z!@{A3E#$)Fe-Na=5-FwVvh7lw2#p)Bpm1_l`pt7c#U9f0B^nhs8dMUTIB>FFi|;Ve zlB1v4+~BtFs=c_?6qqcexwAd2!!;_&BwY4wN`=Evf^Xt-k~fCWn&2eg-w`GI0qD4X_yWlG2ST0PAYY(O2~?P=JvTVV z@5_AcVBbpK*Y&gcNvC9aFe*WLgFpkV;V}dt9@!K()^FB)5946y{IS%za742It-@jo z_|poN@7#L#SP^$EFqibIAAuxx@d8hSqc#V zQ~Tm9dnGuZ<|pE>AQFg&5`s2B(Oon^;e$kUKOvNG92Wq~9ITsP72QiezE6HjbU`;F zNj213J~%i?=ND76;*i4GA4vV8Xl=p==z@2sg83yXWrmkwtA;L#b^4hqeU47wWZwo9 z4yv)~Bbm9zNG@1i60^*?)5$qp<=kKA+-aYwvmCCooaMWmff+1j}H_7sRdX_C>bjd8Ub(W`@1x_B&g;(I! zo`pXtc{kmDY&5v6wlv_nVJ-Y~&&ZCmE{tVhWa;S5G zOAki4a5)=e613^+AOM=O#m6}3(wyQ17AB<=n5O{BfbetH)Eqjv&?uWO+juylfsAr3 z&Iyt25P+f>D4bci{vm5X9RZfj1rXJirMP>vl&dS*v3`WGYttUGhWo0}D5X%x-V(+_ z6j>>My{H?h7uPo;U2CY(2yMcB9F4*7B{yfvW^Oe5L}|^weC-vXi(a}P zAAlYR+_PBI)0uB5da6MwYdC0Rzt%Zonl4{D^C{O0iiHxPl#{p96sK%!d?w8LwphmB zD#bofBs9R2W+XznU*Cf@`m99j${_0exxT2BFq=iigKB3wF3JEp4iwblU78U5L#4XQ)H-o`&sga5uNht_CiL=cxDr@aSh9+8JCC6oA z@_AR)AunhzX!>I3f_vpX%KGY(qkQJwa>4y_+PYNMuEXt0tD4bDW5_SKK#BejrgntP}sT46*4piZv!!wMPKcg$~?Z4rhjg{-w`=0RC z#>)HE`|j|?#>y+zdrNqfv2uWV-xWT`SlNR1A#Zc|6l3K&_5M@%SYzcv^}aKFn6Yw# zdjBzeK&8DI4WRQpYy-BMi${Zjj|bOG`S zwjb|q`|<9!AMbAa@$R-C?{53??zSKAZu{~6f8G9z_tE~n>FwX^Z9f8O?MFDR{Rq45 z$Gh8pyu0nkyW4)eyY0uj+kU*e?Z>;@e!RQw$NRq8uf_rBpZXQ5RA5%|Gx;0De7W{G z)}U@WhH5Mvg5lBG1HtX!cJ;(5_%&LB!NqXC8aaYGGGw8C( zX;J=kph|gLWL~hVX|u#FR&C_jWGz zGiFTk;lhgoa9NkM)APk_Xs*r1+j_ozb#C{22w-&MSK& zd;k(118_2--7`MMT-Gm+;}1L=9?Ao6r|tsli(LFbdeoW>nd>M^>WOaXVwg$e*hhCO zw9IJon^2X(S{3F&p%vx`NX6A~KT}cugfHA;AZ3uLZ{)pPV*4jynh-l4(CNOYiQEt%WDS6~T!8`WDwf;{56Z)b#?&o6HAhcb~W9 zxbe^TWUl698Mq7zQb29g2xsLQDwCCdwx+2yxhP$qM5(lRa`5$ho_h|2PsHE+@EQ2K zU-(G;Ee!96zdgdIH4LhGoAK~84J;TS~Z;!~i?F$^BDM#kh4&aF-<%>$i zMtIXZ?fFJQ^^O`pAW_JI*4>;dKn>_zr~g~eA58xbJBg{IiKvr^r$d3J$Y7_eJWqWc z!b2c5{@A7+?c4O30;f*txBLIU2~W@PKM7Q_Jy4q!P_kovHbe zcoEZ5h`x!P+B8Z^A^`}VLGrCQZ?6o49dU$<8Mtz=j2C7&hZaP_Eq?*gUSC$yf2sOt z;_Iv(_2ussqQHX=6Lq$hPU)}MjRp$ESko2QY6a5 zO=2vu4L|nWhYFynia`Od-60ITE_@g)T{@l@j2mN}uTgCRhV0KDt(`LN} z$ypR@(wY@F7M zYLUf{`+R59t9E!6P|pR4Y6vCA*2PjAhVRAGAtqH}1~?9!2lpQw#BsYW4~&>FD}Kd{ zs0)B3UY<@Qg#SSl+=8-aHl95TKeOOWF1rpEsNT%OU3~$+!CHGK2{e_&OaIijl{Du5^&WlV$Z@T2wmE}8k zK}n{tcBvZf4!@ci$eeb(H72+E$~>R%!k)y z7s?>+@1QCvLRFGAuYyUW6I!?74o&6X6}^BRSNiJ3=tnGQvh`keW4t(MY}*lhY0PLl z1aWubLe!NJjPcg%K@GC(5uB+jns-bUDy|R4{)z84kIc~xa4>c~-elC`cQ zg%rlj+}_hpVOxMH--lZTQ_ntf1+3<;lfZD{)tT=XU9ckE}dF!bWDc?8D?Z>d-V%=^TVv8Lr< zY^)Hk&3%qF=mVd9J=2jt$RU?CWI}cs;)E-Lf-yBbe7g*)wb(`u#%Ssk^%7;b)!}p&x28# z!m#USm2jIl&nnA92uJ_=C{rGOd@xG=vPh&-Jl4024c@cDLWy7BqHensF-j!r8$EA@qVyz|^7Kcopqu z&8j6x!1lK6Z^oA4JvjF-tS4$*1+tMbbKt=~-%)rj#xor@GbJdhFP_u!U_03N7d)@v zsl)RRJORXik6&~g^seNUGCauvjvMy_Jv~Rodr$}v`w1{1Zt?3?JYda4X8lRQsy+py zFOx1?;Ph!c4zd*oqq%vgr7Vw2TO{;x{}EDK;t%(Ahtq&Q88Z*VVw@k*Vf={8xVZvL z9F6bT?%;G!32@z=SR=;?iH^aJV4`&f7tR55dUkz&77<*ZPnPDZ2U0S-SXGi7Zk}qv z#yp)e5J;;R132jvHj%3Ov?iKjILS`g+?%N-0gA@>tlbkZz6=_BGR&%K_C<6nysmIU zjat7`nz}ArjK^tl2o}h;osOKGorvC5gL&0dKQp!wnPC;ixVkPswvt2cWR(2nFwKWP z!FZE(WW>ui1?QjFm&G!hh`$(~FA@P&QjkC>@essAn-gE%fls_(MJoNevb&PCq*hjW zPz4bxSs@OO%C-a{^@R$7nM9yjm}SM;aC4O3E~jl`im#EgNYq&%0|fpifnIC^5gtI!G=vk?M4BgVH1(hsFJ58(}k5A6k!ETw-ClntpgtFV4Is zT%cA-Ri)YXoiLU(%5(h?s6aqgSs$!67L=gDpo#eEk;#6(in~7P3MAC^LL6@nP@*2- zYh6g48%BZJ+6Z8Xa7%-(u{rh<9~a^71e}%4t+=b+?+eDNWMl@+TeIs6@w|WsMgNa3 zdf_5ezv)1q?<+h%;K@LHmx3R?j;9XKM|ig5`4LYhz8{DO`S(W?gjdlIVK(yg#d8v# zv+<0^Gak@fDlO$H$GwQK}`AGirg>QFMM&S!otHrXr&6pKBt&iN8uqGcGGY0z6;oKa|l+R2XY>jM{!?RUZ!Qcoeb8{irDI zWvaf7Gock40LjK0JP*oZYuMeo+x_z>#KfAIpk4p70S97xKfZ&XrC_tCRV9g~Oth9} zOq7DK36{EoL}ar6o+Vm{QY+33(z^wI{J^^BBSlJBAdBuRV<>PS(4$6_MT-TqF440@ z_bT$}l;12Mw!pjvqD(W;DoC*8uOYsBa_ABu_6w@C&!&;Mx_pnkoSi-r_(JK40|uh( zdi(4aBE}pZ6)NWUEzIUul>*Lmz;@B9CTiRP_=MM7gE6uP&x?3o z#q$Q9xAAPi^FE%?Q=|XH_~ZylkxSxa3J{7EVBI>vx}!f#kNc^@S>Qx7#@m62^(Dv^ zd|iS%y?|i8N>7MLHwiyZ|GzmIfy8TI`>H4iQ##KSnO#tFq8R0+LHFu4$i#_NgE`I3 zE&~%Flt~s!)Ve`oGzb<0P@CP|E^&V*mUde)wp9vIQpjaYT#{#rBu>f#8eB;zA3GWv zY7s%u<3fPmp{+|S^xHqRwi`q!cUg80=HyIEYPy)sam!d@9eMDtQDwJhMA zXKx3+sUVLh*dMt;9#gRE+#ooO&wkwv?$6*-HwaP1XFuo$Ia%6wyFn~CefFIaq__#O z(q}Kn8672AbFkQtyFv0t`(8K5`Pw$zpuik;@%ogBz5*tK6Wp z_jxxc?R~@zN_*pOP})1w4N7}&af8y{E8U>9_k1@f?Jblb`JwdDga0AS3<}J5yFr2Z zPB$npPj-U>^JQ*OU>@TJ1?F?zpujxP4GPRhxZlcCu5++81J2+$(;GM`oRM*4EfcHOAgHv z2j0lBOl1bKqL*WzqtP8D{u>fwvJxG749$apDeN(ng}b!WfjMNQYw)r(hCB zDG+BhCAUuE!@363o(p&xd6Gmwwl)*Y(1dr6R1YOS4tG(sVJhkd|Vhjya_X(noAM+b%Sw z=0hP<)nNa5q*OFY|SiH6Uya4wooX{@UB&fey;QBS8c>0SD4S;3x?U1OXwi z0|f_THtSN_I;qZIqAFDu3 zLM-(;qKb%40X%eHF&we*i5ZNNmW;hn7k^Be+6ztjQhD)*XBvCEhA%SqcEgE1X)ySE zYOVuq9N?{m)3H(C->PDjS|f_|MtzPW4SxY8N~=I*slQ5>sS~j`K}M@miQ-a{TQf`2 zVtQ37QRmf7NhRvMy7N+rIE_hZKUK!ud(^lKRMtPn?q1tHy}DnZ5;p|d0fm<#B~a_| z6oC!Z8|)`6;c@X-Wws3iTWH0ZS9kaAl3fNA34!NI@OdXpS?E-R)vkgF0h~{->h7~| z{RYU#{K`@gH~T;^iE$X;&fuT`(DC3HN5wq{$8;n~8ysIki}QaoI9ONP!SOx!0GwLf z!NDrEn3_H~)*^YUKxC=EA}X;^(!CxWe@-QeOG!#Z)`|4sn4U^h)oFDXrV@2t-ASoL zombZ*l}M^{2FGHo$t-U+&*1oI8gL`2(+7v(5uN#}=Q{?6M5hmq`;bBg2V1BH2UB?l z$E}_+(g%lA%UDke431PS?%+64YQf-WTZ=n5_Dhw~+2C-h+e%HgARB{&1*Qha4OnxF z6^YvCQJP3U5B56ChJy}uXPxuDCSoZ_=yYdrQ0nDH@-VrsS8ZRaJw2-6IIB`#(95kd ztvOe_ai4qxdBG7DU?hQ8?k?DHM#U;1lhwzzAOh7u=;&w0^JF@D3{g;7r!rVoOoc6Z zD+HDGBC6(xEwr*A^{_ZIzE!?qceFt_pSw|e{TZA_7U;sQ>#Ej@yByC5MH!;6kmis9+dKd;35S9tc| z>36ixcP5^(cqZbRfoBmO)$gp}8ciG;;2(2Q&srry+NC0y&2u$zp+ z1#6;CYEvn^P}`6oE;v8?a|mx@Q{sbQADqA9GtlUN@yA_gyPHQ8{E7WPn+N#px1cPs zM619KLQ&E|6s{>L%|H^YyY2Z*CF@(a4@VFbaH9u$OCQ#K!K!?u9!ck?2t^Ds&FxI1 zq{8Rf*WPpmo^Vq|Cw&HQ%`HJQ)`$iM=iZH)v0b8!Q>Nu(I6Qug-Y5A8 zFYosE`C9P&1CNcT`*A+s!FZ0rGZ@bw@LYiBDm+v0)W`Y(MVY__3ayW2BS4!#+Uij|n9qBEJl1xunh zBUA-Sb3!Dc)0F1q#^6)>7kkzQoG2=M^NM``H%snbY^ekqOc7Uglth{C- z_w|AbLvK3GBeeCF^rBTo*t_Pj_X|tw3r7Q?D1}w1QUb77kpVXxztTofbOZ_!tBP&m zj8vBh{lh^NFMX8c$Kn@9h6J8qNMThD#yDnMqDdHrbu)0w`2i5;%8nc+02YFh5hc|F ztyF*c|A^>B52zZgIFZ322H(qo=cjRyM?#y`et;ArmyRI0&wO^7)ifM36HgKU7k*$wt! zu)z(A8hDi(6gBYkZjdBwKjH>O4IFoa7*{@frW;gR7dI$s;42YKou{I{M{T<@E0J4( zUx!RMUqb@com5JU;U0u4vPZ27k*zm&SgM2C_8fVa^px9m;A9uw1TJ~*KizQv`~{;w zVl<#jMAf5F4}eY~Kw55!W09fy6Z9X-Giv&q#Ug63Y#}<>hP6Ojt%ny75FQv@&?Plo zQN=`<#)c0IF33mh#6itEDRPIqu7R%C=WN1hx)OV{oHDe%N@Bul4bC3t#B(>l#N`W! z3lyC=^CH9uqu|KkaumQZ=@nS}D~`~H8Q25SDL6i@_>L%8reovTzT;z35UCCS9Nh)k z8Fdmug!0#3MH>pZY4yqsFF&)ro-acvachvYL10W+hgPvHm*V8~av<@!D77Vt?nTlJuW$zss^!NRKgMzI^ptE< zaS}?Yn4B-Xklif21?TcYn<|l6PLA+HAu$ukV}zP+L3(*;0GTL$ZW%w1C6wwNhF}Jw|@`bq$wS^ z6Rl`4+6$4hChKSbHWBL8VDx7YqmBdP3dYE|M4M`ViMRCgL^>TfnzSz%eJhn293>cg zj+uqwJ%u+dPx`>)L?auFE=Z*Zr<(}HZZI|#aW?-zUxDR-ItnIT&SnXNLVvxCX}Lc1 z7#fN5H%o*Eg_f$l11v5u2_bQMCh(oRB-09&X_?COhCLs6aL>=;JZXa8#~V$fbAiPC!4s2@7_>Pt>GN;l0cn_=LZUr8&hoqd>C}1D zPR~zP%V9>8;jiHYV!qYSS3h?l5O^#wUM~uf4Zy6mxIYNRoShB2QpX_cD{}D8*-m|n z8zZ}qMv7cdiavN3{wTTQMh{7m=Se|P%$s85s(vUVfY?DFSo2w@F*EFwBjAvck83n5 zvzYs`ozhn4%%k`G3fhYyFXQizM$7TRxinp|qLmb4GuF3meFwjM8uYIdc78w6@y@Rk z@BH#$QrmAoc2bs;$NTH# z5%iAGH7b-}7-R^OP^+BJQ|Cd=2+l$U%*$F7W6~#C#T6Y+c`mvid5t~$&FUL3%rGk% ziW`qE0#Q@+!e}Fr-G>#Ebs5|O;7F*KzQpT}`Srzgo>G=IWYKm&XT40a3LiamF-d88 zX86#di|^rEMmTtRgPl0xTg(DcM2NqhbpK7_Fo%asaUl+rJVO>pfv-z}w+)>y1$GHf zvbw>L^@7UXcYsE?eA<1WywC$de&z0<6KlJ%$5-x7AP_!k=zM}ANDLoog434=FlOuv z1t{N;+Q{ePR8&t>`mpD4Of90{BYoi*qC;Z!K4Kb9N%wT0HrR?Tg7vnL*+OLS-Hhit zJXhl3%H;w)XW=;yPxV*$gYzN{=q&a%enKPx;dZUu1V_{t+%T znsNZ6?&`uYZGhuO?E=lDa{49e@BKFz2HmLgd^j3|&U0GQVC)XW&yNI0uT}I@-L-A` zNbe?oyR4ckh_w2RrhwUpCwXu%*6|q=L0@K@jiM(kEy2o3hCGrny_pn3=hbJZ(I&S)HyX$XcI&BnL!Y1PT3 zS;U%+4H7=7O<26b>F;g*Q;5Hq2BQXtY3KoiKIpvg0KenRdfY&QUKyskq+$g{SOL876i&i1Y_o7OJw+5wvF36R znuT{+bLa78b_M=gN)0}npR5t^VHCFJifO}arh$K=4dBspx1hkd@z7zI)#h#`x{RZS z;bgs36gNKS;(YFv5>0`ivFV7%C^zR$VqUkiuKEd`^#M`ECee^qh9)W5UPxVaScdES^5jzT`2FKi^w^|Jzq7;AdrRqCy`=*v)*_|LM1-;*V%Y$S z6Vh71?kV@^4$FP>M?#%et`};j-1|M{-jH7IyD>D*D_oiD3(kHNumu-93SyA~mrSP4 ztBU@M^I;^QmjULEL^H@5#7#VRiyP-)0cFnFf-)>)%$XqOIZXhHvb|Y!mu1|GD0p;; z8-Ky7+?+!W2M@dGZF9~}$#Z}txW+Pi$;$+c$!`2gveiN$=V&!wbqLQyfd}?{t=3}U zG=S=qVZK_{}ozX5^e)ybFq8{EvUy_+J|_(G6Bvhxj@jV8#vNi~V;wrbGu*b52jM z9!+11DCxfgpo(|;?>qLr?!V_G0UC6(yrBQSljbV6^N>UWVYB6h2xB=#xt1~Gw6rz| zyx>4>h|PpbAZ~oGfjw|1fl$QuAo6>01z?YnN%5>@&a5Hz+0Xg32|c^wm%jAEn}OMqloK!iC4{wOGY&BS-xoEI!z)cScZug zFTy}vCGri#^@3zj#C4*)|0;3uKAHCT;wht4f7OC4o&FjLpuN?j>DLNk&|fcO+s+{_ z)o9hA5=npt9Vjno#M$x!Bpo9!*_QFUQ`uG*T+)#vkC#;+LIB``NB3_vS5DqA&ZK(7 zUVmZj{qwl%%O_uEBaeHz{ra*F?BKVoFMI4c?^o8B&+cZ5w(Cm{bZ3ov{hQAE(pklF zJ=vcr+N>#EeEi1tty|9aja=ToeZ}C-zomU<%dfR>q@-xuK5#U*eb2t)v@dP_d@_>! z_Vx3{IMJ$9=vdD!l;xMK6vKZQx`>k5M9f9uGlnkW#556FyYLA^7m@oURUCCt8m0aARu4H(Jx{{N$uH;y+uH=}MuH^TJQGvtis4w|PTYZVw zqbk?GUVV5u?N6PRLx3eM*a?VEP+%c!my-N7&;ZN|v!mHXPCMqCAI|PLrTG zK4BrpO7KYM>md@PBY&aOfCP_ng1h%;QC*ziza@CI6a1$HxmhQ9H%d^bh!wpl!LH8N z7bSR%6MR&H-JIY;2_EYND<#<73En2b-y3yG<%`0vL`>ygItdFZ8+^q5{7&1whV=cs z-^#D=f13RIP{?EdyIqDmcKjNb9wI6B#ic)e{kL%Gwi2P1htu{K1_$RR!3RA13qK*q zXSe=!!p<+ZJNWMWI`Pgg{hhV_cC^mpq}kW6lb64I`rzq}=KwrTKE`*~VJE%w&HL+= zp<1r~rtL?d3~H=>V6gbfQ=#9mACaZ?!?bOHjz58nxTgd9{z$gD!CYUv$4^D^ml;s0 zP8$PV@$d27qbt4+LAEIa&$oEz-U;KJhx;dQ;(1ud@iaZZF>Im=(fMorumunr?8QgI z0u_GlK0*r75#v0CD2$;aPG*UI*wODnv)yQcX-mepR}BOV$$v91^hCZ@)EqPKQ2a7) z<0|TolMV3hb7)P!Y4L@F8C(_nAX0=)1Dw^Us);XLhMdW#5!W{rx0G@By4lWPHiMu2 zF!qWsJOyEU3YPe(sM8pAnU0czb7E&Qjt9crg72>x#JJNC2c4C^PYYLn?Q?&K(tT=w zh#_3#0gG4f{?P3>0@>mI5NF?x_lHic+{0OHd6)2Um3uh9VW+6CyHnH~tA{lQx`Kwr zzpNfS{22U(<_{%Mk8(z`Dyhzzb!g=t&Odh*SOGX|l&)zIDdlZdWq8uei!1jGK$YQZ zEBA1!jGV6b)m(NK1>7*w+rx=3{CedcPKe=`D)(@r3qRwm54qV;0t(6zNb`}N4T&Tg zWMAy^|hoXeKEunJHNr;P_rE3*<1%_LI@~UdDcp@R=(WA8BYKUBhm$em^I%OPw4GZ61&&I$ib}I}AqmrptTB&G5k6|QsHO8ZhTr~zy(*N8Bl7+SGQ?)J#{WzxiR zyE%eqhh)d7q8E08arYOj8mti$8~}UXu&dQXP-KxUR)PEB`|DxZjpT(BZ2C1){0aSm z@z)O>qB;SP3wTaTto#Xhl}4ai*mqsUtxy0!H*wfp`}uTS!L_a*w%*$-BA&{}mruxQTaUy?Iwgsq>T1{~w-@0(h2>wFKSHYK5_UlpL5ERi8M zZq&5)1^~>B%LI4i26JbtIqDM^QqGOzf-&~A z1{0Rw>J~0swnZvsEx-Vc(Z#mbSoTw^{R}#*!|~_zkJ~vZ(*|)Yu6xJRBTopPRZkqu zo(QRKSR>sq$I}g@PISS&Tcr!SnUZ4P_|Mzx!GGyN4*o}Xck%BaA0<2ZKk_o%-C()R zQ}busU|AZ`$Rxv25RRiODU6@C0-okh1im>xhO*ACLF>X@z^#B@%_xORtqL|wxR@#* z>6QO-vJQQbh$3j-u)9F>)Z?r64fpFXi@pqTS~s{- zhu1~rC>)y`!=aLvzl_gLu1xLMDu4Ox-xiUAoz;j8K?SK5h*xUp0Hzdw?@uBX<))g&yyIU_KnJ8i7>yy94G@$E|1th} zrE>-3)y@~DS1!&JH4;aM7fp#mkFFm;Z9#5aM@1c zM%_w~$}jXlTNrRUm}EQHF30ts^FrT*Cs%mR!y`IqU%vJ!KsH%He&M z$9QJuBy__qc58Bt)4zlt_B<&IUnKWa0c%w_Mm!@w6eElPWBFAIQwBYl0LC4G8}?KP zS7?d746n!fe_)tXUpQSDnzqk5qaNA~ZJ+b^W{mB**4iGVVqDIAv8e42Z)Phnaf||r6 zpb~BpKt;tHVnqc_xL5)SCjkzd19(BH+Ip#4RJ3A|i=reLIiOU7qGC&HRMZnei;9XC z&HMYU*?Z2O+2;W5^Y;0_@AG;5d?d5?nf;wLYi8D-HMf0%gjY-W5(#tNPAqaEr)y`i zYvDxBmHYJ)=Lrd~M;K{h|7~HNU{)xL1 z=fARkhe|Nl@9+-Q!-^>DzaS2-_4=K=aqOYgYv1~vcho)U(VQ|CnYY*P9CekKL!vQU zE$BZt?dSTPCvQZWzJ;F`BMsj=o9C}gMK2e6GZNHo3Rz>`q+cgItlxQ^YzT$ES0dBo zUX_yj!|VICerJP^`#6SreDWR$uCabc8^CG^Nc(Fp)j1lAdQi7vH1WBW$Z>~TGw`v< zo2=@xD#wX@n~U~>kFP`yL%e7yR&tz+(>c89`|fh{YS847T}V#68)LrRnjfjm!g8Uz zu{_6_DGPJ3Ga!PQei7zmq~>1^fGPca5dc&Ae~|#zh*U`ct1C80U@DIN^a=bJZ_08C zoGdH%)dGgUOJq0&bvr4)YDf)o6Pc=G>na@|i~K4JmC0L7BEMpx!6spDL+)acO04~e zmR3M!on=-+Oxj@GI1OYCm&Qqj{OM~_*K>Q}8gX*+5Qp^zk=jJ#vB;2XrLN%HIP?Wj zYarc?>Ru>OG6s>Aj=diyb;-!r(~DX8D$4`U%htM4Al0JK^n zcc9gn1UfsBo)Un1qY~&Hittu5y!OMXQ`OhLd`KV&frK(cxWMRJWK z!&+z-2@TJ}je9SQFRlp|#=&D$V@`1Gd2FUyMc6E*0^%K)rAp^yHy!p90)-9(ag1V0 zq4z@1mCgW^(Z@@w3`sfY-@A(mPeCF^~~NNS{L(83lbB-+*r64&twF;U32bGg+W`d&xST zhoN;Ra)&$!b8(?W-XW#`p;!#n;!cwYqnyYZNec!25?hPg;;xlnQP4*tU>CF#`HlRH z%K9&P7$ttL$j1_QBKJ#@ogkCgpj7MM;^G|EBRVaVZa=0z|AhrsN&7fIY)Hb!GYPk( z@f;>%KusUwd^S%_N6Ss9AS?mYX*xm9Abtrn}71JBI(W; z)+!_!k4%1#ac}D%9Oh@kgI<32ch$#vTlSTombVzAYY5WGH`n6TCm~EL?X7h=;2p-W zbBtGoj?pdkx+D$-`qo9*x!3a(`%#|7b0q%{c=_j``TnfBdQ5U>?^^PgR?Fsn<^MWi z*!lNs=sIEa@aeFZrNiiBsp>>YiaHVKzwB52=n|!V9=qSu569^DM?VLM#y7NQZJm(U;i?=4c}$Pre$QT4KFXv=(&j>Fkz(+ zMq-S9h!LBHvqi(Te`B2vkdl$wG7@Jb_ZBI{NVn}HQoGvvit&4+v`2(NdyCKk5l%q_ z%=ue6_vD2fbv!{w``Y8?o#;;pM|KN;B5?j7KY*Yu~7tsD2H3Wvs1?m8oKFL97!&iL7g@K=?44mvDIb&C0-VsM=-WNt;9S$6QFv`}_G&VNKjMwWUlLGfEOa)W4n8Z3&!L6M=A$pUk3PAV zNAc8I=2J2EsY!V1MTm)UXSXzZwzl+@JfI-3$v&s01x^pA`!GPC(^`C6PRqG?#(SS) zV`{(yCF-wcRi)HSnI1KdR3v<(c)@Mkks#CCgAM(}J zPpfc-Wc4Y^sv6g}D5PhyD~6i()`^_dGO$hT&javpL8Q5DRIVGE+tJ0%*crQH;Kk?_ z50g>M#An$U>+vFF;PZWI`(!Lqgh<J zPi5?iYJHQ5HXzyUN2yYd73Iy&D3msfGnZ?*WFc0xrteV`Kc0O^;r36w{0_#rVp2%& zW4Q@#58(t6hr`Qf;J1aI7pVKT1#Y0{4AQIbHqE``q$0+JLrzjMaxq?{e2MSEv z@@)Zzj9a7Avhc;!@ciz0al}j2d{e2a*QKgnm#TVQD)m}Y>lB@kjYd1~pLlP?OV~+A zSv7GGw5+M&AVj0Lh9)E>dI($gA?O>T}LtRK5fowx5PHE@- z(oPr#FK;T!$L_=O#;HdE6zkijFu$q^fT@|$*Yo4y`IB8p86L@Qc)zVP9AC-Xhyr&) zm_<63=|c*9P6>9jA_K=vb;@7IuYAt^2m&g_yVcgI+ST(Le)n?;MK9mgvo+e3@lB*T zT658)a+R7uR|2vO_k}*2o7PBCQ##&^qzG&Xi>S zhkwj}Jt$JRb_IvgpqE^cI*xtG6dD=gc4QUAZ+!8j`;AYe`;E3Z-EVn&`K{|-e(SN9 z-+JRW)FNip&PcfKa2TqVI0rW|*Q_eeyf~J8;A5q+&_X=fCi-Kyx1*KoV-s5=A9u)T zXp6d3wga79HQK@&1CzE>4ZEQ4hj64JgyVkul&lZe^6Whtq8AZM&UF5r1W<=+B+$0v zI;{Mw7{c?M^Ld{0@jyJC881|NuG|?fRUst#C3--}M_iIDKq4wlB=ujug`8AORcT;5 zygR_8B#f(%EXCcg&bc4tDOB&^BK4q=~e+tzbxk&vfR4?Wt^`}tY&yj|_c##UN z%|qIiwJ^{vr=sP?-4}RCR?88%Y{h#LE(f}R7)i!Ndu?0v%F4FEad9SO;Z+bT?vat- zRD~``c62AZZuqe+tUNjngBTS(eKi$E8l5dmJJE@584lyJ ziaO}_-J2h`BrukVUU@aHadw3K(f%#GDDgF9mC2(RDU;XZHs}1#`R8{E$9|6LkYAP) zjva#l$o#HxWsZZ7D-=iv!|hr;gQtA`it{_=zZNY+zvAzbVlf^qV}Amk^#7mw6LGw| zn6Xs-38+M!#G3>6NWK4aVxa@jKg$W1t<7JLw|jWrt9)VL^}h~%K3@mmejKnUYEH1% z>Glfd@Fu$oJDdqQY}9A+&AA?3fx-O3mtxLnnuyIcInd`wK%d z@`s}+p7%{oK)+yL~%(fEqkNXibBr&V@BW62^ zdEtJm&F3I1n6^qmvF2ftxr*2 z^!4h#S#2s#Vg8Os6-nVASKOg|<4@@uZ&&^`UNu8HIfb3`*G@eo*6Yyxozcq1@Z5H+ z^?VEE#6t`4ifeTyU=jaj`1i2R@I=`4bjmjey}gQQ0Z(t7&r1_e?-Jh)@$}C3-4IVN z-*-biy{^6+;^`gf-tauV3dqRu4)O2a_3ZIx*S}+{?8L*THu0PTl;Jy6DcWXf$f>M% zLhYlW=h(=V$2*`s7IwKs2x}bc^%iog7p->e$*jZvuJ;+`uhH`pqr4F+qk>o{(br&< zr_o(&4bPiIjlv>VuJ;+`jp>atqWO(7Vp>M|AD*$>OH5^ym+ePPWt8XaM@(guNAE{W zWt30fkC@6R^J7$=QBIpFG0GoMnKa5M1OH1dpij#vH%{;3l&=?~ypbRAqFru;T}IKh z}EQz{GHBo=!0e_)}T(pYE^-G26e%^a)ujDgRu zTKzw0p;s#lU9K#2v1y@yWmxE=P*mujZfF?+N6|Zv##rw%0F?wEBd$K7O*GS~%3(W< z@i+*4w8tIW<9WCvPeEHn$2mJNuy^dq_ysni9CkN4JS#l^Pw0a0-`E}o_VCU?GW0iO zaPMC4UhvT%~764bC3(BB8OvM9OP1C zNmn8Z`~8R-OX3l2`~8R-OWFf*_xlkwmb5`0L96zUC8f!Z8cUj2fhsRO^BixSuQJU8 z$w9ue*m#UVzP&ucLB46H?RRt;;G2IvQ)u$nk@;IWTv6T_3(44K^t*32#U^D$-tUmH zwr$CJ>>t4n5Z7mCIm3K!#X=j58ekDl&5x{5;aYyinZDmz{LW8@sS&R4FibH+?zFA= zb>zEH#n8xi?JCZUeAm9>r%u^cw_6J*Ir<8QCcKe~lIGZ?Og&Ce%Hatni`@e5fW`ki zw@Q#wgUdo_i#eJ4%Ny3G-=pq|R&h?xdL8`rWxP*9h=C)olIV z0EIhQhFvNu`N|r;)B4NHEGId{IHXku7ctK0x&e`@9O${5JI2V9M*mM8V+@Wka=fDU zl>ZY48G}QN%&VLo-f|X38I$YfrN2B7t&iO)jM?bPXDSvr~i+>4!d;v@ABP{PJf;620Q&~^3HdY9e=gq(sz@ce|+8oy?ytl=Kyfh zyyX=9gVC^f$!b^<&V~;xS)Jd6)7``KrXt(OqZ(pKj;8cI0a@outI0R+@(bSNyA#u6 z(wmp>R(|PB?A&t$Jnwn@h>i5+n|yuw&4IrBnT*B(7DV&+_<%1m*@EMzL@OGPrGSfvDlBFb{=BMz)IT8pbtOoXDEyoezRmvYX=yz zk{teNxe^15$>CLuXyuo$p8j*pXG))avvk;3b0FnOOuZ!|whY82XFAnbxjU}1n!WbT z?6ucRuYF6ZUi%j5wb#Q4a^#ZZD!+v~Fs_1Wl^-)JuI8A^0FJ5j;+RTjjH!g{{)HGR zI?n&)TlrP>|AYPVdetwV!0t%dmNX6vl$q7?0iq;_Q69#t#XgU#lkBI>!hS?_OgW#z zfse$dpQ?cBBg<%KR^lYCpxx>23U&8SW4#ET;p^ySDM`E_Pd(Q~{bACe zphL_*y;1)715ciRdZ|Bs)t>_Or&#^zuVN1171orfkrwqY{E^|ka58W8zrk zArC4Z@szf{Rzsst}pf|p`407;iB`AZAb zm6E@-zq%6nT{TZ$PT&@0$Re#2*KjYP(3iW5Q{F%9tfAC*i*7&Q? zX1T+ATXblv4mIo0HXTan&<-8isYAPTNW3Oo#b?U0ehKBUa3sV9(kjGtyegEZLp-@e z-8)H#cB@<9?a`qw`q!>Hbf*q+bsztW&+Mf`Qjz3dUwyAYhl+J*fDTE8k|#JQ&;Q~x zhw0Er9U7%WqjiY8tke@@b!eOpjn|U*7ZsIv~` z=@7kt^=wxiI!TAPzefGqSBDC8s91;k>(Brl8mvRyu)+T#jXAQ`-dklW_7vkU7)wDn zP3*!Yksl9GuUgmji%!7YMmC?0yOX?yxp)U*Xup%X*;)O`!#&*Omu&E-D{tZ(YlSCq z9JjCsz6umC?5$$~cQo=(P&4H+FT^d3->$^-F2WuOa3D#|GNQ@|(j zwpynCtXF@;kj4uV>T0F>vs(SBSAQDSA2HYQf+lq(hB{ubMO|%Gf11@FF~sqLo$5+V zaJ*o*y4u4(v6>vz#kk}}ZWk$mi@sdi)l*#Fpk3FL0&bA3<5`Z9&akHzNk3 zcw(yuQi?rZ#HR4_NNTb37|9l!bv9m*QeHPNmVVU(DfMeg?}@D*NGW!ch)v@ z!p%A(C)1?Kg(W`fbwKOQlDgKjijqR$cnt;Sf2{J!rlG3%0Jo;|kNG>Fh!+m<9*kTu zY-jRe-;eRa!Csu??=D)jX=5Nh*hGzE}oE__*UAg3&k{ub**Wx8R zDO1Hr47t`#!xQjm`}7M{#;{hjPrt0nI;S+ZPrux7-4v(=&td@ z?tguK=jhsQ>$|<;ggQk2+1bfGBJz3X){>n#)2OZl@wf`@C8Y3WIHxpwO!$}mvcq*e zvjNZNm+Vyg7YHE?pjW!B$0W0&L@N`8(Xwr^LEEA@U8QVmpIofY`~pUrvMvS_19=#y zh92-;O1c=OSME6gdwz>0gPniVihD4 z-3c`E(I*!!-kFfL&;o{EM`SX5Md3?C}N4bCrO4WF0&g6xXw zmXmSc-~Sg=)^Zf?B3hxVrP_ON-I9ra)Out%2a#!6nc-Pyvy@7QVW6V!GzpI6++kM< zj^$lhO;cLI;GuGNGJ_o?IEukN&|PfcXlKeWjNR9LPE8gHfyk?#}{RoT-i5=^)J zTgO&*ac-`_u?ojH=TF9AVn;YbAyj4fGQp@VAI12-PtSUW{okYFOhZBc}TIWWb(AFPuHzM-A z<3^l}h`;lQA%8>?tCJDO7f+kaWGA%qM)wiS-|i^bYw4cY?0O{a zMkGu0i-(j6{;? zSCdW=Qipa_s6XbaJ)U~`{alzBrOy=lW!1&f!omH~O^y!6lxJ?dK=rw*SF#B3U%a{# zYc&3g4jvp^KvytcAaA*N!D!x&7hElWs+aK({)<=F%U^~Xbtu=R#H*<{{ui(AqC>>W zy@IjoPlftJ`+$h-5-~=+dNXg}zj*Z)6+nna4=O;YmxrnD?S^3AX59Ja-Q#d5dt|8NN<5z$wX%r|RrQiw4JLh>D6vlN2vf zx+zk*DpI*BQn{L;6*faFdxrD~`Q(gx0`OmahF0PXt%n&}4>PnLW@r`9@QN%xqqC<6 zF$apL)jmUOZid#Jh_B*l9eTrKA-P|WrT*loKT4GadFrYQ|5R7)X{{LFb3=9253Lpb ztE+x&t@vqm6~2$1?YFnF(0SOLgcaFiSs3tTLgy8_H&~k6|DwA`wS>0u{mx8n$3d6X zyzkX-wf0@9dV8%pFEQl)&7~ujKi!2x(7#o-z zzrBH}0kU`#c604Q#KLi=$zjKwy)c@boZ>H%v22s`k{gjGC#U#3Uqm(?*EZ4Q+~W~x z(hXvDG9pY)C6lGeF=@@oNK=ZZ4HnsG(hZVna=Hu2GdX^oXL2?vlT%E8JYdiL-(R!* z@($6S^r*362p%<-Q^BK_3KlKQo^%a-Xsm#6edtFJ^8V-i1OI2U;s0g$KkhEjwq1Dq zgx{osx-NXY@Fd=J>yh_aHtZg&=53dwZzs9v)$zM+4p#NiAIVj*JMoXct?N@B_RFD1 zQ`|!N{QW(Cb`AurfoR3H#53akLc-}F7?>HJArj(moLQKTyU}l*NukKu9V%aTO1of2 z?I5+R8Y>utPmPr;kFDzZe@L3V;P9TCm(dY;d~?&_qgU_CJbR$qB} zvcIL;e=HZnC+H%wKPMfz-fl;(NB;R^E4w@VNFe%i(j7cTbq9|qjC|L2TK!74VR&I) z`$vCn!%NXG6%Buc_NhzzfV96W+S`iux}sqn7`mmE4TX`lqsd((-0hEg`~UKg2lOS+ zXz7dejPm2so{C(&Ak_M59L<_b#kOL|X<}~{T1PyAW7BYYVX9bIn3)wxw8Qq%Nz0sp z{jo0dN$fBNtr!PM3JRN5SyTXLONo^hJE4{RxQcW%RNZG<|8Q&)tKvSN;UjdnVk0v8 z498Q2`|}hg8nHhS%{ewAQ=U3dJr#-bK={3gC=b%zqJ(o##8WLzxN=Xtv-@}BxoBre zw0v>2?BQ_j*mmq3;%nQkYQnR6@XpZw>|bXg7%!36rh~6=moI5(&W!S-+{I4$(@ri| zT9vQFiIZqZPWeh7V;1ie^@rCp?{Wm=CH2xOumHDwr7%_tW3|g@4A=4lu~?GgWBdbe zDVMPv!FY*`a5z}9RNg2IR3yl;-eoj}Yj5Eb%9xF(Tp>D$5ZeU61u@$M&@6yv7mx_oe$G0W1gw@z(F8xH?V1TJH+M>Q z3Sfr-b~t^p~BsuUHbF)H~jfuE*%;Nsu|Shc;2&&)lC)w%`Mn!015 z?eJDklqXv?~VCGPkk^S*asx)tLPd15@R39vYW{j zjaWIA?t#kJxiE^NG;2||wqj3D$+momqE=Z2MA@oE*_xKDL;>4tlrtwoGy4z)^`2E( zi_+AJ9jYZ;M3jzHEL(=Hm?kYv`g~SkIeAmdAGkiLJkfH$6v5UOmZ3CQB)VQF+SrQr zS+Y@zVu(C}CT%C$s1t2WuL4XtH@19=8ELUBNMyB6WMwN1NlCpbZym#ED|kpJvU0D9 ztZXS11WX_jd0Hp3q!kvgWSJz=%4Ib)l6Fp(=tP$6HIXGPi-3qUj#pa^YFYhw-W>gH z^}Y+&%1RaZhm%7v1Q)c>RnQ&oYQ{%9Re5wfASvvD>cp@@OD8614+inIXW0XEhRSkW zd$5H|Z<6+)d{&31g`qVjaVrdT^H)EIVOl=Rm=)bX}r?Us%1Lp@H zNMR44vmSAGa+C7m9UvVpY1q(1MMv!A!=90cP;yM3%t`KUQx4KSh6@~fxCjx^L&-p=DEYlc}ulAII=b`lE|uTK&K;KIF9MZ z3&*QJ75oz|ygFVuS>2c_e`>1v2mi%uR82ybBlG?^5K+e#L?yJYW;P@6Y-wY>4dsSm zF`W5~UO)8KaYO6-{{8{|1+3=a-j>R2_M^Y4I5ReUcX&lnXbfKFE7n(>>8^i_jM@F8 z6PnK*kfHhL;vE%&JDq}D_S2SCTo+zmmWY>Z2ENUk*KFRNpY#WgXj{2;)2BZx-->l~ z-PV26KBF=_yrMLezdKyZd0VG)nKKb)bQuCDNZ6TW__=-l?n&@xph9)OGU4T~-==Hu z`btDfc7!6W7_=WH7CtLJgA(#T$>{t=%qR*CyR2S!LQ9#|9CovESKxgGnL{foPuPAU z&rgLm5UIh*eHxv~+AAnh?ov0>(h4kV%_cP;Qpe^f?Zu|GMyr}*y`GL`uZ-^QUXtDI z3odOeYg&vM0S>@CGrdx+oscue$GZrF8joJMX|Ec;X^)4_qn8POpj z=MbC<|3Sv4!~r`q>JL~OJtX={Ygu#ThHatkBeg!qLvxpEP2;Ib+#p zMEhns9h?zqfH;#Q`ifJveqiLEA#4teR&Cq2s3kb=<5UO?X_crQq9a1ik*26ea!YZ^ zwt+ZbB>Dxykwgd@!>)kv+zU`ZkykRJyQ4=&8b|Zhf)YA3JnuuLDAgXJDDG}}vzcW! z)$ctv>v2aS)x zk=)pBi4ARTHGnTMI7`8hM&%Cf{^B~<%?He3{cAacU6`_+(Twd+^UopMYhOGR_gCTr z2W{3c)N(Y`f$yb%5#8DFe&)AZGG4)%JQb&+3Bo$loDIkim11_{G9DsyG!GFv5LS>& z%i)clmkgeb)1o4~kBY7f*PetP%&HLBPT!7rDZ`p|48_K0Ab1plS+Vh%2p$|8-xhv; zc4RGG{k2eY%i+@9%1STFREpACS&>SV%afuEON#PS6ie*<&>Bh;EnDVfABn8=ik+WT zinC%I-U#Ey&tm7}8#K$DvPQ_JZskzCl4X$2>DvLG@e(McWe_sv`P)6H8z^aA7M7!9 z%qKjnEgECw$DB!L!*8ImdNB|GU~a)XFQ_d#Owlj9O&Z^J#JD~qCPzn%o7grwVlp;O zN9wcOA&X)n^5jEME@k3U)P`7gn)srQ??W}?JqAF?z14@e+R3eU?yau8)n0D3cW)gYT_0K7p#kSg zt)nQju0qWjvj7ctm$ZLuuRoZ!Z^YFcFG6vs)*`(EiUpw*KjC%Zgmi&8${M%Fh?JobGApagG{~jg(9wz@D zB>#5EsE@Q9Sh)&$izITa?9Du$8XSJL^d$@pM%QLct7t8q+HxAT?(1JgTJuB=s4rAR zc;+W`H8ARnliM~S#rVXFd3AmU{AOH~$wekM_Tr*IF503x;Nmp72%#e2;^%VF4pjgb zN6AHdmVA6-cEdHhviekk*kRHlS%>`QCoLE|H}o#9!H$USSuOnw0lTJg7{ z@JxR0%xg)nOG}!C_|lR#vn5q+MoXGFQMV%8%ye&Fp<5Adwsmg~a9a^>h1^^DZY#pA zcJ8g8yR8Vf+Pk+7)2%2jt>{{mC)<##%I&{#hNdWfoOY6NYej3()CFitI9Ho1DYDV$ z!$0NQqB%H(!>i5NTCLD2w&>w-Z49dq%fRR0c4CKLEYu!HjVXt!8X7&CTEUJyTuz*TE}_u^cKBNWE|M((7s(cYi)0JHMY09p zBH03VpatMYvIT7KXxbtifxu1fVVqseprOJ^r`lzxIudCL(K}KB3g5oY8Jx0mBvj?t z{-~NyQvGqx2WD?*xt?z=qyO#p*WKSQ2>xCISCZAnDHx2GbBA@+;$nDT68i}rFnH|G z<9*2Qll&X+!>@QI`u}|&2HuC>d8_}fKIKgA|Eo`>Pj7WC#w&W(iwElYYij%={9-|+ z`@KH7!P0naa@qMxDOR_s-$r`?O1JgrlHU4_TP)JYzUYq)NG&V+w zteu>(7IP`i`MJ?7XDE(w$c^Tpuaut0bP&P#59wihMz0uVThRAZGaw1XYjX)M;7S-% zHSpTu(%fDt6n87HK-P5NZj59$xMzd!WMCFz@a-qi; z#kM~QDmlMrIr&LyRmgcJ0MGGBS%$FXz{rCRQ}tr=OHzGKSB2JE3L8eaj17IHVMW{wy~F!~TLIZyy!+jFY#99@PPq0n*1j@q%U1%Rqe=O-05`f1 zMDPFxk7NBZV%c>Fi>R2G$05>AsD`2zOU#N(3G0{X9u0uQt~GB4V;!qvogploA)T7F z8#NA{l0zbK^t-o)>n=enkkgiBq$bxX?8L#W+>R`IRW1ShwLkW#XQp9~4td6F8)A>p z>sFQLB6^T8wMAL6nl~n2&<4#ORvSY*u(L%l-mX1O8UGnC{_OpWf4didpZv}u&&_Up zNP>xdB^4y4R6hSPRetj1`Ju_@OvB5zk{WlYV~0 z@C$2p49Ma*Wl5fDle6pI;f7ZjrpQh6VW3MoqpHsvC{A3bSS-QKv2|PUuhh3#6GG92 z&G>hFPhH%6+hY7&qB-(!q>fRt@=H30Yct7`M=*-WgKhDtUcS&a{fN2WSE8@S>$bZ1 z?LYVH3nh=L*DAj{F~;dLhtE~r1sywOxfp5h;1qDZ44Z4~q511@?y#gQr&>)JgrBh) zITWqihG+Q--J6-fRDT)3_pkeWu;0+|pIiwdn|)c3vzPc5u4`;~ zR&?Qd%3q2X{**Iir~8zNa{fv<`V5kDp5@P2C=yxMiCLe{6e5!7s=|KBKK1bl{Lq$z{ucm`5>O=Xga1r|YY6yC zMx*~TKo`eU}H=i_Yv$0y3sviy(VJV zAFZ|FN~yR6AaJxz%o9F9Im?qZLO{zW7Oe! zlM&?W5i3~=yT*p|6lTsYbcdXUUD2o;@(S|tNbO)gf&n@neup79obd8}CJxU1zHP;Y zJc0Qvp1}MIp1^#FGo&kKD%y9)7{ZXQI3qXjf6on(@^Lm@fBLZ@c?Hq(9nrU)p<1fp zU1JjpoZ-gxX!Ck$H93r7W2Oo@EQ!y3M8 zTQP`71mSd`b}+U$A_(33uKICI%;f#IuOV8vmY?46Cxp)wl;W^v%v%d_xz&I5rv_12x5wavWa%QH`cUe`h0r)+gsvrAYDW5t$^_JZLlbVRby zu*c(#BMrM0Utx)^VWvB%jfQ|8cX& z-}s{9kJYRs)l1V)g}mqw8U9IC4(4Il7lH?Yl>x{{C#WDXL(;(MZ%dEF=;&6Yn+qF~ zgEmYjRVHJdl5JR-(2nWgXLJtQe~7rWY%jx{$~+C2(8AC8)j}Wp=fcKbFcL)>E|ICY zROUlbuRK6?mJ>Ib)FysD%|~r|57#&#Zf{iTNl^!S)T2!5trqoGP$4FbHZyLDi_}B~ zZplCefBV2y!CJf!_$fTj3un2`Ld!9Lo9kDS<&pf>u9OE#rJ1_)%Hzv_Fn6)Ypl@_} z#AYQ`|3(L;Bov4(W#SBoqDo^MOJmXJBAE+j8i|Dh=K=e{#}OenHjBkk6Hlt|iUaMNLtOIB9P{vy#_M-(QW9GCRF(5@9nd{mX0_jX5rQs~N)BXK{!c$w5r8!Inugu6F=-?2*-swS41#HY5K+Ii}4 zlr%|XEyS}@?^HEuv5EhJ=?W-kIJl~xXW0L#%D99QrIL==|5ZrQwg0SR@tJH$Dl{3P z(Fm${g1SdTk|+20GLc$3vw}}R)QG$tv;$g=yYhWp{r1XbKr02@+jYlNqr;0@W;hNWXA3Vww zpGiSf$kTU9{pkAi%@$AIt;^HvhwA)KG*wMe+-haiXRWV^I{i_5N#84|PSNv=`aOi+`w1>}C?@Sj0IX zf)MEMk?2W9ZTEavD>(5skM6a*EIk3rTRal%cu39+|6=LH{>c7@c$ zRS6^eKe32ENkinjU)A7iZQ`{ias3Bo-q*juyzfoMTW#XuCUK%goVZWoZ8q_xPmEl5 zv4~wPVz4Lnm`$8u65pVY?Xv`LY)YMLI>q z)T>$AMH>VWSh1wr=2i+XF;>Q}T0{WUO2P`_{5hZKkL5qasJp+cgyRWx`> zt^FjJyCcCxQ{HR+p5h~3YZB@2Tl#wWFNzp@{`HTJWIasVCKvj+VUtUL-{Rf??*7#B zdwtYZG=0AOYbx7{wC^L8v^d&77P)0S=GSDnEjt!z+mP#-39k($&NOka!bw&_YTWvb zlKC9(5n>-y0)hEQpJ<=ch9*Uu9%M~T!J0}D(X?ZcCvI^k1JURnGFhhuSv^v)Hr?d0 z{^XNuxXJni?zEN1ZLbFNI9JQ{mQSvZChOiHYmv*6u|w5gmhm8!$Dg@nkZ6E;@+oU* z5Hu)-P|s_{|0G$MiAs~zKFDgDg7pWT!IOQgZYJwF_|jIbUGa)2OWK#$VR8SejG}_X zed_NZhS(Z`yAoXS-!XoiK+SD)NxJd3{zz_bO|C@^k>WLYkUL&XqkTK9sZYIM(WUmi z-oM&_Ysh&5AMrYLgObmuOE7V!$-UR&-YZ-vOclIgCzLI_-c7`7PKgA^Gn1|6Jd1c9 zh={w-H{pb&@M`=ui4=d|m-%nj?_Hyhyzd#_CsarbZ-H1^s~GQv>us*rwdMo7{>>ng zMA5o`bJIS=I82LihEI%D9OO*q?I#exs-H)KyHES?BVKC~*Teg^h%d+YON<6drZ>)}URdU)aG zz3ZV#l@|2ynXlYBh&i?z&Xu5h_Rl|m=CzmO{t;*|=j`U6o8h9+yx zr*Mz0Tz%5G@7jHyk9dYjTofcO+z;Y4KH^8Tc}W>dgT!+|+@JPxy^lKIr0#@gta7fq zHlMwObkQ#E-%4e3QWC3V&%KsirY-7q{pN~bm#KrvT@>Ul6t15C@?QUdPf+rqvopz+ zG_jJSm&weZ7sQpO#SNgW(s%mJuT|eEah-|#9-gt4>u=XG*Qum?aEynW?ny`c>XYt? zAZ~G5+$b&GBc61xa%eM|*-=5pgo39)kT@Igm zxE?010p7QzxECAJDee}X(;qzC`y8B1=JaNbb4L(DiJMHE9zbGW3WW+Qa<^Lwo()f| zHlfD^p+5l>(KXB+JkTApcN7xvRu|6R($yySWq99K-q+R(S91IZ4cukOXrNz2l%eB^G%{Ey_1zAT}th+UN zYJuBqT0r9!E?6swfuQgUq>nr6uK`|AzhAJVX%C8ydlW?wZ*zXv%a$AT41t{ z53-K6Sd%pCK})V;ll2x{Y%7m%JZI+d3C;S!l4~~%mM@PucEe`Pv{>(GR)%s~wZ4{^ zth0iwGcDGEiU8er7^^xj-g{`Y$@&6*w3WxtSDAS{L$j{16H(RXkiU56`V9B+}WOWO&er~ZwXjY9S*8r3CclgUz9{;++%%h`O z&swZDChN8!Yo5hgqgnY@8(Jm?%W@IV0Wr8=P>+|@?BMB{Tn3IMYjsFDmNxmAuVyEq_R^|X?R;? zMg1Rnk+Nf6r(flOvB;i7lUOHL2K!KpeW*UH{pK7sB6?U$$-`DKB-;h?6ZMGf8B72~)<;q~cO-J0Pled@R zx~`M3Gq!l`^1+mHGZxuj!csZ%j9I^Lwb-``yR)#5*X(ao%FS40-z99hGUPtiVjnB) zJYg4V_7f@PW-PML6t-L$Z2J3toveKt*L7WleT8O^cr%s08H?_pu;t2NKeYzG`|8P4f5LTL z4`DZG_L`J(GZxveG*TyWWw3`@?4iQ$CG7V#`^e3y^vzgg-zaRkGT7g|Xv+P~Q<*=nrom?60vn}@7!Y&YY zp=Q6CQf|f~`(k0smBIc1{qjr<9wq$bLxJa%ISUqQyQ@*aL+9pk|-(R;qf!SY($9TdoZDYpe0QuYSL_1lM(g zh25appQMzVvB>@uHp!7^Or6|pv2PakFk!#1*>|Uuo3Y5ACv3Sg*Yjyz-PtBupiXya7vvp7TIHjEmsDc{=Q%C&mW`Q%3$Aav2Pc4g|I)#sgo;%eY(XyUD%U_eUu`? ze&?rTGZxuHg)LVG`>!kUyRXgvbuq5%rV6`6v#&|XW-PM5flYGc8MA&*v)I$fE~&;W zmI0-AXo%b0LUtEqZ7lLTjeH>`vX;m)LDrhcE%cOq8rbqjN;w-ZM2&1o ziJVR3_pm)q$!rr@XCdnZIX4#hS|bnVlp|*DjGk)ATq6G{$hju+R10~kAQ!+0DG(|^ zVM?TYIbxU~7nsQR=uG=E{@$a^_?@vxnMR)Mj+dKK-bpDl1bL^4oNFQH3UU!jTqE;S zA{P<)6l|7LvdBc{TgZGt-WQ83)X0*Q$oq)AM3DEH$dBn8`!fFVBh2^%7%0)mAt{j$ z5Sb;&2TbH07V-{3J{*huT_Z0|iF}yIXJPc5l7~%XfrTs(@2kk5IU4LN4SH>c@Y2dqfZzBIiH`$l*e?7#E zH^w4AXygkik&Q$iBgjS*x!6K37UX(ZA~m6mdbuGbay^l+z>Ya3>rG_2g)A53MjW)J zk#D6$ZX|M&AUB%GObeMQ$R@NIjeI{PvWdtpf^0I8f1-Qs)8(HYq%JqdA~B8pEG2R? zk(*%0oRZBZa+HM}CCDwY$Wo2`E+ujck<$dpl`6g=(*rEz0fO9$c|nbA=gyv)R(&gx z-37^&Fh1n+r_GEne}EZpjzzxH$U{;hWw-to*f9*Uo5-sy zQT`Oh%jL+9^O{DE(({0zmYV=gIi8<#{ntwL56tzF=O`gk58gwl4_8Q+0t4S2_%JgE zfugQ8<;r~&@Tc&h)s%-`hw{nqCHs3_FMpnoc!o(_6eKR(58^dG;zzFGb7d?I63+z@ zg}L`Zc5-WIY^YJ!r8GT;s9kSgg2f zn%vxu46@2CR(H+1-D3U5WMv0g2Ux5NH0vIV^-Ggg4=>u%*9-TV`nq1T9;x>m@| zV?~fP!D2a@^|-~l+hlbOvQDsAPiWRN7V83&wH02mmB)AQHS_qYW<6)IT3v(V=5axg z6|-2|HEXTK`m@O@4zda@)`9h2{c3nlLVEJ`T9dUK9<-ImukSJQ*j=+;wd6Y5WGxA@ z9)~Bn`g-}d zroNugtoJOrwsVLQFAg`4Q-iE27VA~bdf$@kev{QB$U50#ZP%<8ORft|);74!RvzD9 zWaja}2Cse+mAWF2L( zUe&BCEV<4xSxs=PtvvqaE>mCIHR}*duCF+}n5_4;K~{~$I&iI5zZxvL{%Ep#2U)+e zSlu=2XiKh3Ox6zg&{iH>7MgjyK(mfly#Z}k!zSy2AnSJ)>w3*P!IJAG7%ZQ@h6Pze zES95LHI`hHOjcHq)y`r)p;^ybtnMajHC%5?U#spk_4TS|%{mV>jto7 z{rz&(1#kWRy#+><_qyl)W+*=-Qw2Auy4zQKY&u>qc%?~v0S(V{X z;t&(}P!M;2THF^J*WlsS!gBd^cVQ4WI4$mLjr-2a>@6lP6vSniI60)rt6T7u(C2Tv zUWz1?_(m*_wHj+F{OJ8Ue`C>Y(m>L>Y59*!GH}x_RUvWHK0um2eVj|L-M3}$TtL}U zD*1@Gg?Rq{~Y$sBIPo16n~M&%23ux=PR<`y~CXMf@#@ zh`UcutsyCV;v<+WAF|X!mMWwnoF@*I^7Ud*qyJJN(dYuPgH|bShYy{4zoK_uUM0_e z<4MM*^SyRHM8qh8NA19QjW1?7Q{g$Sx4Y7hJx zfz#gfmE-pEusRHw_>XeSDLg2H zqi@&BPCPDFa$B^@e=cG>a52(SpuWGlU*}VP5DT_i)~%Z!QFV)jhr=m(sFPAy_dAsk ziLT6(yyj%MD++(x-@>A4!1GP8dpH)9^(Xa1DDgUsm=D~;0{2J*t~bHSBL1rfo@j#K zf%oi}_?@|_Rq;;~>>h^&i4T0#RmCwTc$x*C1~7Gc4ne97v9Wl?i`t2EghkECsFZ%l_%Dz zD$&!U9&S=6TGWZDsLZ{O%G2)@wb-Msp;=67AkU)a?FV(Xre5MvuQREyz-{(x;FUQ( z4cN!(xTQ5$Q*ZI8hndt0i(28QdgbpOt>aR8PN332p9O9mc;S9AM&?x za~N|m=`yhGEnWU+G<7|{;~`1Tt2N0(QCFxRLWy5N4qr*!1vi{^#COKd9bh|E+iK!G zZ;*BVbv`S*O7Twpju$+=RE^QH%KBGiC*Fen^6^g(@=pVw6?2PV)B&Piy^KW;|ASH( zjV9|=qSgd{1fSXx_=DL1s)N0?-G%7#z952mINHT>Sou_wct?=907N@yq)dO%P;b(r z>SBJImM&S*&j_-6rD5N1vXe%2jrt*!xYcC;4c@Y)i7m5I%iUzMlXmq}kA1Ako*raR zO~YHvgDvF8W7e+8`E4q z&DNcmLoVMSs_Vd6v#+|s!JXO##lbmCY~Nt#8zH=xB2(0M^TZ!$Fq0bS6$JNG0?R2s z$19Nx)Gu5y6C+Jj3!G$?cP-<`wUT#1?V)g%RNYUKd!fWZChGS=)V)5`kQAt2dQz>0 zP4i{&!XRp}50%|5C{?*9)g%*@6-2coN(w&QGR%pWZ(swLLlaUeBIL-!Az+y;l7YN_+%6rgS7- z=u#wZ8Rc`qHr}Vx`Kr$puca4SO8+G_i5{I4fQ79r|s^MA3}+lVn3~S$NO-q-SLe5EZ;TN zsRg*o6d+l?v(yivL_0HcW016!xvRi7%J+Ug>y_^YUhJiOAAx!FDX)Ey-xho}g4E^v zkt?V!-(e>3Svb;`z|TzIclmC2u`J(AlXz8-I2y!MvXlL#`Ra#I;(U|+1l)5=6N{&%miqydowPj9dF;Dfll>K(WlQdzRjK99Q_aTf{wH10v%L0nx)@%oJ>7;BjPb#m9edCTa4PY6J=vnU zuuChlTi2EUBGX^g`Mtvd;KW09loQblc714o|n^~BCn5wT*04{}|{L$sL-(ovi4reh0)PeW!o3wtnLF80eX z?c|;ol~LRmf8Uq(G^DNeoj8(4fJ#?gxo<#OGvj3+s$8-QoAJcjujhTO2H z=*!2_pQ@gsvykzakH69w$x~)NuC&s)5^1QtCjNZ9bFAC%bMx`6k&nS{J|;4ag>q%& z<3~ElzI^;RC7F+5l8@Wdo#4ntZEAg)TTEI zqJTz;Al=*wpsFDsWC8t-7IC3m85ujlO7sL@qN9b^Kt<^SVj56CDq5bdXpF~<s zxiT`=FdM)7l-DpB*YdR@e*ry41+o&j`8dtU$JK5=-lFwgC|5>4E={JvE^Ojbq~TSx zv3wR^prw&OPzHec*Hvipb@CUtPPn^CptidtITzrwg`dOwcC#eOeLjg<8V4xOj=Vc* zdYKH8mEm_cx#Sz>S1KZ!Bp;*(f5GGgV^;C$$>hXXOqb-wOLB#Zf?21PT7xtlB&a&T zc&r1zolBj_m7%-iE&B07uMqkTnqHrV&UmEv5xQI%^q1&g`%3?%iMXyq@jz9-)%5jg z=!{4D-(jqrg>q%kud(RY2z{#1U)J=dG<3!zeY())%Aj|!=p9Jswv#V3dP{1w+IaE{ za?7hx48FSa4Bc&?LY}E46dO;DQ9TZnWOEv5Eropp_RcAPG?4}> zn@_3)I@^TelX`}vSpvo8lS&QUnFcD`Pr3?pt_l5ftqJ`zs!X(G0p6|}x;qV2HlVx- zi{+FrFrk-O(8~mRXDsp;4gFSy+!vW{9VM~_Wtu?mG@%Dr&;taDEhrhPH;#hJ$n%Vr z(d4l61O?Sipo>iCGWylN(qDE9vyV+ECu`^k6$(fy+fX*c&^hJznb6BE=;Z=^0N-WM z&;!#*`he7bfj(eDJ6h0=0>ws@n1-%MBk9A0o+!|VP3W`mzWv#M_GV^(aV*lHp@*lD zR5qi$1zY8mFE*j0E$C>0Vl&ET8hWJaaR+oN+fk|oy2OMYXh9DY=+oGopin6NY)d&wpsP*jifS|aEATRkmej{0?`!C3X(X*@m3jvT z$tkZlp;ubaD+P*;DF>-R5fs!JDikRFMnY!@w9$kfWI+!S=z6UE*U+=lNGh9CP8R5T z6S{J`nf;YFG5gq@a)XB6okmjGp0Wi7$tmAxLa(x*R|&KU_EbarrIA!Ns6+(XWI_+N zpa%U6Dpo*>CYz4qW2n@x%O`iEAwAHH2beLxW~+4>J390VFFCrG?`X3hm+_ zY0-`(4HIo&YuZi0S2KpZN$W%L6v^GL!a)le0teDxeNjK1-VjXxrtx+eas z6eOMM-=bR_t=o*d=*H9~JJtRPPDh^djc44TA|g|KknQ^oSTbj!T#4!=F}|N5l|Q)? zksQ7%j;FlwjIAWd=}@sq9l3Suc}K=G{^X_;7(4*hVZ?VV$Vj=rRg`%lr= z_GR^{>zNWy%yJ}+09D2_C{HZ%s+%&ko;+o12MiXz>&|qITozj?6-!F$l&wu5A*D3q z8IpVLM0n?G)k->YWu&u}Ubo7TxF}nHoz$ip&)7lP>Ud%n+WB0s#U~C%4+=SfR%Lmt zBQaQRpTY(?3+03@Bc+?Ilx{{!Q8~v7n}aoXC%NKIO1e59a^4l_bA>Kf20hoJ=L&t7 zNPU~8?@mK!Jj#BG(B;aYFNb^W*V6LqD7!lUYN@8T38$9bI{~X{8Z{$V27RPOA1U-b zBKsyy&q_mQJj#Bv(B;aYe-H1=FZ=gnDSMk%mgg6mo|A^oc%1PXFt_=D*I?O)JtQ$kkbQ1bfO`nxUcE%&US;j`?%Ak+6=wpT6 zS?HTIy-yn18ISZCLYFIp-qE6W6ndV}ztHqg(#Xzuq<0azTp9Ew^rd~8S#k}o<@Jek zKIeJ$y(Eq7U0k{vPn9c!KG32M6na;Yy{D%4i>9tKj7QnW!WOC#e)FBOla8=Y_MKN# z_LGD@MAHYQk)82K?>3>WkJL8eQLIhlHwD}z4SqE8ljUy*&2 zreBptcE+RZw+mga4Ej$j`cH&jAoMRZ{n|9LGal)^gf3SGeKp-@pJrBHNzD`s{gC-y zeZL`%?2JeH+ptz@Cc>66mP z&UmE%MCfv5&>x~_?bFOdSK!(`D{F$L|H4UKX9m0U)v#9nnG5M@BGqDxUM%!sBKvKc zUXw<4#-r?)30Hm#>;UnlOC||Y85K{ z-J?~%De%^YQ4;#c6_j1B4El{0{YIgW#Z&nHtES(drkBcilzq0)<;tMvSo9pwofpJ2 zimU0Tagx#yozesq%J!C4B&RgGFb&_7hSW=VKuhRS`}DKqGU^9Kf*e$7?(Y~<%Qal@ zfH5fhMp!HVWQJGYhgsZV!i5mvKBl=F0`f8jJ+=yRlP70sk8KZKVV}HvE~UIMcHq9H zxnBq5Wem#OS>%-~L)Q;m+=qobRk#_qd3N!574qqqF(_{%Y?JTAEG_Q-Zb)0f{62g z=@#yE!D0I0S&eJQNnoQ@$i%}ak!x38gzo zq+4R@ZjpssB)F$>#FEAx6Oc|O8(xIfbIRSx22Z;4EZlj5!(_wpcSvnRz3Uc`ZW*P! ziMSGV@|D(|`1`)hevcQnoP1THalZ;kCld^LBAq+I;7Ruc-aCHXJs~(uFkGi`g#qbS zQ@TwsZQhAjTDnmdZj|6KwGh*|vVe3lsW5{$Z&JaN?jQ?ykl-+>uvFtN3P{&T=}r^r z8qJb@kzTb=cQ1~h?l7J3md0HZkWMBNw!s!TXFe9yYrlF!#1*DV7gHn;sojmZQ+eAm%m)T9jnORI86lz>FAl+t4 z_bqG@R!5tl@do$IH<3QFMC8h%N3^MiK-Kk+@XAq*UM1;*XWD-_Cwa}*vOTM z-WCz8PgK2sZV_2Hj9nCcfUmbo@g>|23~xi6@i&Ola~*LXxWYWS{P#}vTPV@qwcn0{ zBimO)AazQxf78fiNJK4n^2YM<3YV#jB}93v$Z}(mw_UW1K__=VK|;0P<4)IzCR6+p zesM6x9Tzgi0Z1i~IV?TGf?>5}%iACDrI({#0sieN`E$WfKUVMMZa1-NG+j#aZP$!B zby67UhxQ^}R=7c59Id2NlsJXbKMNbzTC+|@>tz{NEHb%53Izrr{4LfMR`|#1JrAe| zX*dg$9*~#PEAWzoDK!pdrJzR>i!9RgBLj5tc_8mL*e1URm9g1Ok1frXLre zGX{I*Glec!P(xBn2dAWG2^}U6^evkHivXQ5Nbf3ixiaWa!v_y)=J6ra4E>u}WVfdO zGC*ex(qDlg^Ls#^W`?Gu4-k5V&^uLnrFuqy&KRVR6S`a(vhPAc2W9_!FlC=C^xm3& zPJqrBq#rDFxiaW?rKB$q`c$Eh)bxG~U;bhbd@C9TxZkpW4? zOL~e{(esi#XnsoQX#$0>v_(Uo3P>u;xh@i@yPV5|Zi9avtPlSf$m}mbMb^+O1Colz z6cVWGF?rDWDWOq;!f)y{(W}1)Pq1|=%enqUBL^4CDE%{2LVF1m-cxT49T$*Pyr+u= z>UvL}q#wbp4rc$oGG-q>)JP4zF(9cd=V~WVcR7~_U62wwN1*VeCTr-#fTZF{Jx%N7 zc~TyVu-skFdO9y4sVwK}AW(NXmj}H)C3LPpSE8P3=$!#c#oKy@R<7Ljwmj%r zDWPWw6h7BT4gEYIsVwKZRG{v1E)SZ3_Z-ar2j?^U@Vq8#=gXG-Wifi|I@YUncoNyQ^uMk`nDdSo8-oRrXffx<8A zG})`C2eaQ{yrX0}*X06rmved0PtjcrW`A3MW*^>JZw)O9K*c-jD9|ltL2-*h5IUbw ziiMR;BQ6u?bMcDxPo0h zGIv;%i^m6t1d?VYhB1)}e_!zfc*{YNxAsFkfRUE$)`>+O_cxpEpz?j2-4zdf0DZrbKp)txbuY7Qo(=0$ZdM6iVD5z@D5E`wPLcF4U}*eHvJ9 z=anG}pLGCxNMey`Zep>>Kre~Dfh1mmuN_oKV~MSh8Cvq>M(vrNLO$XEC99iO$SoG$UWC715f z={x!ewyHg@1U2j2S{F*>Ll)Ep7L0Ld4&O3YXgNN3Rc)x`8)g;_DaP2UvLOvbfgI72 ztPL&i!MR>w{+C*x>k2)6E;(+W`b?IGTaws+ub&_1e;%hP#b>h6@^r}{{m71gPaoX~ zPos|^hkE7m#w$sEOrjM{p^w+$Qe%{`8q&0J|Ljv97!tl&yoz#P0fa$8w2nZ+-YI!3 zx|(%v?aab_+(?m%NAI%`VYk^XRKxt68tU}U%Igb}Q1e~9yu(T-g!N2eA!Vn zn38Q?w$VFE6hQ=9i~EODvs5~ATSYZP{jSaQYZ3~O=9!4XSSs5o>(M`@=M11%VxOK( zF0G5QyLl*lPkAblpN`ckRm3yI{PJK$vpvlR+H6jyeRB6uh7uDcP1>hXosqiFJ|){j zTn<;16R70y!!}4eK9gOYJpAw4F_Z7UD`EdMf6viLzGz3Xc{WzJ*cq zwaAf3+$xB2fwLfjk4sIOl`P-SC;;F35181DAoj;I#f$~?)CTHDUS=gr_rSBY_=)}| z_c6HNmbj0COB>>e>#xm9T=CIl1Ny%TU2(tQ2&VMuq?Qj2Vh8OL%NkP?Pwvg0?&;!A z6aF=PW=rNT^O3yj-y@L*t{PZndM08G{#qZf8B$bs`@6Re1ruoj`qfseD} zA)m#a%#@MJTZ5qq&yxR*7fDO**PyoKYiPQY8q4EAfRCFeTx8R#G`jUhMqa5B(Zm}} z;%ju+eZ<##Q_>_cU=Jc6x?*eM(I#=KMVx981EwJIrA^$xvCd?!Pqc_9f{4@ub((G8 zlZx8j)JH2gF;Oh4Rg#Xw}z16am7-Jsj*wzY~4plan%0K7+k=kjQ7g%g(2X3<|0enP*go*FZ9yiSgZ8j%iGkl<#;?^0GI-p16T@p0}##+g^mS$f%qVdz&OBEz$1WX02=|_ zkY5I<0xSZ&2q?flVQ;`IJwl=32&(`q&GS152`6_)<2^&6!vVc|DU={Q7ta>~W&{2U z5JkEEn8v?G_#)sFzzE>I7;rP-Zor!;$1-C9KLjiQGz0w;2)6-d&4|$9u#8d^Js3|f z;c3dUP=0jpDI?Y|4WWBTd;y8p$VPWe*ewlLZT+HGqf;85f5Dm+_KZm0GH@z{tfeRv zvdSA#D&%V+?iZg(wSwRNXg7^fCSthbXr?dAfj`Ye>fSlkaH zI2P}M2hD&Mz+SyWp&kGr*=tz|8um~tMtjS19!8Ydd)c5ICH^~5Vm}brEei)a@h`s< zhOQ#Jxw}=J1XDrR$>1638UZ@`1BL=l0E_~h3P8&TFAISjf!04pmg8XF!_3;NM?$f~LBRqvb= zRtY+3874+3x({+rexgUT4}@e!eV*SFpDshmDRy%YtGYnPDrqQr3ryGn*aZlo z-JXDb0eu0$I7(zG^(gyuUf3-Q*Ig0mGwX^-Xga3q*6KbuQ&UEYOcQ6>&4pHVp?3C6 zP{_{CpNrjZ4WI&WA>eYrj{w&LZUj^TssVQa9s=A4FbF5x&AqJZE0yNE48l)9TNq_5 zz0$5DShU^8F~-~+%% zfPVtM0Oao#3iSr`0~7%c1{?+W7QoOxP536DPl!BGk~uZ)Eq8n6&5(>1o~?lf0ME8zIS~1L6+C(qa6e!b;3WWLf2QavD|Y_> z!1q2QQiT>U{j0n-Qm1J8Y^2Mqw_-ok6kAie`FbujS~KP&BXu}<>5oViQh@t51Uk}# zXL=-q0w|6LcLio%m@^NeTD7&=mt)jkh}yD(MEAi{4W2+}#G_Mr57GA!s{}oUVxqhq zj2O7_1@Ic#&m}`tmRj*CsR&JSqKe+JnC+}MW&UK$%PPQKfcpT|fEvJD00?`IWDdf= z)NFJL39FcZu?ShQH=$sV(tw92@~zm5cpR}F3C}ZkVSVZuDxfi8Nn4FHNP|@aU1x9k zS7x_fL8i>R$vVi5hPr{E;X8n0Knb7%a30_+fQR^XgLq-Ry~STLw9|1xi>0naxithL zBC<0ce7O-&1*itp0OkTfdjfS#_rCZ-x;Gao?B3t;C|$V~3GCimNRXMMgJo}N_9luT zXi6>vuR~4mEWz*9Z+l3&~}nqouvjb<$qw5(FEt_N8morE35WYk=XPFtoSU*iUP~Ja2k& z8D?52H3)()B-p#ktk`}Y$@y++fxV@H=nAlsD0OdXhhNhUyetTs8nhp^BJ0Yjs;yFy zOOW)3bU@LQ4))`XWuYNT#|c7*^y>L#kO^NUrR$>`><6l|KB}`ms)&VGO?p{D0E z`0%$hAApwaV|8Hr?@BqOX-3hs|tmX-U%qQEhr(h;91sWmSCIq@%QMSrrFsEzDX3E0)n9 zZ~DtJGC&X&47U8?7{r!S+VgjpmGJ4!Wn&qA7Y1@M-C?`3xQx zQWdAYWjlph#u#!$R&gA_D$FIaN@RP34)u%L_5p(?*vmT~8`q4=V`| zXrsT?)^69f=P$E}(^=M+!E9*kVS>qu{pp`#haUAr*oxnScxn;;rTJiFU8uBV=x3&_ zS+7{LHwH+6RhMC$dj33|Zcd`@(8NTUZr6%1%x-Mf{z%JP4cqGoJQoAT04@gH3-~F9 zdp6)n#GePe4mbkb;hxO_{08ta;7!2a0mq?i3E&aH-vKRv=P`s9;0nNE0H1qd1PS*6 z-UCE1?N2cfN4NyA2JkkZ68XCz)kgpx1-u7140P-Q;SS=oArA)p9c5Xj67Y9CpANVX zun@2rKs$MCc|?Mqy<5e|`?Q7__x13Oy%okbuA&O&6UozAm ziZSDUnfqqiUE=_^0u}&P0vkFvW$tBhH=P+f~kyta`wlIA!u~Lsk3ux$LuMhh} zQoe2AID~@$hXd@-u>$WLtX=OKRuUXp#>;m#^|un3DQ{^_v^G%&l`g1 zFWCb40PqpupMdp%&43pGroEZkUM<_xxqDbfdm}?Pd(t>ti+Xbx)BN+#GfA68((KP+ zko}0$!8Dw(kH>8=CYuSTBEtKWjhO@JMMU4RhidK=+ZfT53eujpc^3Kz|B3eB}* zRbI=SLfu`qi{_{-!Udc}-RDUXb#J)J=)ms3G{vBOAtxBtx@6dJ(%yop4-$U~oedKA zLMBPX-hDo3c?Ga9Xd4LNLS6@W5@3H0v+FJ}+>^1|JmBmr!;w@>=NU}%>Bss4@F3t( zz!Jc6z;6Ke0(2gV27m_d{;Z*&O7lL%bv?3T)!6O$($M|>bdRJ5*i+1gE=Lbu^4dKO zbVdO`2b=?#05}~W?e+F~^IL<7EbJvzbpKT#$#C`elBBAfTW0&+OX@!CE@Ju-tVN%& zL@e}hu(l}h?yCc}Uql>o4vDDyFf2;@5g_2`zGTII=i!pkU28DOq6yQtF4xFsez)iZx3? zXb3@t24`q+rUu{F;B*Zj-7I;B28%SfQ-ixSz;tI3i~<7?#(-WJ1i#S$!^bD|jlrWD z4A3B^!GRipBP_C5gC{lkvj$Kj%zI3OgEVk7_=N^>4Q|n(T7x+n(C|a`12lMCgC{ij zo(5AjSfatp8ooi!eL74`pY48^fmTRz7gQqos zB?Ysljy` z{8WSMHMl{8t2DS;ga4z!k2JVOgCA>ftp-2Q;Cv0v)!+vjjMv~w4bIZwYz@Y0aE=D! zG&qkz=J_d1{iVZ@Y{l;Xl!~C>v7@ZmuMri?Emis%=Hb$NSkF_oRWKrxR%$3_s3c*j z>6u#KxwvSsq|Wv7;EV6OE}6O%%Z54iDd(ArdXP^BPJbNDnz<3-n0bnicwcKlZjFU8QjLgr~e)#ultWuQ)y74;oR+6H`NoMo$S= zHpkaTk8>;75M_q%CtC)vIldCf6htI1osTz86=A0`%)^M~ zh3?q}JdfD&j#f0o=8@##2R<+(UK{PPCN&m|5Y~bf!Tl2Q*QB1Z^FrzN$voKPK0SOc z0So>8D4)ar^E%-tPJn@*P6Nm6vH4(QlH9(acq3eR_O3jv{jtVqAA8rn&OGK$9pIn5 z@>C4M(*Qo^qS;HCWztIS5EXNSz^`%8w*^U8Z6(-Nb0$t#B&>7|X?e?n1d zFNwT;U>{_MtovJ}Go<}s@5bu{oZ4xT?WObahAsa^*Ptc8aq{3mD}E^oeYUd1iVZ*^ z?6*$kiyfyYVlxXQT2a7wSmS*CGqX_Rg(+TfY466Xt2enl0!1OyKwhZw&!4T_xAIZ6 z5POzesqwWVYOUct4Q^|AMFFG4jW~R#hyyp`g%U4J&0(#BtAGu;0OSnAK+LevsVGbxgQA~ULs6g~U?@xU6G3LM>+T{Tg;M&%&AfiG`O3<3B^-zWa+qLkJh_knrMF){xECkPknx>Nj=6zhpOS z$ls<|*MD-bHSQg2^2$%F3u>oWyD`I?o}Xgfj8Tg~bWD|tS9P))`5%Fp?QuPfN(3S~ zWb-Fhy0OM?*0>jx#>p5WpTK$$2+4UFyB`^h6ukx`)`RcQAgLreKETUvsXrjCp@P;~ zD769w8!8GUeh1^U-9o8rz2vIrQnO4lqT?kQH4%3h#}r1C?}f6zN7#&`*Xi{H=hyM` z%q6Ps(6ce_d?@#TsrOiRT-xM)`!@kYKS1fPOed`OzC=LS7m$0#|tRh1)R=EAbC4CSO8< zovR=uq0JX=LwY&>4XurS54q*9ZZ3b-URiPh&d&P^po;teeplP+HwLE(St1n!B2Pa6 z1q31kK{h|uZ2pLAgIQm>o}2~*>GfnyDlhXHYh7@?)br*zVjsS`q+lUv%EwwO#|FcE z;(DBX5sY-U+dTYVUjW>>>tmV9FE0wzy}H)JMPjK zaA8}N_t&v?dxH|3hKtaqP^%!^a!!H0O-?fjr8wk;^Q_4O(2o5ampQ2MJBhoR4_Inw zeCd0%*AXKu2!NNi9cjHWj@hA?&+vT!B+DHilbH`iK*eUJvc$dlsSjq-=|f?fe@=6H zAqHm~gi_9wod-M3J1;KSd2x8>#pz?xINIPSQ`Zd;}i3Tm&8q=Vy)Y{09d{p%x%vpd?lrC-71JJYdv^BqHKWp1n5bnTydl33o zjqy&*w}gB+mObmBAMbx1B2vE9Zr;}sA-1aTq0q%_?uNv^`v4Kb9|Pc}?L=BGU_R4> zVF}15c;&H|p#Q>+={IdX@zBeAz`}|b0R9sl9ew<#!YQrBr|Y<~MjD6`XJ13Q5(Tx1 zk?~|={x!6BtN0&MR7PVCz8e@dZW#?Zw=CjRMBK9ePDOvWtjMV-a?1uf6$9O}K~BXW zrK?viTor=_*$_cCOpqNd$c`0cCkV2W1zCw88>z^8=R`JIkew;W#tO1=f^32yn=HsK z5oDJOva1wXpPb09A+l2GW~p?uRJvIz-7J-EmP$8ErJJRLQrAEhv-U@U^R(AMfnj5o z&^yW~;oIKqE+P11z-#R%`+?L9*&Ix4c%x-(Go*)6DPeMCXn4 z-j5~ZnyWC8VV<%FCw|zS^Cn)4nMOIeBmoeCu~1AAGoue3(E!e4l(ck$gCk zd>9BmMEA;Q7qoo|hTLPthLEN&$B=u#kaw_AY2E#kk{te5p%HRP4$PgZ>DZgb?&mH? z^s1fgW;b`Us&7LI*AK2Hc`#nB;dPe14zdH=HEoJ8@ohiRTUn4g`#Ged?t*{CS+{;_ zzBQyC^<fDLhf>_k{f2WAFO_eCzZ(Mnd4BX<__?Crvp?@19b$jpBf8IsT1t^UV^b(` zw(hIBf4^z5pd01n*>zv}b8+SUR%|#ZOgH4@Nqm#^p;TLZOCRV$xM}egeJGTNt@;p= zhonCAmxpcoP$UoA`M{Y|I?%4e%(=gEZfYquJvxY?)We7eM#;M65C|hiDz(3ab*b+o z%qXz0DXJv$Hnt?@8W#3P7bu^kg}EBia;Ne5rpkJ;i*2jko^ zNvA&EVtxO0=e%w1_Y31|tnb%3<)1oZw!3p_w`c3{&63u~iZx0kXl`2Zn;@^E$8Qk9 z9ohii^tFbszP=ZBQsvmGUC7DN!<~^t##z`x!%gC4(@i4Tqp<6ceAr$?OZ@y2KR@iA zmrRVpW8^IS8(Jns3X#YMuN2mwq&s5^4#>D;wz}}9_IGAPoH6)xKJ1=eV6QB~;?VMr z&n~lm^eAqy=JK_J)9myh1`u;jxVX`}^_NI=&nZN79`kjTbdWtG>7Eb6GhAGMQya28)iQwDjoOBhJZ?_URa78HJ zo=H#QI;75b8dG%RrPse6#pTC##CDSWrx;xwW+>7KFE)~!b%qv$RL(1bhHC?il|3+SMFdQyt?w2TrV<57hx{r%6?v|a; zZr%A*4zhRmi5_V079rfNd!Fb8f?4s4yUuzv&&e~fQW`{F9Mc{m28W*YXlbDX;|L}p zM5MnvW;;g10S#j?4+=$G!XhsA?!xFFA$LGGQ5<}TM2JwI7>f|6c|LmH_I!61#R-S5p?;m&B3e)L|Nd6>9P&l7 zv3n}P19wk&*Y#&a34Ng2Jn+(1B0U!{pXtHyEYv4>nxWAtbzGOu?i+5}U z!l9J1Pv2N)JPT2`=>B&yn$!=+hQ&!@Zj&#aKN_F(~yKd=dr);!a zdZtr$rdvAJDI4pSj&sV!xup}FvI%bKWT$MhTY8C8c8Obhxl?wzTY8mKb``28ZoDRO z{Wau|6{C05ExpDmyN136Xi7Nvp%&pu7zN>rIHMwNMSo{hf48E@8CB#~40J{fbSnlq zqXwleMAdA6AXZ!M=0$s9;>ue*Dllp?7~o!`UF>aWPPCjm1kM7P4f3hE z*bd2Q4RjXZ>>Gq8B5o*%3oqU+#GSTM?VJMj24(q6LC>shbkbv9@zw+BUt+OwVI-F0 zW`P#B%=`2@;+zSWA(mX-YvC!}a&9h{;RmY>Jz=Lg`5@jM*fX}`CDY588Q7a)8jeGZ z)3869CUB~H;H8a3dM;o-)A7PceCXD2aa2V6LMO%V=itkKBy-hsBvT6JC^1<|uw2d( zj$AjJkZW9l?-G=&q)M~@JWcI)QAZdht~1~Uc|)e-P3@T+tAex_5sV+nH#4^IlpmQW zWlUlFn!*@UNSCHC#uT=#DU3DUqU)iouSR~T86z3;11-_!kY$U|vCjvF?4R$Fiu0R93L;u#6?ahj2x+q4oBONjZA;+SKr_996{;_>Z_u6{Qi!P{`>pu z>pzv><)Z%A55%4D#%aquY0r?xb?hVNOfAwTe$b>r- zltD|%z2?bxpB)p*>gnc1{iR!z;tZ7;$-99vtK8d*!jeBJ&XC=$l`vx1FErvK^V!#& zyyESkJU_V{Sy}q{Zb{43$1c*c_3<>8`%?Ot^OZ0Ejd%p@m2B~V$&yyV`Zm#XcO+M0 z%#C<7C*yCC+Yy-d`(lu z8E>|At>vk!`f(fw-kXm5zA4iYRA$hVTl2M|2l|12Ax}TBdtJ~EE66dApx7HYqmZTR z=E_j`6SiQms=VY>Wi^O@d(nKfy#qYg@FLNL(23ZQc2ysGGkJ>GYr=o@cOdm4UY5|n zqCPa+bi8KDZD9GY^=M{!GEaNxrDs&0sZO&xj8hZGT*392Cn@^HsezKeKymg@)ebvCiNPm0Lb~uljtKmhW0=?dg;u4pJuV#P#bSw4gso99HCTr0wNtj}dw@(8(M)eL3 z5R%rHsutf~)GUNdjBBXur@nQ^7j&#MmD8F0=A9g#e06gD@wv>Sj(8Dt*|LCq4c;UI z&*{nK(Hg%7OAtKr4Wien`YACaS(l`#Q_bLTIi?wBmSbppOwN+zzCix=q6o@!1!lZZ&b`X5GzpuN-CvhedeNixLp}&KR1<{V+takUpWztcrRzF< zi!yBm8LW0l#9etQj=|w`csZour5g6re`E}mh!`rSlv>acVYx{XBN~3J&d{Xy1$AjZ z8^92zb;yhiBV?_LD7lczNwMYZLCw%z(n6l<;b_k zr+|G0eSB+I`=33`-&+#w{|2mN3o5RZO_4~fHN2Z;Ux~)h4f_maKyx(6DkF>Z@Ve`Z z@RGycN2*M;Pm{2pG09ceBy1wIhKDTs8(2j$5Yb!FE+Q82m>obA&!os2zaF~m`hBb+ zVDW_u3^fas8l6mm%9ND=6{aQz>O$AlbhYL%>4&oeF7>r@@G^6l`c;;!se30fXO;C7 zlh*ZGjX7TTZV|rx6^`jI7pddK(H$_~*hEAmTRTX+<<{6c93GH&k68o@cp+)wLl3=i zYVy86Q{z^FA6)S?oM_t+IvzW8C7e{7nv4R0_XTa@gDBR_LD}RPzzYt`LnrXR&`JEs zPoC@)y{B{*-+i6K_W)Mn%=eSI)(@)aFXKPy31WQPZFQrkHSAX}qsoWhqjz`U{#Mym_s2v^9x0vCMH#valRf$)YxX}y1*m>f69}4#M;w1eWXB zB3APfri|~OI_WWF>7M*6@K1e3^bQWv``(LYik~Ay%M|x^-`;N8+a2fF=jPg1`u45( zo3iEK*fX8;Iwh9V#D>l9O^M`{e+n>r2#C-2c8_8K&n9(eUW^5LNu#yoQ@g&(UR8x- z2lY-}-LA;2cPI-O8@mpP6YJ`dMRqM>o|lP-$tQ|R;MM`v>V!3#L`gzYtyknlJa=s2 zWWLY!^h35kt_%F}n8UqM#Ula!gkQjf_D-P~>-SqMAU0aUz49V*r{0mNV=Y0KhbDyK zx?gIn`>@CnEs$7n8H@6~)WmLe&5^^%JV#W8H9XI%{s$g4*ZvU-5)avyuvyJxYGQ%3 zCrF@?a5C#b%=WBmWNpIrswt9mwLBVI)rYjM#t~2=*_t9@HE23~STeCrsQh&%l^A>$ zmch$%mtO>bg~uF|UxL=`8>D5~?87mz;*Z%o$`n7D^3m!3 zp!4`{5PW7sE*taI2xz!2<2zLFg+LN_ybM$S^=0VW@DTeOHuxB(zKMUW&r49BZO2%u zhDH_j8Fd__ZDXU8P~93IjIue-R*y#8iq6H`>^67J*^{CltI=as=nCfK%MF;( zW3Yk7Iih5pJbapYysGjd9*>=f4+W#+vd+lHwm=|IyXwY)_}1=P^w3#dHT@vOd6>Yd zulm_HLQ%A|34L(H^C*Q64ppAeROZ~PI3f3kYo#m_efes;Z&7hP747+>S}3My3F43rBn*HJX1<_J{te* zS1g|o{-I0q`BPR4%ICMA*I^O)JVYL{Gxj&|6{=4tA<8IyXbR2wNKw0h`<>&o_(qMY6(U zY0B8V$P|N+UmsfwnY;YG~vN#2~)oVN$K;mt~431 zwc_aVPQLIrPJC~u=e!8? zM{FjiP7&?OqCZxGR`dsz(`{wa9vdk|NT`oRX;qhs{-88FIhqCY>XHWwr&4^JGT#+% zb9{Z}6t{+E5&I8?NU=oXkKG!Mkx85&iP5O}P34Uv)@wsMKXb*Li?7!vqd#`VkK>@k z&d*Z+4GdE}{bzpnN^-PC)?#zf1?ESy)}hwN+A#CjYUQokf+2*RHRG|qa)BhKZX}%; znX1$%KgOfjx$Fb@1HY2_nz7zvz8>@f?#lst$%3&SZ5YnG2K`FD%SxK!$#XBa?+T0S68*Go;=Esi$IN&iL`0oro+AXwiyK&=R54LQpN| z=XDc2{!MP|cUVIk@vZxUzl|n=E3EiuDDKG-3rHf@TcZj^I{XY8jU#F)ZE5N9GxIUv zjx1riHjSuN4T%Evg7#9>HtQ4zp#v*kr<}JwSmXbmn2jFcQ2({H;>Ul#7B?mCz-ILm z^ks^5ggH$!v>wj(2e>&yKks8d(LP`4*awbf9Jf;pf8L7!i2as1>a4b&T4%1q7*UJD zd}Wkb_)+ph)^MF>!74c`>?M41WpedsgJ zh+~Msf^*j5g%)0N4Xc&Q6aw}s@@sW)1Em_BjDd~~5L{JYIPpPj()fa7KVm()FESJB zCN)N~Jj=3Q%GFFvEG0g%J;B9B}>o_IJkfg z-1J_`OcKQtOjiv$N#;#3om!K4xGo``?{?Qv)5YDrp6}+V~$|5T=={o!TeZ-`GI*M^8<6`X6d9NXGc&E*T9Ih zVip|{-(-+$maAc%IgL91adw4}K;#+y|k3MWD8I-fN`u?l?WdD*YQe>dk>T{2wGVYQ%tr0<^thD)A2bjCjt zz0tQPU3p=nhcT^3Yv?Jm9u-GKUcDoEj+_i}N3U>Roqmggv6aEB&s*n6O-Ba65mq}Q_FS|6p{a7tHKVSY+V0`Q3 zVNb`m^YhblCw~RAH0`eoj&B#|Y}${kI=PLxdqG;?=I~c_b|+7NQjVScw0T_`&=OWN z14_)ve?1%+(CvIc?r2;>6}+FS@&G!k_RZYHN3SsN3n;sohIBrvvkLnu-$6@Hu{jjx zJ6Jp8EArP{>eoBDk7qOL3)NO&kR2*-Yuu`yYb$%=C;EMAlXiDY_F*eQ|co`}#|=Q5|~ zmia{K#1s6Q(_OxL9VEGv;ta_vmEK9BW7D;0J7}#ksa0fZF=Q>ZEhdS+OV^^Mp|#)w z%yCd!Es;s05!1D(C$-kbUu3@=W?Rfp-3)O`&tHAxM|b$|kgl)!;879Fi>Z%FD%S+2 zl31k1^!)&d@O|w1b}R{&u@6czd&}x0)~6=2pk5o|ib;waf$?sX z1FSxLZO#>QNb`u>5l_9gq{n0EpnfWc<|3s>cRK+~$P z%f6fg@lbE*9=*Rmht-1XSKkLY%Zy__Pad+STxF-;j~bKGym*#5fh3xG!8fGFI5F?? zg?&g$ztr9%%fyUtj`hp4HN6?_y&v`V2Hu>_wpBb^(|bSa*(+w=T?7e9zaQoAX6gt8 zzlZ7UD#qVR%dv_*KBr5=`ZHED!%ED_<9{C*)}iu{<&UnM#wG0f%q7f<^L>kOl=r<* zXY%DqT0ha}toms`H2LNic*10p6R4tEh819`8e=xg3ve^*x23rOh~hk?TGM z{tmhKxz-)z6K(>`eauHs3guYS2j2pz!qtK16naSF1ronb;$ewLC0;1;=@O4f{3eO_mv|N9k6(e5u68O8hSp=ls-DjOKleSc~TMw;UeO3xnj63;9yZT)Rpn(53b5ND=km@^)ma)$K?z0fUR%kzHTgu=9n< zkN-K=x5>trlD)o77LurUufjNUk3ds|-`{S+=rdiPz4dLfkjHddd>x$s>FmnZA5G<0 z*>xDsC^Lh)8IpruJ`xIdG+k`CSOuMo|@Su`KV&GEcrNbQ4aa2 ztf0M9mTB))eg`rUJqow8Mu%WPL>A2ZRWV)E)@V9bXQKZ1HrqUjLNf~=`>c>p;)Wt}^6n`0W8^Iqmpked1%VWdOyCjeESuIN*PyhATDv!5x zAdk0nAdk0nB#+f?%j4Z`jK4{5HU1{O)%ctAFD;L^w?U6dZ$*zuZ$*zu|1$EJz5nj) z`tvF_Lpkh|<8SPeJcd}!7@WkMT>dKxqj9J_CJ$MbO65UZiHb5;qUcrL`%OKsxZwfO zLGpFbh6jYNax21y2ZWb$;CRCW{&=$KPOa}#_&z6kXW(iFwu3Fb?6z@^vjDoWBy;1R z96DXE;D|smWZl@|eZMj>DDT@3!#d zog@(ax zJhSx;cLAXbIyU_@3&G0QOP9PO7Opv=6PY@2Lg}U{7AJ*xT14O~-IQC`W%c=)I$=|K)Z}SM|T# zi|MNVmm4uj_<3H`v zeE1ow1-0Dq^8)i>s64cq5AB}E{tS~_`~`nUBuhJCTR4^(%wAGoFM{lIVAu)j^Z%ww^T%>LA*%bXS~$M}a#I_LKu z`YAH^r@v~09+TdR9+TdR9+NIhFK?yz_wP>+|8bY(ar-r`-ijWR-ijWR{{N6X-u{2OB#)P{T9$r1 zV9uV);~x0WWBggucKmm-4*ch_IxM;E`S0Rw`_F6I7=M%AYWz)ltMNDKdoGXvHvjpw ztGXl~C9IYuAD_o_$VZ3%bM1LsF7y%DO!1A2_x&bB#Q4uO#u3mMdCu4#u1mq+Bl7p2!Yy3m=<)M|OvIgCkGj6pK$$XRbu%uz9cArGxN!MQjz{OVj zjc83hekko+Ol=lG@jh$H|z!a?zS6k7;S_h3nC9H<1XV5jH#-ar81( z5{+Qi;B!=wUn7rFh$7auNCKk~NK;tlR%G%vP@B1*)lqkslL&XQ2$k%#*Neh$bj z<*Qb31;s+74j+-5toUavxkg_fdWk_1Aws1q17TO?v`;HJ?bAw5`?QkNJ{fZQHNMaN z;D=q3&&OCTD4#!`8IaFQ%Yx~6`RU`9 zVfyHnpG=0ddEdTw|5X9X=6KyR`r@>BwtXH@4%dN zZxRW2r5*e-U-D;6;2eOJko++p@TI`%;ml7EoWuzruJRDROTtf-X4nX^J4DN=y`|@$ z-Nmo6FOAN}IB-kO;Txh732H`4uy{0ryw&+~YA!c2=I|qiha&YM$JAd0Lno z#o_>pJ&>oHSxuzHjgz?KN%&zx43HaVJCvuPOz`CCAU@=fr^>@AN%-a8OiAMJJ7%w! zWIv>clOtbbDR?Xn864Dn8N?iCzw_mwXYi1mIRTy@=Wv@34naO7E5ZJFr&ilMjp&o7 z@-Ff-q1WxHG3s+CUWFPt#BSE4&WIhC4jfa>jpCF5iaij!o~&lXj>IKb z;u}E`JGqMkV)rByJhA&dA99J^Ad20A*<#m_7CW`ij?~qp9+y*%Xgs1ZKTfsr=(CHF7EPc)XEE z4kq-SdtU+HuT541a~wW}ogf{e=$InLzMU-Hva|@h#3E|?diT#ymX4Vs>=cWzTlB$j z^=3n2cq$fli$%m9{wDJM2_$5j?=8P#{kUm-X9QK(+cxxLO#sCn2r? z`mr|?JVE_e6c4!sbpQo*?@U3BUeEhvs1LpGb2Gnx&#&Q9+vZpBd!prh{|V$tzJHIK zGrs1VT<_Z!?>l%;*LC7Mc=R~?yw{huw=zET!2M8`ki~Y4~CEO~?|v#v1;DReb_?%)Ci3V!n=#i221? zN?S&Q4J_kf?{rXLoINb4pwy#G&-arQESTVJT#Ne_j`&OXJqNf|! z-DP{x8uCJlqVD+*`CJry9^Po(QjclI-!Nas(EGV?wFj6yJy?Fo+RXZR=FZ5~@9Y;- z2e~qDi(huOTW8ksm$J_XlU@0c-Wbwq{nl_e{9-f0h_1bn%MeTe?k~tyw2GOgfF|H;#D(xDr@$;6i*SQU?R%NtWIF9; z#|RcB-gIbn@j5M-=#GNL>mU#4PEfRHjcRwCbm4Vi5Nams$tV>vF-yHpiNHyxoK?k* zGrKt(-Co5nTZzj_9DWi0*AT_jx7Y;=S?nW@h)xk%7cP5&TP~#+vIX;G zO@^frv`E3k1=0&NxK2N@bwpixQ-*`$c!g(Js5SQ#60tT#8_L;{I$8t%;5ssIeV*ml zrk<5Y4EpT;pc}Ha7iUuLDNPBsW`8Jrp?Xby@CC&VE_HtDAo9nrMDznTSEtmf;?GqP%xer-WY7!1YvZ`m73S%}*3( zo>xK5cJC*myb46GhW$iwO>1fIvQNFN5k@}OUlygUPj|@)5>9~KV2ph_zs>oLr!fgb z&dW!va_XJ!&dbhf^IyKylXc=U!mJ&iOuYY0* zbF*;c5$n*3>_Z+E-&Njfv$=w`osdy#|1tsHTzU63nfoi$&9_QUAH&fZLi29fz<p~KQA6bZy}0~rw*TPd`qLqlW5RYrfxW7rMNsHH`o*OK zt+~|HE`Fdr>w8-_E)C#AOkBInAJnelvzuTua0&27^qj)<4}V;XHmoHz>?~f%LWt!Y zSYI@2l{YGJb0pV2XHe3@I-?Z8og6FWXvvE`b65RodbtFMb$Tk@*+kDf19jBgGj3b(CG@OuT7k7wEEu(6jkX7W3AhoDgTG5(0{G;+B~8yH_dvycBvu^8VPS@BmT z5?5gvZ-`%l{~X!Ga*D{R_-H)mIW;8+uo36~#7O*4%V(|`#}dJj;ZQ=(K`&uJcJI!+vY!*|7lk6c70%HOReqH`x6_&^PQP2ko<|NK9fENmpS#`W< z*GU|!^-DxEtfgG#lBiD7ISK8wPp7>~NNu@{q_XX7QU{P!{0fi|*=?3|X9&qkkm};o z2U_#^GZRjuTLSfK&7FjYs^#QD$cp!4!NnYc5h9pbzakSI9GSIBx{cqHsqinC$B#>g zo#jWPmb3T-{6A^>Kr6v}Vcin=hMAuB#Q}xZOaF35*p*s|v-5yQ@t-sr7;33Kfx%b& z?bYojb=gs=E56N=0=preTD(#d2ZDXU_7I*%j~>D^_Li zhU)nc0JCV#Y9L!=v64chIReE3BdKsy>kgxzah7AHldc@(0v-lmoyEDF6Q(u7Pw-DBxg+m4B;A?VRaXs|_x-G`pJwN&; z92s_>efE+dM68*#)C0gSh^n*3H3}0Ig}i&adIA!J-l3&Z!sgz`8s{phu8s!gv=v_ccgZ zLr?IFJklVnK_P?Gd&nQL-tFnsoXmRoG2ZwIjGPXxz{y@L$<{oc`?C_%#ERP4kHO$Wv zv&%FSZE^x(@}$l|N_MF}rW6^8Qs)<@cICkJB+}4OPYeJGjV(<5P7}tHSx7mzF!d=? zOrLMz)mrHDF-S7}L@(b&OB^r=U1?#8elrM!KFn1j2KY3bX3(>=(ta6Ita)`PSiD$7 zYWA^+r|62a=8dJKE#?4PvuX3EPQ^cK-uqITqGHW{mZe|Azx4aPVU$`JUHE+h`Ta`s zesA$uRA}{n@8rR>E?~?Dm8ba?%STSZN~`YZ?a6B=b8?2ENERUmu0`xW{zEpRk0@d& z2Ktiab5SRLCaJS`ancUi#9N2*KZZIRk89N@t%TS2Lu>fEVEiM6?9lAJA#nJ11%x22 zM!%iHElhY=ltkAMKEUrBlShIeG$AEOh-OA4(;EJU|0Cdu2+&qqXv2z8v#Z&R8gaH~ z&WHX5QT;(Y^bt+yD=_}(K)n>pv&OBq&a1c1$5vKVD`Rz&I zn|Ivw5P8VD|Hg{zeJOZlaW4if)A+aIdS3&4WBnm59Lq+aMJTQ{{OBoPX2?)ouHtE~ zpz+>4TpYhj(lcMFV@aLr)w>4y3Gqx4JH3*`ejQQ+*h5WM`};|=8)pgKown{3kR}r78d{JH7)O$Tf$`jZf}cl zGr_ur8FgEuf<~vQ1k~6Pd#Dw!y)uFeMSaY=zGUO)X}&aVxV|pqu@&Xg9QTf6Y?izj$qAfK81}#Sn zKQ{;Ch_VLz6F*@|G-V=w<6*@cr_g@(%0W5qn{`$-lz$4vF0R!~RDx$zA>Er8f1o<= zQ($u{x0N~PZHGhe=11s`%~{7(DBtc@ZUaRnz)@TV58!mJN}a4^*LH*3MXHJCwbRw| z;lQ?66|&|$zM)HX!#{6*>kD(L0!{@hjycOFI))5O_dun%X;_#-rER4^_>6T#Omc5;Zg#F`P-{-#5+3obS zXS~%CJ=QH>YBwJl9cDL=j~*^NHddk&Lo2ys-byTZkF};3;5y`pGdeuqEnj(3`KIXb zSu>W_qG0q}IqPjoEch4eUFX$v%eUCgc~*?SFNU9?wPN(8*v`g{ytSqo%T#wxH ztx`_jf3Y0Tm)On7{X`;RD^`M?j@=xwV(+57-8{&OO_G!nD;8p8<(ba*3v?!qRIW@o zr8~LftV;GBtNdwD{-nE_SP=K=ogQ`?oJfk+8tkj`!m8+TY7vaweM-3l?XfK-H3TFLLm=b%m-^QUx*zIr{R- z-%3VJ=R;~C|nuA|y z;ZH1hDa~Nny8BeMi}lphqadeqWlu@jB%SXE?QNso^CIfZq~TH)*6ED7#gp;r3AyT1 zOp%_h{f(ixT4a2IT^q&|c9s48*J&)9JaD)g$K?^^NXqN@4JKz*qI@-4i=t?U7tz-oM-1hC$O9tEbv_KEIrRp+Wq&L7 zAx@cDxBQvYuVtVWo6rZ3v#&tntd>{N9V^bG7jAh`yf)eg&RTfi=N+~`QpOB%OEZ*E zzr=#${{<>=8Sx*EfQPm|j9GRxD(isjf4jx9st=dO`dap1c*3ovmlfkL3|g}fL3*O% zpVSc5`}(c+wrBLuv*umBAITW9vm_Ea8C)45;Q zjvEr@VcMhLJ4=NGdKpD{GjUY?$PhsyL&_r0RAb@<>Nh)+E2vjy@@<;NFcS~X}*Ht zi{}6P$;C4u`r;VRYC9K2BcC=L$s}~-(>c2}@@cVCv%59&X)*p=C(9n7b+Q<*t&<1Z z4W?CgA^tsRxNUUFbG_0pWhjCc>I#Gs|FH!8>-J(%@cYbsNhxB9)=^zZLUg?zC z`G5Q1-3-raHc9`9gSP}4UY1d}vMBx;6l-OFjLW=QzO?ZatG{*y6zjZ9O_Ev%Jm5zg zGcR=tmTP~(ufkYo>a)dAzg^L1GeJe_NNKtVKW|~QN(GdNig8zsDSVgUiH>{`uD2MlJ@Bbg(D%9F$p31!g87YQUWQEoyW@fnkje zD6pJ!_uoDTR&W^q^A(scDg!e_v2B5KJJYESV!lL?H!P7-|7rZO4p+>RVJ1DKgWd@Lj*rF#3``I=J{(Z zmehTq%eo+<-7-Wp=Nk2I7ts?`Ed}OM!PEbVYWg}Tqg?vaGlZ|8ta~V>}`Qk{VAbJIjx>DNd2W74t zo{bKqTw8;gTe*uW_ywjdBph!+Tgs7=w&ed`%P!wqT;AWQvtl>y%n*spPPFR5$X`%{ zY7cW{(&}zAlLkkdnY10+%%t_-W+wLlZDtPiGwt%NIKswW=)}I}+yV(*E$s22bVcS)$~CeOeumV}1So2l`PJOLk2h33z*N z)XchK_4cDFf~_vHYvgW_mq#>6Bz*-%xE{Z+#a$%7QhrDxxM=YY^iRy-;b8OCss5Us zJ+sKNZrKLcvG<#1ctgoTE73I`vYdcTh&`Q!rb!_l5cMvVF&~)fn=5>TG*><) zRq8jQKB*_Ef?+kz@A5{ucqxyVjP(hp9FXKER6^uTAp*gf-m5qCL9moN23 z$x;6ZhOkghi}_#Wc}Iysd<->Er=keouJFu*e!KD!8Xf{_IA_>JV9s8i>fU5yR0LKA-09=;=I?9)^ zyt_6vEG?m_L0+7!RKl`@NJQ(-TT@&g0$v0nVQwJF}cB;{*rQ_X3qP2&enA3t#V z_!kE7qs(8tx+wFQ7YELjUL0kXdU2F_*oyP2C@MEYGs(wm}EWtGXjD-aQYTCuBe~NIJO!e87i1pYj6xti` z4FHdsO+}lt0haiJG6WF}il*V{t$1m27FZA2~8)9qG#uI>N0doPr z0lbRzYY=vnFKz!;+IFOEV-A*wb>Y$9%QAK$&ByAkbcKlJR0RCwKu304NBKG(TyR-q z{On9){Hj7IgqXdJR6}iQofn73;sJ24%yC{E+G~VY28!XJK)U`YGb|5iGG6E7;mq^O z1Lr?Iy@qyEUL57$4#dZJ<$=G{i=*A+5Lf#_&XeQ!zOI2lQHt?>F&;k)*Do8r{nY&^o4qT-X~~A}V?tFki*O2#(o!{Zf5d)@CaPv0fY=8TJFq1o zdkZU8%~4&0gMjH@U&cAj4t{|7Hhu=*o&R9|^Mm^M`pO<7*2mUFyDtNNo`b~aCkYa$ z8$$FAFKqdtbq!kj1+0)?0nP{n*nJf$Re+{s+{ZU@~J0P&^Klq|Nos1HF(MBHN0KnmZ zV*#ar*8y7rZRKaTZ#QGqZqgQBH!ZZsU)CpeKR^{b86L5o2yPh*TCF9#*gtk6GUR%t z)R~B}=yx)T4o?@|-!FQIDLMdQVpKD6%5P#3VZLALe_$F2y|f*`k!sLFjRok?Lv2ILzSkqt!{4P-nj^!ycn-+Ry zQ$G+~T0Aw%Jmk@!D8@suQff%L+0;P4B=n^feBd27hPc!reg&5LYXBu?A z|Bgyp9dG`UQ;Tjn@mDEg+Y0W$UTmVHoH_2sGga7UzR^vxzxI2!RlWz>fMAC1n z!^xNU5a+k}PMne=-_O9w%=7zpGn{k-p;K5L$J=-Hv=-LeyLw>&aIex-aEIPAT4+^2 z8yIqbR%FG_;%wy!{5Vvp8++y?pi!OoB<9vH0jKoGz7B8+;HQAufXlG!>nPtFA71tp z=Veb-S)Y2xK7!Q;N`0E9gC-bDvFj~E)5jdr*fXzug*27GH5zt*8s^#w-t1Q1z=Hy= z;d)PT8Ip)4B?IlxvEDYoTH`gl+h8HvEl|9@K%6dQ#((0PtHF7xe-_qw1U@T!H~gzT zC9M-3>?UIz-fD29a!j39f02{T#<3Ny3i~P!g&q^Sg)G zGas1619tpz`26AyWZw@s0`YMOe+al1@Fboy)?dt#>>qc)_hghB5e=>YpJ2bPzeeN4 zrC%A6R5^@eiu?QbZGC_L_4p7a>wH|CHaW4nf|dIMCw>>Xm5KFR#ERdS*thlXOMD8( zc=DvbnZq}xM+?5yg6|&SOVrRo46KRx{djb0l9)X@1DyC)iDMolmh+xMwbOAbIENFX+gc$MKbt2Kjx4Eb@iuu>ok){3r{Vms)~<+@#ts zJcdg`ZmZQ^gZFV>9O#d4a6V;7h!wvF<%FKwB?5ZpN+jdOMeHNWh3Yzr9(A1+TPzb8 zita_!04okPj;r~9LnI0I>;m-O7ydNBGe~;^rd7<@j_{^ARbx2S7Qc>eV@7qBUwfzdHQDFaIY^X+!SL$`U9f?tFm z7*rI{7*5SLO!$OcVVcn2WvJnmK%VyCMMk2nJ-zXJN|B6ok1C;hF%&3Ac`QbGCfFdn zT7k&jfTJi&fcpW90jmIiLwcHK`~awV{}ZpR92V3EZi0lkd9IKM-`I~}yNaY~DYu5i zx!s!n>dFr@qz>^UQS)WKoP#uIR_q@ok~v=nKq#@`U>)vJbtC7>a&R4EKP`s7oB=uL zR9`yktJlBQ3*7OTAkz1Ry&p>~I@+T|SZhyskOXQ4pi4)%>@!Eu3UK_4=5?hdv z(BDCfP2mF5FW4$Cgk!5EUaKyK6@74}9_5D!AwNgrKwvY)OC#ZO!bn?Vd!2ej1(EQ zL+G@OJ##kfbP_vd{$)^dZ(-WJ0$2=40_p+(1nh(5eh{Fo{G({)a;HJ30$E_NF2Hm< z0~YNmfV%mdR|U zh7;fImg1X97G!@=&^UW0LO~kG#k1_F>iMS;W!X0&`{}ZWrpwlIQs`>C98s1%8z&Rf zW&aLEW$=ENM;66cOO24zi{aEic2MRZR$KTF6m-3SH^){q{sI^*Sl2>b0&9c83LR#n?zO;iFW?El3c#y? z8<768kC%d+ZG62fW*;o_V-)Fum>4R{rKooya2$m&jBtOzP{4e^3J>RdX`GXx<#nm| zafTG}{m$s8*7i+4zV(+gb^_1Uc zd;RE){>og0W~-uz)6SPsPHB6G!|>5Qb~qmD7s=dYK5X>QG_M;wJ`&c=G-xqzzw~-R z_0wlN&@Sin;~fTPqcv54PMn+mR1ai}URm%Dl#6@LhJjKp?QBTRMYj5Ndx3C`ZGc+T z*doNz);L^@m6!<`3FAHvCct5OT1Eoi$bKgy0Y1w^G7|7+HjIlt zt+r~b)ha=}L_+qK`7ruvY_!vQUGXd?-^VQUFp}4<()8 z14J8=0zmY>qyP|IniK${H%oxNpKfz|06G!4hVcQ=pz}fJx&0+toQgqqKlVNVcA1BR zn91G;aL$$wTrP|E(SBmX@L`oET=4d>9Rn76DFF91?*qxTcppgaY3~DIH_L}gjvMpH zuJC>}K9Z7~>Vur)hx|oH$n%|85y)}g2a?W_50%61- zpS>6myW9If%v0V6V*2@U+9byH&8R8;n>&oY>=kH2iAu2)^WW8BWl%b8@gcOu4gf#( z`$z4Qpdu0gOs4uMQ%2f!x^WDSp`)|E9K?$=l zs}f&#Hnsja@r79#S*M}gPAKPmkV-_OqH0M25Y0iD!ATGUJ3<7K0?>O#q*D(0C4(DQUEypYf=C>y(cLEG_Fbt0F5b00boqcKDkAWfY}0}nkEWl zo`1w`8&afR=a^?V*DkT)>-~COl^XY%XQ;!`T-&vC?pd`$4%%CkgaOiB&By z!-Ir$c?*=698X~Nl6xK>Ni=vn0Vc^rMR9G0f&`7-z6i@7QR|ENn?K?Y_`r}<`9oy9 za|I=dDFBQa*@O3H%k~y8G*4ADi;ht=d$VPGix-;h=xV{|5{G85c06q49_@UN^)@M* z?>jVm8*}s)uf~tcbU7VUEtF?Z_E2BOdSYe$Co)Src+~1j1B&!aGrB;da^y$ z*q7r8Zl{Pm{kenFlg%Y|c!vG4SW0xO+5h6eLiq$9l2`En{1m%%L@u8yS&#pYl1oqX zOiKW>98XX4P;3LzdDVli`apwNh>sbkB-QW7Rk|@J-Jbk#8UK@#l7puwKb@EE6o0zs zFkQ^opiXfOCS-Uz=&<~I^2y8wOaxC)J{vE+pg%o2shspy;}z-M@1%Dw#*E#~$9x2s zJ$Sl{=X{Nq-uYt2Qpk|&SV@n={`q+G`yK3=2w=o1Dnk4W*Jr{PVCN!4Ok#d~%K`hC zMwH`@P+(gT;(^8RL26%j0{h4h_7*;z^YU`xxm1Vy^1Qr~AdZsjS2Qa#JkZ#UQ+;`! z@AF=L7@1max8r!Wi8zBbJFPUwz=n8y%DPSo;2ah9Habj?DjXIb)rS*Qac(9eyh9+%fZ~?7hw5jj zK7neVDZpj!tag|1V}0;6)qMW$F5zo@@H9Vs@GQ;DkAu#6qR)P%%C(F0L{Cf5Fy>_1 z`9h``^2*num*K-pxF?y&!J1G)DK^!!nt#r-8t8WBk;GQx2;_!~9w!xK#{U4@1nW+? zp~zcA0&cf&=h79Y8r|g;0M3up`;o_VQ@`k~F)2KKGTkaqpgNaCtpK|HGYqYj7u=)N zJ=PQnDT;ZFiP6}4^#9hO?^!kQ`WDzg+F2`8O#^PqE~D{dr=K7B zdi;3s)B5|a?oYt}hvm?l?*4~Ek#88napn8?t6xfvGnY}A5b@frei1uzpiNt~nbEud zsibid?sEf%NaXW2FnhE}?5Ciwyl_p#6Q=DM)_-q;5?a87IU0v{yO)+ zxe{bF%az#tH6+3(Nz-D^Vj=DcPT97i)`8`(A@Ww&gh-S7{_+6|grpoB37g$f-T__wtJM#Be?uu6-dDstF*x3XPCSI?J1?aU| zA>qam`?8)h8mh;LU;a)o#gglh&4&9BZ;j0{>Q}Mvx7Ogl-Zn_PWhKI~#QyjAVJ}_x zFcu(ug^!ovxUnl>Y@ZYKeYh=n4)+}eypD^2O z$cdjIQgH=ZR-{yB6N??oWSw$g5M8vhN1;xA4mwh&F2Fc!0-jVnpP)YRwCsQ4H?cD+dA+Z( zd2L$|34rkIAAwL2;7RB&z~@@HTk&w8_jw4Pf#1ZYDrLnHKhuYQql5n{(rm#~1e_D` zEJgTW!M_l#7nPn%tS~ABejEzCpIRw3dl*>2DdZ|IZ{X#xpm7f#0}mIvJ;wLpiT=&m zM}``v>KgWPK@^Ev2sL@*%c#6i4N}`-nf0YF^2V!>vfOzWy$hm_pZ||Ba?2S%wyk&* z|8cRpEd8>7jN*gcoeckjB=~0>c>db|L=kp^-@nOEpL>=`pTD-4OC9NNOoHF!!1LGU zJ|m%@t*e&iHU+O%>$++}Zi{n%v-Mk?aJQDJ-)!Ah z8y9uQk9XMQ$F>z)9X9!Ex8t9GJkSw;58~tRzo^8*k8LZO@SkGguYD)}^@PvWmhpQX ze12?O(SrZP=dXPl{`G{Gg;r<}$4?B3 zvGy$cMCTPZmT*74(Rd-0hP@fGHX7uWyU|^h2KXQ2)0c)UYPXMb0;wd))g;o$5=7FF zglak<3h}EtAWGnQ2s9dnMhnWqXpmQ~)N)lK`1m(I{d`PilG~g>mk$YCM;eXt`XpZ) zB9G_%Z+1Fcr$N`(H8$<{2-h!7@Xvr6AQdfJ+vud zVp>~iVg|$0kSqNsH?m=0Easaw1l41jMZ+4hm0u@lq!YwnCuo!tq<*If0hS1jZEbbN zvq7*k{~)bi3kKmrctEt(6#@Jnj^9-L9)aI9{A$--qOA^|ZcPp>3=YTJ;Dx~f*5p+0 z4SR5$u%P$W&wESv-ZF5r7C%&?Aad;kp8ty%ia;o6w3&_>6u%QIE8UZSy0rh}V4eQw zJXBvR8b-Ech^KCTdGckLhU!)*lpqIkA0Y$=GQiC0S{`#G*Y_F?lqScc86R=@q)cvY z$&;W>FBSVZg+IFOYyLV4z`5N-X;rIgmAZWyXQ|WIrGFS;MFR?lOUSI8wH}X(cfJ;R%vD*f@PRcKe&uxrYYAw&%jM7ObQ&OFlCl0 z9Cyd~QmW>lye}!;fivM8v0#J?5hEp)KTNPgB-ZQz{k_7YDxy^%aJoTdNOp_&C7B;0 z8KbPRMG@6wsp1)A#ud>^z6sH{a5SA!*3eQYlG38*fM5F|SO=zDmklq+lKZd_7d{hp z7tRpM3vz28V5sX-8!l%K^{P9?8QsW6Y|MkX#VTWz=b3VCHLC06d|XG(p@&@liu=rn z5HRHiWo!UjG61D+3Q1K@UPvN-& ztUie66Fdy(GaTy*`CIM$y5aA0y&*R3!+nB7zA);GU;GP|H?t<2?d+1D0U&W58@73< zoDambPaT-ghFgZ2tPGmUlaE;}c#<(`H6h!dhom(2{~SbXc*k2s(p67`t)=}G(WTp- z$5^Nt*DJvlP5K}^A(%waDT@M^qXE1iPD&udY!Dn=P_9a#B2fZU@^3oaX!8-Ws#-AT z^{lA-`XNZltY@iN5U7)g3TOhUjba z3q=+;J!G`m8xrl=Z3fArkFqZJEP8G6d{9Y}IF~MUBXMmp_n3bpsS8!VkpG(joun?B zqTWs7n@C;Zb|H11kzk5evZ|Mvp=FNZn9{Dlmo_>D2AUQ*9!*|bFbkSvH1_czVCZr3 zngWl|JqTT2Qoxl7>x0E5PBn?#4MUA`ZE$MyuUVT5fGlAG+Cj7?2aAn*u7)xv2dx_d#y&TT*Aj0*7KX}h7LRtAU=}Ah_-2Ew zq#7Rpx{G;^U^XB{7xN8-@ST{!4w$LtVlxB@j({V?s zYTD7mkO^BhE~vhvM(Hf*F4cTk?IcEY*4m(>wzS1{7+gR$*HUdwVnLTtZH=JXDxliR zf!b2D=w{gyo}N0y*G_HXXrxMdP%Y9Ro)9(kgi=FKC^htiQbSKDHS|P|ql3!sOx8YY z?0>X@n5S1&HubfcvgH!(g3|`c7E^pGe2r$!U2Y6|KA0MuD~+GY7?`iscd1ngsBTV= zW}+t;yNNgEsV)a|i_&i!m2wf!tUO#zf(~jadp-L?vea1-l1BAbvt~0X)#r$ElfFpC zWM;!0gcyy}8QwUT?_MG}96{inYx87R98y*b{0$^N2UnxyT1!V$&1T!%vAp$=(x1dM zo%E;nA$`I~`b6}le}YQ?LZr`4=D&j~87+-2x)iUdz$x}(^^#_Pc|bza>>*HNh)T2n zszNXw??zqf0zd4&9N|WBFv}aS%V{KF(}^mlL8jPOB54ux9M|+<@mz5S#Dkj$d3h2q zXI#ZKU?^@`f#T5^*dvV>I?#{}Wn;5^cOu4ocOrho+$(F)tWxDZhVreKvbHAh-I_}w zu190Vc?LdICdDSW6FQTYz>zb;~v8YzTSM&MQqsmok{u-olSL6_=uJ5delRvK7;(e_&8G5k8cVf4=`GR6Lb z6M2Cza=aUPjuXkP3@&C{o71E}$BTvGCI(ubrd5N*f8)q1G}152y$eHQs=;DpoH9Sr zI0mu7s&-H>O+d8|w23vSy1oX%$XI!%RPgdFjFE0*SBYZ+V(Lzx5IBkc~8m%&j0N<5H*hmgs=L!Tfs zG6nLyykM};HEz62@;cr-G?w=ceb2O*Skj=HC!wiv)%w>Z6(e+);;F-6_E%Ihl%0`~pTjcBU@ zdm#EId3o6l8G{!Z<}08`+%|X{-T{?jFTx8WKlVlb(~aEbMBe3#B!XbxqFw^_9&ELe z6#wFe%yeH)Q7@_XT*XYP{hS-ZTQ7i>YJY+d<&Dter;WZ9EkL{FBw66Ce~{QCHvs#F zUH?K~e*N&*po`|?5A)Mtxce~Ng>!%XupQqI!=yCN5V{-BD|i@x7}ngE;JE?M-|^UZ zegw@`gQo${CwNHvY&_g^&Hd0ptmz+x=QcbW@VMy&z;~g;`;++n6c6Kgevu3F|JUD3 zeKNS)d4C1J@B(%80ZBhG3d%st?GLE^;apOVUv#vY_Pe`K3wy(hcE)?KFL(`|@vb3W z2)Aix;bQJ$j^UOyX{&cDlQQ8DOXm9@4jttb1K-(PLVIFgSXj}Sg@3pDvWzKWWp55v z7G-(R(*LoTon$9b`g~`mOh8ymMWESOac$pCqONTuD`&)|$$TjP8SUw>$;>R*!j?>2 zN<7!b^za5I=l`hNJC)n_{h9Fa1}Ec%I^%uHT~)o6_eGuYo+O@|Kd+o{b9xI7LX{lq zjbYTYGOd0s>RO4HO>60C;)Ucm0)=)>U(&DcoPJ?n@T|^wfxh7VsWaXN>|N_sPA7N9 zyR9#Hjh*qP^#$*>&UnWW&#gaRWgeKQ%wMa@>=vC@RR*Y08-2kT^Qp1<1neYGRodPV z2iS$XYTjeMLDR%H-P&nZjl$Q*+u z`URtaz*Yf;YM|-sryIRdvSeM?9JD z(c|OwwrjOpUVI-R5k2H=9K(8*0mt^uo_MpMZ*c$DHp!(YV4W16ckmo@VoJ(1Ja^)G z4bPF^!+jKZmf-mZo^N4l?QA@59>*iE7M>UJ9F~vs{qQv6`3g_raVaUY@igH19MACY zrlkBD&%=0H@qGVytP#ZXCp`bHJigz7){p)dGQJ16p5F0l_dwM(v5v!q=xGkR8>*I3 z2hrUyC(C}D^}^L!eZf9WTq6$libKWzr9bUU4i!7<$3E^*vH#)6e*ZmRzG0m!?K03D z3wI7ZZf4CU!x9IB>vZerYlDl8@y5IyxD71*15)qWx%Sv&bS==Y_Dg@NeUbLpex84L zsMtr<`%3!LcYQhTOWG&4UOam6r?yy2KY?Kh4e6K>4aI2Dj!U)E{0$8Z z##49B$~Wc|aE@oG?XEDe>-@>|rGc&Ri|kxr!!zO(_M_*~CFK8X-o!0+Fb|T>B z@-(P@*GxqhpoAo5Dza0JwLm${iyFEmriYLRhBFUya>e`nh0H{8^#(FknP+c!$0x16 zWaB#|;PxlxA!GYXe(a%QpXN_nJ5=l|{MfH-Kg4{G^P_f_fV_$Tr*oXU@%&~`xeS#nR-M0=g-=qE5_X0b4{iwJ$-$E;v zmka*oynM%fnTHpr5&wM+41$0B9EKkFdY*Tqw@wM$!Y22+X>@2R7pK;pMHVv(vW-W{ESK+W2K&^3H@t}lvC zZO1gNihCy!$51nRp&K{%iqY+$tSxy9D$2P4NUo0&%$iG{A_3DPC&mETw?-EFvR9xM zX=002gg-80Ox8@0pZkZWnD}UJ;@8G(ZoLzW2Nk?xYB3MESwoP{d0I3SaUJ2mqU~@g;D9|xM-RF0HPMq8WEVo#s z^zU;x;cs6!(RYD1FfB(AQv=8h={b*a~~ow@DDlzeZ?wKsf)92}b>jmXYB;I7X_1@)ELJ$JLryc!dI>1#GqmLZkW zT#5BcGel!?J zitnLiy>nOBEsNU$oC-Hoj-H4=4oFwV5l6=Ax1)@;C@*yBO3rfI;*7dv`JE5KwxKes z^j8o3p4<(;+->Ud%a3@PkKZ{Czv{O$zZu=}%Zn7<^I+!h+D=21=S^^zPnK zPEMWRjw)^#Pd;^mp`7bP>By-Q{I+C$H+P6mN%I_k7Y=NJ1VMcxDCH$DLzaoZ~_^Ep}OtW2Y7ojD=btjxplZWK=SCfTcD zRPEp*=&?I79x_5(P5m73ZPaYG8iSw)Nx`0Xg~_8ZLQM{SP65{vnZi4dx3CCB$zX}L zn+q%dF+eD)2>J>XhqP#{)HjDfWdp!P6Hj5mI{=mhEMf%h;zh=#UHLj<2T%aVwKI&9k&XZ(GKM5`Q1fb{V_>!s}RnD>ez02 zA~7n##pm@Pp>Mnm|IOd=zp(2vDMzMk#_}91ngUgh6_7Zu1H4#Kp2{VXwQ8Ali_w(w zy`(2$R&*o~jVKQbwW6c=4m%U=9gr@4!x9+a{epP)q-8~yla`#+Gu79SK;5V(a{Mg9 z;y|Y;Ib&59p3I4;)7vfm#LGEM&o)AvxoM?(r_~^}zUoc0o~%eIp}t!oZr4YniH|#t ziSjfqpB`Y7h`-JjMB~^eux5lgj9OP=VXzhDL141*#fp%AJwv?=B5QTTNNT?inG^EN z%6yzaMTF{APWx?<_Pa^i?=zfh%lYsB`{;d*gN#oc^{2^x@ zp?w$a#S>bc`&YGw2EOsZhUb-;gYo42U270T_da&aR<~KQ^^ph5VR+deq!FGiL~%?5 z^lJOWAO+T;ZTy)vwhc$m;Q+b~a74NGAm~rlcVV*?7D3ZtC8JKgDabP)*v@`Myxsb` zoQsJCd!aLb)RduIuoB8K&kk;Ae^+tt@ZSYI8eDPahUcN_i&G?jEq%=&804HRy=2H| zW*7N{BQH$37>7Yll*XqU^nvn{~CYtvlIy{`PdwF7~?T= z+9I|e1kJfH= zv}m`sNq>gDd0V0Up2}d7yW@A@ zWrB+WaWd5^2Clw=!okw<`p5B!lO#K450b+%CUnOzhY%drUhy1CMISzOysK1jd|XwI zX)!IH>V-`UI6*?4(*(|Qv0;YlElJZTa}@Y&G-V-JJ=nW|X^F3=*bY|VNJhVGjL z-FNLG>OPTie8gWMVYS(&VKX_x4pVEPL%p=a{g-`BV1O@yS07{oByBZ}auZnOCXk!l zP4+c`N6kbXxt0kuk~A(FSiFw4Kr--sOHz@;>8wc^I6r0W{$syHb>aD9rp5o*^SW4f zs?9ZQE-XiN7Th6J6;k5*4ptRP4lAlyRZvOhNF}j&ewl&O!VrS`Q5sxdoUh6|Q7@9q zpY@@hq`qG-d61k~le9om9_-W67JU8P6m)nPgi;rDaqueE1;wIU=6z2NULAmgSM_yR zPVUu8IZHK54qG{Mubt^9ig3lT3{?tHl{{3P|l29i@@(KhxhU5(ON<;EW^{QPr?f+^ZSf|E+ z&_C?LMaRK4cx3}kA!+)eA8|gI_|HR`t|x*%o30cj1R|yYI#OC{j#xa2z{G!eA#67) zjT~+DwRz^bx!91d&T9aaw{zyT+c7tXCLNu_grKpi*3qgv=b*kn!w@I8wrs7wpZBRA zhF{!Jg|nXf8!>*zjNP?0E$s`VQ-B*jbA9wm{HD~_Y`_k{u_)KtnvHl%leZV!!((e3 z1pxO~I)#2M>bH9gt=>q#B;5L+BQml9_aD(QBbnn>lAj>7b%jqqdhpzx0Ql(J_|^C0 zQZM>fjeQJik)SLs!u<~Ve%zwV(<$}+Ia+iUgy!+X18&viD34f^cO~)>m5dne%)o_Fy42hZ1dx{E&mp0Rnnkx6siJGXoufn?l!%_Tx^k^jI2d`$iG*tLwyF&9WvM+%sS#KzF+x;y3$FsuBZCU`s$U5#xyNeCgu*0=brTD6x5~5 z@${ruJ@&rkXRjDz10|E5>M84?CzBU_GPxyLCj6vK_{(x%2~ay1>3PWK`jDwwd;;Ys zk@-vH?-BVc{PU2%fVWMRhAIYB8*Q~zu(uIo&j2hd0yU0Qn}e!fVT(K8*1k7_$IY-8Qz4vT;MPTg`Nn&Wdr3-02PHmwBdyiDgY24 zIRRvmjYB4yT^e#nRH~1tT#NLn4@ItR+2JE9G;a3=2n`;Y;U+6IXf3z_LgNx&0L5XC zLx342p9yK%g$l~KuEP5O+qATj{TEXv!ybDGiiQrS5DZj;#Gyx0E-LfgN`x0`ZOAfu5j;lXAFMwQMj=f3_LC-%C* z5~?Z*?6ak!dC63YT0h_#Y2n3BB1-JPY7_d36$0?I&uSYT`1kM;*-$-D9ZAC`k%tiW z2jo)lwP+RUO9KBVe*76|wF-X}fQUcJ!++7mKQ;;fdGh3>A1w#8^qixGDg_4{ZeBR2s%Z*k&~vd54RA?;s*{{{~>r)dg$MH zdjneOeLTDIe2wQxJnQl3h-3bl2-}w5j)~)Y_y)TOKXu4;mWre46aIzB${v9zWfiD6 zWk01NRK@?=izodz@s%)%U?1Zf^glo+Z+sfr5FVuNpGek3)%5_`1d!zQLZmkboT#IG zanZ*%mEs@8>_Fds6o}V0Iug#rhjj1l5)BFOl^00(BD|2;SNK)c0_PLsL@DwrN34=H z3Ydts|E53>=V)^qCn(hN)GAr<^dU5Tvm=Yf*(>dFO< zX*HwnMZnw+KJUe|3eO98UdQtho}qX~9|@~T)$u<8<~)2|gXbnZ7M|bYc@WRjcsAha zE}qw#P?u9)u6=bTl2JA4uXuA~#mL%`_(E5<#r=}*Y@PchJ>qH{BLb=j|-E^-)++k?B3lro#xptf9fH>%#V`X93qP@AHG2~E8erS);=07M{>uH!|~y% zkSvsmSGBKWa;VxEJM>hyS$Dni8Ak#xzmI$T_N0RjpiUhITdOA>u%}|qQzX;+k!tufm%2e|0W46CNuappDW$)?Q|WI+ zyx2;10T}U{OZJgc%fw=`Gvu9+unYE+FG0htd!INT%4$&`Qf$lGGaCyH{QjluuO#lV=(1d%FLQ0R>S-^^jwcb5gWT(PA^J7$CE~t%a3YVI_c%| zf=-V9GI9A$1hSiIls7c`?74RIzwVeU`Z{v&4J``@=(_wiA)i!t(8nCRmO^jRo}j<) zDm=f%^8g;&wDfvIFvRBdW$>Kar{V)$Oaz#T{6*6U(kT8cxURl{1<}c$^$tMnoAA$X zyu}&F!^A}b1M#9fDLt54Nj|LyfZ_9Lah#+@o|1xh+$wTDtat!;JtIvUR}NbN=E#Bf zg?x=XAA$bkSUkh<@ErIBcuMeoE}rh<3n5Nd9+HbSNJQo0Z+Me({FA((9C_fql;c(G z;N&C(pFfEHVYdJyEAip^9ts6q`5qo$4;pr~^ z0O`|z#e>}yzc1lU_2CJ#ZpBLYvwA8Y%HNaMG~)NcpT&OElj}Glxeh7MpVd>Fz6|wv7M`Bkyr(pH z0lAl_6wgNLsoYpD9{weM{DeQNr?$qn zWuaZ_eZaDr27a(~V?+Xw<&P)mbjgwV?vd+eMABbT$ z)Xn@(`0|IK`(7P%E#Ajv*En`%Mk9NXE!!r2u*+flsXVO)b( z&iO_;P1>oz;cqK1dNMdQgFnidpX6YM#>dn6l}_L>yeQ*?GlJ3y{9azr z3EUws7-5G|CA?06laD^*F=L|ew;7Lb6)Ls085Fg9WZz}!+so2K| zzc5-Z!;8w)GzmhcCddmiRUt2qN6Tkqv9E?H?(buy{=4}Ii=E1l-BoP{#-x2Jj^)iw1N z>r~ocA2~J{BN8^4`f}$J`Na;QRpt{_oSIMMyU*1n^N9>&Z=vQB)faF%pU4bB$M9AW zuL@>){-U1Bj%DMS05^!OL1OD=p37$fuy(uCU(S3Y;ULoA5lL=-gQL9GNwlsfy*3zi zz5q{8de6(#We}#9r^I|?Pi4k3@$moSmq|WKRQb4QclOloJefS=lSvPAten4y0Ms5T zwbL1P{n>}yi%oSSkzdBYgtdWc@(pdOG#F^0qim|Zn0-_qutjX=L+p_4>LX!O{g^7R z<2>7O2vqo(iF*(zNj4StvbZe&*KDf4p=yz+GWKBgtVjw#J{I``BrjYbg;= z01c{01UMeAFWnEsY{iGWcpbl3za{I*)j6k&e@!zdOB|Wzz{1VpBbUs-QE6rM6H*5-QK30YXhTD2SVbGR0~Cab8h`a4)pYqW3~JJyL}PeB_F zaKqB$7Je4vd$%<)|G9jqTr9W7{}ijdUEh&`Rr^}xLwsUw^>fAeHL7-46N{ZC*+nJ! zTI6vmyPECT4*V?Q@dnS+J?bqj{2P1+!{_6FzwjCOpB_HCJ+#LfQK-lAvBKX>)tmDR zL(sX^pkf6XjCdpDi=hXsYn+m9agOa4=kRWETEVj!+5<@x7w$GfyVON5U=@5?75O-B z!un0VfeUtO;@FW;bSgS?VpP3p&B`~iMWK3YU?Zf1aw{5)(?=Os6A!#Z>{-Q#Et&#h zEkLjen=l;|jjF9hvx~#mIhb*4O)UV7nyp3GP7hxcc-g4gVLiGMK`29#c#6^CGNE8r z8K2E>-hmK3mSNQFvDWY%C0Mke2`^goD7Lw=J8Z7@F+R25 z!%t`XUf(rDR{m$AKJikMeKUh8PeFPq(WW`stW2AwGO1pcivk%(z#RbOZydkFx43Y?oig%Z!816Svkx^RHT0$K89~;y+5&joa;?7agJSrsxDW5Yk0f9 zF4K_pj@Vf+y!}~85k(f-ZC35EDlsC+)8Ea|cl5)u82w-Es9QzVyTco?(o4!i-xmnq zr0+`&{~YsF;VOM!FkGzf>lZ#r->oey!r$Bm0y?TNDXK1O;B8F^;5%}>_SNSVxt8M<-PUqo53*ZB1U(XoLtQvsj`_Mr$Aig z1F(YLs@fh4?O;`lg?8b8%KFf5DoIeoR=w@qT@;F&B}0>T9t`1t2d$l@2;7S!%r zKtni=j*h>^CB1?mCBs#J40`VvOh$Wd=jpW9q#((Q!5)Wk=apThBHzna^hi5Xi zdBOOVNjN#-NfO>KK0XOPH#|zh)8nTn!RO)XjOKimEo)u|VB&-Phyg8nB1Eji28_G{ z(O3;_$nyADbQgZWT#C`KlM-p%jsM!h698h?^WBWpi@-pz;VO!XqBI92ra!dR*+wja zWvU;6ifNHbnnkLy=pOth?S%u(dcIrN1WFBg!_w|Euwo;^Ehr1qt$>TKI(ta*< z*%|#9!A{sZCw*agzXV1)Bi>}f<=_a*epJGf&d9LFWgvr5PR|5HU`jO6E!96X<$Hak zAH@lgiF8B=W-52~VNXvxuAO2nWTS7lM5Y}jdjYk0C&|{1ydZp(*+5yYkDSH?PANC! z(~Ob~Ojd(-sx7VwRj*M@M}Sx&MN_h2m$7}d*rWNg*`}G8yuNDwt~nSf8W-)cLXXBF zgOm#r-IdeT{CPT`QV~3ARXK z&!MHa+&xfH(5ER{ScCs440uCUsuKIzX=75f)wp|G=?`Ob)5od$4%|7oMQ<9WHxGlN z$t10KJpj3*4BLrFAg3UHr$T+DSJd-eR7+5?nczZ&x}{gtV_j5_;o}tQtG%M`oZ6A$ z4-rC1adQhfk^MTd#c*Jf{AGWGz6*vH_Jv{FVGb6mV;Nm8F6GHXwdJ-tR9k3oY)fQ0 zROCXE?UNJVS;^m2H%_$dVpLlg^>z8E@>~n#7{M?Gu)xg>)`2fov??gViABXwb;gXM&X&pr&w*zz_B~6$@#I6 zG((6kAI-ul;rKy|{1fkp0aS|d3gU_xH@UcQUcMH&9-&;pES5A+Ws2N^ShUsfY~BVs z6&E(+TDUe08o+0JC~jq?%ZLG-=NGnVksk{~UB%>e8^cpfyQW6&yN-FO+n7}n6E7~J ze4bEX;1ajF7oMSVL!Lu>^rqs%-yp}-Hg3rD!rv5!uXn!UwS~W#9==L_^;-$BLS^h% zIYCVl#E5XI6SPBuni%v$JrvJm@XZWV#@&1jJjEQBx%Rz&Y-j04us?Tgm-SaIsXr<|6kUI8|INlvwppHopB!xR z#*b`9tj0=%EaMgP+|0E*a6LqJUOVpWQ^}ZvjFteFCuFaEH{G`!VIXS0ITYKUPQgLA;jwIx>?J81gqyE2@r9eOvhahOuW&ivpd7iJZ&0pW z&NnDeU!TwW`Koq<2!>##M%DJB30c=wftocwp9C|6AT}_QV1*)xwoZZ-ieLq9`vXC& zx-A=&XW#T3P`i1Gv{z$oYdU@YIJzPgNzfML=?zLJLAH`b16LGb zfM2!Kz9-SrRIxbvt(g4?x`6LoCO5Oj(7YfEE3_SFLL`+RH?8FYhzEZ292IP4eew%5 zek>#oZI7RMsW(*9#&4EEDRy!dNbIioF!YM@x-(vV30|>VHWZJaLu#W6&_maUcE=C= zj6J99Y=>tng`F73SzD?2;{T$eMrKP3($L?5E|_Tr0@OrIi*i0qUsueEmE@n`cn+iJ zOf%gT(Bxr`fX3y<%7?MkqZ_J2*eHy(DpcaAT(Z;D926_hVYCn+rCq?a~12mHiuBS6(|t0JH`=M|Rc zY72gj93_GL$_0V@Vx)k`)-FGlpSmDvdh;X!;nJ)mDnne5px!)7Kmr{>`ne$e<~J`w zP6g_1RGuV4|AIeEI8LA6{D2FE<7@y$2S6fgs|gs|-ESR$P@c%Ub_=OFtJi(&x5b|{ z$J_tU65e;ASE+g!{{wIb08x)+<7T-fSL*V-k$5gHTQbK!W0k-fOV#dZ*7r??BRaFW z`bK@SU6ljZYgs2#*GZgD%N(+W>vAHKR znM_zAnb$}q9rP=DBm!tNS;nja+2BfCGyt^M_ycG_NYV&BV4j^7-C&G;$XS{M`{bI; zqIC9l+%{*9eMow{MBTu|H|dX%c2zA_!j6^0(b;$bqD@;ur`e;$g&_!Qpn?Oh=>H%KNTCS1iy?Pr=sxMRR-q$wVoD(lZY%Ib zO?RV;wa9HrQSn+gYI^uL9!9^F0CFO3uEl%!;zV4NFK#8{N)vHAd~r>TI}veu=+Vwy z=ql+#A#rhiP zphR~S8@M7Cci3eW#6mkcfN-1((7_m=fVR)QfaYP96$d~R$3ATr+L!SzzR)f=sbyYL zKSxq)NYDNyT7mQ@*nhGsodTxGCbroH#)Kg}NvLut6><5nSZy6Jj>5wa{HT}O0+b{# z4-=4O5{|k$uK*h|?n0E@^!wxx7B?=}Zn177NLt0PSaDW+`*ZDbk^_H&@|D8>R(YVP zqCnH9IY^tW+lb#AQmP=49b+?Kt=qWZpvPp=1miO>A<*dy2DWxim6BF3__o3Y=)l>nV!FPWzPsjvkSDFucf}HEs$lbr7cC9 z)v8~J4g{uD{VeH7GA(N;zzk~=K3k9S>HG4cYqK={F6QXVwIB5}+R{oh_ZGvk_aUnb zJL4!xa2q}QWT%UKJnGRx6_n`I+$3xUfT5&Nl}WyC=E`W;lmQqHxW$rvJ`-t&7aCj7!^~Q`*~nib zBUZsSfQp-^w_(ni8kqANzi7*YaMEyM0*8)TG!q4en||;b;VeQdItSQ-Xz`8b+Eit( zeK*y-cG%T9k}WeM@Y&Ttd3AXPtAX9Z>`iBbS)ox}RFSFa>;tTO^Qr!J7_dx%w9n^hI3p}X8h|bVKbt< zGjaVq~uufl(aZ;Wq@`dWs*o_0+pT*~OD=t#r3MxPf9IMuUcm^G@-TtXeGExsL9 z#ws}o+vWP<`o0Wp84MU6Yybo1IDOx@!g=~W?50DY?4)bfB1J&(PENjQ!RDVCR9BU;869I+r5%{zuMDn^6kB03jXJYgi9 z9>k@KOX%5DmazKYE|N1FD5;`r(A2Mijx#>9_kif|z4TP%JW9FuH;dW)WZtEi<~gf3 zj`y)92a2ZTXgZI%6zIC1p;HC=o<2gS3G_?_jT^B|D1#oDDVm+5-ONq(Hdp6f{Ux=| z@DAhKdZ`B%iy!L%Dbl$GJnqX`1)n9}J5;auPs>Hmm7)DxBehm}&UYc1n zHxSgU%b}8R&nJWGRSuXN=AZ&3vQ)9CbMl#mg-nfyCZdrFxK~Ax1y%LQKQ6-sm9(f- zFqIFe#91t5PossQc^@kyxm>fs$2|2u;ymU}#jr3Bwv`No`9<7otEwARwpZb9Uh*|^ z@Ul7B9m9#A9s3Q_>09WpReu6C24L@%HN5MKZdb42Euav<-E77st43v z1Xk5Ev1mRBNEYEuuIH*wQ*OLBqA-!#TaWei$L#{Eq6_7=&G2F~nnMPtHrYbG6dy&3 zX4M+Wsoc}f%)J2z=~HHugHEs<&vUpMg70~Mw5oQ- zDgO(j#L^Y=R3ng&znPI}{hgfZ%emO5MdoF7ANmfwJK`zIn^7s%0^`m|by^ zi9mG?d+WFB+9g7L7Rt>QDt$9bu_aQMgh2TrP&TVJsnkdLQpX-X`2y$!xgFXyY)L*AJHyRru;8-jyrMlPjMwUaH;=5IM|~&s3eF}3dp~FGXHS5 zF#lr^jr`Zo#BWUQs#Z*7=hJmeGHWIEiC&b;5nxzc5M+r#$K@ICc`?0k^L^ zNyYP+eyC2;m*d0PZdfN*oAuL)0Y}TiimW1DdDLVP`X7QJRuAQrlh`3f8GfN+RWiZ8w9fk1c~{-=hAnpLa3yu)LQx-ID? z2-ScPh%n!1#Ymq1TBlmXo4{HE^jv_p!`IRY?CvD6lN_+neTAV-T4a~1d}Xec2##2| zDw)jqMZ`s(kTYcKKW!*CCP6lerL+JWADINS(GSG>#THAj0ZCx@CWEDUU>~3F&(&Oj z>7n~DKc)B;t1EP$?9Y((YAAFxj4yub7U|n8@v5Ch)f$d#rF5r`aUsZ96*K9_4uXM}%p+tEj$(yfz<-Iux^k)EV53Mw-I)Xiz1XkpLg;o}ZHg{FtYy9Q?OX7Ov-7Y>R zBtbS3y*K9>; zFPG9b&CsJP?HqjRHID|u!|@+I3)dlorWsnUN>Md~{zM&xNn8?Q350=vOG8QFfD-#Pg>b#Of`~<}F=t8C6;&&Zs;{FCuvb`vnFi}DhC=e{1DHds&VmO3;A4T&mqrUH7}*O^tUPxRSdqPUM=Cqsf#&!eOu4MrB7XxAmL^ZhvVs;~Q_P%HBPZP|3CIcux?&Iq zEH^wA;n&Yi4ohR$RmovNhD}Ni>&LL-MF`V!F67KqXx`9_uD(@0#kW zOq^|q8U`saKRgiGn4M)0f&?(Nxdi;|LQKT9RUTL;^n!HEn4JK>#> zgco!08hXY1WTHP?OB}pQ5_mG0DYPgkoQaB@85AWjmEL$R3RB7kuG{X}6B(%aCgEQ&x^NQqt}n1u9a2kCEA9~QaN z*QTjl8j@p8Tpsp73|~n6AmH4#V^QhxKv8LQt{xcx^G-bco%BeFYPCiS>uMKm2h&rX z+74Xso!SnZ>7CjRW{^6y9n2ARYCD((^0l1|#ZjW|i1Wr%2ck#Lb@a$jFcxxJh|`U2 zJY98Tr7(#MyLaJaz(RYv-hKm2S!nF6C- z&J^nq3kNC|7#1@2U3vk#!aatui#x|E+^=EH+NUE{>C*P@;9eu#XQ(X-?zhNQhtw3k zhY819K{~{$d@NzC-Z@s`Uc=avsa&K{+1$M7o=-nrx@B3yvmY|2mp59;26S$2AzXfQ z@v1Fa1R&$}z}~_JM$Ikv-bQ(Er+RNgytn`H-g3OR{_b1NqwK2##x=Rl;+kK)o<|2% zwmJ%sn|U}L_JK6C2pbv<-i@&mXhrD7=DZjp(6&lAw}ziw^^>E1*l!~+i$Ag_sSqn6 z?g0iBD{LgL;p2+E)bN?HQlY3$T>5)zjOQHyw^R`v&M)d&5A#@oup_B{ z3_i@WbFhy{UTIG*9>rZ}vFKDpktGbA)`w@iJ@yEMwtlyxzml-T-2z;JFX2}NUuHcq zr0G#kjFF%J5NpUmT>{gFor zj$x)5HK$zFLbaG~a}n%+j34Vq3OKI5#IF|NIX!S#;$599rLqHeEJ8@ckoyGGR9zhh zpDmz+8$A(CuKSNfPAmeelrdRsSTaX9h>Ip+n+t7omiQ8968E$CQ7-`;az2}<;o z=|I;a?bI68xI-ng2+M*vGiNq120QX%asr*?N%lzQ<5lg<(;^%WsdzSCVrT^*4J`ATGrP#%L`5^zf)d<;aOZ`dp6hDez#rHl4VAiRYdx_N;2?LAzW%3 zkx0)FJinl4hy}euaOSIL8uX?048eIBv*B`NpuAAzXfzBJIp4_$$&-^mtWuH-->{!9 znoEI~B47w!(4pdg5ti`23OSh#jD!)y{}K~;iF?aNYLQilwnp?f1xrEb&BaA?ApEjN-=1dP?M*;#hzj-C%i`LZQfA~UQaFYbDWN^ro+`#$+H~RXF zemf9qNOlE5vCraDOsS24MQfS>rbTxmoa0NZWjnSOA()_+AIuFB16l!#X{8z)!2#Ih zjzIeGF(tq^RQvOOh{jseGR3KC)$q&xqy8#Novo91s$}pFtVX30w(2n@@KVa0OdtE2G)eks} zXxG3(Vh@%1EeHs#XR^hL5>Pj5iUvY>?I~=@v&bmOe-;vbB{u_WOEzVo__0I~&ENhp zz_5@DD;Z+(EYOb0+&s8$htVnU(WZGn_N+9|Pps|^B?sxyOKMIFBFr=Di;*UdDu?!p z!qYtmU;M*vUns$+PNTMASak1G65OA1yqCevIKiImjwvV*)sCFxL00+dEFJhhq(?$X zuG)8r+uXy1=Z$M2+_JTqMjO5`%`a}$gJ1Fz6;Z1txz3Fe%AVi|r$GupYQZQ{K}JU7 zG&HRGK}u?EOua;~jI3b2SJx1@+6BO zX@kCeMSnNVOf5Eetqvp7usKA1HtjFJ_BmnM2Dmzb_k$_k|@?g(yWxGXndx}f*sTF5-_D}wy=_9ZCZbGK&gS0 zg^x6>0mv@JT|+KJX0H%fFQ%{0?uLvmO*ZK8Co_3=hS9uf>jl1R1k|c_@^-9Sn<%RsYnE!l|94 zUyaXZJeQWzeW@nZ#7vtv|G-_xTw*80?7Tx{ksB9~FGT>k6XAkyvn*S7GccnlB4!k2 zRECVAkeE@FQW-LeVnRkyPLle_PJ~8+&`6^KKZitUQYS)_KxmRtfu8|EJvOUvOzBd5 zsOJ>CE_s_(s76@P7=r8!ad1nymgX7dxEU#*<%%Wd*z8d{gr!MZk`$M)(vyXi@WQ^1^2T-{N3bR0Ihg{ZMS8SZSgXnx`$0G` zEIIj6_0~p19`VA78C@)AMTj-0UH>S+E^0EoDG6_5+eu2wJD2H@uk=v>BU=ipvRO=n?R7dUE zC(ZOLcplKp9iCErJi%|z+5K<8(;)Ix))0r?OnX5&?(GAd!c)B*e1={YT(8fiAF^$1 zMT)Wk>>DQi+cQ!-BBENHmBh%q-&ba48~C=j;$IK4I_(3%$m$d^R^X*7&$e4-afbNPU|Ri* z2HtwRmD)>Gw|xoftuyFFUF{_QcXxv3Otzlx%czks(wZ^CA5riu?a6rVP%<9wPlIj@ z>JhD2G5GPl{dm~7Wd#KU^>Vpf* znlMRiyl~uLv0}&hqxe$(w4NMjv0`x(p%23yoVx=HEAnF%xhmg7gj2PwGFDN*P7TLf zu)HrsrIj6x+1x9@J-TLfwyc=hs@BWE+~+9d@)*h=m+$VjmabpJInSN{Y&!kOc+K{X z!K@eY83@L_*FJ0MSd|WygE}o`OhG;J zZ46^7umgJDh~aw^`x%Yh*xs5}!95bG;hd`{WG|x##}C71Y3DGT@}k*UbKiux*_q3J z0IpWp%w4V7o-jpf!;l9S3&r*{#Fp=TBlY_4DQRhuzmopg&B>U1-}2;5#EUGDu`U^-!NEA$#i;0naXUfwu>uHlx`Xl6iNaYZJB(Gdn{7^0D@m*W`npkaQl>j! zfc07%?9&gRJ*z+2UpNw)#R}!M!#u;8Pf#Sd4;epf-T1-aG@Erqjpp0W&FQe8RNv*{ z59tejeh2(1!`s~*spVt1yH%RPpCRWbSu7Z+n75}ur4_E##iH0P2htYy|t_^||)^uiFjDxGBYK{}Wv_=WA%s*HMJ1 zXJ+tb)DGYJYs8~+pp$`D7JEUf^J3*$D>cGqp$Fj`nTSV`Fzo+OwzCtNLzi@&w|?VP zwOX>^{78Mz<>D1NZHPx|v1*rR!301CMl%D0j2L&tQCJ7iR(&@K#og!}Y(tUzuX0Tjg^}@W2IMw>w_&Sh?y@)Lv=igIKY0)oYgzm9GU6 z_6_)pEvWV07UGRiu?3v5;$Lh*o%^OXWXH-?w^^>{Ez0u+s=Pq`sP3mctiFb+pAqV3 z4u94!;L))7spk)_e7yjILmuURb9LV=@6O6HXJd$leJ$ZiN(}`-wy=)98ncJt ztV@R<-p74Wo07RveE@SMV1!Ati;G`CW|rP_1olfcXByeYf;p^N7vcVE9Jq(`riM51 za`B|{bL!U}ls)vz;ug>{MgDBmP52tVMSZUiW~Y=E37}^E!2`3-2{5K;F)3))LN8){ zFcW75rK*UU>s%rXOmhM+_6G)?z_a~<{hYuN{=jr6@K_b7H)k*{hqXntY+e1&HUM|2 zIp1xkIRzAY{JqI+kE~^;)H?L6TjbKWj^|ud!23R=uE3N zg|9%Hc_0|R_GDk+EhSmi>I@<^7!eVI(+q5zZcqBSYD|uDFTws z^R*9! z;f%<|awtL7rnIUzi|$m_k!#D$>g}kcvCvkE74ufcdi}!;EyCW%yoGfD^*4Zd=+IV# zq*!MM3KjC=ML@=}aa!axgyZNqwJr>YB5RRbBqSKVTtC<^T%sRL5C4y!R(oixA_8jK z;xaPfODQ?_#2#ZadyM^k?>KAn$33Lk}i_zd=0%{S?KayWe+hQAKq>>digA+i?OQd?1q$Ym-NCL`vLwy0{ z{mp%%xUsK*f9M-vcy1q(#o0f-XCi!RAAq#zIy4`s&cFIBOS*6#`Ufr@vp=K;r1yti+`uk!s9Nn#Sk^FE7C%Aonp_-cAwm~_IfioF zc$?Is-LvwzXsrEqN(txYrPb^#E-D|RS-i_a`PvT!7b_D5`$yjpJ58{^pu&?3qiEHJ zVN{c@^G?3?&<>1G$ve>(9Y&%39W*$;!1=kbTvTN?YjRMxohm&i^Dym}r&+0rX{a2H zH&*L94n5t6=b-T^cb?asZ-z8L*>dQ0G?qh$v$VZSSe7~P0K@! z^fs&?n0F*x%nOgAW~<8jew+44>6k#wX!F&6o)0Y(-SMiEzDBJN;~3Ozb3k;R&Sb;XED@NX|Kmb@a)dQ#pKZbi+-9JJ6~HUowYI-egD*KU|p^e3a%O9O#@Z<`o0b zz_IZC5LtQQtje2SvabfiMj+Zg2WPs-in=#{@O67(tU98mTX<+7y#-GG+HcQfju1LA z-&m_XvJn<_Xe~i+<2c4D%f<;3M)TVJ$9}ml5VK|BeY4H&lGN^S>i!1Qjacg+ne&+T z$PHucIGA$vmz3v7Z`*+?Nfc?cJ$yObLoh%uf&n^BzX=BDd6k6VCA1?JFU+4`eNy=Nvk>x~cq6aWl_a{1|f% zDOh8MVZE@?!pt8u*0-)AZbcd9tYEwb7vc+Yk+PCD z4OC)fDJ*YSyY%5WR=OmxzHmGc&gm-x3|R+daNkg>cIeI6jkgn6Q=qF(29~`YrKR7* zhOn9{U`iP?IS{ima`FV7##GJ9X2sh2M`n+a9heFKGV(TmI_t$v7^k7US(i$JdfWH8 zKcwv>*?f+cP%;NMvY}06%&(+1P>XvM-1CItpB@S+s>)%`s-$7S`(CW49|2jvryPiM zuV?ZXZ5EDzAV=+chhq@=W1?Ni+5nH311NS!7YHwS2)v)A4+zUV1lg0(dkU9%2pbg7 zy|Hwvhj3Tl5CRTD_!oWPf9o(MA*?j*o%j14U`^J1so|VE9}mNDSfYHML;0}&V^q_T zE{aDMHy?dizZ7$|_|2U1=>@^g^dqo*dO=u|gdkQ&&n(@NguwFYC56dJ2rQpo5KizR zgn!Wsa9c(q!{IY~0e;a3+-3RTj8SPoH%kM08MiZmqOWkgwgWAM(So#})u*`aXN(ee zFYpUIc(LDmr9at&-=$>N3;h#4_-FbAzxQO9|3!U*U+=(&r}r+KdtBHNy~F;>7sM zvDAP}6fF_f7L9>=_lX{PLoGtn_{50 z`G3FX&g{-Ed7;1d`ThQU*v!nm=bn4-xo_v5d(OGZ@?6kR`ls2W?vTe}Bf239ik$)v z&fEnR{7L`9Nu1O5<);9Ht?jUQ@`i`eA~$hD15dU>#?bdU8U!<5hArWcFir`FgmFqZ z6ilLoCER+$)=llQ{Mh}cP;aVQ5nod!A2j~yVdC!{GG4DoyA6U{$NqEBxUwPQJ~4Ql zCMKZ?{!R&~ljOtTm4%b|+$TFwbfYh`_6jT9a5mo4_R1Zy5xnyERp%GLGxg{4uQ*wI z8eO8_gfw*$&YRQHGk8P+Nv0aljE7#eZ_s%3rFHv}!391HR_K%?!Py5JUI5DEG#-Ac zCfm5he@5+CYmQ&``Y(4rbkFs;-W54F!R7*Ze0Yn`CzP+_<{Dmf(g)eQ(YLVnY@=_% z3P^SOB)xNYO$g~wf|dF;D+{jNig#tpab=sl^0pZ4U-FyXt%<^K^j)goWc1C}AIop< zI*R>%U$y>IyuRx41EVnR{J=oZ0sZiy*JdS$kmY+=wuWR9WP4wVtisLuX81)M2k$&( zlQ9QI=7S=@+hDBCh4eCrFRNT4xc@?v0;cg|z9yr`ZqC0_i;P7KQs!vkQFz0h6+FR4 ziDIjl`H`0vrb33o5w**r*wtKAG!sHH`CmmY9`0gq&V{+Lo#e>eKZ z)!vM*J{DDAR}bRJ9|gZ5=SQs{{ut&BcjZ8g3#G)nco@!~>KW=Ux%hq3%kW^&#Dm=d z4>B6Rc%o49{T!g<6K@6SrUh;bu&2Jl=6cii|#L1WKa4FWOe zG*d<)=juR@0|Es!No2f};r7b@s!7oL##PWo7#O+Q`U)9^pMw)1ylCq`z~RM}Ex?XD z>kzQ4NvW0L@|(M(+@rzi!st)ei@3R=i#|GTOvPOVWJVuwcM9%z61abZfUmHp{)I&PhZ5b#&P%h{It;iJlszT#0etVkKmJV69{*v zwt=QJa#`R8m=5&gz68}eiXv#E!RobvR}>J@M~UccZ9O--MjtZlCZ70s^5RP$3g6)r zeCN9OUKFxf4LP({ba)2(9}V=lzEidmczQ|VN{i=}>hD*UJm6 zYH_&PudVOnFk___;L|QqP~Y9m#G6(cOx##zKZU~()ufR+f_TraOxz>X*GN9p{OztUr=I^cNGxbi z&Rd<01xZ&d2*M@`n zSK>!|@c(b;_0N=Z1p1Aaf8!b$%&~6QF$8hv5`7QjCK5Q<&B--7XL)zy3-SO+Ey-}t zHMntdBuq zwxijTr0-rUrYM_#QK{EzLOKhYT(Lim2 z1K@1{WCU{BeN!h_&R+%{r$xT5djNl|Br{Fl6y0$ykacbNr>c$n%kO-rdYsSbEJAL2 zc185gH}M%YW-S?qV}cF}ZFr=K!;tyN9rd!OaJvC|6lcO;fLId$0W%&giN)1QbjLUp z!~Q$g0u(K};}xJ|g?zp&R7l*sggX(bZQP-fMR)u+Kw#mAKwR?^-SMJ)K8w%j4i>{! zo`)a$DvU;L-Cxij#K5^rGJ={& z1^9Ln^8R;)kjvVAvu3pw;eJQy7e=Rs8-}#?uW$-g6xS6XDL!i!DL#v^$I3FZVQS49 zswS^=!6wh1SKU_R_t}5LswdUI7Q~SDlv0nB;?d!Swhp(pvUt%QRRD1b-ed1!%1WpM zcaw0%=m{#No`3T^RIjbK{KLv_Te>Ze2Bkjv#2ow7}frbhtVRcUh_ZK z`0TGK+{cPDaU>$fIP6VjbLSVcZq*RfvF{n3=?7xiK!XewxML2qbgH=wIGq0HQo}ye zt>_r!iH?X3XF7uNkJ*27#tp8#=@8Op)fQuAdJp}XE7P*3JJ1?a&@}hsxedR=_`T(X zG2H#Vi?HMP`A1`+lOADqT;RKkyT5DEOLaIZmJ8F6kaHSW*s_7g#ujJ<-L&=7eUT@_CXEhw24B z-$az-EGfr@2-eoU?+%Zz5XzbVkk~1TJp;(2JI*_rDNzRL*VjK061v&IKPo$7$tW`3N( zVdHNgIGX~pxr+Lp4x~tBXJDv*$8KQKTV`vU2u3N%rXk${QS% zvnz|QmAJDKC@bP9XU{`J9f#eXgYr|1kuhExK+GQ)ql%Fe&#ZW!Dt{{@o%Vl62-)t> zoXx(qjWMciUq=jUHv8K73#AyhB~Z2?PP*>w${KVjtVK5`P(B!s{A_UP{Omg%#v zNgxk7$fr)8U#04gxaf{-_M8jx8flL1ILMVId^W!9Ye50B2eXk3^+m_XyuxQM#pI8b z)_f_Jk8lJ|`;^bt(OXpDq(tB$1UeNSsZapJ+^f-<-(!qwlUspc0($b``kDL8juiWaefb9w=D~NeK09Ukaruqxw=>&|W@0si zab1yml&VLCddyXirRq_o9yh2*wR(I_J+4)co796k+rYV;50AVxHGkL#@gxBnE8zHW zDk)lpP=7XSI%7h2Q^4`fsCcym_X6d*k@-#=ky9ISJ#!^?K5{VW~LzO)2gdknV{g@Ve=S z!sEjHpFCNH!P0F)90kYj&-=|ZB2-R!GK@I+W4+uTZ@NnTiT+(pr?pNj8?qgirT-4v z7?>x_-y6tM|P7NDpCCoa^dgUJQL zVa|5~$5{^`6;wO#YGhC~_kKq)x%W5mgoq$G+X@i`o@sF|=KxZ*8r*J8r->5_`rFR5 z8n>Zryfs&9rv6ISQV8Vy9vD0+subGhNto2h9*;K#@5~n{35PbTC})F7^9d$P=pgF3 z(8{70mtsHaaJiZ7II&Y6?A-YPu{iHC)A<~Wo%rDt`5mSOI7vxKnmm6kas&Z2u>aCO zt+GppWe*&ijDf$E!g+puG;CZ{`OQUszQ@aJjYQ!9t^B&d2@X`QwQ{z|ll3=OWPkFPpddB?D}SfT zCw)T-tNIt*Ig zRNyZZW>5R!5HovRZK+j}Ee$OPXfMC{L2Gu=Sf74+()tD$l-o0c-Prp0Ci}LJ3%;4s zKF%SWmtN4P<$NB@!YMKCXj-7329-#3%wQj8ertUbDh!%0v(`T%Z^1XBWp%PK7H#a< z!@EcNU|@&-T2j>(+5s3b+#);k{FiySs!uB1&7q*rEZqGdpVO@}_y?JaJMd^1{12KF z^hj>tVWaCe6G8mkG~au8tv<+~@&LiRa(RqbtP()aQa0&h&WAUHMN`eH zsTS@*Z8NK;*;6qb67q7cU#`tlyy7rc04}(acr?G+ zwGV*p5zplzRD+pD{ZX8rR*1{?p44-62Gf`6qhy9*3W&dnA@N3}(XpVRX4w2G>pusg-W=%IDG2Nb&w>2SJM(-ICv(Q^A z#!#9uKuoY(jskmwQJX?FPx~nQ)huh?64|7q-A{n zl|=vj`5)MS&qQ^G>Y1iMtw7d8L45^K1NYy>i{v~en5noy$9|aJ5&G{?lZh6&5_QD9 z>xw%TaWELy{T6$W)Da~D5z(PWGsS-WC)VJ+GSCu34HyQ7_s9199vGomP&YHu54pv! zKo`Xy%;LHIF7~9_95h;S@P9B5VIg}PlM)_(u-1nViMQWcu=ouevC4A6+hVE_lc*!y z;pE|92MzQ%c?o=;tv-KjL8BX=W7OweR^Uhh5(YZ8@3+DVO}oE2+<|pp=2Nrv0%{6P zx$8FMRe;r z?|RJr#$wEVi>wK>#otZJ+)8a+a~=QEmVFz;ej#BUPIp zt5HH)&FvDhPru1Y8&9c!{-jhDC#AX!j=05|-YtioYa;iQvPEu)6G)K>Fr(Dmrq*L; zK7@7_w<|C#4x!K-@v(!a(=LH6b{N8Hv$hU5T;{PxBhf3VdI1ks>Q#&+roi=wS)ON= z*Wsc-bYg;1LX{&#KaT(IZ^Vyo7i8!pMkwG9AV8cN17{UAeC7U$6vIUHv3Y_ z=gcSQjCp!CT#YzZ?yCG&nUmj{V0zz7T4fnEr^;GB!&)%SD!T#QXnw0%Jk7P_1ph~U{9J7dB%&8#=Z21YhE=?@u((toiQRM?ct$KeYJCwN z#k1c{{ic1+!0W3so5a43p&2#OD?v2OP?)Vx8pB*gGya=UCG&@ddi}MeS;*P{V}D%4 zI<~v6gJrkOeXOz{qT{s-&~esc&3iS_>z%Jb4{aB`XOujz?S5hA*|j61C6l$?d-s`p z5HxxqMkDH5&H+Q`CwI=R1l~dVp$XI z0ewAUB1@J@#l0rk4nb3LjI31HN!;$o$jsk|HM&Z4YI@a@3#8{^qiJ&iDy-w+DJSIk`47oc}t>aY6Y6HIdTbLgo4; z+~cE6us%Y$P$e3p2@?kGB@D3s+d2P>5r$&S8Xg~sy8}PO08!kY%dZU9Ury>4vYx%v zkyy|EaF~7M%U>G0k31z%3(?+aFEK^%^f{I}cHvvey~xA=%lzT^M`C?^*I96YRx(!^ zIncj;)R+$iIII!u%_o%^=*bCRiZUdO9BPq_ZV|A}8z_x)+LV@*=IT>Q^Xpf<`Dmw< z=0B3s{5R@2eA&L5l;)?WlqTPkMz0+{k2EiQ`S9=uewV1bK7q{?I4Y_-s%NXe?)vHB z=Y(Iuz1^;T5zLks%>++(j>seCYtNB+AEb&xzpv--rV*K#e7;PLPIsn1Z z425fffE*qQ(=JJcWDZ(6EJjTtJ2_-0c9#2ppoaaT}N< zW6xYi^B{zxCeP2JPo1eYkJg3(#8qGq#~mxv({zoOyX$A8^EvBzun#KKYv{W~@uR7! zmvYP&&25RL8=a$|^Oat^zr8G%Qm3x?`Ze_WI{K=Sn3RU&-ye7xH1pn#maCo9!yuPA3m^wcgH|^QV58+yHTn|!TY;5IqRjvqB;B5h-d#g5*^Xc zmJ@a^3p9n9`Gi3Vf-P-bTEQA@IcH&=kZr9N-ipMswOt}x+l!GGObSm0UHShGs1)$~ z=$l@7*r}E&TApSGx^ba(x(EvrrT)GV0|K2 zfZ+B%s5`j)fU|!Lxcf)=T)vf^#)MJrx-ecaLN}5FGGEGvFQyyV#%$K|Gz<4>Z*0bA zp}=WT`rm6WPC%p!L+rdF%57rlBBm$g(};Nu%F9d>*U3@Uw=;Kidnh5&r_e@FBuafQ3efj`w5sKPz}N zzrX7OSr6R)9LOwhXlrI;h`y7b$i1JMre1p8dx*>Zq)AP z{_P1kDdVDn;+BIR&L)BieB7~!oz3mNjF+agLMdxl2ci;1NiE53E79|u^~+_2ACUgH zb_#~&VEqF9?~}jww%4ikzvKJ8X-=*G{VFNVsrA3xlhT}8|NBBxnp5k47kSd0O8-0l zVxs=~DfGX6Uij4hHvs>u_WxHlvJ>H!i3jA#TP9A!%>jle39ihf06_XLH5T79_GX*K znX>igt~zjBokC`%%JcdUPnUn`&7;zsDmj3dE zFwkC#vVB*jnt zu>T~5 z*qHO-R_29mqbS`UpMMavG&_{Aw$#;%XJ#vNm0cU=p8lqp=#1{F>IeWEfk6&xv0r(r z>#5ZFQOz%u0lF2$lTLP|{xC%3lrnwmNG!mr`q(5nGGRI28>)SbX9jAYa#(|)ec)(7 zdPWFYdG@oAZsnj_YLYf?$xPSBAU}Z0d|#5aEmMDQ+ho0q{NrgA73zlt zKt*N2WH8`@*T!J!N9g=JbOS+N`a z9oA>c%zw%$!T&lA{}*IDJpTLR@V`7I_;1DG?>r^=D;;?K#^K8{)`cw`9`=v6q6<{s z1BdJlAiOJ22pn|Ug6^(-jQzR!Eun*&{8H-Q{Lj}P?T6dE zFvanng^46G2ufFO@N7Bpv=WB;7ci8=#y!Q5lbrtVVa-`I@q>fsH<1r8_T-{X;{*#K zi24?C&WHV2{Ya<`nq(xfYt!UdjB1z=#9?0qfbz(rZ7sbrVO#erSD1lrpn*UWNQt4o@E-e z{YhVWj#XZSUN)-X#;krck=LG{heP<6-|U#wTZ`cja&5t}J!$#@IB6RhJZROzHA?-9 z*8I}^gYYlzzg_&fD7RiHU`gTPiq&@4&)o3_pJz2a)^s?!qdP>XlX8a&h7R9YaQeYO zBf2bWbfC8c8Xj~@w(%Ymz(Tqq6LmX@kfQz@rwVPfrW5{(Q-_DQv>x%5_8A#Vm@<1o z3oT4zXqz_Km_dc>V(&4O~6WB|5o+64_(3zP@=6`}Wq?94z@{Jmjmht#w ziofIp19BuLIAH)~v7FqF;U4!yM*mo+l+14PCcEZTlRcJ{Eay~{eJ?55>ulLmsat7M zvY(u4veP}ubSNsG0u^8TRe~JwhjA)Ne(Fi0$;Eh>Jk@&W9)P*u@$rN1fD=9qs~Kkt z)e$oLZ>QT1?+NXG)YM#21rJ0iJ!UBZzm8++Q(pO8q;7pwzD&EMnGR z5g#8U0tR`QY2*EaE2jtrz%zI&)R9!%wxJ>)8Y=R(!6Pvq5@hh^2mPi&B8mr#!2Uko zP+nB3wjTK!;MkalRon8F9^T_rcoZK|<9gVH(Z48~eu(MrhfgF1suupPpcyXBx02G# zI;AuPNomBt%dlk|k(5T(zhToH*yXLy18lfq)7$q_Z}P&Q33#Pp5|_^oAYXU= zuZg|@)~s8XlVUhG$(NN2{0B_k`WNY3wie=$TH8`G8hTtxi_2N>ra_91HN}W6rSb9l zHe&GX04N3L4xkF*^k%ja&uDpF^a)X>hvF7A`I$T<Kf+30} z!j}GsdUN;RUqIOqsEP+G|2@;py_68f*Q5M>@i3*|!LmV(W3;yZJ6N~6-iU7p)OyZV zL|3TEF38q@8Lh3OMufD@-%Kuv>5JB+d$f7_1rivUAjR_Piv}-5 zR%itKExIx&A#m_@?A!`!x?xw+!5AL#FKa^Cd^Y8HMsppODDJ(H12kUb_Pnb`@>Zd4 z`$oVH2=EaABp1`EGg2{=8pL7|Mk8pwyH=URx0>+3*yb6q1#Tm_L{Ry1d!wVg7&mN%&>YgNp(O2;p0 zcmw#g3jozKdasE9%8oV?Oq^uQbyQ)(ndB}m@J)u;GdxB(jWTqFEES!xjtPuLhG)i0 z;bgvWF0+#Sk+b=d^(28CaARn{7R{R7^2SK3^ok{_1U)8RDWrHzN`MNW!)-o;cvVg? z7Ge=LkCY+=vofTphMAnRhh7u8Pv=!2A4*d%(pQmGxYR4I+Z3MuQM@jlDZP(lxIocB?d6-r)ZDM*sa~ZF)tyJTd<>=VMOleI5kznH9PA_gDd*|3KX=Xpndb z>k_p#C>&bkD}Y2f%gwS}dokZ@dY|GLv`Us>?V(F{zsxC6vbsyoQ(&)`Wvueg)6e>% zGNujz+LdRBa%BD6(VQZX7lh4dl3u$iJ3V;7TH%kD{T-CAZ8N`vUgtN9bLH=9ky9q* zqtrJ;<3j}H6dHp!6GiKnBV8_ReaI1F*3-1z^MjFnW@Yc%@o}k?QygbLt?bP|24u5w zbGljC<3-3)ry$fK)TDvm!(M&6qx3Zc0iyI(B}!ixQ1qs*+EVJ??oz8tq(#0%1k%fI z!W(P@D8EVtx>SIM!DJFh%%0AdX2HN20_EeV4eyh{bWtXXU6tK&cwDu4QW3_obO4^0 zZdS&Ig#0xy0}|#>aj=2vw25G@m6R6#7MB|i_QA^>rVrP|MhDtwi|3kEbL|-e2Y;0q zmQkgT1{Z=pWfp@e0buSKW``E82Ppab zR@|aK7(4`_S)p5kzWRdboVt8C2Qn)=yE1SsMB4jezLAs*7NZ=Krn*_>M%yH9cS*3I zZ|%z#4>ywU4+Vsp1?Ko0>?n$196zo0d>NncT5$FmFxNcG@gMQSLm6Z)BfKgFOOJgG z30Rr)7epYsVFC zFr%HHYa9pj4Fk`!)RdiX96wX%Q4bENDffW@y=fW-zM3nwUC`m#T^=T4jH*7oU~FjAZ;3llFl%k+ys<7bF_O)oB@>&BZ;|AjM&{-=b)DD-PG ziRQCJn4jWUITE?wg+FL+3xokz7{88`{ZLaqpXbrUPL9SF;~-VrIp0NF?kGJ8QGjT;5b?sE!lF)mTkz%tR+ZTi9bTdS#f4n>DY#2>aVK4De80(5G#D9Vw$#b>@Ni2C^5p zeP&H(*GJU)17aG1UNy-Cx^dqCQeaxjsO;rR^POz!kq2Kf_ZlrZT#<_=nynm8EaI}J zDPj)^R;Zv=A8&R{5hHV2MDlz%x_dMJvU{*IgR%QIb_-CdxCKX5V7I=@qal!&D$3X? z(!C$MQ*7HG$UgSKNdY2jG2&gjbeu^TeZ|7#z%H69ZqvBetLza{r7?#OUl+@$ViQH+ z{f{Ua_MnAjn9p^5Hd%p~xm>EGMMVErj5Z6`KZt^Ak$2ew>qB@iT+hbWBD_5ZZQ_i^ z*rT}qopb1~7<^X~K$Kbil=a*2uIxdvSdDIVj6tzV6x02jU#h4!s{4M=>czNGm8?)p ziN%)HA;1$Fcd3A&U2&rN_I%`;vj4>1Y|k{&7>e`vZu@JytAde(INw?eeUNF&WV{Jo zfg3Y)QVIc zCezQc)^umA=|mH;i)i5eFrPp*y>9PHlyMQt$cU26cEJHOzII8^H~Y9OULn4_M9@Pn z0XU2t{BjeSj9o7Qj%N)@0M=nH3YE}@bn$E9Gl194BR!D^-Dpb%u%eXnNSUOLZ5bjD zQ0*V6fEo`8{PzKoi@yo)P8}jHejrZ}=+YtZqYjV9@k?t(kz&C7iV%^= z?-G2u`F$MkPJZX&_2m4z#tdFR8!q)y&)2C>${7r<9F+yr>Bb(vBcdzCu-RRv_#bU! zv8-$;7gr+LNE>gCdTJ6r+KZMVPBs*ENB-!bJ!RDXZYJ=hJ<^nBgR}#rwSH{7U2}72qzE{D`-6 z=%*zv6=^ctDbK;8JW+xoE-tKl8NN4D}^I0sKhlHz}59Mq*CLwFz;AtFQaxRJZa+Hv%ev~>GB)B zUVa121{WGgZi~oiSXE2NY@F!V&jZ_bGH>)KDnQPp1b$e+h8z_(Bw9BKJKuspul`f= zAUy9S5As#=Ak%;*I$fiP8>oTzY#v!8GhEjSRdV{Vdv2cu?9u5HlHo}mCkdz$%S(a} z0Djbv@O{`=<2=O0e^mA*$I+7HuZJ(*Qz|*C7+pNc{9Q({2P_UM4-F`9rBVuMxT$)g z`luPnpu!G=X+=Y0!Hiw&fTAe6Ry`!>Cta-F)|wcYB%{3=bVoyIkxS6x_7v1ARUewO z^-{Dy=7JhtSVb3Rp?dB;etCrTe zfsWX{{Hol8j@KAC5c{w-1BE>3K)#DF7xLv;C%(-0!~66xp*0=Yn*=cuLu(HD`28}z zb$naFy|^m8Ah-v+q=GhVl6Xn|-JDg*r*V?x{qfe~say~j5_|(!yTYoenmTV1>SB;Z zZUCIhrATrie(nye%Dq-_e?g_-f8W7>IgwT#fophXaS^|8zy0Dm>KI~<3e`{a;UK2+ z2xiqBZC7b_P9t_6fg_>1v*Y38obbOQWvKofh6e#(Hr@$8#$7-V+mUla_2>F@oDCFx z=tO-0Il6Q3C(JAdicE3w{nU-=V0VK@cpfSB#qnl;;IPfBLY$sy1r8f~mdYYHz=D(` z?W@0x=C?nFM4>eYK#qq|PkS}~a6@=MKi1;U2T}&GLU2<=Z_D<7;E!jOqvYyrb}xv< z&m_6FGG2;BC|EQIiwj2_`%w#j>~FO+XVAhskOqScr(e+$%H*{TEy$#>X0H~dJ8F9e zzGOd-^<~dV>kG{jWa-(DUYNT0FcN(wvK%PbxWT<>f4;}}7w1VGj#zW3#viFb+&1h% zMk91vx)z>6*vdVHbNpIlD&FlL(8%E2YK*kR*1s^VR^wHP*hk{S6Gr6++1F;n^@}$xn|vd zA3;PGLY(@eHV=m5`_;-UQQ?JipTgoyEmDIxo4!jVRIaX31$F6z&iVn4`mJ5enJvy0 zXyr>vRLg@}p}|57S9C($&Zb5B*cc)q%0EWQaHJVaySDKS1V@Yd;r-1~?RB~~C-3lN z&Z&XJ(du;U{hbR9WNpZDa-w9Gi))?$b`&m$4}11pT>oPP4o@=H98FVsYT-lZF8EH@ zORP%xr^t*}j{(yCvVvlEd-~U^?AJLM-;h~jf8lq4u{?oMVT+e(ue)Ypy{dCCob6zE zm>2?krA#9b#scx`BcVYY!yylb%Nz`^plh*K7YT+#g5j44151Lkmw?GH06zquotT@# zTN&XFMDQ&cfg>D?fo>UxZ|zsr3Ogvf(OeKc2+HN2lt(cAAaS%5B8k8rw?TjGq%Lz( zKfu&AdkR;8D3>HsS7L%g(li|CH#4b{tj2D1QfEqP>=|mBC8c;&hJXagS~H9m2sV1n zy(St(D5DzNOP2E#o-l7XvY)|7UDl-fo&6w(Fs4MgWdh6Ucd~6>AZ1}CTb^xyk=+pT zUxX@?n`VS|MXbsW2EEGi*X*}eWZRRO24fwei}C8(&zNn{n8v8WAYRS>#Zg_YSFilo zm0Ljvz3|FbKBmk0=N{$XnNzWR_bmu^sV!b?JBq=%_G;j8#~bC}qEYGYTiyL(J)9f% z^1?XT9vbhAigB1?)9`DLz#FOvlbE$hr*fPIK_FkX@$pg(8kCMbBbP$rwCJf$Yr{*ylITFoCHperF@aGl=GY%yW5GSKiHFF zxpFWqCxnw@*EzAg@9X4PuJ26ytcs=f2WSCaPYbU?kf;1tIFNU^!IyA*8Y3r21mBAX zH#0cP2_}9)atSxAvA?2^5V|rR%$;lO_fGI-@nCLYW9?3`T6RFmOSqSfZFhn*{a--WV;*tyhc$+F!$5Ox&2R^8-i!Wg%fM@-2SN~qtxeu_+H6ilji?u z)i44K{WZNvsL}(GtS_&HkAed$nt)}J?C-kKBziJc2d+hN*;N?f;yt$#9idnKnE|TT? z!L=8Xy|`s5=N)>mZrDSJ0s04b9DxU;^Xk}9V9x($hE=rWO7=tjGmzgq9QBCaMsn80 zrPbyAC>+DS_Tk;{{bF_^|!Iy;hIr~U0@+KAId&14_fhOeO(;{=T z5O5-V5CI&mTBHyG5C?=-U5uNtKIkx-{br!aY%PJjSKHV;g2m~@n1YbZJLFJCuqV0T zlQV#1_wu0e4_F%CNTz5&eJ&-g3raIXgtS~r)#_FbF}c+a8-~BNQ(xxY2m4wn=o3l%}E=b*N=97V^raqN3`&p zr||@EtI?WW5ZJ1P=OR5_(|!iHp#!0R*EpW8UvC`G(67M_0s7^}@e%qIEjE4;;z z`?un$<#QAoSs|0pyyVY2l7a6{j=ebflO0H*vV8VbG-&n6JYVo!kn|p7 z%{>@q-}sRAxCcNXM(KYv|IFcP9x!X}s~=%j-qZC8`+3bh(b6&JTQ&DZmuH$g$!nWC zMe{6pU$lB$uepURG@+_*Uu|w#%J@Hja1aY-bnY)!o6(sJ*m5oYhUzjgQS@S@N9)t9 z2yqxKeoIhVg2jw3L10l?iP7&jBRudlx76XU7B*O$2(duK5dJcI?{oZ0(*x=yUH@q4 zDxil7gU^T%jlaBKP?YsYh(ls$Ljo~)>^n$XUgpHB#40U{qecFQMX0r#~0uQq#R1YMPk?^QsMF@o%HnfUCYdt}kp;hS!n#!P^0@a>jMTp1R zLNrEOmbsI}v35$95Hz=Dcqz?=2bB$<1sGB+OfWhAwt`LQ4bjpw&X4M7^_|lYu^R;Q zUGzKS?NMyoXdP~BZX3m_Hd#@|H>RN$lksA0;U_%Jl^D!+@{#oN6e*H@0A0zY&jem^P$I5MTKSY!FN0_##L;}8_8bF28BnZk`lL9#DB?WNP zlN9h*6vhpRm$U>Wl`Qum*4oK3L~lteGu7Mjv``(JfzqiE3`4ZYI(f_R1#b@3`F+79 zp}G;i;OtP{NMG=>P~9jW{69)XqKiiv&7(~9UN*|fFSyx0(1$KlL_$_JHO?8;)xlfQ z)W^uK=h})!I3FXr9_DpaD#qV+cUw`0^O4aN=6z5qCf)uvirfZyvieT5*)!U(;1d5B z`=X>T-kq6<`+d^a^GRRa1}7jX3{8CT=DoyMHNGr06AUt5UWb_h8J9nD;)~8;iCA2Y znd$i8nBhcXxAHQ$AxGYw4yF$TQukuwuxd=VUmq67dZpTKj_5f1a|L17WHq#l z%GdmCV--L)@}kSQy@xO@Jk1pE)G_yHK#SZBs8Br)13szkS~M=SdR!06VgDJ#FCEtd zIx}zXZW>F+b!)rI$2Hdc6|XTlCt#BCPLf?GB^mD|8Q)lQOeHxNTf%dhQPqb|s?bTP zCOD}kG}e5;R1o_X&YKt<2jSWaQ_67fBa03tw{QSStq6-}R!lVKPc-Mj^>?==#KIXS zmCed?+RJhXPo}JFi8(J1(ppT?5K~Yw#})BCj?1*cl-hrJpQ~mQ$c)9h$u7mEXf8Wd zv#o%rlCmJ5gfbuhEYviE`;Q1d&F z-3D5JqBwcsczT5C)EWe}4bLJ}l4fCNixKr-nB9ad(WN9O&IyEIq77W`VA&2BwT!4) zrRE+>R;9)T>Gozf{Z2^_g+uPJ)hakj(nCQx$|a~RUIH#fjqwu9B6iTcgFRUl>TCw7 z*Yo)*Y&-CRwY7GV!G^&LI9#)AqP2yeyD^c2p`PRrTnl$##vz}}Tg%DkE+?P+Me@0G z$>&}{J~xki?szO}%W$C<)tgHkY)0!0gqEowVEvar3e>hEOpzXt8EsH5lrZwsCxEW;61ILcNC8PW)9kgWK&tvNI&u(eR_#kSX@l&ge~wihPmZ9!_;0 zzU>9*>X1h#Fhs_rfSo|Y*q;EHM<2xtZ?oY%XkR7#2_P8+es2o=lZ1a^aQI)P!0#md zy@SI)m;%3<@ZT65eo+d18R4%;fe&B=7v;#=(sv0T!0^R48UC*jo<#H3*Ma8-;l>pB z#e{zie+GfSAO(IL;U69xetru4EW+P1IQ;1;@PEf_YR?%Q{zcBVp87sR_;Ut_H&ftO z5&lp3E$|MUoKNfLZc}~ zy(jWMI4V0Ecnaz;lV1<~oXMME8?m)u3%7Z}x9!;ob>`^;wpuoB;IyYB5Snsgzn0MN zRl>w1eH*MQux6{F)dcn!xK9@6fzZCeL00U1=yq@}uEr#VV-twy)Gbi0mfQjr6sxJ3 zqVRt%=Xgw^)K>VDV<c1^fa9Piq`#HCf@Yo+QqNQK&|A{tP&t zW<}0-;ju121uHxz30_=Z6TY^Zz`X}Wq(2sU0ZGLQ-9K|xF`uzZ=>xQ-dtth7!F2e^*B4VEsD(GW) zJhZ1MRXxJBlB+@+D7`4%gxcQ}EY4k%VJ^<4-j3c9xB9E!6)oOsPn z4;UVvb{i-&NYu8$qxPH}RTDE>M#0>pp;aPbWpOeQsSOc0T1*oG*or_0K@=rLMuaZv zjPDH(0=We@U>ln8QdpI%MSesf5(e*xtP8f&=qkxGCouFmtB8sN_$xgb6jb=7l|cC?^<{Q zbxr|Y{SW9@wADdBMNQPu`SV-zU~`Dm=l97#Em(pRn#f9y$KoaKEeFx%lk{B}laxW- zj)K6eK$?zA4!YCzi!qs}_28ySvG@m;9dRt-OuS;(vdM=h%?eXN?@56E5%nV|t%n8z z{c0RE@(w^yHbTjn;5nG&73QjVAzniv)vRUB!L57HwA)ckU32M--MUb*7gje zty*eC>xy{)6Y|Du7MY6L_LnSG)J!UNWHzIUm*NyWxrC7~dLukVi3C*yZdOoP2XD9c zqq}8y8|Snon>gTA$&#=*$qC2-vU zZ{%3kv#qp(4sBkmnP%*P8vvz65<<<~_NV>iZt8sC@Dy4=7*TT^Wh(6Btc6RkGNEhv zN`R%ZgPJ1sTiIVb5Jp?g@Q>vM<7&OUWZ?2l?BlAqkGqunxO3FJv~2eb_{1PK3>04x zs5rO73STaBSJ4vnjXr|~?*DRVWe?_RZR1`xU{ZN1TdmDkJ&3}B2(0~FemAFlbKB>Q z=gG16n}SU5H`O-0-_+M|zAHN#+B%UOY9|nd^iWk}6E8rvKZ&9x?1QAe;~tY&Qznow zC;Y+9(Cb_|GjhxfKC6X)$T_L<*=WsSv*tnjC%}#KfAH_h6d-GpGq4xBos7VwF8+ZaQL5Z-tj$f+ zpEhn;0%6)#V8MASZY-pXjRP(A>-#?JS2q?u@Hwaom*?Wzh+=}(G(-EWumqgmz09N) z-XhFJ*&q+M?`1Gc*lR&HBDzsr^2%0QB@<1t<+NZLu%3JbJ?E?s@g-q_!EFVEb#d+0 z@O|t^s4+CY#-jC_tfEY;N|69Eg?1!#HNS~BEAXsUCAN&pki%z%x``z42x7Ed%cqJz zZrs_(oNnjgF;UXVD_y!4XDjlen^3XW-(T|xwlR@6SuzlyFck zVKI>>Z7hvzpAN{R^$a&&I;|Z!6LGM&S)JtHm;A>)2V}2t9U1~Ufi`8q!6cMw;g8AR81R|Ih}0-bq0scpO;Fu1s| zviW(=t&o_(6f622n4N5=IY!_x1f$|}$yoCwCQ;rSLdBC`0ag@GxbVU(OAD`)mkb=h zz%;9hrdgN6Gz;2xf#zk;V@j>u9&Hi))d}mvdu^u+k_rQnwdFg!X?U ztN>M)gCk^?$eo#2U+xs=2#TWupw_|ib;bjrqrrfq@qpzjAm#*YzFdt$0(Hm3wt+$l z4$QZp-hBBUgf+Bx#$%vdzujobM7}Jc@Eh!-fyV*CxggLHx&u-^(i4xP`m7P#LwE4M|LLr{{A z^S8zZDRbpEL^iartVXNfSaT>%|1l5QgjvNQTP+XSmhq6ShKFpWJY@R}57|CuRqm$& znpLw6f@;5cprM78Yg{MQuGw$2W+J0Eb9 zEXiyvo`FYJV{tVe*^R}^@yJni!`sBh1{MczlZ@8MjSWKnmQDl#CnTY2bH5jUfH0>P z=h;UT&L1Zlgfr{!>!>0Y}O8x54Evh$nGlcLpW zbzBf&aa4&TmeR41s`NCL=I3w`;PRK`;cWuu5ExS=l>n7~38gWnyDr$c;T5WslI$wi>aWAEPKIPj`D1tn6{bIi4$rX|f?)EM@W%kDhwG1_M~j+l(?BdEfIW7% zRm5if9Q-k~Sx+`Hrl=IOtG}SaEGy;ZaN-LM#%%pnliQ1ENeR27emL8P8vAnC6$=S;<^1{Tt7LWC<%tbb1kd zb7lPEHWa}st2hmw!OALJyR9tG@{$VxuIC>kAlKo94YcIZKrxmcfMijO*8;{|>sLf@0|? zcnFO&ul)**T~Lqp!phL46jxF#sG0qDga8RynxpF3)LzCzDA*ARd5e5)WnI}7a{W_?;Lwo?Vao;mTViKoW|9;SdAj(F?7BzlOy*z-VK2N%M&Jx?6A;^H% zfr!`|OMVgtH}T662c%iFOb&0y3-I*efNL{Yg$Qplv3tQ)ISuJN;4LcNuQqNY(}hN? z$(m=pon~UvPIu+@Xv=s*&Ozsl&Mabc26|fF8EK8rc#6Xc<;jX-R>1rW@t2#je<8Tx z9;1e0ocA}}ykX~w^wPd`Y@piLd|$P&lIh2*JQpKKa?N6{ zm4`BR%RG{eTtN(P#!SdIIXUC^?{+E;9tD{cfenQRqsqhFO(0b~uap`d{-2kVs@Gq5M4@p@27sdrO``RAoW5u#tx+5Tlx}fQhoeLqWlN zIxd?S?>Je+-G4Qi%9mtYQ3Wg%a1ne#B}|1g9oGiO^wrc`x`r&(6jV^9CjI2X){GK= z#(ENusf)2#{d+)A1T}RGgAV*dbX8h(1&sfsR`EG01NR#?xa9)t0X@s)io^R^Wu_No zVss8H>J=8;@UCiC>`%}pIzNMySu_!vE1*7>T>Ekyo(*KLyqxDH;)=V``gHF2v8 z`&%kHZjvEZpn!0!D2j9J%N+=57{_oUXeA*LuFIR|3rM5-$R?hGX}cE(u_ds7g~=Q) zub>Iw+GyAm7ZvZl{C$=`TQu$C7=Jy2*IM8WKQ4g!^U{BsM}u z+YF1&E8?}e-G!HJLn=HE76ydZFGLX_B;dhzGb}!in87{b_JIc++V0vQxD)$&EN2

&_sY%CKj##>F?6Y@$XPvEyDaAMa3gQa?Opj0zdD*Gz-_2A(QxHNFwkS8Jk&Om8D z+{9u`v=6cyGVRd;(_T7I+GZ#1^(w8=hK&n^FWmilD|KAJQfeA@(iUI{4UzA21EsBS z(k>i2ZNormvz)X%BOM~&z(8p`HY!@ttQcd%rqYYEUlsd%E;V%7tK7)-u00DD_s+g0 z;U5~R{WWkw4*7MD*=`kO!O07FS*#%!So7ih4ojzgF1WA4lDTk1T0EKT=3xu~R~~`| zs4k5s$ZL3ltlu9w7W}$*|7-<&GJ-MO1qD1)Ah1vv&vr15bujV{182Vwh?OG^Fs8L} zySyk1{zpG=wqlr-Gmn~B@R4{myvRQiM}C%r9M|VcasLCz%Z)%xjyEIp|7QOMJ;ce+ zEz)==)ftis4k{e`sG9DsBzMlPRMl~E^ap2OxiZ@lf8o}GxoV}2W@TH8ocGWwXtn2L zYZ2()V}TmuYb(z5wUxk(A)J9(sI7QRT3gAOH2A!;b2w&_CLkrmRoQ9bBkbFl6_B5B zU)-h+ktJM<+(K)K#VHvF5k3al&qBDHy&WR%A@b$|fxKHM99B0fm*U39tYZ)V5JnX~@&s%Xk&&Kgg84Qm-T8hQipg%tQUHN3+ zXz`Yktf#`xvl&%Np2DkA2C*RnpL=pC?durB@{8CVqrC{_ciu%XA(2$AKt&|ddAC1g z_DnfY$iZkf&n3%1dBzDkP@W{H zny)aw8{HK+C^x^*tL>`EajpRV&SPbe0FV{IOsIs4&@jm^Twb9?c^E4rG1EGeNw@*7f=u!#Qk|Tr zCObMWt#D4o8r=VqX^~aTf&)@(Arf?2IkzG+Hy6ndJ9+q9K$>)>xe95(#JI_hNU|e? zCo5c0q22b$IDL|?C@uwSdNBA=YXR;^totJn7dG9731Q7^R*2@NZT{@Eu9tXi1g`;H zwdYvT>1q0IfaUMQ1PJ7VKQTi>k%8~;%7$@rgL1Frh z6sFfun0_^d>G^SC`su~docz!gm>;M;694#;_oLeTQSSY?!uvt8MT^r4`d|_mW{iuO zs}STA?&k>kOm{zzp_4}|GTcvUJ4P$~?kBZXq7@_D&wcVa(*1l|K1Zp~;5wV9w_bk1 z;a`em)|eS-M#s^@H=+gH^|%NJheshohcA+;nEvRZudu)=g&EAplUd(B`kq#clK=jc`^ zzHdt2)`A=pXXpzinpG361(QsUryivoU^dBt9%P2_#)O*6VKzugO%Jm}9J(v=JM@*) z9y^9sv2esN!&;mfE%_U|V(m)#Zb}4vH3gt1VVN!<){4cRxX9Oyb07%(o-CZP*{o!nyTO`3dbRwk}&N0@9F{dL_G?1bmTK-nMUV_ z#@;lXf7v&qnkn)dM@<%5feK#wBku2=X{~XlSh%BZ4>h3(`0s;HcxzEL&%#HtQ0p0P zmgE*e6@%Y%CQ|uG&O30q)H;bRMy$Ny%5=uQKs1BKJ~Cu1%~A$StILH}1LcYP@dn8c z_eBm6vtT0j5g%t&2dtkM9=h}rC~2UgX=no{2~^};I@3+`*k?CD;br|jB#xUCBEgX` zq}*?X7{y~8d?Len)g%$s4=vmSAnDAkCWms(3`QEnNU}tXtXBiZ$Y>ZK2L71`3SBy2 z=$rvVrwp5WKJR=LmleXuP62PJG5$K4Cu3I z>`3%F5ckut5MUvcy51PlpXU$@{6cFYZ3}J2TXPIr+#wu~nvfiI9?0R=^Ft%4o{@=Y7g7t?nkwqW?tL6YMTnYqKr7BXTcc8@k;aTIPn{>kXaehK9YN=eVKY_JnHEXT5d#gIg~2mm4aeSQoF$^U3X9 zo)pQ7dK%{wNs*D{$kRQM`c0lxz2%Ag^v`-C{@WYj?F6mfi1R%u9`Z);R$E(m@uW@= zykNA`j4l&rJSJnUJw$gQ`0p8bMRTDft9ZTs+d~*)v0WP=05JaW6R?LErhD;){8dsJ zf$=dbNu6PPdl+$XI0#QuvvA=W38#wdaF}oZ!c#c^;3>)ECZ~LaDU)!0euS#}!2SQO z8ypmaM1M`y!K#{sMRL<2?$o@)gTzC2WQHiG!>Ds=@OYO)BQj0=rwV2H$Pz-XTn)VL z2)!qOzEF#EwxjTI4saQp(}e|ybx(r(atY;bCB&8@hQnG|BZgM?0}f?0%K`_D!lBZ` zryg^O{WyW9=CE~#pn(z&j$!w*1_>lt10p#jNS1n#97-VRfLn@WB<-cDLdhlR5G3b% zkl>mgw z$C;VGpozq9v zO?Rm4E|z_aS%PY=kPG!+a#of!sky zjbqOAw{M+i`UB@e6y8({dH?O?RGj>rNkMy5O-`w|jza)yWd2l5uHW=xA2m33F_w{u zE>t%fo3jG6zgw@LKBDsR%xP-52S8>&q`JlwC%3;hcN zZ13@|`s zo&+YL!_wtaFD0Biqk-VbrwkNMp8H9Z)Mx+hm}kQkLJ043bnRi=17wykJ*Qo*KgHNFIaN~(TX3*2G-dsulwYY@9U zGdND=hZ)Q5pyRJcwi~1n7%hq7eE+%u%J>vYL{vdo1q+4*{KhYf1>fetdlr_pbXgg3 zanAFysyH{~Fsb95iUoehQ{W&;hN9!_C|GIlLh+jhDplq{rJ5q8dIuw~iq(d{Rmr{w zVl93LdO~ZE6>9(JNwuH&#S9p-RB3O z(w%52scJYX$v(tiIMoinhsA-7Ln)WpCUpFnLqL*V^{w?^K#4XdcZ54?+}@KMev5>& zgRnu-)e_Ay3uu&C7CT%^bp}inDW^__du6HHY$8Uqo?u~l#9qRc>{@o})RunGP4bT2 z1fY15h_LGM2A|BhU>0#b!q)&={9REw@3q#s{d6j*9pCTIi1Y`mY&tx0?D+t=6<_SC ziJFa|bxZ2tnG8xu`-w4@H3}W69rheZ%uuT~Gx&>>C_QNjD1EQn$Z$Z%$~uVEfB@w# zLhybZJ6v%FxV&8>tY9xCx=bOu!7LefHC zNRQX+q#8*TszikZ0Kz>0sG0>IhGb7^P&wn>t^fChFsw}1Zyc&5I&lkzMc3WdV{T_s zx1jdgUq*eC8hm?}z{1_GLy0CIMpPz|CPp%o$?s}4gn3#{)< zA_e-G1+S1eXhn(TT!NYxJko7rjyJ!J+Q4(d_GX!qvaL&CnuZza5^TQcKO0f%_%~Lw zfP;IRQ_>0ea;JC*(wR63`obh=yUGilC0R*%6ps-*j`#%bXOf_KfPguf*j?A{8VxY&P{@ReZGel5gN9# z!-$X?gDJ-KrLx!2w6{#@Dlk}zX<>R~=6L;jO^=B5aKUWN(XPqxE!S%`$S{CCd-zj; z;s{@YCp}NJKt|8e#(owbXvZ-(L5J{H?8MkYHb~=x(I`S|XHRE6aTKslb%|bvR;SUg zPYSHHIvwiqYFcLo&>@mh2L*k0yBp9?*)Q|4GL7q+otQtIUaMcm3BUoqQI+T|tb$V1 zct?BJL$2UUGGAfX!wktu_!8q`)sHHoqgrBh!;Za6!r>;ery+1u=oP1t%uosYGgv_+ zrZfF=P|QR1$VOQcFypE5C_V#jal?dZ058xR+$W=+!(9vKvVRM|#34t*DA=CW2M)eu;NWuy4AvquNwhelv<HB;V}9#o0Pe zPm@Y3s{CmBsqePf)C# z>=9^;OohymCOJo84)i2K>x7QVn8HjA2IXrgLG0ZxqMtxrq8xj9HMG!9(uvwEH3v*r z%Sm7_suRyfb`en)6(^suufu17D+_Q4AOo23R*BBs-|qAK3U-TpZxgv-D@w{R@gw{F z@GVWVN@hzmm_QuTsBB!wI{=9(9tPWg=Nz+Qy7in?XJiH$}gPInS=NajLtg+MoKK5V++so}X1S9`b{?EcMt;hz>vJ+WXq+4#1dL+I+KZ`zfzcv0DxPlLC2i(k zXI5mo!&nO+1IVdC?)N|rhK;Ga(EW3g8;SH$N7HAZD*2?UySAL7X*e~-JI zDxUQpP(#_Ony$t%M^lHnWg@#hhg^jEL0b4DOt6LT?VS2|iXdWQ8;~a9b4Q?-) z$QTA@Lfi|@E_ESiMW!jW<#1QE3a3)@W&k7ArAPlQbs@lwjZzu$A7@)=OziZ_%Cuk&e&V@Qbe>|^8S8nW}lA$;{Sc#|MR>&nlpQ5)_ks6 zvu4ejwXp9v5`w-2GgZ?{MTE*KjzBxROJcfFaF2`LGpu&XUumpvrdnLDB%8B^dbEx< z0lIva&hP9zz{s8QcBlL%4emtuGcvk}1!3FC)e1wwf}}iS6U3nA=v1Z*jKt z@KcQTtK|!von8EF3aiG2PE$lJTI4`otTyP>tyFkN+yIjs%k+A?TL~wKk0KS7wp0}r zE8T#qqVXy!wN@2PP*JH63NR`vbyXD=s;E@6tY}PfxmFd8=JM6!Yj+CQQ1(NvUk><4 zm?@RP7%7vdT8wx{j85n?l=D=HjIJe&zjKl$8!C@W>K0rTLO}6_40(nwQVFhOXcU=2@uLC!Dq-{G4E(gS zR-SK&TMIR1GO6e!)N4hK@MOG&iE1Zfw0Ud0dy%u{K6IO&wx3gtc>P}heg=D6^e|#W zm$^@HHpG);#gLl(&-EB|0S|U-f(>S6GJ8Vq^t##J zMWX#0tUio@$_Q@0U;_;efVajPIO>2}me?hLEDj7ET+~844yGWX9al4k8gR5;Q^e30^Tz8*ZyujJAo#D{^vS8QCg54kscB3rVO&;pN zgho_~kcB7($U+ow;*z%*y@j||NHoq+KmR^fq2SVKNY#{jwU%_>iEWlPZC8tDIa@YK zn|7$>H#s{uGThXu8s`G7o4V9PVa^Ah+1$Y$4E{>hnsx^8Y%9#uz9ujGRa6R;)=F{G zS}82OrDheVWNVA>Vryk9`fZrSJ>}pLk)!K6sGZfp37=|{y6_a%;}^&~2-{PD88Zav z^J^j1Udng1dLF_e)ai6~YeH^CKSQaZp0za;GdM!6+~;`NyHhaUFpZ9U1xGmVx_wwT z;hj7fXTeIe-X--ZSF`Kd%j_0?vcW#8cR`$&un`Wf+0MnJPiF$^KoLI4<_G*OT|AA$ zAcp(kOvny*a`A?j=i}O;6IN&4i*covlAqxG-f~D55`=|cf==mir|Coj-N?F`b{~Qk zd~JUT9&C=QrW1P~o8RFC)+=#ore^zMmA~Mzq_qdR?e{)mMOLF;`@K2AsWJPK<+$F& zSc0VFg`rjqS)|=bfhlAJIHo0ai1_NwYUX7iYB&T)wnNuzNdkXV31} za(2Ho{EGMBqe@kcqIHTZv<&loD}};16kUxA>Jg`@)a>7Q$En0MW~zT}V}K2(ix*z? zH2F!pPM2S{$kXJPHF=tN*$_?>-*Ni#Te(fR-$i2D_`xqIIgf847N$HHoQL4C@;sjv znT?P;nxBCU*|BNo9gQu!?toL*i6t5jY(ins$=IlWHWMS_fgSt_-mDrM&AVmXG(;mT zn}=oX%Fk}}=U8o2RaJEb&_56jh0 z3*BPF=f#OXY?Rcs8~k?$c;Q$_V^T$9W_06h1iu zdD3TZ1m3(hH3E^;2&^ zXe411t%1Mo>X1`22FqV7hw^lu_#^W2eMMk94r~-F><0-+tYZmqYTwXv@JKTelChZ5!lV)N%MNCAU;}0i=oc{yHVN(W`shq5f3=z2(q-s66!~0(W*b zWKBd^NDL43#R9#?Arxs?05_nxG|07=m;0J8o!HsZ#R7~a#V~@n%#$Bn64789{jHeC z^rTnREknx&&yO|i?+&cX>JHqC-IFT@Kjb>`!}-Sf3(vW5zrD@)U;$ehz~w5x4q$B&HcRy zL<=uJ4}9SB*pb7_&qoN?Itcw6LgSD+2%D2qK8%@n*-f3pA=IwxVhciTr=&qADX_96 z5QzuEY^@c$6F=dmb4YW617;f5zVlP3P^aij0hMVrqg1vWSg=YoT5Pmwb3psez z2p5cwcr1$tqyt=L;tGx~rgy-=2;kmiR&g8$svrFdAeDgd%fX2K-dX{-Jc+G zeg`K+$s{2O4OoU)cdkH(8G|G5soiT^E`t^M1iCF{x~ovH)|bH%nd6nqLH#oF#ni@~ zV?^&EG6-y}$+PBU|I<1znWq$as1>ntFlO&SPMv2Kep7iaVmWs)HC0->DQ#BHkOE(C z)&+J9y3;V4N%f2fyMrS=3dTVR^(Q)!6N`8lJPfK4S0gc;YWn(Q+DbLzW9aAdR9bs7 zt=*&z0sgvVfWK}qQGjT6elOpI&?} zo-N^S+MUI+lLRJC3?hN~7}_ba)U+n*nx^ZTqF=(8kjjMSbNS;f8ZHe_4>8(6(9DC7 zh{#qBL`|NQeJX)E1gSR_V>^&bFHPEp-~b4bN^6m(dpk^iQZPO4k0HNMs%T6?FM=xk zUP5T;C)iRcY3NYu;=Zkmi&A)`n>#``H!0t^Z$%bI|b3cW@OqwTQP0`ra6R*kZThb#)Q^A2@G8v>J3472-L$ za~osueG5IcNirUc<9k-x_b_}{rF}F1q_pqh_%2HO&c$~@+BY;1Eq!ln-c?x9FQ9YK ziP49wQBc_houh*W*lCfRto&^#0}?zoG|X z6C}_twG}BNa04s=K-avll73Md`i%{8dRelfB0IV8ND`43MH?T0K4(Hll zUoy)@U+@@P_XR1HD6~g6-(jKB{3a>DzBOQHjR?wH>J{27WbM&T%FrauoI050i^ z@bW_aHCq3S;SW{K>WlV1Mtua72lKZ)#lyfD@k?>p{Zy| zCF?s)MZi|P0#^ZeYRm&`2O3dLT68|b`4HJ(Xm=I-hpyj&Tj^wk?%(O#^DIPbsrIlN z-g+6@|Fg9RP7!j{xzW9_=Y(KA>!0n@ErLAy!n9A_o;kDe{(Yg=MxzR2Qz4FbDlnSQ z#2Uspbq9dLPSbu^C3hP3;aUK!K!VM?8P`=$!FQLn>IE*UzyU0uRX-$mUe^Z;Bo6r$ z2U5PLGR`w)^uByA0buF#z3e0LKo1Lp-zjG|ljl*F?gPs}(13dx=9|e)lSlPK&^m4!=7Ut7pWx0~Z63^4I zL-JBn=+wNg=-457pE_;chY^daAk)Ds#JBJfn+o%gXi08(X*N3leMZdyZCej1Z*19w zY#qHqqT#3<`r_*m4IA3o@C_WB0rPywxdTzdBx-JK1_Z*}buOPoO^MBbuX5ztj$Fef z>a(#Ka8|xq=aQO3<6<*LsJhK`CM+W%exW0?KqXT58_r2sNbPTi|CTPdo@=|QpVk8H zZ!Ez5L=#Nm6~+SvOKA5bAb7~D3G9*(l65WQao_#R>nA}F4orMTdlIuEk71Zm8g4!w zK?p`!u7_cozBKf(BE?7$mr8OWLK8RhB*v#7(!ex|zOjI0<4%~kQQRWxFu&_-&w~ku@yW+#gXbwM`4Iyfm|N7Anz{yT zq0gWfdi~pnrjZS_du{=41pcnYILR`JCvOxMBaM|V81AK6jOzJa22dP1iuaOD+;tDgOon3o3j zH{VQCi4A$#Cyj4DRlfiX&efr3mAFhrX4=u0M=s%+FIaLy+Ue2-0{iMd8~+hqFb>9rywFzP6&$Grf^LFt^d8+$4$`d?_S z+f4<7*4jPx@fk2H^pnmAKz1RE{q9$+)txLaP!J1d|H?i&GFI2$JlZ+@$k*r3pa0J5 z&f(q1KN_ohW%qkISHRxigmxTsGt%Jr_e{n>c2Er1*8aOj zP>3JVsKN8lv;r(R>OSS6r4%^j$EwR@bV6d(9eWzZE;mhvGGzec*^51TtR7i+vaA4@ zd-J*90=vrDs`k0_7z9pM`rHNvu^m=S1~Yu_z{Q6DCG-5Dl6uY`O%?SH;I0ePkx}7m zA4hAD6qEHL+-;t|DaLKojNm!AxW$2-7sMT$z_<-F!Z>qqfJa|1=hf(gGLU}aDpSyl z97zd2#*JDV0Kp-a&p&|+L;@L)Ux!`v0#+Te11t#IXK;FPy3b%DhCq(FI zQEYZ2mV@YMKz9Q=8b0zf5X-<;QcYgG#*Z>!^9EN(;CUdRD4@GOpl(fJyhfbrz>SG} zCF#fqXqXid+Y6bE+wd8$am`e1^*ki~f7Uo^MR@BM{2=CiR)d^jXSM27IPWGjyU zLt3#I{pM(ZR^TsYpyL}_mOzHZp6@@2H3(#Yqy|r*NHUreO+1D&AvMR1#a{0hzbK*zjvjz2gO$A&{;R$h8zzK9+|Z z?iKb(u`~~J+F-{wuwE<+ASZ69Hjoeihp}zqmbLEaxXMYe7C{oiiBjl|ET~OfP4J<^ zzWwq)JVofw63eR#&jDm*F;|`Li%W$EZ#-xF-`N9v!{b^gO$@p)1qW#in=M`=c)n>l zM1BX#BeB3Hy^%tNgpvo*IYW&g6^Y1G7~Y1v9Z{4aVfZd0=m|FXA?J9Sh6$Jhw7ay8 z>mEn;whsI{d&Jn-xOLpxO7^I>jrg_J?oP&Uka(E~t7><dQx-ER_M`T;$X z7=VluMMV}fx2UN`sVoxSNx54VoH->+A%aj-3Mh1;siFdjv2{Xn){1UPJ_g6f2Jb(1Dh2DQ!|wV$aoj=lBNpYo(Rm z<%OD7tB7+qi?SFMCazG_@jHo=X9JQSR}E5~x1o|FLWO8WU?2bV^3Q($IiMfEsq!LE zMW}xhI1rq5apIWmj|W%<^wYM(zAq0nv-6?BqGlIBA4AP9R9ohv9ki!SfP0ZA9@wDm z`>l7NQ7{`vijCoBTCDe@Gu?rn!S29D%s#=w&9s;QzkbH=Mf|UEr6uu=v@?G|;vYx+ zZ!icFzm&G^-4V?H1mYh=eyXdfwW0$cR`_J?v#Z=I$pmiwqAYp%GLNh}!GU8*W>6Ou zs;R}%w?d@)Ad6WUpFF2uG*H7^a877OrzRM30NvS{dvXuJU-x27b_1;&0a@ptgna zm#U}Nv7I{!@BSVlXm3AM)e}l9Cs@&Xb`$HzTR9qWlPgER@DdW?e#~Tz$vW}?ppKHU z)L0+~1Ea$CIR#pn94$d~tc^IU*SaG^iv_1*bJcB$3Y1YHTPwj9=}SKB*ieR8$E zPHDP$W+$?m+1qftUI~9hB3xMOXB=(^ikRPF?V3(sYN9J_t$vQ}5Tcdz;?;*J9BvQt z$4-2Y$CtJ{C|{4*n{Z>AePFO}F@}==Uxh61_kVgmFTeNuesE_?J6jnQz-P6J`za*S z(LYk%MAN(uiG#o5hY>gYeq?}mR=FOIt>RZ@$=WhZ0v_g)h`~s>65+?o1=wMTKzkasko@ea_Pm}yhSK@&0-v_gD+L2a6Iv2 z*h}HQRETqolI^x-kKP@E08(qoSeQFEY$p1Mprnw**EDG4O$yl+SA^d|FUb0C)oR)S(#l;<>WNQgC z5B@td}!Ed@;-@n?;RR`PHlHQjnt9l422)E?DDa|ieL4>Zd%;vamL zMN3=iO3t!-0ZE34*ad+>`4hd^DV*pe3=A5Yc;F=*5#$Tf_6m-GjF6HS4|IN7f&X9! zSEL`6D*@%JHgVf^&y-tJ3S%^UjJeM+CW6$jYiH ziYIZ#sa)pzrCYy2w;s=O$6@t?@xlLlv)q&Hj;3Kan`y4~9 zn(Sq}KJJ_z?elc4= zg8C{@AC|_CF40@Ncz1UfVB=06FvBRxvqv=s=dG6IK1Ky0x*p>k=i!w4AmD*`{ya)% z0^$LVWMafP%r$H^0E-v?4HJzwlr;sIXqm*PwJ?NZh3@0!OC`*zAB|TQ^NB5{9taSd z1LvJS2OhH^9H@Xgf1XnT=|;ZbdjW_TI74$RK$l_Pp%ODEnD)LP4l;`*MW!3=P5j4Y zo+PE~uV^P4S?&8CdNA~54!TFF#u;AbuzSVMJMq?)0OddD9_gueKaDHd*~`TKG$%`w z#%%m^?pcp-bRFh@5l9=I8nV>PUZh6k3Fg_(c}95tH-#*Qa8GU}{V-EQUK*Ve_weOFyg%mtB+< zoT~*O`Y(i^6Q7C8;}Dh|m*-+E&%WI^!;0V?4~SM3Qh1R!JKz@cdyT?B**#)S|8Qg@ zcl5)?l~)qKsZ`)cE6QOiULPZ@)tK8XIE7U)c6FExhkixl=o6m2a?ZvpPoZV{;kX>V zard{AJcUcY8T$TTzQaw22i1%`bt6t<``LRdau4bZHyr{qn2qrbH@$`7KcJJ=Nzxlg z%9W%eND_Y8irgznZzAb068a~S`ZSat$^z6Lo@~<9&N6()#QmSFaV&5;EWpYzFHe4S z4fwyf65|Xa)G!bJ)(Q(*msdK;V+l+K+1m&Rg69@IisiXMe`o*%nQs2}iIRWBnt*Uy1v$$L6b|9(ri4U z!DR~RMx`e~7H?ISywbL@8JG`pGDh98ufw`G7v+kzmY?VaS@Af^#pXqs!&B7+^p zM7q+YdBObfj^ZG~S;3v*rFi+hO$j2=7Ci_AxULw7oJRH0qrf59>~>;4#=uto(<685 zBNh$%30U}cKB!s+j%1t|&=`9JETC+d?p5F%uoxp~Hz#ry%HU<->Q}HsVTq{ZI*1-W zF*t~Ikkg!Sdyp8HlN+)R4wQQEF>&}2n*o_N=qz6mM{fockKR-B#|i* zQ5ei3+&e4}(o}aozV)G4n>2C%r7P{nD-dMZ@BRaw0KlvI`=HCA!S^fr`+%zt zx|@+oc6ukvckM&|7TT$rt^MG0JQ?>qqXT15v z{sI3eMqn!M?-K0D%@B<)hOmZx!qes4dP)F-x2ZO+TG?ghtJ=BtyMw|1pftAI?z_Q$ zwbMR60`@Ihc|fpVx?#4NR;v2e#8l%i z?sZbn|G-b!%jZF7nJkW4&9;Cne3FX}4lI{E3z@=hgeg-H3swkI)raOSX>&u=eoP$0 zBT*e4MUItf&3cL0!;zImbbJf}{y*OQ|9SlK|C#20XlU|EFI~*zNp0>!7H5x3&mYd? zE^Q({0s%*s`wBww0EGLVRyth!4F`@B;UL$ApFa`LLi0t=Q>Ai_!D$X)v4#V&-*P2z zr$+G*2ksLI4WvOAj@1&H7DS_vT&t}M5WJa--1R5qWq0Oxu+N`F)p;Q4WAOhZ{681} z*W!OPil${FdMG((=-C7-n^d`$KL)d|j+WiIy9r4t00I3T|L=SkuvNaT%axcSm#V!tJi>L`1{ISAuTF>~c* zy3cgtsPPh89_|?Ait_FGI&mix8}^f1#MZ>CB;gkE$QpYhm=2OIa*OiFy4caYH*WrG z<_h+@%K`6okCVpbIy$Y(95crG)8aTrjN`jk50+!dxW2SFjvwP_n?Mf&^jjz?az~(6 zkIk0R>9Zn-nD8bk!%+ReIkP7ogT~P`>|c8AdLHb0tW}(DI;-0q4|JhAO!GeeIDs7l zmkPf^kB)Wl=(ulmNnMXIO;fjHSlvEo*r?m{!PB=Of9OC=8}`ss8XI9O>Y; znEKJ3qFo<2fFt5azWs>uJsds)2cgJ@@5mqUZCz!*jf_@wjY;g2th@1ry}((9Ur~-G zj}P_*Cd0QzCX-0;qUkm|V3Gq%!GE&aP!T5=3J;iHo@sE>FpSRTc&=a^%L7iNUrag| zdhE-WpCwZ-7l0r53BI{b^;nkEy~Ky>+7H02n7d5eqQ`~h;k?LQW_M%)H!|RDXLxC0 zmUCNva1@@^^s2hf_8B;|b;4z9R&b;Pt*pA<_Sy?npflWv%gzzZ)Lwrfz5!}?UK(DC zC1hexV4}sKLfULc&nM=2=%nc%^e~*mS`R}{ROk(v!RPOSlfYlBg^NMw6KO9$`tvD+vHPN8uLeCI-bmQzb2Jp;VgT4HpCy@KwG zcY^_QTkJK6#NZn4TigJC&Dp&OlMsCd(-5rZl``+%eGm~&bMnQdqMkT|moz<^G}?d2 zijGGC#`GV~|5~LEa@uS)!o7xNqr7Z&(ZH{r89w(jh>-I!-rtezQN0{ptrHD{P$BNG zV{P}NOH``FQ{PZ$ygZM?3Qbjv6RuVG7}!%~Ete7Za!3;MLPLz=hY{RQpg)5B1P>Un zpWs32~r>$4w z<*L4osj8LiwA02zuv#sDTl)~kZBpB2Ks58Pu}WQtR45uOnWsAXnfi?NleT^&tMEqr zMV7T~EC=%tJ*FyeinsA@n*W?OKKoRa^Q^nu<|5SHb`w*awpsG=1%7n5eNq41%%6DM zJpM@NmSkvw38@u?ciPwrwSpx&Z3%`SVqRz4A&F;hr|qzW7fJZ2go6@3F5yNAm*KBk z&C=p+C-9g5qI;X`ChpY>z|gOTeKFr3nWolAJq_!vZL{)o=R30|9 zHWj!=-UlLjrpK#tgg)x8?y4ME+ON*m^;lZIpN0G7iMr10JT%8k@`!NqJg80hc>XL0NcRBEtpTJlC zoDN^h@`$fYCBFLcn~tyiPRCb%r|^|u9=?`H4c01+uO^?tSN-Loorco*s-cLlt2DkE zK!dMm1RUl87Fnw_z8XM-uV)1Gd4LnFRT^InpuyKO0uJ{8%ixiQvms-Z!q+nb=6Zm& z&A?Yvo59yJ0*&y1W;Fv}nJoifB_bVP86h;FWE-c_TCMSwIB*KS61h&nR~C?guZ&2; z*Cal1Us{PYr!5bEjYB^1AfZ+*WBlp@i4RMjLJ3DCJX*r-{JV{?@wOuTbBT{kB|c8TZ#q8mI~^bSox(?crSOquc=%}Y8GO`V9zJR) z4<8AYhK~l&;NuwqfsYz6iH`=*;NuwqfsYz6iH`=*;NuwqfsYz6iH`=*;NuwqfsYzc z@X-Jnd^{r%@KFN^J~CSdK1xJ7J~G1KBjG%J%t!ci_(P20k((10Pu&@DazK z74r~u+9u(zKKsSn$`R(jcw3bTMLV6g$p~AK<=`cam|bln5D4j)Cmw@HO6(njM=j9& zgSKZLy4)K_|_f!-|FR*W~l% zr?SPX@-u+)4HrzH*bH#Nwf_fjV1hLqm|)Jv2d&QxQfvlz-~*}toVA@`fpvXgf$#r6 zfCC4t;cA-}e$Y080oE|HnkH));Jm$iUi>VrEZs&hYbEWvX*d-+;4JbfK~J0(S1*EC zN3fO@)@kcwM^=;pCwbbWkRIrP`$ZhDMd84^m0(j6zzMbzhzv!8EvZC`Kj5ZbIZ9#HYH7|Q`b`G-&ZDCvaARZs} zez_?0KYOmZA1K#NA1D{E7S3KHuika85!nO3%!(a!8JXQ*yKq$-&(&vy8})9K=hkhRjT1orzwCO8G@rM1eBn+GldjjfPg0b66fDF$0#IQcJNt5}snMMe`Lb$&!yp@XWW7R4#Z z9YEJ{b+u|Z23TX&utm6-Hw$3DDYA`4=Hikl4gU|S@;v*+VX9z)$d05u6zrRjwifnd zE&Lv9fNSA*?Df0Z!TDGRFleH?S9g%W<$0>WuUc8eF8rT`p`Z{Ga>aB6!D`5ZW}_;| zan|yBnj^4=Fpj8EDPNA#@uyuPX9AU*$V||Z(0(i8BN@Vb`HUude!=^@C>3MUTJhdGgn zQ`kVU#e>GM>4cM8R|5l=ri%Q zu4HUaGPExlI+P3@PKJ&qL%k*>+nW!fOMIihIYtY55Z4Sn*a9OK;xU962)v-e3yfOW z^WBHm@=j>*MUBq$vCLQwwwD&}Eqb-N%c)c(KCrRVtx0n zB(fQ?zq=W_8mR$zEH0vH)SuC1c z9r^+lHdnJlu3D6j3#6}y`qExDmEkfT_nLo%$`UV-fJb-}X0BTjfB#i36E`tYbT^Th zyiwbu6Yok>@f3wa&5Ovb_zlBwg$6*}fr)ZGE?4yJnmqMLEMoGU;<3F{)u{#g#;O~g z0Is8sio&J8w8C#`-KNU?(h59N6Q!}t%hmDkg472@wKIDwu!OpgP}r4gQs|+=U^x_a zVXz#kx_I9P5?w6{U3hT_g)a0I*L8Snh(%qEH-UI;De9lqW1t*5AA{~xj-kUc6k6fK z`$WROzd{&t;6ya^TZqN?5xC$5{J!C9WK@G^|JAotwf)B4^Gf(~nd zKHmLZ9`Elwd>Op6j4Oq3@&sEj0WHCW;93E-qW?}ZUgNv&el$qm8sZtc6)8iseSDU7 z7kR8Em}5n+V9wNoCf;>k03hD(osS3Iqk!qKN5F^cypK1wD22H2{*OHd=3YRvPk+bY zOP{-Qv)%n<)I*s1Lhm)@?1GX#Fz}S@6SOpvPI>R-(&s(m4*{mVj|N!)j1~}IiV?7O zP3426x}(d#h|9=$g*>T74N_ygI*&siuNlK1caA9~^mj>hKgqIc8c7DPVRyB`YAS`o zVD%U)`Z1)tAI7KH;uvQ9?8RY!6aVl`7Ph@mt_t+Wf;o*c<^?kPVj97lwMPbVMF*u5 zPKoH9)M3XvYzO*B+f9jVH6!1Ouyy#zfs;E^7E}U-6!6DWfVtHagezCRe=9Vlpac(! zRb&9_$)9}2768^2X)&;G5sNzLpp(VTh|Xw6Id$1tz|}~S|jJN z_koyoT8KM`Le%BKY^x6=wdm}9oHY~}SMd$~<@TP@VtnaROrm=b)E?_!><5MNTAF?L zV;X}Wn)nQi`#8N~a0ve0ixU1TgaEu2lb0hh10Z_li8F6QiA-1si3g#`Cq`L->c1b@ zrtKx|p@tpz(OAX*f_^N%7?-!eu=WQ46|49c)GwFh+DmJ*gFcu5dklBIDql_YG9NOT zsefQH|CyO#dm}R=0HxGvsf?Q>KhxW5wN6d}?M?%tZ&VF*kz~jO;>&JR6Unnz6IGrx&`VsH86CD-pOiRsy76WY zfMx_W04Det~d_BZEA`%pcs4LA*( zuwSZ~*vFtzZzqPcxtC5nW_Q&aQwANSGpa&wCcj|{7xMun%UVbdpO^CtdQ!Jt`P#u4 zz}aQFA4NfLoi$5wR@*2tgm|zK*dd^`wK%=4dK=gV>n3;)QUUlK0)IFKe_0y*l>&b_ z9_SSK##(1L485=VH$;2zodSO-1z(*8KULrl8HG2c>%SV2srtJFK9Pd|bQ=7%0-uO$ zJ6g)CpZ1Bp`g;VvKLvkk`}>WiovEK{rm6b(34C7)o*Jdz_)#MPkJ+G4nbH5xA=<0I zSKtq(;5Q+w2mc7dIOm#&2d4g?A=24BFu6nLg2$g4OsTc{`zTeTV^ZJdAnf$0!2Z(8 z+NRr7-6k~y6LwIhZNDmOhqfRul_!ln(!?9$szh`aNP>y#4t(B z_O9{rA9Yz7^Z$5g{<{7_h{PK9mCUHMRyA|1OdtEj4me=6g-&lg>JASEI&pq1osm}l zVK=DDhaD|6EUmvPa7e3Evi*C!vJbftFF!3rrRQ%*XzOStm1+4C(tb}$-f&>xVsAYU z!d5`tfsz~1_!%Hj&g0-pRUXXVY=U)-1e7_Tn-_e+>2`||^z6~uhsMyT3e=w}F?*06 zlAe3`@&d=8As-gzDv1)S9w(|i4HL7N_=1P3$+yxV4=jT~Uu3X;Jgl^oF2Zy^K)8D5 z$;_gx!5Pd1jgHdV+NNg7bH|zT$+EyJk7n^)4k;ntu@ee7MEw=An}GHfPBws1@TQbbRk)y1k2iFhuscYDQO@ z-@j)-XtrH|La`V9glfP|2@y>`>J6lNzj6dW|zA*aM<{bqdhxYoUa- z%I22_>hpl8IArLq2Xu!3^?{6%h*R8RfciZk3Ox+5^?;=8K)-1oc^?A=C(|4NtMx?z zqFf@`rwz;oEk)hDAEbZ|dq6J;kdRfcrvDb8!=`z6rGVhLTG#Zf0PRn&Ny^5&>aAsE z3h0mqT3lgPuC8SXHt9nX@$v%Ww)`4wjai=D5?A9?Rz@?ks-B_I^t&nN^o8sa@VbfRleAtq{`Y=y5|CDuMjMXR0j!jS_NP^>T3(PqJyi&5=;&Tta6K4{;Vm+f+cOZDGr>UWOwZ1kCD z|1}7+E-mj}k6u~#?740Re}B^Hhpg#&P6!UGD{2vk#zwX>qP_s8{h+SfUotfx@_$B^ z7c%u;$=+X54-wQ#gxz(Fs4Jwic&q(O95vHDvc~8X+v;_!Fy_mJJ=X?wumI9ekB!de z28FYA;^sg7Yf$=8i9)d{vZT?-$N^};W8wmgh<1-Q2aJ(lwn%8Gr)`lP)!P z<23~}A`{DC0UT1gnnW4cKRJ|A03Wst3OsjDZ1S;Rnj+ZZGr-@$i80_TDOE&{6fs{H z!43BRMJepaO1@)~LHQ(?qp*(A%NWD}VBWF~8i7HeJTZkv7&-KpXfzFIBx8pW&|*y- zT&7_pjVAeX-uyXVL0#@2WFced3l#mNX(}5^#1}-T4a22E~rg7JtJwzi#PJNK>#e?Hu)f^H; zTxXAlgzgWjVhnzEsfr@}Y-5hl-#R#hxB4hl)ehN-+Mb!M!8Kz@3((xzxV%1^-Wd!L zP)>CFXW)7M(7rNR>l6*nfZZ>MkkPL)b-NGl&~I~pjDby#_jJEnCtGNR=@oP&7RYqN z>#(Hg&LWyr69>ql(Th$W9h7J|yu>@yYS4|)-D>)1^f{(xkHM(4LUc~L_&ty-ant^S zaBXbq?LJR$9-TJ!-|;RNIE0QOs@8YPR9R7RinrU{!o`McwYVBtNJ@mcPtwYn#eAi4 z0+{NtrMy2#v;QjCMFXStq|WyDe?Ao&RvP>9o5vo>u!9Vfwtw{Z6cp#H#xk(5=L{_7 z`H=kSH`S5?+$`J_dJC)5d-_Ce?^Q2SI^R!v{IwtR4yPZZpr1r*w_32E0J|ZGj8}-+ z4QEENb7u#utyt#VSRnr6AJ7P?|FU|lEZG{+;yE@HaIzvKKxN8?_V_!<8?zg7u|#m3lyXRIQ$_2| zAW_3I?TQc7+e@Vf`7!(IS7|8wv>0J9G4YRWu(sP(CePcj(C6>+V^d+zsdRxUlAcG= zJlVBnOax0gCJ^0T+-di{7h5z+TY$E=NQX~bAyC9!5@ZY+fd!_yK2LhOiM!H{@ z&6Vdw53{~|{s@f8t$L8p($5hr;@8+hJ^Rx3q4AvM744u%B`YHMYpt9GEs$)mlzmoo z1~i9YSKZ(RN&S+y- zCkyzL+0m$o{lQ7BA_`I>{7>YZNCvykUjxK|Apj&~AHlN0g7kMHHT!T&H-CwNiI1-b z>BCLZ5!Eh8{4Oj-GL6VL>`ua_z+}0D7$5m5_XvNiCR^P>px8Yuu4H%fQX+VuKf5;* z(y%OvM?AP34=xO7z*Pdyjt^_;F2}IGPXV{H05AbwQ&+S1dcQ280@hDaoC@_p=W60J zSXjdX{Z~Bcye0fcB@_>kiuK~p?k*pR-%K{?~~&jk4ii;!O8C+Yaf`lnw1l%e4$pj>RNl~?J=TKzLk z|IE@qH|d|b`e&a0xkdj7KNl}wsJ|BJAK}m9;r0B&zj%0~4rFzQH%LVJG9BM;;^W~+ zGPE)o>PUv}PKNGHhVDy-?oWm`CqtW(q3tF#yc2`sW_&<)(LiSuN#FL?0(~B|&9&zICW-0^)`l&9IqHV*4o(`C z6)bm}=k0zem(=OdunuNy5yg`%KW8M-UFnA^%S|!g$oWp?`A)p0sUNn@vaASYBk@XE zSlyMQvcpaNU^?FEg(+vWv~n88(%RY;>1>BbmgpWpgqufYSy3(*NWFj`w{};ala2G1 zQ#mhIfH63PMr72Vm#m-V&v%xdk9L?EQTpygJ}xLnAc8eYL?I$BX_<;PLG8guQ!7Br z%JaSRo81hNQtMW>057%c4yhH3&M8rkJD91!QMtL%_!w>;i4oZjWYA;t8-%(mM`oKYx#(EN zeU+!D*mYGP8`v_(md*SbjbiKct(mDA&PN9(|^H2KO`Ptzqqg z85Mcn!h?(!0xvMtYa#6l`nxOqS=|+*vf~xCte{5ka`6h8cH%#tF>Gg%%YNroEX%5k z1B<0O1vUsa+7B}a>?Ly_Re_DhX(^=dos0-|Y5b&a3TVnZ)pOBr%ZmO0iQ(p2ux_95 zasLfBPeHf<;c)X*ga*MBgquH)(CZQs^peoXtl(wgWDL? zB`xf5^9cCS_z3#qiBAGJs?>q9#?+(LT(z6&e6ADH_PULjt$cKsi~-PImb!QTNi_WT zuq?U{pN78BUdAFg>wwr1xrW{s&d%d)#~P%d$XLNltSHT^sH&V>uH)c>ssuwgfX}54 z66DnMR!}GvLJSSnwd&FO;{XVDyn2lOI2dj&9wf!bKP$pD6K=i&4XTjPm28@XK7r7O z5mInFK)eU~WB)gp9EML`#?^*Xbx)!Dtp0uxSJ>g^D+d_|@3=bh zB|3v=CYq)PP#=u1$hT;J0BvXbU@0A!pMq;pd1zJ*8@Z?lt_4!=e#y7{Jy_a8p7k0L zfR-2t%|zNu=Vb+FJ3VGO>lNH|or5>j!-R=|=k9p1 zhBun!|CrsiOrKSu%?>11u>GLr2r95%M)X{6u)5uFCbn^41)5`)Ce$m9!H$&noDW0S zT|E**>H{sZw!&LhR*qYXgQ9c12JVHlJ+XId+Us6*kKx9_d9S9u;T0D`qrpds5Z$0A z?p}P^gSbb?=K=FkZ0(xHxITRI_UX1V_dzBJKbw??hVpp-Tul+=A`k%lOhOaIn-OoE zc|{ayK|r-FL{(|r1fPgOpQ_668(y+ubbx7tYxWU>WkRW?*;gF2jC{0hB@zb9iy>{( z)-X@mO~67Kx&O0JzyS#w__10i4QOp=V^U+Mn_)#nUbu>hU=cutoX1gZfKyXF&HWEj zCMeC~h1yYEr&4Y}i63n;Q^Z=qwexvtsTKV+BO8t?82tbwRcYU+byuTxv=Is(K-c{^ zY9DY;fv6bm^=FtsfD=fGOVI=#<5%Y2kJh^()M(@b^xx8i%LvFtgXh{^;6;;Kt;DXB z&`y-v&FUUpa~#D`Q;Pf<3`OyP0o75?MGfco6Hp1w4lX{WjnD@cN+v4FbN_*1ubHN5 zfC^ANrKJn|_|;bALny{RK1Ezs%rq`5)*>;jJtR+9JD`V}-6dg2HeQWDz1Y?;O=Yyk zgIjiRfm}olno*slfk9;61u?*!pcOJE$qgV(XjI@y50m{qfp|_UN5lOip@&qa=1g8gmvb_X)PTPQm4XeUL%)`2E?xQUivpE;5kk!%Pkeq!QY=Lm%2Y)s+} zj;u5h_>qyqeMF~h9Fp>IG6naq88CEtE-+R^9@k{1wxm+2LpcQYYpGPxq0EF0q*5;d ztQpJ9UXD%XiC&02?pyfA%D^Eg;R(;Vr@lVG6*md7={vZyLsJD&lAK;|zdM3U@7-%; z>4m1)?|vp&WxsoM@CN(c&jzn;dH44iz2K)~6}?nxEl~{#k4kVYl3kryfPFnHOQz2) zLsRtpfIXW&O;X&;5ov8TU)v`jvs=I@&mdVCF=_Utq0GVqE!efAK!7DUK?~Ow{1Ox~ zK|WxPl)Ad3DLCb&PjyE0a4-6*jA+`^liYF$N*$t8^I-q3Nz_=Kix_GR8{01ws9YN8i-@)c5eU-`n2x1pHq_)at!|f1|4)ES; zeMx`-y_95)y7(lCFr>G&)4Q`o;lVF6Df(}tP;kRRYuC&W#0RjMw<;SkMhgXIo>5lT zz(qWNY5g%fkbu3v{Z`}!9A~KBhxv<~$3`URvkFH(D0_wprFlv3l62Q>DgSP3)zyN9 zT>2ip;0CwjTN@PeQB-|*s8{?alGaBrM_Eej0n0Xk zA!tRhR$Gnq92rC+FQ!Kmyzj>lh*xgod!+7OYgIp@+QYKTdfY zA!eejT{R&xqZ_SNAC?i}T%!p>9QjV=?u(=eu--@4jp*9{0NiRD?w3Zuzcm6{a|XKY zqe~h#hW2U}*5l6~75JvjdT4@IS#7stU9kfN6Fa&4{tN|5E8PZ!;Ez;^>CnVif${@? zlaztyrR5XQLO~a*UwSRS&sy~hE{=x#v=PnNZG(x+5n;bNf_oetTiQ+cWyb>)Z=q)^ zd77~z-$fRZWIyNVB;INM3DNdRFmb<;0F(^dB;X6)VxJrytguh!20xb z8e;`~$uSscw^6WaK&p&a;%6qcDJ?Yx+h$U~oR*q`rQKeZOq()Z$tl>+o78b>sVUe` zn$+QGsVP{?q`rpEqhzI=*DDja$E_=M1Lijy8x4rxXnaQP3E4!=$lRSXOg+6F}lh`lU~|^ zb}&-yErFGND8HocJ}WvA9mIlIja-@ZSP+Q_BZ#z=g$6cTyUJx1Y_e7@keE%XVKXeo z>$PORHX`vSi1s)h-zH?!rtG*l7eGU@;@SfaLXb%ym8bHrA%RDX$XE#gsoq4oJqV=Y zz5{#kR)k1o4-OB0!5+*FUP-iHy9|x?$k;8W!V{R6L8;8R+BqfXwI=5?XU&;!a&9Jb^jWo-F*@=|+p-TOS%-64+#kt3LO4$Yju5@OuP-xUc>h zeO7fFtX)&&P1$;DRb0oYhV`1v#+D8ezu$%+lKrQ1D7$Gr$YofNI}p+2vIFtNY>ILO zvtL64D6@%BC?lACmjrylZxgE_&&j20)eWjHf(ek>xzp6~4U{z)2-_$-Gs7a2q4rD} zZZsJ#KU0QJnGCsS%J3nR;S~(;Y1?oJ?o&7rU1!Shgvszzok8i2lmymWk#8X?vqzpk zr^S*I!BlwI7%|1nO;72>5GKB9QYzC^1P|*?N^yFMAmL|C%DL$&f`Ow=%29M&HJBC% z`sJ9E7t&J%_Y!aGG3Z2!9SGy9G29Y}^r3O=X7pkVox2=q*I|Oao7&Kf!wR z1?pz7CvDbEXY)3r7EW0a{*f1rFn}g@sQ~Ox_oIoO!44J&r6hy#KS7a6Cd|E!luGk9 zt&#u(DTvYy`vMwf^yTSa751^uqTcB*Oa=tnB9YKwMSM!tr5IynHfaM58qL z)r_xM8DG^IUz0PwuFUuvo$+;U`d0{?Z;!gQ%sk4$v2~<-*$9YXJ0O>UN%DN2nBYJ< zG?M2KK7gLAav?%_(Sgm3P!BJ@DN+qWkrG1fn0;3SXE@QH*++438=QHn0;-T?m#k+)z-5g1{P_fh}`p_ksP7Wq4%pIp)%yh7FILl$%% zT+l*~5S|(Rpj7{c`+ZRW`-_xh_HHy zt^lQ!Kmeoa%TVl9w1hL=Upmzf@df>Ne*{7Je?~0sGZz)B$^unhJoa!&w-xC@k+{f{ zNroUkasuC=FOj2+uPGq!eGumb)&gJczM_4YRGxMdKYaw6D&nE}8$rk@t9|!#x}kYr z3-va?Go5N{c3-D6y~uv)1~`VmEI$Gk}4h?Z0Az|?{JJ)I(+D_Acd96St^~%XuePc^&{lR>}BDObpUP-O?{~cWfl=+af432#;-_d-0 zXiPKsHngK!v!tOXW`7sgq}?lMCkCUr4-&9^1}T2zFPDp_2R5e->m}6F-71;wu7x6H zH|KF2xeuUHp~rs(2Zf6ikB&ig;|a##XxY#S4_k)6eHHsZ#F*UnKEuV;)R+Azw|zW; z1eRi~pTG~tB^$qTSb7T4a#;GM1i;tY67U7T!o$)HJS=?}72|+F+MKw@6u%$K7|-3{ z#axAuc)cXvZW6bp60z_j*GeMgt8Ca0Qi-WzZ!n2Xsl-&Vmzl(Qsl-&V!%gDnQi-Wz z6L0D|Kb}eq?SMTOE3yZjNo)C|CgcBNTzGR3xrlh5*kGbxWi*SmIvIVZiKec!6mpI1 z>Pt;DNrZ}ABm4P$6SrQ+$xc4g#C7O6*~70lam#d^?A}+JxCMx_13UaJ@jld!JKT~$ zpB25Hn-G>6ebslmJIN^C4&oSn86j0!Us_R*=L`~_R$4L5iavp`%Ls43#C{CJ6;Hz0 zJKoltOHw?j;Y9<~{SJ`ED;RqaO-OJK`w$O9?8`8eRQZ6SRCQszT9km!G3EmfI2BlU zy{e}899e|!N>r!Sd13s_?I(LI+opEDh}%o_$7$VwzwQG}1Vu6Fo$RSe?_zpA(^m*4 zo&N^2_Nplbkxn>=z!3sWqM;_yhmg;G5E0x^WR2G`?+kxwy+3$i`hLOneoaZeUhg2@ zZWTwXu2+|Y(ph%&t1R!!C=U-rPm(EOhavSmw3^ zG*jM9ZeSW%0m%N%oql`ZIo#MNKh(hs-H&3;g1AJ`U-aIQ`^CM%395ytRN8U^f8!N} zOborKW|TvB{Drv0GRn)3@#nR-lxan}FkOaTwd4bjs8IV=#3}Bo3st3mu)I)qzIkb3 zSV2g}*QSMG|2-KG>+s1iti~t9g(jSX4RKHC$Ep5%?X#l7KIt}2ATgqDe|O;dtbt21 z=&R9p*9w|y7smkXK|)oRlOIv791et@x0e@Yhn^1adWfSC>Ipxp1CNGx^-IiFctS?L z5is_G8P5$jJ(m@HKvhpFt(g@1fydBbXZcp17`$oImY+FL_h7)7-HH%VrI_Yoj4oG5 z%>Ea=!DrBPGDgtev0FgXt0xSDZJFu`bT|&WAG1pz1AYjj1o5#n%-a`?##7?+gu?=a zi!*PhV2M)Kr3RYik3&A-&~wfa=Up!+e*Nq$etrBU6uRbJE-V61s^$P;oZ02UeBo*q zIF$uv+fi*CTc?$OwV8HD2A4M*wbRsjCC^)t9Y`bB^FPe9f|ywnw<32kmh*hbrCx%b zK99Z#)?&nm5yb>eIi_!8=P#8ca0Uo#v_KYI;6!gig!>}?gqxnv0!xOWMu%7Y7nP-_ z$<~NfxR+2hKmsdDv0Ldbw#JI?BkXiU==pP`kwB|#x03+!>0}SQ;jJ%EzorbeB+z*3 z*GyBBon9zVjCCin%nbRzdQ{dUj?U*JO&Sm!P>cAy;lj{MO7zlHc_WkwRBI=SgTIc_ z`bMzKcL?V04eg5APd%DK0?ZI{rMLpVDgYJ+mQ&GS`0@_!?ZTvfJiK&#RxpfN!%Z9b zGKw`@8hxGk(GSGAenT&y8|(n*BhZf?q$b3yf1p-UWuZT~nCNw;0Od~WEASC%o8 zM$fyM9Y~vKg2@t?PUR5HTnHAAEU-UbDGKrN%6xKrWRmfk6j-T!gn&^V1$SS1hr-r$ zALpgvfb%pwb|QWx^B#=DT_@|P#OT1NQxQ0697W#WW2d;^Jb)>7>I+gX5#0BHN6=dN zD{#!y?*l!bE7qFolJxv}T*cGTixv5Iv?oRXknQ>Iz#p^P1CI@y$M-Qwe9Ac;KCP40 zhS!rx4v8c#;eUIb+qZL#@y>SKDUm z4m<_w_!#i#E9?MsS&`WYhMS(u3XTdlJ%t)*)`46~SQY^?tic}F9e6C;r93~K-iMq1 zn1zR8Lj5!i!_tq-jte)7dPt+&0AzQ~6;cojyb8?8iv?c8k3N>-Qt?ke%0mNQ%L<_Z zucB?dQ%8MS?qLM*a@XK|^fGpr>nn7HJAe(SgNrMat9_Ivmlqq!`3@Qf z=HddgO+e)^av7qWJs6JxtN@54cd%71Z-Ia|x_V^mG;Hl2_1iy!lUG8d9<(G{>uiR{a>`vC|5*g%Py@DpYUq($s*MqlTQPVSt{4hXl7Swn)4m(@uIUxsc zkoj)d@qt<~7Of}=G;uDJ6PEl{35x|{`fO>K z%O>=MDhD4E>hgTr)ik2veu(2_3w`fc4kS#$pW`rw75?Kr=(2yfDW?s#=Mb7nA#U^k{3=5Qa!<|k@xQw~y zE{wLp>K5w*B7ne8^CsfYpF>Un1^kl5b>KQM-JVy*``eJ1$>Egudnbg8-^0_j5%_|H zu%GI6Se1hvbGeJyd%uatsX=+vc`7=f2sHHdAPyL(fX^a0GAycBcJ{a5rw~+$9rBoKPZq-MAqtk4S6x& zOdtsLfA3g{;f|GI`9l~hK1>U=57YLBcYv~qq!K6-%WhnwDEYC6QpSzVALHf>?@z=~~e{_L7F5b!j|505X)g*$ljxOc$p2Qc4`9iuq2?2qEt%PT1y~3(cj9K zAS!$0I|sRdl{8Na`79E-pD4TGEX{lTc6OrfEVcup{wJw!xlwYA(*2H{*%@VD3yQ ziQ<34Qn~5DLc#D0aJG8CI&x75+6yhb_siAyZAz5Jo68nXA|}Yx>op0z+(viLjSb& zL}d!PD4}>3{e}t8?!aE04xYf-;qh!I(4|+cT2hAFVaw&{2)=UvS&9Rq7$XiIwj2F9 zq1Q=lUxFUkb~9n*zF;_B9V7JqJbcO#kDemdkxYdPjVpk zuYkU{73oI>^gcRTtYTYHad2CX*PRDMvvWGmpbEGx>x2y_o9yOJ#JCd)TEb07W8CNeY{^uL|Go zrbXI76o#91p-DkNU%|<#tI4w2#N}V znuKf;D1q<@_LkJkFdsbLPyMGiPpQDncZ?K5E~EK);1kHUiPp zL^B~O*AR&h;}m{Rq`@YHNQ-Pmi%fWQ!Iazvq;OZ1g*iBh(mfz?P#GlOwy7g;@FO&o z8BjX)(F97LVk$OZXDUjMbQsmcwE zlg`1OlqQ##JoYeIvO_Pji=E;B=G(Fj*|2PkAlg1#ic9|%xks?L)$S_4>7T5kpkT&qBi0-JX&LWJqfj};GOsjm0oe78!nhTX;NK8wdWBqQ07J7GH+vz?5?k%!Ab&v!<$QkDk* zJ+f(gN80-hY46z5N=g6AwD)0Y@28}_ACvkX47vBuF-7|#lgI%RGxM2zgDwdcV=zj9 z2@zTbwI@`#@FO;A2ya7xHh3mQ=iu6A|3jGTpGdUVg-Ktet7s+Gs{OS-zVKl#X(RV62>}Z)+bb*1!1?k5Gz7sF9eSkppT|B;V&hC zjkGT8=$eHvkwOK3rVUzfElO8gXe)xX_G5^XEIXh%5=*taUH!xJc(o{k=Pq%61xd_1 z`EFJ%ltZIf&k!Ct76{q0b$l*F?Qjk2@y{LVulGepN_d5?5NA{L`^{+9TsDiCqgV_E65A6JusQ*(|k?=?olEbjJvCc=ia+RuhK>92P*T-UI) zucE<)QGdOCBQrp!J!rwCiItL^d4PtL&E2fsvj3+#SGcBVx4&q>LV4HA$zRkiz%vZee znK$NO2jw9MTb00(* zb||%MW2!_go6+AIc#e+me#Ig(w}l!g49tbhUsKm!i)kW+f`03&C2+NCTsN`?)vPvn z0PPZ6r!j9;U3+jS78B2N)!>V$v8SdO|0bOL^P*kKx5R@8Hv1oh>2vD(iu^p>pXp{6 zU{9b=@C)2PlbqZ>G$+?;gJ8}~(VCTkmpNd9&BnBWS+LgQe$T~O@aKtx-q^7VEdwe= zIGrsapz587Y-lv%ppKZWE$3;t>BB0f2jMOt*EGJk1PTQ3B?l2e9D)fIR($GtT-?*s zZeqZ<^{t@?d==CBKZ6?rzySN3$B;|$h+NDfS&1t2#?Y}yuJ*;gA=j!|PQzIkLEl}+ zR=~Rg*AmMCB{O0qvMiJuyaFM`Nm+ROt#e5)%Xyxq@>;mKSxtj9{>sRak{ z@}jVGs|w@7LZqQh0}SX02$n}6HehQ0kPh@HR#6+R9D=^evM&Wxsq!*8D_p*S^#r|a zk%InB*+!E|FW$@8+tD{?6Jx^0C6Gqw=(#=*`1~E79vH-YUh3fSEWyXA6jv~HVHsJR z&&9oOP83-QP1ZDcB94zY_WFEx1z8-XikbO``@+}q1QHq`OC-+l}AxRJNz(Sec+%*AFzT z%jPgc4+B}azbe{HlKq4q6f$57xq(KFej*?R-@&)dV7=fQPNZ|A!R>MNy#R1BBLDdTxz(qjvt5y*m?L8n(-heXyp)Llb($azK8tvRTv||O%BhE1~%rAjIIRH3?r)%Z z(Kqe>1U$H@r4d-8iYIV-^zU|8A`WT(LX$W&6pYJh8+E(7eG91GwckJiFgW`ZS*Y;= zU4?LhhIB1X*{bm77>uFZNWnPg9-y?8%Tp_1C za2Fv?d5FEJ2@ewGgK>QU85s6mI?6ehkiA{HJp=%p^^&unb|Xe&obg!f3EC(4DK6wf z?8aP`z6E`x2cBl3u*t{l0$)C=wXF-5B0rw~GkTc1teuZz953&xUf>I>UIbs}pr{y18;4cp|VpvxAh-0xC?1DxH2C;_e0 zJH-G4O>-rEHHc!7lyZz$8moNVnJPwgK1oHt%khxetS4)*RL4QuD|TV zgLnPil4>kGC7`T4cX`rgl(Y9@H#)B+W95h?I_lQ~GKE4oxlm&&VK{U7_i#C_u;m!n zo(S2@Y7pLIkoUm99A2^Yf!pOQ<0fq8L}3o--<;$>#?u&uYDtj~B(&WfzmU)Yo~o5? zD1yU0$$SPeVG8p(?^eZ7Fo&$DN7;}|BLk?`lg?yyY-2uWbFU&5!1xjQW-GQTG4L$& zA+dT`3-hZe{Gl92@G^qQ{wRWC&1~S9ZIgYtY&)}yVtcon9^iDtsd$YDH0mfnt_n=HLk zqI5fiqEh4+VI=0=Yo$_OL?lA?UO}(;?wb@jB@Hiri?M}OwR=zjE;R?~jy!BElJJ%! znJC)y5L%&`+Q(y5ldHr5Vw;3XIv>d?HHFS66ELGeO=lT_Nmg?Qt3e~%OlM+ornyt# zA|ij3*S-Y8U)#|V`6q@sQrJ)9GlmSLLExti$fQ%CE}qLO!6&M{HiQz&qRHzo5{`Oh z?Lt&w>NG>5!9}n3e+VqbVUj5`>M|jDVdKue`O_G~5Oyf|7$Wk(38ne!W-_1cFpqf& z0W4>+BV4teaJfJx7jZf+enFM$2>UlZ_e@ex7DRSO-Q8M0n(Q~B?)zLfS*Fkya2-$?D44-Y=|e)_eVdLhJs`UR_JA+zS3OY=4q*p}Yabwgmbh2J;M#IFmQH>Ms6G^e%;&8njuXzZD&DoM0I z06_a+RE^~0co5i?mq_JI0Fqt+<$|6GD60FyOPMffi9P>ARa7@OVbZdP-7pPlp(%O| zQ%(5t2_0E0*a}KbU%F&=REFs zC(Lh7`2YGhN`U9r0bZW5DZ$k;Z~y>F1DZ$RY&Qki`1l+dH<)0v+7jJieC?{28Y4F`$j{L`Aic485YdWTq zd=XjEz_|!qOXtIS+?uljAVss3zV4E5)&Lf$KKJ6v)GZrni7uW5ec^71A2x@G_C?@2 zqSfgVDEL()XhOj*iNGpeID{O8=kViwcu;>DQ_En%X7i;4ZSqAvU@+0HdZ^No3VZUp z4`wj}ehyS0>~Q*EhtmgZ-F*-|9746=U(R313DE)zdlOw~&z>!G969&t&VOo~{F?GsI+XV?$^sGskUR2~vs5ysai=S z;3O^)087L~;~So2<5yC}rwH&)MnJ=+8jlNK#8MZ|el!8DOlf>))4!6957xmSkbNFH zKuPgJPfq)$vVGTU^}sz63q`*ohkUz;4d+nN$-{r3unT8Hwd}R~`BL4FI|K6=RK)lG zp9$n9tY9^5zRU<5AXC)1-J!e!#U5^~Ik#f>7qg{7Vt-foj_`v)me0YXx^iUyb>f zFfv+I9}O;Q$uVct-{4=;Gb?6J$^EVwRkgxU1UgdxV!&Avz%7`0t^Osx7fOP|{7YuN zX8M=T-oyfE$!XRLk6KSB@;JrIH3p0cDZi`jvTAq`;x5c0a{Zdc#L;`;{qaguc zneovN!H3}HB{RskeB!`8dR_qy8EjE?6@0)ui71;GOJ3~I~Rmid)&5mED^Tvd-R+u;UqsBq} z0RtTJUmR0J2M1TUT(85Q6Qwoct##au#8(}&GlOuy>#6g`qOe(ylMC^l)%>l0SvHU2 zFCGK~jea?S4vLFatq`6Qo(SN0xj472z@RyM8GHM}K8Ibwz9osv0I2N8BmUeGL17lI z%!LIMS_DZ2Cdl~76TOAr9hirMzl88#98(DhH~)zc(uKAf$!quy3|Hl4H7DHuQrc%J zP+ZFl5~f8ZdrjJhQ$}#4sJ zs>Xz5RM4w0{59`J_v8_;@s1mF;B7|=l#4)<`x%%N*uU_eB;+gIpvm{1;}s>82m@Jc zm*JO!6)7zX%_{T+j_|F91yFFYZ*_R!T(qyQq98Qu zC>7rWctw1^itiDcb+n2<5?~@eSH&M0nstnd|5-}IVF5p+=hV$iGhF9$oMcWQRLQ?v7( zn)o}H>>}BM4VHt=yseDA;GPSN1M_qtIwB9{ap7(1{T(m}wbY3B-6Q0|H0)s+d!T=0 zl&#m?__D?9ttDQ3z;V7qlpnQosh!XAqJ z_0C_-pr+`jTQ(-o_sO_nl;Xc}7IOi1aX047$E7yl`3(W`YBdF!_|*ub--cN z{{W~`)tFM%m{Qf4QfUnE0(fTcI-jg9aoII*$<2dcZLNwc!nTahHgxx3zzngBOMWMz z!Ip7_3JtW3U#n0*%eYR3`dG#dD%8s|expJ~&>N{xPs_MPg$ga>b`>hHj5|~aE?q(@ zghOmH$yml572%DqJyV@+;fw{wGC9vBe5(Fb?Lm{lkhnf@8e^7Lnzt64qsrpM;zewX zSvnlF*biK4VBg)4Ez5chhN~j98uWvgKCqy{PcO3NvR*|PQ26Od2W@4zyI2@Vfzn^) zW0nAMC%}F4e!-FKuXZ^I#CkrTy^C892gUz2>!n2C^(Iv|@On`{i347*R3YHi|DePH zuR|~H#vTJ+r<^Py;MJq@CIOwI0gYdEM*Db8wRaKxRwnTaFXupUX|DuY^UP7aqY|<_ zJFmdR#9~e>FmEl);oGR5S$nf~<9kuoW)r^X`>sbAm@Yz3^wg-I-m4JY6q$P^F#6#l zh0*x)gSlTMi)2>7$t8sbNYBQuA#&fdtPk1$dSlj@ncHc~EE)%gjUzz>Vuy1D0?umv7gXdQR&K}eGr+GDsf%ZN}i`EFXP?x`VNv)DUePtyrISD#Qf-m`+l0YorSVc!kAh%1IMLMNQNWSY7EL5#YQ=eT0b3p)hO<&~Hk z=FOADJ5sCYtRfW_q`s62KIe2^v%|rH)R&S#JQ*>8!otZcE+xS-rv!xssV^nL94CRo zLY%KD39fb$C@jR4ItiM@A9zX$y^sK|>ACw2LQprb+p`dvMvovu-l^l8*MM)W z6~hU~q)HQ>2dayV{hb3x8vFADJ+mfz?NTNvo72Z0Dk+N@H$Z}A44#0X@~^`+6RdJ! zJr0?fr^9hA(U#Va68x6u*&u=NJ|8H*iqKu0;^TK-1M3V}Vkj+C2+{GIBuYjvQcBdt z5+zr#I8h@ds=%G`Oo=LVN1Y&1J>60H5=B-*Eu0kpHSk{$S4)V18Tl60| zoy^QQ4WF9-S319C49WPt6yMM3EZ`o6|1*z2hnh`an0GRqL(PdVQVM#yI+k_Cpym>o z42I63(Th)RML_JeS29*k91)&@9{XY>hhIzIoLy+X8GiaQBv<;nI}oz)JcegIo;UHt z@$APF%NjXmQVDDVM~^J?*o7z~mNl_*yr1`zmt8jU>R3rG;&C@2;>X|v;{Eu*_>pC} zWzQo{gJM}DCYCVL%gBx%o173C5R16WSTww_Af{scNXVKh<_U?JP+1~{mR*LVxn*VJ zJ@x{8aO}O%)LT_kr%Uo%`%n8d>$&wNsfU&xv8>_4hZiC4yrOf@C1B?&&osmxdJb6P zO$GHX`m3a;RE#^^Udj2aC!Fh=HANz97bfHeT$+qsYhEk}F?^exd{on*x_JRd`*06s z;{M0T7R&hSJtU(Ymaz%}Ul|OB{5vSo;J_c`_&QncAUp_DF*ZpGwLIT??>2N8mbQVY zAA-gjoR=4Jo3ou%Jh z7~Q{q|8Z7c1g-Ey_kOnzx4EV!CgN}jpkD3YqYww5EH@E9HQN-B3TYURN+%hu0n+|? z3a$EIPs6Qhf;|M(4U}8Pi|oJ|1rjaj_vhNjI3Jr6A6q^$$9S!VcMxIhD+n0Iz8+S? zZD*j*#rrVqt&7!P8RSBIFzl15xr3WRnq4&S!zq2CaRRDOzwu1 zUfd-4QzG-;4a$M+iS3Lj$V- z&9R}c;Mggcec%=J)|8V>V_k2^l1SoR5yee(q7OzVY_X@E41#sWGemn@(Ku^j_k`rMSXE%`J<4jBYJs-q z%;w+@8%6k0eEngBI2rPI-LrVs@NmxLl*8$zCmuRTq*teN z@KoZVXTMAFaKk5nrw(~$;n!+-82~8ypu|#@d(jqqX&;QJhMD-#(qc6{*%!Z`SPfym zzh^b9NZc{@!X>!rum~ zVJUx2=JINfsrW)Wj=!IT@#@a!H$?`E7sxCa65*Dk|D z3rl(o_&c6A@vtv`z|#Xb<+&f?eKa0A8k~XWemq<&ZN~F4p6~H=g7l&=ul~ofhYv3; zfd|R5{u3s~N^>u$_G8W~%{$iv-%QzK#*XnfLqP#)E0#T|thqE>1y4%`PuIa%_K2EN zoj8^~-alfZ${5SWj9i8a#!hAdxl(Q-iUp-bji^EWxh$$nYTEIBeqg!kL&^B@1pIhvFY)KUpO+e11ehiv0sB*iQ zBMT|xlV8Cf7H&__tAMHk#ZN_jhr1NE(yc$<~`1Uu1 zp2LIJPd$Oo&Ef7$GPRU``Vz0x@cJ3Fu9k7stH;5yMR87@N>_>+)u`z>97G`W5j*#$UqZ>kG$!N{hF{20Gz?hAn;g@^E zzQ}PL+%i4t@>JVoOG-J$xC1GGAU7O+%zUdn3wSLeAox{EOO0o|i%JtH#TGshjOz_# z3*Yo_6+BmMgXq^fzM4AjYfiu{7V{45i&vZTm#b>3uCz~aqyVwc0349Wx?RO>;hpx=SeYiuldA)p zjn4r}t(@aXTQ6aUN@%idzuFk=1l>w&wU>H*`nP~${`O|0g`EXudk*`#P71UCBr-VZ zA5O_)9^q8b3vbz&s6hJD86RG_O@eRPo^XFsq(+Fk|G3WobzRLKUw9#i4MWJcx^{4M ze;786WVY}d2BLiygCjI!kLS7b5ao*;&6HJz%~=B&>5IH4pP5ihcKo@a+QAUju9N}` zn~Sshhi3G^SBa>}4Nc?MPjw+B+4y=SzFs8}xuL22`i%262VZ}NuUEUj(%gXnlz98g zPX~B%@oFbM_)q|k*PD<3dvEIF;qo@z1@J}p9RGJ;cm*;>_d+`AZ0y6{LLX3KbaU@4 z{0-ge3xB1*;+!u-n|o*Dj|JF?4`UIU{ZS77;NvYq?K8HvF*6L9!kIyCV;$5K0@4D# z*ya^kfu3yL3K)U29naMY0^!}cbqzNaeXGkl;7*Sm-|B@q-@kO6$9_zxDuhoMj!J(g zT@d*dK7b@5a%_mW_t?3B9`Y0bXfDmF6%dnV#88wU1_%9II>uMJ|g{d zjv!fXwyQ_>?&;sX_Cn;;!+N!G0H7jCU8&dR8ZwpM;9;)0IA@w&CSQs{Q+UswY9FcJ z6-hmaH=Am!dey!M5KJPL*UH(CNCxJ=I_4Qri$W6JtRQjV@zaLF-Q1Ea`)-t=zCQ~z zwc0-<-a|9K2F>nb4X^@t`fsZA-zvnSVeHUp60sB!(w*00XehGgu#h%6WKE$Cdr~A^ zUh>J-3P}ebc1oT=sl+;@%=-h8eocSm6KXHpppkhhY6JS)Hit*k3hTz@w5-GDBhp)& z)A9%ToZV6MmZ2PysfTYM0Pc*6hrTD|_T^ED2k-dm3`JkRd%^CT1k@pDi`21+& z4hG60?d$PLhY5Xfr4cCk93sIN#<3Rcc;#A+IM#tOk| zy0vH)r}-)R9av)vX`R{zNz4ao6ep1gr&CHzX5byPG4nz$APK& zvGw%RsKMAcTu*CC96Of6$A zK}SbgLV(eTkOF%1nxjW~Y~Eig=XJ8Jb?i8R2Eho#g)N|J(mGuTN+VtJQl6@v#itBB zMd)$fw`i(yO?zLKM|x&?fzYPac|pYojZ45!E3W)lR%z*Z=TSp>p64R01N0R}wcgy|PP2GA*3Kf*-7phX z`}44l9*WxB`kB%UX?h?{QhzDyhkmdQQF0Mf94GU#=IT7`d4V71V{AjPk2K91k#q)F z=By&Q1&BV{U5Mp@KR*V6c~lS^;=j3h;uYAR|J9AZ#%i({t4SxTWqdKCJ9dqBvge@B zY?+XX56a&S=XC~?8Cwu(vW$}^fJs2U#9pM(CY&#G$oTWIONn}aiF(nstyGEb99o*^ zn|D5l12NcruH=|N8{YP-Lv)(*;w5?kdbhhk-VYcn9kJ=E$+k(#k>K za)aq(4!CQFeBT;rs-^Ge_{9iwyS6!AijZj$5$3plaE+@qqT{@lMSp=D z@>YU6fCvkZ}d>x@vPtun6m&{Vtgx*V@2LZBCBEa zbj+64I|#=j+wfmFNQ7P~F*)+TwHg0gZcq?4ORgewHq~S%S(z;P@GEv8U;8fXxX0Ix zY)rC69n)Xjk;)>CX3q3pvrzy91}XudDfPC>|6vtnGtPjogHFNukV{yOTm+*s2~fz? zS}@Af@?>H-D*7`MjXs=ZN)1?FW_J-6BpRQvG6ao}%S-8u1pTJ#f5}|n(3n>%T~yC; z%FT)joU_JHvHBUReoj+Ar>LJ^>gVU`=ScYpZcc}H0p~>Aq3{Qep@ctAk?ToYjRrLpV>j(?i%Yfd^onSD!k**9&=NyA~!Jp*VkMftDp+DqAM7g zxN&yIr#YtD*w={$ar1+t0nTtjy zS@%o6UdWeh>IEamps5w-Vz29H3^BL9$=KBgT}ERa=-`6|qNdM>DX!u{W_hK1FqxA^ zM_#Y(E0a>?9xyx_pm0}*n?+jFe(w>Sq7;4TkLVg@@NF-~$JG4-m%n%TKgNKpdXM^x z9ct9gKbu3Qf@2kq1%wbMgV|m+MF|s$C=>2e+)216#+k&)(zb{j+ZHiAwFv)?)b}<} z1ltrb86FJIH>c#eapo%I&7THqX2vovK3JJ)a5{6b=))SU(cL|RzJ+mzNDb*|P%@z# zO~u%dDR+SkBd@gb;WuXJlrrDEtHD-LURq)iGE)o0b(t`#N$H)mB3a)2%R!iSHx$~2 zK4$Oghgkp%PEC`wl{_i_9Qko0)f85QHXm5S@qc6|{yX$%PQetNx6JDc--*=AaCl%E ze!&yKjBcZ6pztidLyC5$gG+;&vXpTqgpg(*IAd3u?LNh{W4sIsYvFaQ!SRqWSua@Z z7N(Rp7Y}9GLbv1duCAve3tt5OAzEi|Vw+@Uqmc+?Fv9eq&1H(f(@$*Ll?AV?^g#7z zi7lDels1AX$4{0T*<#4TgaS0r_!ALtU)f$!C_oY;;g4MbGCURf!W5EVWSR&jTJ<%P zBw97VWAiqlj3BzoeT{*Om=PPCteG|MU`l{+vD73#V&C7)gLE@Nx zV{j_Q7vUlg@({(JyLR9UyDYLnk`QN=mGmK1JQ`+7C?8&4KLh93?v{_`){rnQLAcS4 z#Nf7xjn(luIY#oxSGRvXj#OFLT)GW&yRiiSePvt4p;Tl#!3b`L;=Jxb24N5ep+gI; zploPepGSJqc>KP@AwBGEvq7olzfnX<%d_;a;W*n7p9+H zV;?*sb1T)@ccm}X2pA^L=ZoQI!HmQ_9)bdu#;z1g>V6Pz<+ zs%o0)B=td*;yEf6*@wg zX6Lskxi|i=E*Pp~g{yV$ik1xqvd{p_B5UPESRISbE`q!%#aYWyRQwEO=cyl zL%qW!t8Oa}lWJjAkGG_KsG>(KRTQiBMe5MJmJiIyFwFBzf72Jf4h}{jL?3Ax|Nj06 zY@k02yuxP@_R#+g%&R^01zj-bAYA}<+?9AH;JFmfb$E6o{(C$f5$=YkC!Uk=oQCHd zJd5z{Q9MuLc^1zmJg?$;7tg17%!<*fr*zMy_1DW9jqx)(C;F=|`b(uo$EU4(oc=im z$%&_a_{Fr;u?tY2z?L&J+5hCos3=3HqmOig$R>s>MhoR&ezd~uKRH$a`uVd1&mVFV z@I1g~L?juy`8j;ZkvHhLi~3N>Bnh#{(Q zKwUCbVz7SJ3E(#pW>dh?qI&!j#tXRSD%PQ@G`p1>O@%|>^jWh(9y!?b`_?yR9jntI z&_f2xE>JZ}-J)8Oy4CU^ew)Q69B4y+p0s+#_7^T>9+>eZ~T^1g5JubpRFMf zWe@>e(cm;6xPvB255O^7%?R@YnYoFkiD!_(1VcJg6Ps?(K#6A!W+RI=))z*tg)CyT z>dDe*V?AFRYw>^RIInLWH68%RQqU!U;`jd&sE0aa2I}{WmugLcMfGnfVG|&u76Bew z?e)!not-O0s0b3>z=6`YOLOFN=?2ba=+H{3DvWG;q@w)^A=A!+!sd=Pf)R z|A2a4)bCQ$wu|!t; z8u+(i#V;Z%8hM-OpNzu=zWEn=f$3)K-L85Wk{&m{6XIW5v8dC5J! zsK)a}EViwYQV#~YxC$h@tf*9diHYU`hbYcrVX87hjxx?mRHiA5i_FBF)(TG&meC#A zZEiN;`so}5w@C1Y~H!zkv&N%e*1A??NhHb@}2+on< zaV&Sb1P3#Civ))=$dxfpS+RtRBzOrcu9jeLCh$ve1Y>#W1WpbymZ!g={$Ok`2|j!_ zN|5~^?*OxFl~+mPiNY_kWww?YqXX)x z!oBal$N~l(2t6sn z5PDLCA@rmOLpo3qhLC_F3?TtU7(xPyFr?o}7`T4rOHes>OEyF!>=2a%92a5^Kg1YEeO0>tB4Q7iUg{!Pvr4&>C53Q)2Il^pY z;oK@Bp9m~dq?Nw3)7?=fTv|{q6qsMFpZ?3J>?cP7fm=^&qYrm z@CKgu@qCKs3q1e9^CO-P5O@#A(*w`X@%$3cBs^E(xe?D4Ja^);@GQd98&7{cXW%Ku zqqt^bVC1I^jEgw1K1Mqg9ksj->s$1D%T_hIS~jb}*#ZHD-O{oKmcSU6Eh{X8MA5QL zahR4RmO*l8S%kBJ-~lc5IJe1i>Tq;~=|XzE2Zc_Bw62$+kjrHf6mp^00nL7R$&O|} z=Son>`*aBkdDGlSllRXhDD3A51XJ|Q!V=Q@P0OH~fw%lH(qo@RzMd(q8kOGo-sbd1`pa|PA)U0bhF@2y(R_VU&Vj58%_#$(6I_*>ZLE z*wHwgF{`-+0`dyhn5K}>RQvV!Xi<1CA(ANyZ0pOPb5BX~r0yw^UnVEHXOREuk4b(U#U8Aj}J@F2q#UocL~}j zk+hD(Vok~vYVpQ@zn3)5iQN!+Ah%UsuxIJBE&yD{te!^(=MZOiBc*Q6FO;%iIq@O6 zpxoHw>&H7!ooa*}$uG`EHfH}Neo4B&@U+YquEYt>vWQd5c;hv4B@SiMiCz_IuEcc0 zmH3&QNb@8P@iHMrf2y8Pn|kha z>S00ddQNiHlcTh%#GTxpWlxpL*y?up_$esXF2;A##94SzN-v6xin`pXI7j#4Q*(rGSRyOY?^qk3Y=`jW6B0j(du*&E%!7TFH)(S4dI;!7x5 zsHSm$Nh(c#y)*gsk8QtRmHZlQ`?cKps_~O7wO`^(Ox~U`HJ&r*Lv5Z zX@TM7Gp~L%(nFIoIc-(!ExT-@ANFzQ*Nhnn^SFsHyGR;-g^(#}AAu2j?XTnxh&8xw zCMWn;v$&Gy3WGScm=Dh{lX;qvMrB*@oUD{{!-d??g6RW1 z3f|&XXDxkmCX+iDm+S&t$6-so|JEI)!5RTh(M-p)66FRM`Yfmhsn8ss+a4x1@9Fd~ z8`r1+Zt;yc5V|ZmUV1*(?8aVPOLL6`3Vh+)C4fV~4@ki03on-djtbuY%|_Jub~pbM_zmB3-X@COpe16@i0raRwA0NZ6b&`neZj--Th!ERuEFAeC=qrAZW zMZ?9?D9GROJb|6nQm+^Ybc@0(%Tme9WVR=(fo_!~I6707GVFR(n_7C8PnrQT49MGPC-o|Z29-b;G;Xgq|qE`&sN3i?*Z z(kE#jMg))eLQ~d=(Wi;|>!X6~5c^9Jam*kotHW;zcNX#OOiF{1*B7;ZO2`!?jWv-$7dm)cpqH~iwYh0#pezi7%6EN==e7f&$Kmwd!~+Cuj3|EdhF|U+@GCv z6Fl}L9e2NuE4{#Dm+H8PlMZzc&~djQPVxECQumQM{sJfMXpfzZxa4`+i+R`whXMOI z(<5fof;vAOMC8}iG@F&Mwm2^|qn8I~&d3|#^`et>Cnm>JgwDzLbG^auOrjo z8Y4Ogz-)zng`kmX=ID=v!u?N2AUSgwU%rpEGLCB2H0kAQ{1%(DMH9|WS-6G`Lz=St z&4|PaAD-!@4jhMk_<_qqCEK41m-}c`v*`mv%|{R7dm$oXD)~;l!evKdce{1mRVZKP zCluZtg&UhL7F|Vxe_Q^SqZ{CGPV+1VkG2FfY2`6l! zD?>9r02ypV$TGYzmV`C7e}`6SaLU5y-t-yR+v<)uTG=PMr=`F(U;0*;W|bm7e|W#( z*L-Qt9)S1Y?$C@6K{zz`Q4_1fR#tZn?duPF;?TZRls$2W(7vMJ)#WXpD*lP{o58bT z=L7@yV`=V$lVp?wbGAe1;F(^{9L(x{r z*5RFfbN<2L7??tJi@su&B5KNI<-XNNs^CQ5>T%iDE!pY~@#Au=TXNLf5WIOUT-YL+ zPR3gY>y{4c4QFu2b+m5jsNTBbt&??2CwaSlL1_Pgz=h%0qhAFs#$Dv0As~dndAxqY zf_C@JP;E8>*@6C{T3oeLnS*ntwO$0gfn!3o9T4acI3iTr5rK|@&Y{{)2y_ZQGxV$5 ze9avPG?!<=ca-2~qi=Oq^wqxKS>sxb&pHj=Q&*CG>-&+`z$BwJD^PBp7e;FbxaDf?80g|#UDArvq}I3tzSY?Xj5>s$p?hvMR5J8Fas!#A2kNr%|Hryg z*p!w2P*;lLO24lw{SiO=>q>vX&%V0S?~TuMhwiy;qxhLfwZ|3*w>aL1k&V&q?+Jg9 zINpq-zrNM4<65AYUk;GN{SS<;>1qT=Q(%KVxR;4MTWlM%i@Q8$eDI8v=7uOt)(adI zSS_HQo@$5`)zy3eDWlH+KJ^E)#&MJcZcroSei%huh1Uu@Ma9$92_)a@eD!|4H7=Vb)f^!*1TL^jaQ!wT^a!c6V8<^h^dLFQD(Rq7=y7tQ zHLjydp@&KjtE7`kp+*a?83m9WF;|9PhaiYk>;mQg(y$p;wez-e^ck>%Bi4zbL#6`` zxpA!GkavPhBaz0hMtvS!4LGc5*~jFKS0`&TE7wqZ3pZ(WK7`9;P74!8px za0fWx4sgI7;D9^uKOAr<+IOd)Q;dvJbm)IO>QKUM8|-Wpq2&d5nB#m-r&l<{P>Ay* z9CdIVfS;l|{~oL4drs>2;tmV9*L;L6ks8y$)BE%5&_97kIc=LjJX-r;c{^}P#Vm~cZprPiD^ zy$!VLDsK*2>*>)iKw3*XN$DIzk|9kU0B1Z(lvvo}yfTOPTRS-46p%1JWw53IYtH-` zkSB(x$`iP(H_|i{p0!v}^g!|;prcRa1zI!VL|KZxA7$nEQI@A)5d}N5d^*lLnUmX` zkOGJ>paiZH@{kbe0qS?0BZC6n0F=nFTC;QL{hGz7H1aJ!0wYVN>M0ZcBNO8-Dj!4lPB1Jc6 zy{Gw8TX}+x9em+8672Ng@!L28Ix(oXMKH2-izd*H|@O_acbYR@*> zO<{7r@c&|R_TBk=sg=|D|A19+f^NCkCGY(&3N1e4-=L<1;L=kD5^UGokV^UcSX%MO zqB=i8f1kxv|0$hqH4Jz zNp|QY-P=#HQzt2JKS^9CIlTQOyL6Jf+fTAvC%LcvB;V*0Di0tD*C60o;N9DlB=R;{ z)w`Uq{NIFzTm(md-MGpL~!)ZHdJ0d$E()8~}GIjQY3A?xw?zV}MdYIJ^S@^i^ zJ!aT08OU!L_YUHe@(p?{p1!MrgkDUh{|9^_|4!y#DEW6HfAIQb>`aN>f!M%8mN>^% z;toWx_V@*oh*bxp&bW8OjH4wpPrF?QFFqDj2~>u|iDvmU8~QwhNF zIR5~%=q^;F`@#*hU{kZq>3|Hg%t4g%_BNCvXfyWq_Juo1wZ}`fCjkm*Y<+kBLaN1` z4qZeMeX=k7CIXmXq+Fba_g*#P+Uub7zws(8n~U@4gis%P+?dqQL5RmJ-HcsA2prXI zMr=&TJ1~@_P3R|rx*;QQ!&Z4B_yO~B=)8*p&I~&F9rRiiXXD%fXn|bMs3*M>_{jx> zZeM>W;Mu-Ad1l$ziv{5%w9nXksxKn`t}ANkqo87X4(^E(OY(1v)ry?1hp;QX=4}{v z{n44PjJ?OO3Ihl1)%KxKDDT!P$K zKPJ3YEDT&iq?$_yV|{6CWP`YbNoN1#tyEkk&f7wsNkhjg4my-L^muB{)cU?Wo%Oxt zu1}HVZOCO`20R&iPryM&!CWt2I!K4+_K}@Qb zRybg(3XVVpXk#Aep5IeTifuqiA4vhVa;b;z=?|SU6i#1x6F|~l!7`r17u_^aCPbs$ z5RfYZA`rxTLCPo_j(H?YMJga3W&u;v0L>~%A*bt*#tmo+IUGwshqMKBrvs?!gWjyC z8Eu8qT5Ea7!>?V=Y;NuVT=5)&(FE-n2UQ!7c5t&HV@!6?bC;pk4UpQAnEn&t zud`J7>nzp&I^jR@+~!gkVlPgnsu_b+W&U!ySENhf+5FUodRiRF6^3qj1CUQ<%1#Qs zfED9IW*7P?iSSIU*@>}e2kBiG!Lna<~?n zQ{n~VFBkA21KG(%yd{`D9DjEkA{D0N3@YLO5|8~Lm=RJRjG;xYVguBv(*Ljp?J>3! zD9Sf7b?EGiaBb1idSKt4tZ@MBZ?h033=n#TJ?63X_LKuUzZRbnqZ)WczixrtqAAyE9#KCou+fZV2 z>EJ8{EOkVaytDUj0c^fGrQqr~KzIgT^uF4Cu%E5{8T^J~G_2RpzFr>B@{=)-_V9Qn z;$gTJzn9{M20kxhj=LCBDWA)6HsCsx+OIRtuA!{%NXy?}_J!Ro(m8Pq^I=)g7I~K9 zVZN_VNG|`4f|LNLW7^fc<9OpEvY#6!uC?hC>Rl=I5_l0Y*ZN zCj~OKIRr+6K`tAy!3(&}q7IzxgI~suMRlE3mwl; z#54GwMgS;gd^ z*+wjzEFCbo>kpuQRRTFSFqRQdUp|Er6jqK!*;%`jnkQ+annAqr_&<^r$9!{n-=w_( zje~N~dRl0KD27wAjJ2GS;lv)QJ9Y++ z%%W!a{sae)!;U%Ys3y3Eq%|gK0);AeIQ%Lu zB2i3)0D>}TTAL!^^?whjGTE~9$rTp5%!pIFz?3-l!N5t)T=XP>orHanHIdh0wDK%^ zsWp&ej+!26dQOL{r=tX1!Zd_!h1_SZl2U;ObDaPNz)?O57VY8omw7b_7cAu@8<20^8NxezlP%-eV?Qd!wm2;( zslZ&voYoxiUdUX~Po;vb4X7_eW;3``It$zDSiI+$=rOv7Of3R;$Z8NMapl9d+CfDl zkqDy(ZKljuu*h;%gJT(&D&kSc7&u@Qu{^Z}6%{!H?;>Htu)^qPnIcxR0dmWixXx#>0jd4iKhCRb3awVpz2k6mh+f3zuH3fM=# zL3KDWgXG}a`7rka2gWHGW{0eKCcm!Yn`!(8tc^pRTLzQ8%JmM;5`1-z9`6eL-J1bE zE&>t!7&2&qTIE|Zt-H81QgF?93)Knd60+pTOwLDxdnqP`=6K^H9!1I6QE^5A=pvKn zMMg_)$zqUO&8_kC{)F1p;s%aD=|%=`Xvyb8bxYJ7dLmo$49!DfOrhA1a2|2{=Hfh> z8nBDu?zBgdU&z2vP>~6O7JjNlao?lR5f1XutrY{xD%~ z!_QKU8a}*iEcAlam%;g3aqgs&(KH4wqYt*uk{H57=f8+x`BS1m2Q-B60p=pY zieK47WE)5(_{HK0*!JfeO=>BcsTCi*%T`Rt+=>r3p%phn$pmXC%M^w%5e&iF%3(no z)Dj&orzGo9)6R|m)ahjyN&1&{dZq%*&P;LIL&Q(MY+C|cN3_sBiy4y`Kp{z_h>0Jx zXhB;bAYaiH;zg;0UuijN%S;3NF)_LmvzF+p%>+`&Ce$9~ThDL;i$90_8uf_^WtP)M zP>=v*(s8Tm?oxRQao~~lkgrnrWI3oYR}raj!J~RYX(AQvT(A+n@Hvj)rZKZkET}zZ z_OI7;`Xn=Ja;0}Mv*iyUWm{&3j>*swN_j(<((Yamy=+7J;~S_L&g+nN#emn6uKmnk_TM zcS^Yo$;158gs51}~7oPe3coOw9i z@Ou)jz{g3GNioT|=48bZ7c`+cC#dGAhGY;Jl8m|sN(Eq{nL*ghKZSLA+T6;9{kJST z3-dO6Qwu~yKL{V5HpLfVuDy~I;UP^Ub6yeXG)!y=$HPHjvRAg1t5zyX#I{Zf!%%Wn zZ`MHO=oE}GM_B?6-5Dc1OU3xtLQ=*~O0F;RCG;g&-6=ka3~Kf)8lr@wxbH=nMadlO z9u`uRFut`J29#pzu_X#~=s4(&3ApZGFgj#%_FSHXiHCjOzwtGxozSa`lsRI^`)FKJ zD#fHf&gle~RI2FaLYCR`B{D#kOB5?3I2CV7ihF;NK*~AWtoEu(+6ufiqT6m=hob9Q zw5qBns)GJw%-CvdQZO28K6ulX!TEtBVXC#nCT6YCP`M<`;CWTDCB zn`InErbB=&0UdpbflkwCDvCZ>i&owQH}%O;0YZtcTSCZ43YkQT8(w1iHqvp%3B{P{ zE#RrT=|!}OArEOonR1B-yPKRP<4`&IL85`(ZS2qWh5v+h8vC*9xbIjrI8+BL%jgJa zpMZC3F<@6WnJYi*v%^S$qc-dKL9Z&wrYZMDq@mLPr=&9HP0zFcu_j9>ZVt-LD(+P{ znYS60@#uJWXg*`o;FAaR$LRq!9m22iEE8n;=KmGKT(F)?X+2BP%zo~F;rM;p?`V`^O5Xx^g! zC7jsY{Vok6ED+?BqO8pl^Q+$pxGCAtI1u6z5$`jN?sY1UUScNNu#Qc)7jb$|U2=Qb z%JvvyaZIOAN~s=KdY6>iu>mO$k*P%e3lm7A%*SaHhZHEaCRY%Sd~ z*4&>eWf5u7RX>m`%0#+QxJL&1jn72R_9WB2%rE5pat4gK#nK@tCB45zEEUVg%!*a7 z$^)5H>Jgb#AWq1nf_hR+gq>zz!-Zd}S|FdDld8B&YJzV28$ODJD!sWbkBL(U1GIdQ z@Zv-7LCI}3K^bR=sDDvf&n3EaD@RXTc}5d{W?}WfeVKYLm!L||Eo!fMdhPcD@~2~- z0I8eV(&s0|iSAZ;u=bOBh;Lc@34*wcUPZjxtsFdLM_@w^Mh)TMVj0=T!9R2^9q4P3qx42$co$r z&#@>aWB=eHyY{qZpEpV#tkI;N#CRxXtuh`2Wg-U1`dpeX6688a{`Q!iBxh$Ih>H1D zwTcxe-mWEsG~QkYOBODzBz-`qM|HTK)~!xCd>%WbJ*r6Cf1%}Py;>l!7xa?BzZnYz zeKs9enqv=NZ3{#jZ)UYH@;Cv_$cganASQ99#RRk0%i7rbhFO&ki1#V%I1ZhV2Ko_Z z+p%U!oz`>gXOf3mRgdmcc3&yvP=l$@O$ai`ROY`@_>tjSwYl9+?ZK&2-75rXMptXd z5*rI}R*f-GXj+1K8HCbj=vu;~)pj31e70};7$v0+p&QwF*APn4Bj3=Z($ zn%V^%i!fYa_Pu}w%yriDdKf!1-dvPKzKyXXU?%1w*DQ2?9nx?c{Lr@;^puz~0LNi+ z1vIKdErAXFX+O+mXR1biv_e{2jl2dQB)RQ*$t7@;Ph zGb@E&VVkq`S3^oebxG^N6thtec{a&qhAO7CL66C;GMjT#6{Hg#YmkiV4V z;pR|6Q=FobgE4)R^whbE9NgJtnyOmbE+hILVhKn{uV4jw;%*(=ZNJIMKC!6h7$;l9 zd26*or;JnMw&MtZ-9umXsTTX4FFgKfi2evxQZ1}kR$QWR!}n($vN4l1WdUPm=z z$|CAWnCgi6igJ;jzW3PoarEnR@1Q{NwxmXdEH%Naphw|0W0Fc%Kl5L=Bhx6K{{o4v z&8Da#xcX%P?05opNQ8TW0!e9RxId3G;mULgw>^DFbu8H!o1lsx#Ns!+O+=>9bC|rb zJ$im&wN9U;=a4JCi=M-G67V+ktQW25`xKr0GPi_4Q&dM-o6gc9tgZMXB?P`5OhT}j z;E;s1$7Z!_0QQ3LQlrAN?-$- z*za)1;gHB~`AVb|b04#~)+{ctdEY7KMP=rPG38r5Ey$Tax@sa@4&I@+CD@#l`TGhM zfUrpAJax9gV}K9B}S^0?sm1%XDu$S|$%{^V2Xn zBr_&OiqKr4^e-qs)l3>(LC>^F-f-BARL&;7&skXjY?q-GgcaU}5i}AUyOPW+Rp9SQ zFfoL|#`P#xx^mal`1=)-OAYx#ogSsSv>kfG72S3zkmeps1eU8ybaWe2(Wrm1yLY8s zl=lcuf}UJ}lp5&X`5~lpXA^nTDj-}k#V?lpnOI{s@~eWqT5pCezDs_T16sIrTZ&-) zu%9s-*-&kcA_G$pl{zq+mVkQ3y@oAY`5L`w!`?q zl>u5R$F<|I4oysOMFbE{OGu6SU70U&65}kFNzOV66RQ2^Jt#};>)iCfGT5Sa$>4j; zHTHi##GrBj^w?ggFr(}BOyS}HC>w|fa56&-G5 zIqegcnyKJdW})D1$m=dxQ=BSzsuUbTUG9RNc1yuEl%*2qKa@Hp$bu)c;I^|GUChyi z>Hh!`$FkV%$ZM`z402SGf!gT4D-0OV^Vmmx1U!RP<#grgXkU00mf&(iI`RY;t6xuFILz@*YW) zWdopAmDyrVL&xGS_3adsVM?)zF?0US#*72L=J=b-) z`n@Pc)2`t4>Wd~=c-mzKi^F7zO5Hj+Ii1AqJ|v5LMcj5;<_m zR|P*Rw`N60<-C@Iq^ ztma~rDvKQ|HX+(VGH9ivaTc5q_}CLCvtTR}_SB8bij~MbXYb#FIJgbMStpbgt4K6un$YCl&|W>X5ofsfwMxvxs;{0L3krMg{6*k033S}5dOt> z=X{s=voUtv%(JF5@|ykIJk9<$JTd>tl(OTea8M67r?3j!?7{$@|8 zma55*Ff<94SuvUyi{k_mTnZr0^sljMwnb}JCL92Sm^TW8shTzPhC492HS%rnLK}Jo z*L~V%%}UeXB(wzqp0rgiXWOu7XV=B2ZvqZ$=(RDv>%Nh!aDy+h6a~l1W!}~vONvlv z%rA(D`K9%Tf;tz@pg;)CXofE-_<)KBr=rQy+z1D=30kFI5kF0C5J_4xy|j+MR>N57 zz!;W{osb;v$K){Gf|r5navXrCLq#;$8}Ek1EkjfBg-$ZFffOO)NeUI5&17}cT74rB zP!6lB4g^a&t+jZ#-i|KsC95uahLh8I_bg*aiUXPm#U}KS8RC?TGSF+0D-cKDm1sj< z^I;CAQ%bF3JD1LD>rFncxnn~5b~ct2O^ZlYO^a&2CNT%Y=<>3JaZ zc$|8bD@ylm>-SKR!yDtvFNgXKZZ+UKpct+L;C0blFc;slwle6?*Tjvr5%CAfHGX;1 zkGKUO8Ve4yMW5zdLUpSwMo?4&f-)+wF(tz(sL~yMI z*gBc>WC%!=3IcNwyu+Dg`Ml_i{n&ahLA53yHfT#|+KSVPh%FlxKH8)o)FdT3{#67XObi7^Q_lLm*~3b6xA-1xf)hw5|De|aG1l|` zf}tgaf&4Aet@?{TuUm5Q`W@c&d%c0);uV9WZQet=24xK&^!hM=;TGQm8xpz9lHo0O zYI`s-4aEqk=@~d;P}3G*Ap~TA+U4iF*QGg;nu5U2K}{_?4xv5tUq$6K26rC1hTD`f zZISbW%&Anv4DnBNRkVDxHM|%R>p$zLR699q1ax6F!lAvbGJt)n$Mo^7p469jD1V%l z^%}w_JAqT0=PU!j`omM}uZ~t6VQk80cPIS+5q}(sqKv248d5xLbGSgInP3qaAUBLv z1Xx^dYjv4 zYmU;qD13OSYRKM8sfb|$?_Yjw1<=vG1ba|xb4Z%hvJ3cD`24?yf5fj+;m=8dzxPkU zU$&wh_|xhAzkQeXZwi4(gvCQ>EHFdtmZ*Q3V&Kv>HJfn~5qMk-a^;B&^pII9K9}!i z3}h_E{6F&kKR(W)+5^Y)W80=>;R%qoQL9ufQlvaU_QMD>E*6;e`b5sOnt)-`^?=RX zMVX8lz6(z@Y}K`kc7&h8`WAUlcCvBtP-I%<6c_K5wS)#D#9Rg&6!q*w*wD2=okD&- z7M0@=aEA-zhRE3_ewfCSNSw8$VHDo3XV0=9QH`6L$La9eP|wm&=%x+mh?IyTNGQ<5 zI%XvY#L7E(ElY$SE5Ul!11tu#Zj=sfFW8|C@z_()Xf_f@)wD+K5=E;Qzua|DHLaHT z1Q4CQymGtia4Ebl1FgDoyK34Cg^`*q*VXU=)wnNlpg6IwScTWAKE(WuoCV>OWYr+u zKHN;NuJZ+7o~-;mJ~QFHnee_$A}txjJJ$%1%TnefI$cn$J4BCn5mjcX`Pd!RaP)Ui!Ea2wqq8v9e> z-3H@siOFhEDo({iMUmqKlVy8f3HN6jcSr6+j7iC&Hv!Nv^jDm1-rGe3V9RV7Syv7%uf= z443*Y=x$B}w;2>l{ohArs0ic%saEO6?&8Ceh1SHjYTTlBT1mcToLBJGpKdQ%8BQ34iKnFZBk0s%XcoVIfiz;Z=VM&QXBU(uq*cC9D$cN z6eFrVlD+z{IoU>5FksG2!YM9rH-M$?DcAyNpqFzd$zm6xn13 z*<_*)?_azP!Bm?LR!hGz#8Fg*WZihM_;7L#M*)J@E?#dd#cmMwnnPtCH$YJX~$EpGFtX4&F; ze`=O37Wh-gBvNwFOwKqD8N}SK2P>qbe<%9uAm1-C7*k>sYy!a23$wX(`MHOGBE&aQ zI-uVOo&SWyG+sa^J!F{N^xrZ)Xwv;7_)Aj>$OKK$quuui{NG1lF4`Z@(`P1AfrhUz zb?E4EiS3h_EAra74%Y{;SMw`SW(TC_&T=ZMtq1EXdR`b^`pp&K%vrF%%(9ZZ!EjdM zXZV|{ttcukL70t2I4ZhNM-LX`ZL!i?6udB7NY&25TIfP@Il}HBqc57}u4H$xVyEH+ zHE&j`+SFDptJbFhmIo7@pyw@8vpq0sW@izm;?itePT&OKf)>5z@RsnGI9j9eXI4q% z^jW2rJs00V6(A+0C8bW_M!=^-NOV)uXBq%ErxL%i`Z@M~Sk2jscL8nHYcgE@SGqY1 z;C%8k`3mUc;%_3)RZEsOz3Uq>_kj^}SB;Px`Py)8Mivd5Q$K9ZwBd5RN3`O=#nb=! zl9pv3g1|KVCHg4hl}!VwL?`p!%fjs%QOjx*FZ@F_C3{{d#l%q^(?B_yMfSP)>hJm? zrb?$ILLZ}L$m|C0V>*;1CW39l+xzck3M_U^K}F%6{jEq5Ee<>MnMir8|0_(95PFns zGgv~Jp-Hfl?dftS+z#1n<~vT5@1jzch^;AI2G^bK5nbj0u+6($fFXOkC6OtVY!Re4 zz7k#RFVw6MtLq>(At|Xk>hNu~y`Skq6kOSBL->3AVvZB;(;e)B*O6v?6E|fC@m2h2 z@zbhf5&;`uLU>%K5}(Rk@>m0?{Qa`F3F(r$|9mJ-4D0EVfGKXyQRax> zV`-O{50$b%;O3io_M+}2D%b_!eY8t3R>suNSn6W)583Ry5+Ex{>8m?fK;Lx0^wEpc z4imzM7;DSVpBMw)FvrByl;2&X=X7!+5x@T%e~Ic{jlVck4p1;J=@J6$9(Da zj_{wQG<*JGH<#iY5-_B%IES5zV|ITZWkP7c(ZhRKrAx^#z!>L}K zk#VB?b_8Y&vcEYM=fppO8SpoNYpE>0G!#IoKO(_Q2~6rD$h93M8SK4Zi=STv)xkh= z7THlc9?dRxDrTsicry{SK!wp0bq6tvFC9mi^@OPb%=7{fC4?9dh>|>r%e^`P5t(a{ zDaAX1GC$c6P>RR)0ogf7ipQSE*IM~{0bdWu*Pn`_F(iwo)%MI`kR`kZuSF_3!dUifx`U*a#;9L&Spufd z-RoiM)Mq!gJDDh`I`vuA|CdN~>P7Q4wXpd2e8mHz6r-ogS3IltN2ItY{JG*+`HIVC zFtI~|F*P7vn1@n7{T}?mFXIA<-Ss6VNL5jg_wK%iKj3AY@NN8EeHt8ez;D zV-~qSCF@SQ>@80!8401IP;}zCRnNJVf-Lcpbhp29y^&>yNmL^b!*Ng8{{2TL^AF67 z#!F?fb=NvmAy^R8MBeK!qMkGhN7v0<~1Sd4~@HCAn4Vj&g5_GF|~3H@9yC z_Zgb}mcWDP^@N*uKl7wJZbdz%AyIrx?=1TX&ef*)ugE$^*`u201WKwzVYTKOXFU0< zML+D>SMuhb_xB|qQT4MTpR*oxxa_OGrw%hbC7(m(8?;ti6n{mH{H%OH+Q*oFN}U&V zRg0c$-shc(DlB{48|=tZe7A0=wj-fYwFDY6sNqm^V5b%h$7rp@+Gwq)8)3yxDVEG# zq5!5ZKz;GpUQCIfU>4?&resXN@ z*hgnPqD+QF2hyTNrXL68z8&Nae4ldqB2!NS=_en?I#)JS4bBfI2xu94^DHyS|? z|GOyqC0_#!+@pGhIn!6t#AcIIU`c>k!UU{0TqJvY91E`p3>IU1En#Kr!ozz2r`wn! zJBCzE1=suZQlyxs+X!hnJXBTxz-y1C4^TA^)mKLMr0TChYSHiq)_b|v z!jtY`AUQ+WgQnb?z4sQ)8k@O`P8+3RR5^`Rs`_iJ&EdU^Redvxn0L)wOjg`Xmf&%v zm3*D8hHvJe@t4|-t9 z?;uYyOx@$M8Mk>Ero^k$3?U*n_@MWCiI@56PI-x+^g%x0C4R&Q`CTvZT|UU=ZlWcU z7^fR4N)>PzBC19|fG4_Ubc@i8w@?$G0v5w-H9arj0lPiv9pv{gN76`PjQ)&Awt*1K zW*k~Y{sIw?5qcy7igcHsBW?++=po&Aq5kPFbH`Y)#z>ir2Bmx|E2u@ZGI9{WKHGx(a(Xa!G|KFk#4XVe5AnQq6mI_ZAoEEVlbpT-JC0~Y6A zYJyjQ3Xd77g&ufx7pSEUnCRPB@vH}vrQdu%`WfCMPd#MMizlOG$~gMycFtlcs+M=S!)i}6vr)<-KkW|xh0W1h_ zmEK7?ple`s#7pqua-Qrj)-_lB82zxK8_>2XhVpQpFeR7mkWqjY*|qkX^~N0T1$FHl zU`7g2U*$Bu8s{^pDBa9DbL(%aCWxkScyw@}jrL+=&oh#)b^i+XkiGyx2X}uPSJUvt z`sPD1eBnACVdq|Z4Zxa43Bcpc=-MqX8^M^f>;l@QYAay5gT??AUd#>8tUrRHNQa?y zE#oCk1`arKEh=i=&L(9%-2Q}vINAUf(Y3~&IG0Cj;dOdm6*&L+e%qH)Ms6c(q%}I&j!@= zzxfWu)-L^&sbFrezGM;(hAzhclimNPxc^Ue|DWdmKi&O*CjLinQe}yr$*3yU>C}!( zZ|17XLD=vxsibhG8Cz@Cii;C36{o7{{o^ejbhHQvm<$Q1N1eGFyJR^^`W-$n9J=*- z!0>dGz6`V-a)V|JqJ%$!^{_q^U2Cnl8jW)&aW>(-0ar^r=PKh0;cx2u+;Z@M^QXtw z)E|JNH03;jUZh`#h{E6}@r?$B`!rb3 z*;0%}SO8UXt}}Ge@OS19=(V(UP{{SRbQ=#agtHgQosOPlNll6wnh&Me1WZacVxLFJ z#V+LLl{YY(%s?jJO^`xVnSp^y9~DlaZ>xBfnBLQ)1)h9Xo4E18)3b3kE#WVMrVwnK zF!pj;9M>F>G6@Ie!VU2A*WnFF!Aq6Kuhn%vT*61{n>NAZ0uLq3nUw(yc$PE3Po5o` zbleAOr=1b8`Y+}-mhmC%6J3;GQ3qH0&;iag+6zV^gn$%z0**X{!c){ku=+9xHX>F{ zY_||4UxKTm3`bD#9&tF*9OFWj`~a1tf6H7R5ELAaF~T4J@{ULS6SdHAtUNjl&aW&2 z&Na*(7UzB*RsQP-tH(^r?8F_yLQCX`luOYdVekp!`~l{UJa5W|tKcoX%a#5s4prZ# zg0qLKU<)g#U@p$5z@tv$yT3n)VHfGVE^co(;uRi9zKxCu||4zBUgntkuj%3rE2@8NMg+S z-48*0WL~$*6BoYc6l_!24o;>v;I`W9)`?hGYXW-a7CtN)r(1KV7j9Kn^0%Dejq9;g zFMrNB8vP3PT`V}=WVLz0FNW81-PVEf#Nje)&Q4j&d!8?OYM;^jSn|$T^84 zbOMU4DSkr5R_F`#f}^2ltQB7cDy&O4ttoy~H7(bla5JvW&q!u7F3-=1XEXke;mcLk zL8D7H?`VD=^~P*oUw$4ffo@*xIMs4gcZqFqqT6FQ?28-~blW|^G6Kfh)x>H9fpc&i zN&lrarTDwxs6IFJ3`o~00N4}om#Coy*#H{nlx zC3a5Xb@FwM%RW(;epR=a+)Vyw8nMWM%n|#HVKGM3Kv@-@pE*4w#L$dJ#i_vATRF}8| zQ+KZGMQzzU`JK_7=nddZ44!VrGY0#MtDzu7&g1@KQlVnhWNT3Bo#y?(Er+HeHw-Nt zDZw7NHc$gk|G}t6N>wddV#E}1=OEO++x%r_s|_K*PlbsFqx%s zBmPw5E64M9xI8car-K0Xt(S@Yl`47|wkvsJ);RWJ{W5;kbMS7azGEGz3M;|~s_Lgi z#--#ZQi@zhaqrbu?tkOkjKSh}^iCJRfoIK5)cke*uc0>MzLaPqh@~9fubTR`r5X=% z0Y->sxA7-#L*uub#;qjZm#u0b0+J*M+|JgD^(|Ah+~36h|AegbR-6zz-0ucCxP3W) z4vupW>C^Wx1J@~1QiT+%El<@h;a945GXGPxQ|P+tZut&q@nDCFg+zBxo;e9?q?iJr zv%m(?Po)~h2AU4eor&`~xHaO&25;p_DX1ZEdP6SV;^9qeyxh5O=zn%KJlzqU;edB! zb@;Qe6f}sZJKkfC!f1;3W`#y!ykksPwe)yU%Gfg+rYIp#T2AuY`-%Q%Ky?t@`Nr!X ztuIpLsp_drO;t}Z|4ldlO*8+UYyO*Q{wp*81^C~N>Pi$61z|_^WPAoqrcn*xn1+9Y z?>pqT|JDDWx9{@X61YIA#%{ih27M*G*J}GDxGB-wte$Z#c3C&=tpo4(*>^JG-LRk~ z!UraWP)hD6>DboN*a5u|cl37ZOYwlJ)%GBIuHkIHoZ`?trRvNqb^;wF3EX~l1&oK- z^Ofm93GS;Mx?Lu1^aHxy=wy**|I9y>ER+1m=i$%M_~LPm{gKN|+;aPWq@fpSa=i6R$hmBgF858m<+DtgIOY#N-eW!wW|T_Z8_TJa`2p2%wX{Cg&1*+M@kjcsAI4V5y_8>GVNZiQb* zg_-dBM0f*i0mA{8y1;iG3-Hrx462_rz)((Dc?icS$-N*8@JZhXB&lyhm%%-SratsR zrD}jCEweZ8=>;_L3=wFeFCtrTc2?ue=-Pi{t(Es1Tyk@-H4sj zMy!pA?)fBS<9g82O3vUSm?GsG`&jlye=DzlN4jWNaR|bFF5jqzaxe_tgKIrTPQQx~ zuwxrmHhfL-T9bvK)`d1ah>OcJHG}Hl0oce8Jk$fTc{?G{BfA@=H=AytVlct6xIB15s&)}+n5w;k|LJO6_=&!#RS}xOmBQZu4G>oDLyLcb zmE3>|Q{s9f1#mmcy#KtBn7Jd(9J*n`+}pqCvv`rfysnI&@Q>QKcm}OQXCSG zE-QHzAh@~4`4~6Xku&j7M5MwAbh2-H&Zsy@Z+{#;g)_8Cn~ya3Gq3fhxo`{NZ&vTt zZ2!Js*KM(<3at{a#Kq`=uwg(V{c|*E^qC<>DRkH9S?=w@yMn-0*>p4j(agI=dZSFa zz&(2QO#6|R&oV>Kk(|JVxEgjSS#B2C8h4ZfcY=>BT|I@u2E6eLDK1YSnL*a5s(L1_ zYXJ_L7vT)oX~EaKWi)e2|K)q&3w0QB&JurHHw*<%YA_bjx#{16=6U>j=~OY-7;hlz zjEI4N!P|WcRA1pucl|cZ2{O{fH`#(})B!G(O9D6>D~@i~7hQq-1)B$c4rZyUons|w zXgZJb1XqjrNr7S|U%;riJXkX&RlSH6`tiZQl9Ro`rY{hZs0C_wtRFy9Vn?aRGiN{+ zBs88Lb4G17bT95bbej;~O8$u!D;LvKa+p@+FpU(#w0#igCFya-5tA!} z%D9@NJuM-v2Dd8L>J!TX3oHre-Q@HAl#}f>yMq=MW%Af$A&;_%#HFa2AKDgK?NBEtyjJ z6yVl>L<;OB01VC#a*v=S1g?&5#Us#y!p&g0;+{jTW_sAa<0KQdxSYlOWVlEgGNlX( zX18D^r!z-vF|- zwl<{LGbm>I&_LD2--nMgL4?C#)}F+ikr+vk$qnVK>`?M+$WT@QM}xzSTu1#lEMkKA zrw_)Vo;f4oaH5eE)&e%BE7x7m#n6^M3ciTid)<8P*z}Y4L zs2m+v;dAf^rayBSwHWRe)k#$>PydM{IVkPa0%_A_#>&jdmi;u-+~MTb#zlksNtX*g zMl=QyAU&OENU=zZ6p7s8g1?*KgQj2lS@zw4FEZetalwDh#bj{p4-?!Z8bpH|(~NjA zxRYNX(epb#kQkiseJ_EYE+p4D88AZzFKs*}l3SCPc5Z>R<{USeXBB}NBXtcfd%6!Z zuRifR7}N&u`KqT~*+etY?bnlj(1fwcVmX8lbP z`zOPUjjMIgPTmbUXBZmJJ7!tj6{~PB(jzVn-aDOw%Zr}B z%YHuxtQZd*@;DJ5IhpnVvJ(jXQ42$=bw75f3#Ogks}@XCeb)W;v(k*plBILgP&$Li zIPNP?uP0o#hT?9iW8fhnML?gBeuW%xQ$U?|x}>-4tSk5mn&>h?&bD80S>&G)eA-POX}7In-oC%To0-nPDYwMv8ho zy#_zxE#r_-f&{n_5|Gzx?+{kc`ETq+y4l>7)=wjo2_htRC_EK+%BUpP&(pDk(9puM z10j<6JPsnr97+~JI;+)|$O}vGn|0{FfLQc1Q zVCe6Wk3eKe;;m7UixO|~N=yeEGVWT~LYMjHkk^EP;S>uz)bM{6AS8sclIKU9ArhJ7ft+maOj!5##=AtKSap5oKC2TLr|PdsUx~KkEn|z{)y@0-kfH~n z7P_#JnlCOmxBN7Ce*VY^sp5h{D!l+jFqPFg`2zF(s9GjyZ!Q?*?BaZ7#{|Km>m474Y1B{&FL`BlnB3fKrrZgxL0@>fbQZ(=3~VPQ86*?{|ouvA}Ru*7qB7_z9%20 zkrqVc!aX?%gYzj2-Uo(S{4g9h8-}nAD@LvkY_1>7QU8CG6_Oi=R`MzI&tO{+*}Ba` zrnPjUZgb&&*KHm$k6m~?ami6Iii9@+x^DB3iR;2w4g)_4m*om&xgD|@r-A1^2f-8` zx7z;(L6)zN#SSRspF`FPazTSdnD-Ct=di|B-2y)T89wN|eL$6Xtc-)5*i`riBJMHn zB{fsup`B28m>yT~{wvpQJppB+pKE<1RE0`Z2Teo_s^_rY-sp(4Vlo=1)0L@+W#4VkPymB{zKNaT#pLzliTA0 z>zZ`eL^UY9uKDOuU|q{AUT9s*D_(edc&!&&*Yb)NTGt5RQbN`>otq2x!J`=K*g-v! zb73=n(7=5^6FaI=%xpDI#?){Z3d=rKe#}QE_5ulnl5p2H%YFvY61>&SUWgwlxetfw zfv;v_f$JWraJR*kYc%I-1 z9%`HtdBo&}!c!un)oaNoBU>0&%lHqOtA#i)1qBN+DR8>f}t zcukc=4!71I2rgs-1cL|`pKPe0Yo$RZlms*xcpew&@PI8Q zi<{ikoqm>+rm1}pX!?@?%CgI6K+5cz!fqi}B-f7-yTm1BABNG|cI!#to=|L~ifvj} zVXf-TGE%b7O5Os#+=lw03>Kho^mGnp1UEl6(H+K*J1(lYtIXZ$4wyN~dA{&GhRK@k243ks0_&masn+!frVx zlwUM#YTXa-^;M)W;?^yj;BxJ%-p~QC4yj99i`*I;j=EgELETk|Z>ivJV^(j`6Fl78 z(&rS!-Ndjt25fVv8g~U^E74h&z1IXR0BPX>OlR``RwKefMruN%I##K9KE}+5u$lOBMc6M7WepF}B_qr`jhSXz+;(d- z^|)yKm_^qVHY}n`4n?TIZA^ax4Uf5#+7uKUxEya9nEw-E-( zq=7$ekdLrD2j|%G2CO_nMYr!;AFb*q<{1J5bPcucpOz0 z4g54qS+fwWJ0^ttu(wgM<%Y8BmQM7Mb)8Gri5RtGA?tFusHy0>LS(%=9UO|dEJUl{ z7E74tB$k*bElmhEo5y}ezOR;5$xJa!F6_nrZ3M}Fmh8*k=brOP#4;6I?IPVFDgf?k zklM-gLOeD#Xl?2l_|1$%1M46mzex$1NxuXJXZ(Af=jFQB#I0CtSXS_y}iwQ zd5EYDQz&+GLFF6r1r`Wp3M16G*S79s3#lZYvlqqRF_YlR-NdVHLjrq=8 z7t-^tPxJ@Qc2zl2|%=H?tHM}XH?6oLh+1H}Q27|0ux~Z)AaV3vZWpTZYX2-nJtEKcp zDQypGd#AEjA=^6!Ezowml>X*PXxr_n{bw+r(|9l??ojN76Fs0Di4$nv%xz2Q@l!!{=nI3OY%TqVW=a=1hwgypdLRasGY|IRf02Pmrf&K zzcp7^9yKE%p6V^!V{s?x;_x-7BfRP<-vtP`?3hpp0m^A8k=B$M*r8)FUw}$S2KtHs z1x5z?umFu38R!cFGLuPPjeLbiMtI4EVf1liROz{QHU+CzjWRWUk2QMfjlrrFZu-ys=|1>B_|tvx z&-v4R@PGEF``};pr~BaFV7k{sE@>WaKA7JgkL0tc_YHI zAw?v#t{cA=;?2QDv|eRPkTY^(cITYS!LeF?7!kf+ch19{U z@cv}3B?+-x80z1S32NdoLCrWOs56cU>eOR`I%N=4NJa_KyI|Za+}~@dtO-48RR^B~ zQ6ms1KB)S_RXzkLZL=;q1aQevW`I2*o*R?oM_<#QhCPw`dSitn@w^?`K|pJKTgBHtK)U0w z*2D^y8>BT;yd#>gA2hl!=bP2`I5tn7Uc^X+IG90zqf*uN80)YnlX&h?cBw?%_w-9w z7ycO(LR<-Rd={XiF%p4xctwJ6<& zeO%soyL!#l(=RSo&Tf=~V5O$Mf%OlM9bEunCgbe!6m{{)H-uTi!rm|pCCqXud<5r{ zpeJ@8&~&Nn7eArtA_kqhfO4OdGT%cP-9h^`Ba@0BM+`Z5O43vHtJmSJfYG{xU|Q;8tckKTuRoAz2l2l{qU~f^L$s}g z9iC`gkd0>!*$0oCd_=pBg@-5FHB$I%exebD5s9`)%DhjAMl^+JhVShI?3Q#Qx4#3? zwgYSgEV@~vOEgZ~K}0+MT0=B~X{jqmG%f3*?1n6Rx%hHZ)VMO*zWXqQ$O*6{W)*XabEt^!ucg$ep%uCBS@A|3%UJj7JonQZvKK9 zhP5&b>+n~Vr@zF0c)j&QD+ArRn$XS~LeEHl9nh*boq!G0vvb%V`WtJY4hH9gwo3jQ ztdWOYjr`vr8M6B7E2u=gUy%4tHS&Jd z!CmAcO#!8CN-=|U6AK7C=(e1L*_(A`S8ye_>l%u{j-6ZCJ0v$Ej@-<-}Sj)Ubnw;|3Z{~oZ;joyYhoBW0(dmG|x@|%+EZHTkU z6Qpiv2C^Z}CKC_mMsGu$+=25XPr~ISjqH=tqS+dDPb+K=wQpU#o5MhA?}7x%E}uy* zpS;zYTPC-9fa?Khh9xh5lb64|aQ+4_|GI+t$*Zu2*Qas6J#Q%N`@CW^-Uh!_9$;Cn zevbok>+`c$n(-$|)cNT%ss4FT{&npa2Cn0J;i@Hut6mmmaUXuTnn(*cG<_qEdR=;S z?Ug(jCoKEEzasBC%thaN+hNL{$ovf~`!SZy-e=MN{5{McpP%p7g6?Ae8{k}Dd4K-H z%>P|}zQ6wM%@DBtuSHfzhar2i0|KK%Ujsbc=@{CvMj?+q|? zdTM^Y?W_O&EMJzN?=OEE^ZOw_eeL`E_Z8_sbtNDDP5m-HA7%OV`Q`oizfAm==jZ$B z`!UwvG^l>x_*XOkW5efviuvP*&tJg&H^7lT{Qdn~!TjIl=lk)iVSeYJd|&?`WdGKK z2>$wg^j{+V&(HVM|2xdTZutD)Fn{*&`Elk?9X|gF=9dkhe<$<%@yCb1U!E-m>x$sp zLl_fJLF_l_6CgnRqAj_d>o3-@Q4}#^|4*OQKL}>63v>J+0hYYO&3KM$iVuP0m)(rl z24^(683zVs*ituT^{GIa_7Z<}r?{ndp;UhSkv@v@CWIL0{YWvg;HW7V^0UnM6cK~! zK1QJMR2+Rdi2KDN*c795^4{C|M(lF)-wN~JDrWBp-&?HY#cjwld74;+W6jDs&y+r@h^I&_24CQ ztOsiv%~Pnwz4)GsH&Nx|V);M_J)BXk>Mo|AQLv$PM>h&qJwzmyYPHLa0BE%-BuiJ; zQbmOO7U2dek(3FqZ8bl2cx~u*mTb9Fk>iH)&@iV(W^n@AW2PtBS=J z0akQ$d<%9;MQ4Q9S@-W$kE)$LM^1S&w$5CRRQ1!1W0vU~lwv+d!44|(*q`a<%6EY> z*cG|%tfMhFJh8`E$Z*mrg6I=tA5 za9(PMQ!BBsceadkDjaE+8D&l_p0_^8XT*sZ#@Gb7VeNQXLyu34oM-x$nd*u@kz@y{0RWQtsgzS?FP2a1+@ueq_duz*R_WXCUe`7qTEvVJ$FHncW&@`>6npbAEeGatd4WVyy0DWPD^zW@yg!<}4e5hZ zBTI&)Tsb6V&XAN(3`vvhO2d1BoacYaTp{zGDk8cs++A`lh$DD_ zM67^##oAT@S;P_M!e)f65ww#Tm#{$!1>>=Mi`>X(%|XllFS0YLGJ&IuDZJ)GR7$`I z-q54y7D+0yQ(7@E0W#7Tgn0XMP#=y^Jy!BBM>#4W>lArnuY&gi5m{AYlxA=G;ZhD) zFS+n{4J${mKoepD(f_az;+%}90Y%;zk!y%Fqy6DZM=l=$IUJsiQ1bmF zl(g(JnT$bbr$t$fbmf<^qf)P?`|)4C^;P3R8&;b z_lUPLKnG0Wj&v;ZB3+5GE z3J3d2xli2oas~D6Mc^;A0P8ly2na!V?|55-8IvtB)EHIfWwfY%G}8!xu*x7;z4owc6&P+C-{ZbqSZtqt045 z-W+LjqpoL{>l^35;qW-TqQI-4ccE7d=4$U|ZU_IK3SPl68tZhLCt1n2h>^q6JanOR zT0)E-#gT>Pqa<>gc{b7sO!PHS9mG;?|0f#ANbQN#B=abw6R?JWZGx}YF@XI~UTvL3 zHzY5TTJ{={J>3ZG%*Nf-19c~fAx#t537mt6HuvCb2nN%on}l}itVu(%|HGes?vQN0 z*PuIDaUwNe!u^qcN-)HG1Y`-p1PFL#t+uNGqJ>P!`TT?^&+WnU0`(@jEe1C@Gj9gR zfLBU?;W7#wl(5WD2D`876yTNQA$FK+F!y5-EW0LNs97;sI5Y2DyusmyPE4l&?$Iw= znGvow>|Aw%<@AFR>b3L-#A-Y|#v7&0e->j#FMbCYe^M~61C>Xh;d%cnj1Yk7onX`l zaN1)=z~?ce54rky2XS5bz+aD@OeC3vyL_@BdZ zoMwsYU`WbE%8e^du0Hc9yf)72;+3VHqZr=S=0FOKY+*|bK@t`Wz~R}aT9l+X;eCT0 z=g~Lgs?R+)oaQg>LwMrOsXz=^8PDyu6_B}FT<3WZcRPP!f81DMf~6v8w=n?GHPA}( zu`t~^1r^MIZcprREQ#l8jZ;MAvk5$@60I=zKVa;jqe@kT1y`eBqH8+}6ypgw`GA-8 z-JrB7(x83dksFYhpK`hDukJ9c*f^To@W>AQs7w>UEfV7DotJW&u6Iu)i9GJ-)#Iou z2nP?Kn8Pi4pCdtDQxYVXM8rOk^#lJ&RURE@)q@fuqC)%U5q`yQ_;zWU9Yb)E$tRR!xpu9MH`Hu$KZDm9-WV2 z0^<{{8r2Ne&`Z!T?j)d%`hQ(@r~WIe16d}Hl^|B|nJ^@Q_YwA})!^5E4FPgZu*SLY zTjDu}deo4Wo0)%-viTKPm{7Xr=EDEJMqIL}=oAkz;Yc&~+R}1kz4&S2Is|>e*?*Cfb?_v?kf<4b-;X!IZ~uvOgY&K!<|0@`Ets=#ELKOV>&q+?!w)rK%99rn#qx zcS^8L6i;|#8L3)QX@%XVr77RkmLw;HI4D^USM$XO330V-GTyw&h;Y}P*8nhdj@9-U zHkIlKwo4aq|KdoyU9*vy=xJ8sbB)0A&Mkc2Mm<3VklxjzVLk@Zh;9k3(zr;5q?yRK zxZ&Ib6nszIbOupn@joDjSjR6=M@GCVsmbN%T?+v>T;2y>fm@G74hgow9^l@^zACo*P|ULZO%W6a?vH6|j5*V8co^aY{n*IOFuAURYAE5>_U z_?w4uWQFXW5GF}%Xt~`}9qNH(Nq!Nf84A5xM)Pw1igGkLkT423Tr1s;%DhS$Vs|vr z3-`tFo5m#aAq3+Bqw$lkAvY1srayJ=V^hnT+R$eE3Dl00aa6m z7M zyO4Z^T5Ldrd8HdYe0LrLzC%jCs&#M&0>$^CUdP0uFy{?r<^&khDfY5 zuG3K88E%D7D8y2zm>H6I9)j`w}=$~{hoPS#I z3_Z01yj>5YD|W}Ss+rfTa=}+uqq+2BptY8@(~%Q8Lmp)Z1V3mfoY)ujyi|gtY1LJM zALbTGo^+&!83gSRS59=xIcO;%EMM%%nMX?Qf3Ukw*HYFX z?ODl3iH&$&gNDgxkx$cT84du=byVuK4M(LtDz$aT<0+Y}b=$LSOOq^%C5i-(db#ed%smJ)vUaDAw@n7~Lhag691B z$L}Nma)QY0z>MJvin+r%!s(Kkhl4P(?R7_qG9{kl$`iFwmIH|f=g0y9I}Tpo!|kxI z1yyZXMxfK>q!aiTV=kANbi%< z$800L`R(zU_P@gCm45c-nDN;L@b<-Cyo@E>O@jI4&a<-DK%#Jsag6u9>}bn%JP1K% z+&KdMU$shb$#p9LXLJ9z4j)$A`>=qf?DhEO#2)x4_DjvP>`e1X+S!6c`ViH?VATPz zjDYD577TT;h~@k@>emjx^$KSZ)(W0ga7WvMcj+K?__mO;rKY=90JgZ#{1PXF4%Mq~ znu)F9a=zlGrTXfSV2Ha|tiKHxO|bJ~=Tdez{t`*2;x^T>9X|#_V(++kmi{qYh;zth zhax{pEQ4djH*miTzd{{MbD!gt{x432524B#g^U_=v|26zOv6 zr%N#SZnxQC<*X%f?B{^6>GVeVVy6@G^?FhC%8@!ed&b}nlicj^La(b0OVcM&H+j^s zkm{0^u~J<$GyMQRZNULV<<-39XBNXs5*&L#?O3eBhX(G*&;BB^6Z@>5ePv^jA3c=* zEL95A3)a9l%sh~Q3&M95nQ^AcV6|xrY3vq_%j5H#ln0Q#ytk$eYVQqT>}BrtGQE~) z24aoBHW|{=Mx^=uJrnzJ!ic?&)yA+BsW6>TU+kFAv4Vm@9Zwl%)ImhlTq{5%Lo5Ff*^|MPWe1WWU_xW3N1RM?Cf#fT93m zFfu&7DnMZSk9$CvG8AG4Xp?D0fY8#30P;<{^tX^LdEn+ZPS4MKuW#-=i@dz~$ainN zf?K^zZ+-ezfkN&f_N7!=PQb;U2c)^eZ9$!tk3r1C&?2;>OV0 ziyb2*EhME=U+lf%Q=GYR80VXi=6tB#i`r6@dXkQE)EC}?nxwP z;YtC=Ow@d5H5LL7=x2VQ0DzcDpdyG~4`{g`XcT~$Nucg5Q0&@lQ=^HJ3lImIrj}TJ z7GMlBkPz+7ctqaw8ZDKa6Eq5*{)}0(z961_8=HgV{^k)2y zm4y}t@$3joVsjM0HkWW&pmG2?my`(5AAll(+?v{*OK_Qs##y&A0g?lMsmZy-^$PcA zf77iafYP|!m0!9AZ?O;u=Mwkocdlg1=e#WUX1gz|9$AT=G8W9M@Zw<085GC{Uqgk$ z{a=Y;g>i#4#Zakv^Qh{CcSE>(Zb|*;O-1LUa9Wbhu>l<|d)S#gAQor7%sk`h>DpAV z*=pS(g1K`OYF4jOSaWUs9PUN)CBR8Q5C3M)yb;WE;}dQ`)*q)S$z2)^LD;@Icpd{rEm{RY`TnnAMI{=$QM0x3 zRkFHJ%=D}}O<|_zl{<4jK8~a2>;;_a*u%f<^-lMh*r(oeL=Lj|A!8Z*bqEF}hF~Xh zL~Uj$Y?Ec}R=d(aX1xyUaTYK{7!GIXA|_zPDf=Lfe@L*%CK{bTj!%gzL%}CO!5)BzN1_hg-1wEer*91&W=oRS2IuS^Yn02rn3Ca`TPfY#5xQsOV{{pb8 zPWBWR7=*-c(`$c!9ZU{TN;x^A=ng3_17!x$sp!Bi0C5NfD0rd@Vs7MskS$vWf3_j4 z85J2}Ct#Pe4qNKLYwQ(>tSNN}5VGO!mY*%72Lvl~2>OQ7jNqWYOv-`E04Jo0GM7B| z^B_<9QcNFs)FQ&T@swyv;$+eAz7Z5TC6Fd(W7O>bT`?wl7pDvkK_0`@a^J4f$8ZBC#I#SuJZ{;2)BZdB5#xU}bm(LG0aR9yDO zC#i*E+lU4+cO~G*r6UzG1z42exRaIUZ;`71FBdFWeFK>-po8=wu;e zDNUZk5{5El64R?}nVG|u`LQWOo;e2SuN!ExP$CsLh5{F%fZHYW-28c*&>|?YE2ou; zt4Wj(AC!Y2^xzJ_XSx4u8W+2^6Ii6Nk_A3}EoB6Z2c6e|JTO!v-|0F?8H<{-hXOdP z=W0Zf+!??ii;xCHwxKz2w1znr18l#@CV1Sy4{4pwCt#-jZM=sr`8=X{6%^8)(qMSE z?hsAHS;xXLz9}7~G(<7+Tal6FnFKV?3vc91=?CDU`bb&i1k(_t=E}QywkbK>oBf;v zfWV%1HF}0`(6>T$ZD0dkY-ZqndhWT{1AQ?g5PZn0lc1qa)*ZPCZ&@Ia-ONkr9Vl+3 zxQNwUbnBxuB4NF}5NksmfK{`xX0FHhVL8L9DQS4~k#fHl3uk?E2L8!x=+JqVz?NFQ;GFDHFLaSR0CeIj8qca>9fEwp0Vj~_-k*xa*E zIAZLy+`4lYupfK?@0{E6-l-(>RlhbHZ6cN>s6gt&tq5P;_#$Q<{81`ugzA`#Z++=f zu2tr>PFBR4F$FProG|hl`IhHqqZ0ys%ThRg9k7xbSx`=r1i`^HW-H4&vu@LPNH21g zwRvutwYj=%>`rV-#`Y{$bIbG?YumgsEWQ1Ko+E*=eX?5#Wb+=LH`aRiH*RuSHrXu_ z>^Tw~i*T#Ku{$vuW$GMWBZ=ZYazUzQDRhC}lsy|L5TD4U2Em}gAPV`X9o`U+!z)izfH!xA18_7W1 zR*;!&rmC)`Oo@!aa70f{w;@9;30Zv+&a414MO@$suz{hFyVLJrzO{Kl8P4PuA9vzn zbs}DMD(mSlP3$Wf+smI1*N?@8L$HJSDY-}~%l+I3;Bxa5-lCzr5q^r;Yp{)Ey~i$Dqk0pu39zEBhx`{-gd(XH>)A_yEdX%hC0J+%mH zvM&KOPR>g}jn!Vl=K8Y5rxwM>_AOSt=b>*7Ses*q%*epwltQ9Y2%B$A-2dKudj`B6 zIR-EpEP!pTnPx=16={>AkXd$&Lm!4;0-;)Eyt>hCxB%j}xnB^w5--u50XRAelCjcw z5lhY$>{MAj5efy0@?rJa>%hA#$YS z=fZ!~t?-`+rBpQ)D(pA|YP7Yjp$xKwW|~bf20=P71^3?E#Cs(%Xg%Bj<`pnUQt*ly z!GdmLvn1j$npkoaCjxW$YvNaWJU$&;)>BBC{or!84$CjT22RaL3gXU?`z0+9>g2L% zC1=uUpo3ugF2=@?MZE%t-$-!+mm1q1cFDByA4M9R&=5US7Qd8z010fz?p}7vz_&B< zTRTh*IkLFjP9Y?s97o1T)^)#0D*G_Lj3$JAA`S2`6E@JE*@XqE>XyoAr#kH4a&bu! zg90h|8V&LttRf^xD!T{-z>)$yV82GXYrn>o+Wqm^eryd(!E*7~%lLX4V-t_Pg0COT z*Wd6J!xzm^?78tB$e&u@c=w>G)y2kXFmyTa;uaQt0Js1^3fqD5B^azKsi^I!>8Qg4N0}5SicJqmsidAPj@>JJq zLOeu?Z3Y8cRdFh(mQx9{-vCje58#O}^46Pu@86*gQ)4?rqAKPAYg?+t5Lp-^D(?58 zJ8&Tki7KY-6{JA&MxGekY@3ts4^*YPm_tMbF*sr9c0uAH!vhv&8E9r64ekjMynx`U{Mj7s@TbV~ZyIMtQ& zsLoZ$fLkufsyaOwb zHrF;U#_YLREIeiU63C66aB{@0@1rVkr|u#UPtv17YxBj;*0x==l--jX_{C~Yc{5bl z%*Egp0^>l6<~1P(hQC%lgC435lE51pxyRy;%Z?m%a=^0r^X^>jBD&^ zW-hwP%1k%q5Jz`xk=k+0gYDc$PR=)DUr%Ptg9riwVmWuXR7DUo$=&0r^hqv=XVN|a zAe3NzCPPfx2hb{l2qQ-<;b{8-kwXs5+Ou07(k7hkIZjCj@tui*; z5#V2pYu31RsEm7qAc1Y}aWJrLYp7?+FN97*4kIQP!;Xd6&n#Y?=pv-gk_FFO6yXkm z4!-Zin#Jmevt~(N2b&zxn)QDkEF>FAD|sqt=b4J6Q$lX;vd_c$+o0dP@HF-%L!WuAqiA~FI`0@cEn|fEC*-Y$FKu~O227h5b!$UgH zF6Q<{Y+Amqx;8Ci`ErS5|A9iMgUpO5i{L_-V6j6NF441Lc`r9xbxxm&X-0K2OI!L` zDp|5*S(|H&{8}N-notCH>ILO~Va=86n1wZgT`5+D3fr^)nr3vXKf^Y#08Y1GfR}g) zoR%-wGZ41tQB{mh<;CzAeodW#jc{0(A@2EflX0LZlQoJ6Q(a{8;pc~1yx+!&rlt%Y zbLtXgn4P2fYwE|cf*zDAC_petVUvslCtUcMXKIPFdKbTbet*Wa;(X)owc#RFK3Iz< z8v!fP+lf`2zYCWC^gAw(mKP-UBU}M2S>@PV2uE{?d#V(B5!?ht7n&-8Ik+G_gOohr#V?*3E<&o+_In&h`fllV@G_Uvc)*F`DI=&^W{>ZPud=+7oO|Gi z`|dGfy`UpMly3sLuO(yj!tG#3^X?&CO`(C)pOBvH2$)ng(GHyCfqLR_ zNhFpyTpGDLaX1jUFmZTPM^VL)#Fq*s(rIG| zB+qGvB(6uI@%hK*m4sG;ik18bI~;9yE((Tj3Znnn!s^Y?twHCe%E%IDHeMtlC7g?< zgj#};tDGgJs#6kfnhv1IT&Fppx|pD2sA(2~KH)4utSbXFn?R>K&7*xl^9h9TMq?7a ziwrIRvg|8a3A_@eHraKB4>~iK_57toFa5}R?lt(@)7X^4F9T#=vy0#?g1qEj59}0f zOMV}{L4bfB?4uKhr(pP@=OhkKwQTWE2SY8KlWMpE6evnHEW%%T?c~=~h7iF_j@7hS z1*~m#B`2wdE7Ct=o_RLySQ58>%n0wo!|Cf2Jun^Skje<%LxP%;TM?Fh z6;YOSZWLOf^*gb34&K;{EvLUjhXh+_TJAL7tK{u%C;B}l*D;;gca>aYal#vv-0xJo zQsGtXLn^!iwPH)pTQ^EBZ@|8d?}Pkpg1?K$f4)9|BXzv4c1fA8UZkTdv|RmEd^S3~ zinz6tPt2Q5O{>hklw8=EL^sIwO)YIPRGYlbSSpRGrljs5Ca1sY%nqFXs_MFoXrxf& z^aH2AshlhDQ%es{e@)qQ_{(OumE7etw?)s8uA*?qeCA*S#h#SoZ%#kc9a2*#tG6DU zGqKEiuj^b z$4e`whjz7GsO8qEK1W{+b5)tH8&jsDFRI3VylW0qx5=y<6I2bb9n2;gbz{m^13Vn~ zLqz~S2f6dd;D9QrJJ}uFTnWqw^|p*s#j4_jj65cq_#2j(Rf!wo!Nd*8K*&5WY99~i z3_?oEV{cCR09Nv=<>Zi5 zVl~QtO8)X@Vh}eItE6EoiCE;Yv9blMh}R(CV*ruUMwuuurE@v{Zp-!FXxE$3cH1wO z2J^5mt?Rn3-IyOM>5P@$k3XKi^Um8SEzpKsX;MxR5NAtj7ee(+assd&1dvpq*5?o$R`3d{W?C?NwS>Tw>LACH9vm+e9(2pOK* zJPTNXpXz=5RPXUq{TY5PQW8eZTwueh54r0GR$I6z{UKa%G9j=iwbM!b%=e$96S%T> zLQXsO9{g3#cK*ewIIhWIvztAb_dFg1mco1BMdRMo2l!Kf6+AL zJil6d#i6WYE4~NGQ-K##OE)rg@_07yw@wc-P2=GLz|olX{2y68n}f3z|L$;aQOP}k zH=owyKDcQVJIAvaXgSz*nXs%nLxEi4ArW85GZkq1WJsalX&Zck+TzT zO^uwHcc+LwI>(Ab z{K|R8|1Z2Qa=qEb0K&_BelKupT*pVV%k;+8Xh6qB370T`Xg=%Y;dwIzp*iTl?Rwr! z`^o638o_EC*H(Mg-Ii@D`t8>3>@asRPPh*Mo~w&)}1ih8sbV4c!Rf@`PiDWK z0t#kEHI-vV6$c&w_8{p<*xR+h)xW=NT%E;De8tfZ^F3&t=8zSEtBAm&#U_bfa5FxLv^ea>*Tx#p4)!;I2$@;hd{$JhD!)VC8Z}w@i zid~-AKL;}pMya*r5E`YfeD$pi?tg&S5EohE0~r7@))L^o08l%~4!`^|<}Gf5V17KK zBJD@9w{7rlIl)HI|2jgS8%RY+fJL?tNXK^j!5#xxB2{7_uNn#R2Lf4YAU`$|WV1j9 z4CHYmLCzJ(Q3mq)8%Dr$ia?Gwkef$>Jn}d8XpDh$a*&De?y^K|_vx0so-1797n|X^ z1Unq03&_oPp~av<1_04z@`22AaEXCtm~fv5sG9aM6Qsm_87I7ta>+@2;S?iZ$vc%S z6Rt=V(RPB8iS2VPr!1rWE#DscYfXD7s&eg2utswA@y)k<_`Ba0UhF-nZnpHPx{m)D zt76u^Mf=kt72d0w_Nd0)h#8r9>k^6a`!Tb0U7vVse&kxLT2}H-nrs@&7}+I3`QErk zU$TVZ#Us;n)81h(x-N8KYnEiHXY24D{LNI?{Xgt|4}4VBm4E&WFlg`%7%^(Bp+<{J zE3sIK!8(bVBvK;5643gmbW5$>(iZKE1WRCGW{}tCAc#@7wUyo4Uv;%xY!T5#P0}<2 zmTE+5X_vOartM5gHENVdk@gTy-@e<6nk=Pts`h3`oqQ6 zp)jQ~ME z?i{B9Xx8Ctuk`h4ky1dL;3*+nTr=@yVKebVQZXTF7py1%KuZ$Ry7%l>9M5ya6zT8M zdb88;?T;SoI2~i?T&ogbLKmWzC!C15<~6i&aIAo zTXW`HEBU&R1BlUm=*jJ}{yWy*3!jD=EV0MJ78+@Hm%>&TSmH?7+6Cz`aRR4o;ub(> z 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�f>j2DE|@F5%*QD4vc|l`@eas^?k7C`6s? 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 z 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¡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�z!6v(wTtmBw5J}ee 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 N;=#k%e^(2q_P~-4U`GVC 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ℜcmFQGy0ZLtmF+LC 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%0A$779kS?;E%X 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Ã<3g*08dzp(v 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

o#V)XyTmQoB_Ch-ZIQ;@Ds0 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%0A^BnaWAexK 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

v)jzrPp!Yd8~5{hbeE!n>^Ng7w=MjF7NPI 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
Yw5SJwYgVVTiDv%j5UR=%{{~Bk8Af^n|q8+ zg{{p!#Kywb=I&#IXm_w)v=QqHTibU7Yel<;HKJX?=8tXnTiYREQ(l0$j7_3Fz(&#TU_)VR{YI=WY^~o7tP|}T){1ro zYYJQIY!RD3y4`PW-+62*Y^{eGY!vMjHi&i{>kC`kcNFVHJA$>M9l{#X4q)>~Y5n$N zlW6;}QM5hSAlfdh7i|aD6}EOf+`fi>3tPM1uCYe6m)QJ~?S5;&zjJ|2qRrSS+H-6W z?HSgK_7v+xdxEv1J;oZ*9%1va*6$%U6}EOf>|>*7cd$XU5$i>}j&-74!CKKSVU1|# zvH2s~{nk30!6wm8VWViru|c#B>qR?+b)s!yt!VqOMzr17{NY-^9oQt=+gH=CXs@tA zv>EF~dx~|UJ;GYi9$<}Vcd_}yw0^g+Nwgc-DB4wQ5N*JE(Jo+}XlJojw9{B4+6inP z()u06CeaRKqi6@PL9`a@McadQqV2?5(cXPL{fhP)n?F?R_X3+ldxnjoJ;nynCaf3j z9@dF=8*4?oi8Z2K!{%3M{VrpZXcw_jv~$=XT95Ujoy0oPj$y56N3ce;gV_8^t>1oZ z5^XOwina?IL~F2Kv^S1^MSF?0qCLkN(Vk%Qpw{mpHi>p08%4W=4Wf-$FWPmi6YUDt zigpQWL_3eouh9CP!6wm8VWViru|c#B>qR?+b)s!yt!VqOMzr17{Bo_|4r~(b?Z?rt zXs@tAv>EF~dx~|UJ;GYi9$<}Vcd_|pTEAP^B-#yZ6zwWD6t?yp$O_hrb{XqL8?aWi zOIRb?MQk2u_glMc3)m#ud2AHz95#q{7VAYjgLR_ySS#9TtP$-LHh+lL?<6*fb^;qk zJB|&a9m9Ijj$)l?9oC9=1ZzY)jLk3A`W?b1(GFsxXa}%Cv@NU`Z9mqD)?%$_`>;l| zz1aN0TE9KmB-(Cl6m1tah_(~!McaXOqBU46+PjaXU(w!Tb4%;@2Af2Cjg5t^{tOTs z3i~YnLezuP!+$p_VSQn1w-*OkSJ($L?>|30H)3sJYd=$4!gZTcAcEo|+wZDYM?x3EsM5o<-ei8Z3#z~&dX`>kEJb!-yt8a9e{ z6&pmmg7ujg zZ2my4-$`r|?F2T8b{rc-JBIb59mP7)I;<7#2-b*p7@J?D^*e-3g{|EVwXjjNeb^w{ zZmbt=2iA%9c7%RKdxbTk&Di|HcE7dGPO(X}N7yLZ18flOF4l{73+qI?fwiJt#TwBD zY_{!wYqxJp*d*FTY!vMRHi&i}>qR?R9}+EuI(ZNTRD)%sn) zCehAfqiCnGL9`QCFWOP86YVh8igo~N3R}C+)xzfYY4=;R{n#X0i;be~!v@jzV!dd4 zuuinySS#8ttPyP|Huq}%c3_ie4K|AQ?xW~ew6|C<+8eAB?KRdGw)R}{Db|Q~ADiF1 z-EVE~CN_ySV54YfutBtASTEWEtP^cF){6G#Bk5PPXW0B+TE7R_B-)6LqFu%Y(avJM zXveXxu(j`fV^}NNQLGWI!{+yF_gmXx1e-)VjE$ll!UoX}V!dbwuuilstQBoP)`-?( zbC1?lW4cGQM6mwAliuaqTR$g(QaU^XxFhu zv}@S>9$LSv*d*E&Y!vM>Hi$N0y=a%PPPB_yE7}FD5$!xScWeF5VUuWQu~D=$*dSVu z^`f1|I?+yHt!O8)Mzj;y{9LWyacmOp7&eM_6dOeAuwJwySSQ+HtQGAL)`)fxo8MjQ zcL1A2+rmcC_G5!+E!K;+59>tRi?yQd!5YzaWAk&ge!H+qw4K-}+74_Gt-*TH-hBl9 ziuM+3MSFuaqP@oEF0J1yY!dAyHj4HF8$_G2UbN>}C)zWt740e3i1q}V-%acH7@I_U zgpHy-#0JqOtQYM8)`@l>Yel<}iFKmgz*^C+ zV~uFnu=&|qzpL0J+7)aR?J_oqHekJIm#|K>i&$IO+T+-HtP$-jHg~rBtk zuvWDFSR-1C&Ck^O?ZYO~_F|)Gd$2*Y-B>T$F02!6C)SF#18YQUu=yEUzjq%_zlE*+ ztoa%nMSFn_qCLZU(H>)+XcN|ob`NVryN%5q?S5;WZDNyX*RWBv%h({=MXVR?9M*}} zW36Z>u|~9G*!(W-ervaH4x2qOg&wW96D8qs!Q^V79{4K|7P z_QU8`wAa`m+Doh#ZN@s$o?)$MPq0R`N7($dcE7dz4~N(!+JudwJ-`Oh?qj`Z_pna1 zyI3pQ9jp=UHZ~ir-z{tsZNx^=ZeoLIH?Ur`>sTk+HLMlwD%Oa01)KkB?EbG;F`uiY zIPpib_Kv5_{J;xLdizsm8Jk2Kuu-&2*dW?PtQYM9)`@l=YehSUHKLux=D*bXox!HU zR{w4vHWs#ayE%ppqIFm=+F`5{?I6~QwuLpKwb=X@?S5-L^kS1}yRlKUo!B5+gY}}l z9im^+USq9jFR@0n8Jq94e$TK;v?tgo+9PZbZNhrd?qgkHYv23!uvWCYSR>jUZ2t3h zzqK80#utBs-STEW| ztP|}5){1r>YeYMT&3~r#JBv-Coxw)YdTbEwG}eoD3hP8WiM67gz#7qxWAm-n?-(|T zb`%>$>##wzBUmrmVXPDF5Y~!z5Nkv`fX#oZ_1nTG(e`7bXe~B~wh!w?+lzIg?ZH~n zc4LibyRi9Bw0=9WNwgip_XwLrdx(vqP1qpX1FRSAKGunL4{Jrci#4L% z!REJX{cdBEXt%IYv=JLbyNUIp-M~80u4Aoe*RV#ktJwTUTE8pUB-&+c6m7r;(Jo=V zXcw_gvoy8%67}LA29YFWM=r6YV6{igp5PL_3bn*IK`0 z*d*FfY!t1-2GNdSy=aHAPP9W?G4t7_8MzMdxg!vr}cY@O`^TP zM$u+$5bZhEi}nobM0<+0qCLSH(H>*-mDcYOHi`BS8%3M2L9_>0FWP;q6YU<>igp)k zM7x8{Z`1nS#wO8jVWVgxHi&i;>qWbPb)sFzTG6gyjc8Y~`FFK`SFlO6%h)K|fDNKu z!g|pzVx4FguvWD5SR>jwZ2lds-&t%D?F=@G)?N4T89my9l?6h4r85Yhp<+(gIFWl0c?J&)^7`&MB9&zqP5r{+CHooZ7 z7i&bjgU!FG^}CHtqTRwq(MD`2Z0&c5Hn3i_Ygi}R6|5C)z#7pmV)Jjb`>kEJd2ABx zEH;YPV}od?uwJwiSSQ*stQD=p8qp48^RH|D4q}sNTi96G+WQjpVuNTqv0k*dgY+xf zORN>`8PqWbWb)uccTG38njcCWP`Pa05hp|bt zEo>BRFE)s_6YE8L`wIFM?IqTV_6%!8dxXuus`a~%O`_e#M$v9ygJ@Tdf*ZMWsB--1T z)30c+u|c$#STEX)b)r4PTG5_hjcAXs`IohR6E=x<9~(uxiw&aP#(L34tP|}9){1rw zYec((&A+7e8?Z^Vi`XdId2A5vEY^$GW1VQHuvWAaSR>joZ2m>9Ux!Vi9mYn{4q}67 zTUakzi*=&y#ahvJV~uD#vH48v*I<)qZ(l~gqP@lj(OzP`XfxJ{_6%!9dxABhJ;LT+ z(E3f-B-(v!6zwiHh;|$6MH{hBv>R9}+BK{Z?Fu&kyw-2PCebcpqiE-`LA0}2FItav zqMgE8(N18EXveVm=d^wuHi>o^8$~;a4Weyfy=X1giMAJOMca)vqV2@yQ>|ZvO`^RW zpkL8mV}ocfv0k(p>qL8owW2-28qpqM^UrGiCTtSzJ~oPW7aK&ojrF39SSQ*ItQGAV z)`)fmn}0^@H(--!7qL;a^VlHTS*#bW$2!qYVXbHCeiL=qiA=rLA2XgFWQK8qTRq+(XL^QXjicLe`@^(Y!dAvHi~v08$>&c^`iAy zC)z2j73~Dph;|H{e@g4uVUuWwu~D>x*dW>#){E9+ooIWpRcjiL?MAle127ws(8 ziFO)m3tM~bn=z~r?GQHq_jbRvxfYv5+l7syz5QVN73~Gqi}nQTM0qTR+C(XM0j zPip-JY!dApHi~u%8$>&b^`afbI??uFt!O*3Mzl9A`aRP6&DbQ`V{8=dJ~oJU3+qL@ zhIOJ{!dlVJVvT4gvH2&oejPT6b^sei+lvjN?ZEoNR&S4ALcgND!dlU0tP$-gHvhMF zzqNgjut~HB*eKdvY!K}h){Axn>qNVXwW1AJBiaRQ{&B6}S!@#RG&YKM0vkj-iuIx$ z#yZgsV6A8^)`+$Tn-8^qJF!W$cOOK*qP@lj(OzJ^XwR@tw8vO0+JrTt-NWYps`a~# zO`_ezM$xWegJ_qrUbKr?C)zoz6|Kh_(N1FXf6@9K!zR&=V54XUu|c%`STEXMtP^b) z){53(jc9LPOus*-^?Qj;qCLk((Vk#~Xb-VowEI{m+8wMFZNwVUu48l3`dz^$(Jo=5 zXy>s(v@=*Q+9|9P?Kswo)?tlkhp_oawSHUJB-%b~6m2&)h_(akMSI&%zoNauTG3{# z5$!29|7We=BWx1w0XB+u7aK&oh4rG{z&g>cVy$Qc)`)fin}0;>cNUvOJB^K^oxlds zj$*xNhp|qy16V6si#4L{!R7<4-%e~2?cE2`uV}BaL9`cGFWNJ#6YVk9iZ)@5X!o%B zKWY7LW0Pn%u~D>Z*dW?vtQYMf)`@lwYenm^MzoXI{KHzmW7s6x5o{FgAU24$AL~Wi zi*=&y!dlT9tP$i*_IDM7x8vqK#N1+I4K+*ZN(- zCebcoqiE-`L9{biFWM=r6YV(Giq>I`Xos-*2ep1%*d*FMY!q!bHi)(Z>qUF}Li!c$ z71oM2V~uD}vH1tIevhz8vXq_gmXx z44VpDdoF$i8$~;a4WjMGdeQb`ooKtTRM0<$! zqTRVHi>o#8$~;h4WgaFdeKf{U14iqo1<7O+Ci)lZ67v& zf4kq>4xQLk*xIpv_W|@P+G}hO?FH70_6+MpdyKWBO;{t^J#7BIcE7dGwy{aHo7gDY zHEa;=GS-WB5$i-dhqa>hSR>j=Y~I!S9m6Kkj$or`2eCo4{a7#BUaTu@?Q63GYejqg z{`4!_b8PttQYNVAN`8<3Ts81u|~9~*!=%${T^YHXb-Saw7b|K+AXXX z?FQBrw)VBTjJ2Yj#~RU2WAk^l`>pLThE0X79qS|5DB3}65N$u!i?$c*MB9b6qBU3} z+MD;I-|cq4wazZFNwnwKDB2Tj5bYt>i*_IDM7x8vqK#N1+I4LH_gcRz*d*E|Y!vN0 zHi&ix>qR?-b%m{cZH{8CXa})Iw0+q8o$Y>WJ9J`GVQa_w-TTt7Xs@wBv=>+}+B2*Z z?J?GhHerou_ptdp+Wpo#+r}o*ZepWo*RVmf%UCbkMXVF;9M+1~V~uDhv3X1DcMO|E zJA#d(9mEFF_G7(hd$F#twXe+%tQGC``_Qjw&$0R6wfn8@aD+{TtsUzJ*eKdvY!K}h z){Axn>qNVXwW1AJBiaRQ{0QM41-Algx^7ws_CiFN>MMQgD}v_07T z?OMN`*d*G!Uiua7H8vEs_8Pev>qUElb%lMVG3LREKbp07JZ0twUch@YK4tc?R3^S}Rm|55HRk4=TG_298lv=i7MT8H(b9mG1(TC5dqH`a*OVDrCe_gm}i z`n~B_v>6*kdx8z3O;|75U91yr#9Gm=VU1`5Hvem_-+62jt;a^uPGCb}YqtTTSYO!M z?eQSiiM9`G3tQWv8*4<{fz5Aj_gkBL`(E@b+AC}nZN>)Co?^XdkFZX(2UsiGU91u9 z7B+9T`>h=hYuF^(C2TBg?RuNX2GP!7y=bSfPPF4#D_Vy&q8-BK|EJw=t%nviiM9_L zMca)Hg?$>gs}D{O-^O-fePL^_x7~qtqP=@h`W5XB)`<2BoBvh2-`c(x*d*F>Y!vM& zHi-5Z>kIqfdbt1m@O5#7b)r4QTG1w~5$ypse_OlX+P?ePB-%Y}6zwiHh;|3-MZ1l4 zqTRw;(MGHh?It#FX#H+rlW5nmQM7B=Alg-|7wrnxiFO%lMH{e2v`g6hFSULbu}QQG z*eKe0Y!K}n){Ax)>qI+)wW9S{Bid|HE7HdS?ht2C+zrENb+8%5aZ8tWE zwhQY;+lh6e?Z8^m8mtlRT@U?!tJd!=Hi`BI8%2AK4TY^e$8?7Eg{|G6Ji)rc*6te} zV{Kt;a}TjbvCg zO`@H{M$yh-gJ`F*UbK@~C)#nW740b2h;{^<*R+0zu&J=MueU*L6zu>uh_;3GqV2~z z(ORq(Z6DT%wilcKuXew+&U&y(wB6V!+AeGmZ70@?wgc-#Yp_>qR?_ zb)ucXTG5VTjcA9lc~$Fo0GmW>u~D==*dW?YtQYOw^XON!*H|ms3#<|C88-h@t>0s8 z5^cgp(e7b`Xt%Lmw3}Eb+BK{d?K0Mgb`hJuN$YnGn?&oeQM8lTAlfmk7wrhviFOcc zMca=xqV2`z|5NL?3!6l1uu-%(??Jz!y~KLao@1S8Pq0?Bhgc)peQaLQ`rW}M(MD_( z?K(Dyb_MH2yM%S3oyS_y&R~sbr?B}OwSLF3Nwf|dMLUEIqHSTlX#22EwB1-M+77G{ z?QJ*x{vTSuSJ))ljE$l_#RkzHVZCS%uuinQSS#8stP$-7Hvbc?-&Jf9ZNNs+E?|Rb zXR%(i(^x0k39J?EDAtH}7@L>1eh08gv=$ph+k*|F?ZkS~-aVIoMSG34qP@Tx(Vk)R zKi2v^#wO7wY!vMtHi&i`>qWbXb)sFvTG1|Jjc6CK`5Ux;=dek%9vekFi4CG1!+Oz< zV4Y|Ou~xMGSR>kAZ2o$!-!5ztt-(go-n={giuMxgMSG5QqCLS{(H>%rX!o%>X#MVB zlV~G0igq0vM7x6ZqFur|(avM7XlJlSv{Tspby~mU*d$tqjiMdG2GO>#UbKB!C)#eT z6>SIBi1zk5^!v41zgO5K+Ki2&J;esm9$~#`53o+OyI3pQEvymk1~z|<*6%7di8f%P zXcw?Sw6j<*+G(s4?F80}b`)zwJB-asTE7F>BwCA&qV2&3(RO0JXz#k{SG3nyE7}XJ z5$zc^f3?={F*b=dVWVjGutBujSTEX5tP|}T){1r+Yec(<&HqU2cMh9G>#}C)yLN740F`h;|>F z7qxzOut~HL8%4X04WeDadeJUnooMH=Rx(Xm_zzv|Css+6`>}3a#H& zY!Yq2M$s-{gJ@^5UbNF#C)x?D740b2h;|s87qor{ut~HQ8%5iL4WjMDdePoJn|?)m zjkTh^z#7q>Ve^-3{T^eJXcIPyb`KjwyN>-NZW4u3@ccm$62)i`e{STEBDHBwCM+ zqMgJB(T-ugXh*P4w1ZeH+J3ANZ7()|sn%~7Hi_0?qiAnB=~uLuSTEXhtP|}C){6EJ zYec(`>BnJJ=-Jh>fCM#|F`^V7+LUuuin|SS#8YtP$-LHh+oM?>IJz)?uS)hp<7k zEvy%9AJ&Ps8*4?|fi; zzgX*c6`MpGuu-%N*dW?jtQYMx)`@lkYehSXHKHBH<~gn30c;Yj#YWNgV1sBov0k)y z&!k_`USq9jFR(_mXW0DrwSJGWNwf(YMZ1R$qTR-N(Qaa$XxFe-w98l{+C^;sBCX#! zY!a=UG(h_)A-zfkM93!6l1uu-%(&!At?UShpy&#_Ll zCs-@mL#z?)J~q#4{qA6sXd^a?b{!i;yMpziUBWui&SR};XRt=JQ`r0kTEFAiBwB}! zq8-8p(YCN&w0&47+HR~BZ3otf_O^q5KVR$j3Y$cmu~D?A*dW>?tQYM8)`@l(Yel<- zHKN_X=D(-)yNXSs4cI8!1#A%QEY^#58tX(mfwiI?#TwBLWAlvG?*KN5)?%Y*d$2*Y zomem0yLX{q(OzS%XfLovv}f4-d0M~6*d*G7jiTMd2GMR~y=XVFPPA)SE81nO5$z&2 z|6Q%$IcyTG$41dkVuNVMuwJwySSQ*+tQBoP)`+$jn?G0Uw+ov@Yp_wYH&3Tu(OzP` zXwR`uv?o|A+C!`n?LIbpt=}DN5^cmr(XL~IXjiaav`bhg+Ig%M?F`n4b_$#Sj@Iuu zHi_0@qiBb)L9{Kb7i}NbiMAVSMcaWjqP=|@{eF(t?-e$QHe;h`Pq9I?M_4b~1FRG6 zF4l^63u{EXfz6-Y?zi^(CF|HE+BIwx?J72ib_MH2yNq?B4OlDMC9DzcA~sKJ{VrgW zXy>s}v~$=X+F7g@?F`n5)?=+`r?Ez~Q`r1jTECOnB-#mV6zw=Rh;|I?MLUXhg{{5z z%`n!Ab^vQcYq9w=+x^yd=)oq@c4DJw?+pEl_8RL&dx3SLJ;Pej9%GGY6E=T_*6$uR ziFO+sMZ1X&qFuv!(Jo`1Xcw_ov~yS^T93_BTECOnB-$}-6zvE$h;|U`Mca>cqV2_6 z(RN`?VQcScarakWV)CcA`>ok4Y!dA`Hj4Hb8$^46^`hOuI?--ot!P)Vrm(g9Tr1f8 zY3+V%b{U&Q8?aHdOV}XVMXVR?0@jIk9&1HAhc%*|#pX}d`klch(RyqY?KC!sb_(l7 zJBf9ooxobrj$@5z$FO-)>vt5JMC-6ov?JIc+F`60?GV<9b`WbtJAgH!ZDI4LX#MtM zlV~kAinb3MMB9t?qV2&t(RO34XuGgRw4K=e$y&c1*d$tmjiSB#OZpYhjiTMf2GMR~y=WuWiFN~PMZ1PIqFuq}Pt^Ji*d*FT zY!vN0Hi&i>>qYCaPP9{4E7}RH5$zZ@zrNjX?f%XvHi_0@qi9F4LA1kIFWMoj6YU_@ zigo~NMBBpVF|FTzY!a=-M$z_RLt$&Tu{~HX+AgdUZ3oth_U?{;MSFwIpV02NcG<45 zNwgQ(DB5#u5bY_}i}o1nM0<#}qCLPG(e7dM>$HA%ut~IA*jU)w_nn9hqTR%L(QaU! zXxFh;v};%++Er|RZM)xE4=dOt+GT7MZNLW6E@8cB7qL#X3s@`Kd8`rb95#%pwW96C8qs!R^T)OOt?kf>O`#$L@!`L9&L97>T3+qH{u~xLbSR>kQZ2oAi-%e~QZ0+Ze zcenH_+G}hO?FH70_6+MpdyKWBO;{t^J#7A{cE7dGwy{aHo7gDYHEa;=GS-WB5$i-d zhqa>hSR>j=Z2ri0zqR`hJHzIWX!l#Qr`ROg6KpJO?d#$Q8$_G1 zUbOpIC)!=C740_Gh&E#LhqwE!^{|0WqFuvA(XL>FXam-Zb`k4DJCC)Zoy8i_dTjnM zt=}nZ672*wigpYeMC-6#w8K~@+Ci)pZ3}BeYq5Dq>$ex1MB9yxqV2>6(Hg85?d_k? zuV}BaR6zwWDh;{|*MZ1i3 zq77Ip+9j+J?IJc0YW*%?lW6C$QM7Z|Alg~17wrtziPmGSXs5A8v{Tsp3a#HsY!dAR zHi~u}8$>&X^`afcI?+0;73~Pth;|s8U#|5#giWFy#75B$V1sB|STEXstP`!pTG94l zjc9wZ`DI$aJ=i4LZfq277dD8t6YE9WfpwxaSS#AQKc-*N-eU8B*6$5AiS`;BMSFz} zqP@g=(OzJkXfxJ|_8e){Axv>qHx|R;l|z1aL>t=}GO5^Xm&ina?IMB9n=qV2#s(Hg83?cELiiuM+p`?Y>=ut~Jn*eKd7 zY!K}w){FK6>qMKeRBib`;{y?qYQ*09L2{wxM7#l=;g!Q65#5&O?tQGA6)`)f= zn_r~$yN6Ap-Ni=H?qGvxx3ONdTUaOBh_#~K#2V3VVDk&Le%G-{v}@QX+Er{2?F!b5 zb{XqL8?aWiOIRb?MQpZOzYEwT+Iegg?Ho3Ub{6YJJA-wi^;j#~X{-_L6gGc=*6$=X ziFN`TMLUiSq8-C}(T-xBXdTvyb_8ogJB-cmuk|~GO`;vdM$ryngJ@e=FWP>r6RpKs z(e`1DXnV2w1zNv7*d*F+Y!q!5Hi)(p>qXmvb)q#`E84ra)30c6vAIv{_Xe9pdyS2v zy}}03UShpyFR)Iu8EZv*jy0k^!{+zX`aQ)a(Vk$VXpgZ$v`1Jk+C!`pZNgg79$<}V z_p$kXwSM=oNwmAzDB2xt5bZYBi*^g^L>sYIw3}EX+6`=eAFbbYY!dAnHi~u?8$`Q; z^`c$II?)EK73~t%h;|X1d$oQSut~J@*eKdLY!K}%){Axq>qP6ZR<9l!?Bwy<8b{a7bj zi?yQd!y3`{V)J`y{q|s!XuGjdv|ZRB+D@z&Z3otg)?lq@@BWB>MSF|QJzBpv*d*F( zY!vMkHi-5T>qUEkb)wB!E826c5$zc^KVR$j6q`hQf{mg*#s<+IVZCS%u}-uJYejp2 zHKN_e=I3es?qQQ?cd=2lJJ=xFZLAmV7S@S2Vy$R5u|~8T*!&(^zw6i}+BIwx?J72i zb_MH2yNq?B4OlDMC9DzcA~ttx{VrgWXy>s}v~$=X+F7g@?F`n5)?=+`r?Ez~Q`r1m zt=~y(672*wigp|uL_3D{q8-IL(K@UZ?FiP0b{L!AUF&xUn?yT^jiMdE2GO>#UbOvK zCt8cOqV2;P(e`5VbF_YYut~Jt*eKdAY!GcH){C|S>qKj?R$MIo62w44dCg>-Q9!M0#FXb-VYvEr*d*FDY!vM( zHi&iw>qWbab)pSeE7~Qj5$z&2cWV7EV3TO)u~D>h*dW?jtQYMJ)``|*t!SsQMzmAd z{4A~CNo*4B1U8Cx92-PChV`Ny#X8YCtQGAD)`)f(o1dxmJA_T59mGb_4q$_5TUamJ zeykI%#ahw!VU1{evH2NVzdhI_+HPzVZ5K9(wiD|`+kthWHCQX!yKDLt?JYKUX#L(` zlW4E8QM6asAlgf;7wrYsi8f=cXwR`mv}f4-E?U2**d*E$Y!vM=Hi-5J>kC_ZJ+T9< z6YVb6igpWY3R`u(iw9g*Bq>z-FWMd;16UE7~h; z6m7-^(Vk+xXpgW?v?G`rw)hFQjm0?b`V`l@KM7xTOq7B#}+6Al^?JU-b zb{cC%JApN#9mVFq)cPI9CeaRHqi8KQh_(mo3tM}=pl+-aZ5P&xwi9ba+kwr0(eAgl zufZnK-u*uPiuM*8M0&+pKJXlY!dAOHi~v18$`Q@^`hOyI??W6t!THgMzmYl{0^<(h)ts1 z#75C>V1sDav0k)mSSQ+5tQGAF)`)f)oBvGfH(--!m#|T^i`XFA1*|V@?SASU)`@lo zYehSaHKLuw=G%6^wSC92NwlNbDB2Nh5bY4wi*^9(MB9(Gg?%RXRUe%Aqgi{$Q)YhP z1tz`yDbs~DqP_V&`u)>(zYk{Kf4=`H=bmGeXb-Vbv^&@!+I6fK?Go0Bb_Q!jJB~G? z9m3{6Y4=;Ze>R9sq8-3S(YCNbwEb8wT8nj}?ZaBp_F|1_d$9SBwSK#?Nwi(qDB4bJ z5N!w6i`HPBXz#A*SG2cSBib8mzR~)<#wO8TVWVg-u|c#KSTEX)b)r4TTG5_ijc8A? z`R!W2C)gy~V{8=d5jKeS5bH&ouuilGSS#9ntP$-VHvf^FXqU0Ru(kJFT)?`*)}9-j#oEHw?x%XJ zDQs_5Sn2`z~NZVQc%&Vtrw2`%Yn9VQc$NU~OS* z`;K5uVQc#iV)O55{aS1)Y;E6OY!q!bHWapY+3tRqehXW>Y}Z&<*xJ6ASX&6e zg{{p!!RD)WzqQMDfK7$1UAA3pENpGxhz*6U?Yn{Xg{|$ojCF;r?YoGzg{|#7i#3I< z?d!4mZCbzM*i_isz787;TibUK8wy+7w}thEt@Yc3b%m|%+ljS>t?hgJJM>%F+P>G= z{JUDe=h#%(+P){)SlHUW2^$Jq+jk%93tQ`V3+oD7+jj$N3tQWF1#1dh+c#kI?`Zwb zVN+pi`+96FY;E5OY$$AP-!ZH&Y^~oRtSfA7-xk&uwzh-Cn!?uR_F(g6yWiT}E^I1n zZLYz_!q(>AUea%2Yjdx#zOc2q7g#6SbF3|FZHE)ADQsCzOc2qV^~+%+T0PWEo^P>5Y`m7Hn)Y%zt!%y_IA+)ix%jds5^Yp_YQx4%ulqP@lj(OzP`XfxJ{_6%!9dxABhJ;LT+ z*ZNJ^B-(v!6zwiHh;|$63tKzRHn6U+wPR-uYYSVO8?dIZwYiJfoZJ1@=FVbMVQX_e zHWs!vcLEyJPgIHVG+72zODQsA z{uccfwl?kC_(o3XC2wYeu)TiDv%BdjTGZSFoc|EkvSE;bdmHaB8pVQc$tU_)VR zb62pwu(i1X>qNVVwW6KJ8qv;T^RH0vkj-hV`O#SSQ+HtQGAb)`+%+ z&F5Ob7Mn!di;ab?9h05dP}tfrX|TSqwYk?9^jp~4+)J!2Y;Eot))clj_XL}Nx!rGV zZo;O**5>YGqiA=rp|G_bBGwnSw!;S26}C2a1#1gin;WpEu(i4K*!)ZFert1Qv8k}N zxl`C!*xK9)Y$$APuEYAm*5(dlU14i;TUcAz+FXk@g{{r)#^ztt`t8J~!q(>A{wDnv zwzlszHi-5T>qVQfPPAuOE7}vR5$zE+pK1LjY!dB0Hi~u^8$`Q}^`ebfC)y3H73~_< zh;{{=f1%xP?U-D|roz^a$$4xnY;CT`hQik7PGNmvYjel2uCTSa4r>crn>&a#g{{qP zVe`+o`>k1vO@*!P(2b3StA+#_uM zIj!G>O@*z^-NnYj*7n`ThQik7ZeV?3YjfAIuCTSa0c#6eo4bfLg{{q<#pYA3Uyn_q zox(=ZPGEy*$FN?s4(miajJ2X2#2V4Iu=!`Tel0eMwig>k+l>vP?ZkS~8mtrT?XS~s zVQa_aCDs(ScC2S?{u!;`Gi)ksZHFUlENpFugbkwI$NIw7cG$+c!q#?(SS#8MtP$-R zHvhEN?+P{*w)S(qC2TBgt%o^m5bZS97q<5M4`Wy-+99kJt;L$c*8WaVA2y$~`>okt zY$|N+c<9DP(RN~kXwCn}-u=h9_x6LGzYqk2U=RccgCGdfiZ<%BO^G&b~3~9yPMt3?w;;u+f-8xf*?2uf*=Tj!9kFcwrQKTL2%ke1=BVNf?!|qooO!L zt!v+Z>^}CN^?1A<*GcA?D_7o=nfd(s-ms2lO`qdazfRHeb_u z7g%3t=U7i@CsA!hRVuRIfzNURGtgl(qzG1AVS<}AfpJKj3d%!xHHT`_sU~QrGv6j$Iuu8M0IrOo? zkKE>K`u@3OGnm)$`Z1BUk`I>A7>kDlh z>j~{W*43=(y&l3kLVNm2<}0*&tR=J?tkSIM*91#!@DFbDHQ7h3FSJvvC$uB1t69^p z`-WIYX!}@OXuDWTv!>5+3#&A1npqtiEM@bpV11!2VLhSEV_nUf=9|SjLYu+bLYu-` znl;V$0jo4?nr{>v{E%$EcUWI&71qAc6EV7{6)op+CQgm#Oyg?5Ftgx1F@&6?g1 zb8PT~xA~gv6zdD^80%@)G_xVr)vW0ZeXOHd)4m<7ty$B)F4oelY2OA`Y1XuF4IBKx zZN8>`9jq_3MXaY;(;4zuS7@_XN3*7%^9ii2S<}z%DAp3%5LOB8amRcYxA~gRu*3SA zHGR#mu%6I9VqKw~U>%_yVr|Wu-a9?4CA4j<651v<`2O2`O=qZKea)KQlNGEdv}LR- zv_-6=S<~k@i?uatdTnW}CA0~w5?Tuze4lK-_gG)Erup7sJ)sR@U7@}FIP=x4X}(Wb zTeGJ523SjIH&`XKOKkAHviUw@eW9IVJ)s?8UCo+4Z$qpjw0*2Cv|X&FS<~mj#VXC3 z&fCNWzHGiVtgl(qz7?#eS<`t-SXZ;AeG6Dev!;EsSX*e*SW9RVSfyFhc^|OB_uS@d zvN5bLwD(v~Xz#GDW=%6wSVw42KgN88_JFlCYnnrVRYJSP2H!24?;7h1?Go#0)-?p1W=%6IVQrx; zU@f7|VU^I@*x>OtU(?J|SYK%4SWjqUSXZ;AncZU@p}oV}LL0(bLVNj9=BruL%#PUL zJ7x3TV|}6BVm-~8X12z$XrLn%yCb6E-#<8wuO+Q;=SVw3hSX*dA zSWB~}Ib8lF^A*|?Hux6Ve4nts(C)FG(C)CV&~C7f(5|qy&@Ql+&^}_7(9W>IOg7&M z))(3l))U$x))m@5))Cq+))v|}))LwlRtaqb8+@~DzBR0`S<{~lma(2@O<(f`tShux ztfSet=6`JQrPu%OF2=F8W=((B5y4tQd;S;9S7-xl@J+Y*zMS>CzW%%mtgl(qc_&y; zX!}@KXj@oEv!?SpSX;BE^X9OY&?d1;XrtKR8)fso{B!23S<`vGuH%tShu}tfN`e9Aa2ov!>S;##)*+ z{rXp7mC&C5Df9ih+k8#?9?rJXq(vJYi0ATV|}5mVm+aCu&&USu#V6cu(r_V zu$Iu;SS7S+Z16R*`6jWx(8jTz&{|kmXrow1Xd_r#Xv0`bXcblo?fIWD->;U<_lWg{ z_JH+-Ho&?T>tmJB&auH*Hs2}M7uqq_6Iu`J3he;v2yG8*3vCB$ z39XA&Lfga!UnQGw9qS8i73&GDgLQ?rgmr|rfVG7-hqZ*(#wwvrV}q}h%{Phlg*J}$ zG;8|x?*rBqS_|t4Z47H`*7R%7d#ok2cUUE~A#Cs!viV-t%vWenSWjr5u&&VVv5wI0 zu(r@{u$IuSuu5nb*kB}^?<3Y1+8Ndp+6mSb+7Z?f+9B2!+CJ72+AdZJZ5tbWxoo~I ztS__;tS7WJtSht?tRu8#tSz)ftR=L0tPIXj52EXcJghXdkeS(8jQ~ z(B5M$p}oT@p$%b!FO|*r@{gIX(4MfK&^}>Zq1|I0q1|C^q1|9Dp&@QlnC!6mh z))(3t))U$Z))m?j))Cqv))v}6))Lw-Rtaqz8+?guzAdaTv<<8$v^A_Nv=yu)v}LR< zv_-5Xw0W!&+AKEsV%dB%SYK#USWjpZSXXEtu#V8iu(r_NV=bY*!z!T-VS_J{&G+(; zn6J>Du%6I9VO^o!V;!O0VQtNt{w#itwKQw`y~q-)G;7-T5gQC;^PORR&6@TdV?CiA zVqMLeURxjQXx4Ow4%Qah7S__N=?o35651Lz_`=(KP3Lv6zR(u2o@Pzw&0}4m&0-zR zn*PowiM53`hP5S7=*UM`-IAO>uc6Dhc?y|+7{N; ztmzDOtRu7)tSz)9tR=L0tP)xq8+?vzzA3CPv~jE_v@xtJv=OW$v>~i5wC5jTzC!zi zRhl)u&-U1$f19t#?y$blZm^!vuCT7qF0hW!K4NX5onbAZonV#Fj>v~LL;eAaEgCY#6lnl+svi}f^X z+Bc1LHEY^8iFGt<+V=r#Yu2=H3~OoD^s_LGRhl)O;qt@G_cL$vHJ#yv^)+kS_ki_; zc87I^c8zs}c7e5pc8;}#c7jzx>tTc5ZN8?N^|8LtcCemiO`kUx>uT0?h6dKrtZCmG z*4C_PUk7UmZ4s+9YdS+78~lCQd~K{Rv?;77v~jE}v@xtBv=OW=v>~h|wC8`od^KyD z?-3h(hHSojtS_`%tS7W9tgBhmc^6nmXdkh*(9W=yW=-$)F;)rf5F7lx+k8#m*E?8W zv!*$?SWmO2^ER-q&{naIW=-cUVr|Wu&YQZ&^};2p^ai) zp}oU8LaVU0(4LmeS7;AdCA2$i@ON+XHT^ejE37ZHk62G=Cs2viat*zR+f{p3o++uF%G?j?ms=ZK1vV5c3tbOLc7BTe_J-+71kHpN318b6Raz=L#!jTU92s%EvzN9HLMcaGB)^Iviat*zR+f{ zp3o++uF%G?j?ms=ZK1vV0P_{vC#(|M9X9wsWb<8NeW88CdO|zFxCfc7^qX*2lU+JHt9cJI2~VJH%Q-+rui&ntor{!3O`^ZN4V!Vtt`)Vm-~8K5sRw zE3^*Q5!xcw7TO%v650$_32hP^{LR~ZO}~G$u)fenu%6H=tShv~?`OV38(?jrU1Kew z^|4B5r`W)i&DX>Fnl-&A`&dtCJ6Km}TUbZ4ruRb)YYS}|YYA;0tAsX#4gOczd=pq- zXk%DUv!?Gm_gGhG@34;0hOoBKUcQg{3hfE2g!Ty={4clpn&z;_`a-+IdP2Lwx{v@NV9v<<8h+8Q=! z$>v+Z`a)aAdYU!;_nRfGE3`$dBeVsqty$C0i!9dCtm*4GgH@U}?VH2~|C4OKajdUd z)4nmRr&-f^@3F3CP5Xwij?iAdm-!0q5o>AI^m8-7DxqCtga7e1U(>!m*4M0Q4l}H$ zS<`$cSXZ;AeLbwBS<}7)tgTtozFn-PS<}94tkSG$-zGNrA8zwC*&5atS_kWC*7SKR zU|pfLv5wFtv9{1!SWB~}IoxBFW=*dxgbkXq`JR2|t69^&2dt-A(|LDTSF@(Svs_{w zp`BrEq4ltqW=*fHhgCxBVuSzwHeb`eb*wM64%XAGX}(3Qt69?-vRFs6rhU^`TeGHp z<5)|xrhQ{rrCHOyci7;+lg;#ScrZY6Lo@Py-<0{tGtZ82d>uA=rZvks-)-;DK*3ztL-xOA9 z*7V-7utDQCU(*@xvA$+a`zoxbS<`us-_3kAYdXUo>uA=r?*?mY*0k>uYiZWB?;NW% zYua~$4gQAVrFE3_f3qgm5@Pv6CSg?5j%gm!~fLc72Q|CMaMGpsMPBdjO1eXJ|A zZLA}-4XmwM)Aut6YYA;0tAsX<4eGb~n$GZm^@TQq^@R5F$b5zNfOUj+gSCa$$6A^- zeO*kkO0%Y~%@H>EFK_cT?c2xtnl>+r~OV+rZjFTftgFTf{1%&0>R^Y`!V1uUXUgY76TL?H$$?+VgiX zU!mP&ZJ}LbEunqHDxn=?gE!sgYnoXf>kF-m^)zexI<8|~&6>V8D_BRfrhSW8TeGHp zb688WrhU^`rCHOy32gA{Heb`eF|4my)4ma`r&-g!3hQdtwD0NLnXhI|`|h!}W=;EU zv6f~{`!2CcXy@4AZ^-65#`;1#zAd$?UuYH9)2!*ebDA?>p*>(7q1|C^p2kU6oG=~D# z7Fru?32hRqgx10amD_wxuk9Y|3vC$dY1Z_0ar#!~E3^UD5!w~j7TP)1650_~32hG> z{B_xU+gM*{n^;e1Ygkvarhki4#X3S;!P-LWU@gs>{tl&tRYF_927m1~U(>!htS_`S z))U$^))m?$))Cq`))ra|YYA->t2Ar+9u>w0fAuzB)AxtVw=iF!Jz_o0nm%s_tgBhm z8FpAlv!;DFSX;BEeV15Ev!;E0tPuc7uZxQQh)^y%H*43fR%zC>ZxkE+W!ZcqSYNZIeM4AJv!?T2X3SS;PgqB@rZXI{wq{Ld z2(XrBP5W-JO0%YYSJ>b$-R5iB*T?#rHSIgcdYU!uJHfh|HSIgXIzl_d+L|?;p@+3J zYdS**t2Arcw}lPLxA~g(ZD4(&tzkXQn$F;0U7;;v9ih!(ZOxiqn~k+JYdUWVtAsX= z4gTV7zNUR+SYNZI^WI}U&6@TNV_l)Wd^7XatmzCVtgTto84g%WXm?npS<@Ld*x)bR z=4-Mmtgl(qd3~%Wv@@)$S<@LNSVyy_Gk92AX!}@8v!*k2u}ZV1Gq~8`&&%f9#QH*8 z$9h6r#k!g`owtm2gtmaSHEWt#4r>Xmja8a8oi~LIO1Jr%Y#i%r)^uJA>j`ZX>uT0? zhC8gIS<@LpSX*c>-^6@{_JmcMHJ$f>4gQ>LzB{b1S<`FVU_GH-VO`Cd&g)|xp`BrE z&6>_T!CFE)!YZL1VuL>`n{N;63vCTSLz zTgLjDHT}6<9_wk=^xAB!E3_%BBeZd>EwnMLCA1N&650?pc*AYJra7Fa%vWfiu%6Hc zSXXE_SVw4=SX*cxv6j$Iu}Wx1*x*xS^BrJ)q3vQlp>?sY&^EA+&{naw(3Y{5&=#;t zXtUU$Ae(O*>kDlH>j|xeb%pjG>j-TaYYXk=8k94Z>zS|69-v<<8+v=yu+v_-5E+AKEs6SDcHu)fefU_GI|$GSor!a72G`a0$-w0o>2 zv>U7v+66ZFGpsMPBdjO1eXJ|AZLA}-4XiD+6|5z+ zMXVCqEH?Ng*?d!2UuYk&p3vT7U7-zO9icsaE%O!HJ=PN14OR*50vmjyY`!zBFSH}9 zC$xR6E3|E_BeV^yEwmM^rCHOT!<4W}X!F?MkKN{L+SkVVLYu;RLL0}rLL0+6LL0%_ zLL0(bLVNxi<}0*M*dQyLZ-DiMc7ydaYx;A~71q_P>2vI39ig3JZOxj_Fu_`yHJ!o3 zDxvLTgFh;pZwKpZ)^uJM>uJ_>-Uikc+A7x3tmzC6*4C`)3`MLZv^lI2+6*@MBe(gQ z&YQyenl+s_j`f5#hIKV-I>SBI(X8nVVXQ5*m#=2NLVLt2&6kI7$>j~`&>k91x>j>>5))v|s*3ztLzEiBytZBYuZ18cn z`I>$WGsOCuHT@ciy=4;xwfb}(N z+Bb{!gf@+JHETLU9P4P-bcPt#)~spYJFKNy)4mF;G;7-T_!Z3e_ub}e+INrjHEY^; zgY`6P+INX{HEY^;j&(F^+INDrHEY^;h_y6p+P8;QnlFDK45L3jbJUIy^NTz&>pbC$K2*?n%M^H3$2g!gm!{;g?4~-gtm>fg|?2h zgtm-TLYu<|A1#}23hN84h4qB?4(kf-`OBHF(C)Fe(5|tT&^}_7(2lXeN8RRY`d%`? z`a;{mdP3X8xKx|%ipZ%tLOj%H2!maw*FP5atdOS7hZ zQ&=UmacuArxA~g(jbVMwn!cCZVLi>7_ElI{v!;EIU&?%iHo)4NHJxFDwS;zwRhl)O zca9A{{5D^c9b8LA)9Xo z>uc6@h9uS#+6SzwS<`v%v5wG&u(oDR=RJGOS7@KGN@xRY@L{+4n$EDn`kFP(VS)8D zYua~?bv0|+cZ_v}c7U}tYdS+0YYDB3Rhl)Ow~h@y^fq6Ub+Eo>P3J9QJ)zBEUCo-# zkj6Sf8^_v08^u~e8^$W3J%0)F{SeuF4_IGlw^&bTmsnS5=U7K*$5>lv2UtsJJ6I*O zO>7XC&9{p6g|>wCgf@qDg*J_KG;8|(`~%h&+6dMX+RGO+U!grj~`y>k91v>j-TdYYS~1YYA-`tAsX(4L(RV-xSstS_|t5?H$$?+VdANU!mP&ZJ}Lb zEunqHDxn=?gAbI=w~zIO*2Q{4Tf@3STf#b;HT~UU0c#6w4r>Xmja5RM#s&|!`I^p~ z#QH)T$9h6*VO^n(VjZE4U~QodV=bXoSS7UQA@ltJ*?f;!UuX|lPiO-tvW2`5%9@Z7w0oD=P9@ZAx4%QM{7psJ}i4ERQHs3nd z7uqV;6IuuB3T+AN2yFpt3vCW-39XG)LYu}0mTbOBtS_{2tS7V<))m?)))CqW))v|@ z))HEURYH6ILgxFvviTmdzR(`9p3nwZS7^6bM`+hrTWFV9OK5$p652U7cpuq(r&wQT z$5>CZra!9~VqKx_VI84uV{M^rVlAPqVU^H2*xAiFJhb z0c#6w6l)3X9aagg!Ui$fd{1A%e1-Oa^@MhZb%l0~b%b_-wS{($wKQw`eZUl}gm#P# z-s?7B)4m?o7uo^V6WSiu71|Eg5n2~(3vCl?32hy#gtm$e-cvST2kQ%M3F~Rr^k=#` ztShu>tRu8>tSz)rtR=KztP39W@yLL0#b?|z%F z>AVW-3+-{he1$f^x?p9W=-cUVwKS5u)(|D=4(2yjrD~#jrBBZI&T8&3ay28 zG;2C<6l)7@1Z!#5blwnF3GMmwnD4!8zDKMtvtKV3Y`#UTFSI$Vr&-hYNgL}5Z5rzc zZ4zq>Z5(T9)->NJRtaqw8@%IfzNUT8pTm5G_JH+-c8hg2YkE(vu#V9BSX*dkSW9Tf zSS7SWZ14`U`F63s(6+Fi(AKc7(3Y`|(B`qW&}Oif&?c}-Xk*ym?Pc@5!}>yd=`&x= zn!Z1ru&!oJ@81K~5!xNr7TPt|650h;Y1Z^LKf?xhviXj%zGh8x7+^i2?P6V_b+L}n zHn6tPRB-C{kVU143J^|6l7&ak%7jZb zj?fmdw$SFVme6LfN@$bVAS|2j1J)PXDAp6&JFKf&)6c>X))CsvXE9%)Jz*`OeZnfC z-D88dzRlP4+ICo9Xg63-XjfQQXct&VXdkh*(9W=y&`z*QXh+!Ktz`2ZVtt|QV?Ckm zVqKwaV;!MwVQtNtesi;4N?SHJu@k^@Y~PdP1ARxtY?DZDMVqtz#{rtzwnXI@sXNZ}Ttly`a&DQdO{nv+a`a)a4dP1ASxmJ~v@X^W+9uW(+B((}+A3BFt%D7I zT{hnm))(3W*3+!%_uW~nE3|2>BeV&uEwmQa654yL6522}__f=7O>?+>2J;o#Bi0kz zJ=PW4E!Gj*71kD7A8TpW^y{cORtfDC8=P>k3he;vXx8+8 z=wfZnn$FO{T0+~#Dxr0;!LQ!tYdUWO>uc6@-a6LPtZCm0))m?k))Cq~))rbDYYA-% ztAsX=4SwY|U(??;N3p(UO*6a0dYUzTU4*c%&|dx?^A*|?))v|)tR=L2tPrD2rQ3W> z@81E|7up`y)2wM`ZLBM_O{^odHLNYP4%QOdB35bEG_yQ5_(j=#vshoVrmtfg>j`ZJ z>uT0?-W1l+tmzC%tSz(&tfg7g86L1ov!*jx*x(m#^EKHR*4M1*4EI=1Xz#GDW=&@Z zV;#+!&Y-ZiW=;EE{x0*?tZCm9R%zC>?-3guZ}TM_ST`0(zn|g+BOAD$kw~))>VpMKW-rHKuO9_j*8?^jhfV^9t~+sGxBLgTiR2RJ&&vx3V+C()IC|0pfqKv zKxL{@gIwy;fJQW>M_ST`O6*ytfa@nZQ|LqAq#_ifIHky@Je8u{(qzwi1L}vj}-N z&V38kHSOp?CsH55OejhZl%x#hs7Mags7Y<=(U8W}V9y=TGvnH)6*akU%eto{T`2sK z%!VvVP@1w-pfXjdK`wP^KqH#cBemEw^HI!)>kS3ua^Dl{nL?Z)LNSU{ifqbLi7Hg5 z7Immk9!+RY3tE%={yaYoXhc(bq$O=ApeH(0=mU68icy?WWK*6>RG~Vxs6&17XhL&Z z(3*C1pcAPFJ{J_F2TD?ga#SRTYSg4Q^=L?AnvqW{+R~nmbfNGEGJmotL21fTfyz{+ z2D#Lw0gY%%kF=x>1@uH`YBT@QkG@g4G@vf|KmJBFrXlsHO*L|;NafudRe`efL;-DR zNslz85#9ad84{H7#=l=KHPpSXF>tGGB zKC#AG1J)SphBd+(QBdf9j3u!ejRo<938rT+e7o zA#R^BPZZFGmh?zd8qt8dQS26w^?gcqzpC5p&TV? z%4_YCOAV^hh{{x;ETw5c39{&(!gTp}JTL8OODpneMq?UMkJ{9v8aY&?9Azj;4-}<4 zQgnJ^?zE#dEoe>?@~BT8YEhjkRH8iDl%hDrC_*7R|2*@ifHt(GN1D=z2Gk{&8dRk+ z6(~z-N{~hO6s8OBrz7oYODpneMq?UMkJ_~2>uE+!3i#UF(2^c$N;S-h?`ewfn|BnY z2g>0yl%xlW(j6%}{TOqi9j$3WbDEGxedQtc;<;kWL#VJM+3elOfJdwxyzfOJX zP>WpNPYtS4f-JhHFr6vH*U6D{U1(1oZnvmT6)I7lY)Vm_Vich*e$Lm$gdTWbsw3At z=ZOxqqctsPP8BLqo@~0qCn-uf%FqMVs7P&Ul0#$akxw%k(u%gUrz2e`{0qE3N{~fm zN>hQdR3(=hG^H+$Xh4tT{UY_rF8k>z%p5@gXmh3Ud`9cfQnT9HpP8q<(^)TSoY$e|+TC__nlpeWtZiF5C0L35gr zM}6v0i|SON66MLJ6vZh<5em`yS9$#u(1w=uNK+cofV$*TgQ`@f0%a*p39{&(!gTo+ zUNh}!ODpneMq?UMkJ{9v8aY&?9Azj;4-}<4Qgr%dW=%U<(}LzSA&>ghp%&GtLM6(R zO-DXgTkQ3jXhTbSq$!PP zKwWaFK~*YKfua{?O9#%8<#w79WYIl^>B4gzX-`{Pkxw%k(~x@9rY6Qtc;<;kWL#VJM+3ej2d`YE6dE$NY_G@=1@$)yHWsZ0gR zQkoKE(LIIf^4q*$Xir;Okxw%k(~x@9rY6U8G^Yu9 z)Ta)$s7@6sQJ!o%^10fQPbqH4DMk?r(fK!d4^u!JTGAs;X+#6+l1mM$Qke>rr8FhT zqI(L{h3DGSie@zCeLSQdjk!If9<{mMq#Cuk-J}{h+%8g%9BvmWM;UG>>47rbPSOM2 zar?yg)E(V%`^0;5NB3{V=ZX4n&FAMWdEfAL(BeAHeQU16tX1l8-;s~kS@*0J)-7v^ zb;X)z^;vD!8EcAl!sEwWTRc9_?Kam#3UM8y10U~kyTHdI+-`Dx=DNoE#OkmHtVPxh zYmRlvnqhrpePB(}i0dguxgM}8);n^!?$U|pX|V2C7gXjtOCHa;pgB$GL~A~lXJ(h zs#2K>l%+J)-j4mLNIA+-k{&2Zcckd_w!Ajl(V7-CrwMt~rw+BKP8BLqo@`1{oMIHA z5S_2j|L(j__IFr|l%otK>4BnjM~Y7G#u;cwYg*8pCgf3{I@F>%Rj5RHvMEJzicy3@ zbbeQ6NC9nVNslz85e=wIE;Xo1WhzjX(v%>J?kP-{dp^&!r!B3>rx}fDNIhy(lWOEp zk#dxwBt1}+?nu$;U3mSpqctsPP80H|PaSGeohnqKJlT|@IK?PJAv(V^ub%?i(2^c$ zN+TLjmt1O4mC970ETt(y7Tr^rF7L$ar#)?HMLx}FOhf8Xo0?Q3hl-S=3?=D-qI5@! zP7z)|?PyI4n$v_l>QjeWRHq7+C{H$}C{8hoP>9a&$m^$oHngNin$m~{)Fqc1RHZT% zC`)NdkVW?trpr6<`e{#FT9HpP8q<(^)TSoY$e|+TC__nlpeWsuqSM>+`e{dNTF{&( z%KpR@pBTZ>U1L~4X4XRR^3Y4WZCCH+C3e$zJ z=OgWDODpneMq?UMkJ{Aa>v~8%YSWCyv?ZTbbfG;RX%po+Xi1MWr4bFNOD;92N@Xfg zmeQ0Ui|(oP9?XSo+EL~`nJw#@l3XuXA6P@IXZ#Zdl;U=W;?$xT)hR+1np2d=O<3<( zJyylqXFXAl>moT+qb9YfM?)IZjI5_O@V`aL>!&U4=|~p}zZb88HngNin$m~{)Fqc1 zRHZT%C`)NdkVX9%uZ3DvrwWxQPd23}PBDs5h|WCji30MtJ)!M;b58PUMq?UMkJ{9v z8aY&?9Azj;4-}<4QgmX!1MO%{3!2m5ff?}eE~`ros#2K>l%+H!$fA1+)8zx08|`UJ zEAnYZV;WMA+SH^PIaH(^WhhD0kLJ%lSVyb_igN9;Ht3G)ENhw+*QfXAoLnDRtE^?( zah+hbXwCJ4=2YPJg!P^^Odi*L>QIX={CP{AwL&GzlT9g#Q;Z@MqVxOlxuJkIw4_Ix z(ufAsC6^jhr7{&LOKD1wMfVh@i^cqCPg`1%Pcs_Rkb2anCe_HHBIPJUNjhHt?1**G zx}_-BKI@F`xNfsHNpXF8U!I5S1M8S|NIR};tPZWYUeKI++@7!&S##uZ-KP$^G zRVq_~vXrI-S#(cfx_l6?pZ2t+75OxyF%79lZE8}D94b^~JQWU2cMJPmPKG#na z(1tqP*P=RAsCfN*g#@pk!XM7O$fZX*Q|cqIG@%2H_&bUj_DBgnUZoKQ6yxJ1>eHI0 z*t?HpMwFo<)u>HFn$e2()MG!NE|g}k22JUS;_Ou+k9O2x-#yOaV`Uo9h9Z0{PaRs2 zV&5@tOZR-dKwVl=h>zRUqB))Dvgh~oJSIswa;Ql?8k0|3I+FF%{GL3?J|D&NQjFr1 zBAfD5q6%H`VXQ@IDo~YN8qk!M6wsbC+_NSqOJ!kUDEu+JE=p5@s^rpurnIDh z&a~j~sX{5{MKOv~ifqbLi7Hg53wz)5m;`01ObzPNh#qM}Pt?JCG^aHkNc}#}N=eF* zLrt1r|2~biM?)IZjC@+rmiBa{7W?#RLJQi_iSGE=17)a4H46WJ=0IsGP?@UKpe~JQ zN=w>MgunA!@;+X3o)LeKw_`RJ_POU{3Cfa71A3%@p6E<#?EGVS@6no)XCy;SaKJhR;9yxU8{{=e_&l-} zS%Z$k+b;NCRMR5 z_N`Nwy$e*w4smU&v+o1$jv|;ddq$bnl)2ooj#wkiqe3An(Sqjmz-*$Fp*F4Pp82H7 zr4c<*gjqQ}SB_FV-+|Y#rUYl(@O+Q7p)h`g9gvTmQ4F8p zb?>nmUiX;S;gE%`@Onzr;5DZyg)Lqk#o2eqo(o#C-;@-ucfjjC@ww}=o+;1kd}6g( zC*;u`uTxQudbA~r*O{d*P3cU1UU!c@+tj4HKg{Fk#Qg`_(VCjvm!TT@)TSBjX+>KK z{}I0LuwJOfUJey0M;S^|7c->|-BW_HRHg}nkrT!>q z&hoWDdzx~e$9*-fvt0MNcDSC=g+|=h;l3i*1Fl!X8mvh8$|sm{xQo3zwxTb!kc)I#Yzl$2sGPVsxM$=iO3->m98*Z-TQ| zSWDF8?6K?PC`C5qsYDg3Q;Ry(CyypHrvMQYNJeA?4JuQg3&a%n_MdZN(vHBy_`yrMJjr3JU2Sm&%w?(-?& z_JrH&k25b`Lz4A@94bDaD9ZI6QS3!l;msUfuiJ4k#aPqA@#`l z`8TKk!s84ftMqVl7^Op0Ur6_OzuikIPc} z8jtVeIyB?)3)VTgJpRC%qbfE-~wW!MX-7Hyj;rrW`X7tF%0t)?U=0_ z`*)4?LL2UHasQ0#3HLj!M_O`!hx^A|d)z3HY#;ij+(w@@nW$~DMYVY~k%37sInqF7-3|PyoPplF4tX%h{JbP!@BYEAA zpTRxWHf?D|3HA>2mpb-sd%AOn6EbEyycHNU~YEhl~)S(G^w4gbyX-5Y- zk@{3-M^Sp9BxNW^McUGee45di?u*QXE?ggJPi1bqRGbVZ9eZC)+IgCltwh5 zA&>1*g6lS`#oA;|{TV(N)TcVds6r76(HZwdYpxeGrwMhaMF-kZfbm#MboXbO6RTpi zSx?mE<29boA)otaG^Qc-s7+0(kwZnwQHGNAKv6o22`#;Bw=)!f1@0}yAEgDdl zTxw92%2c2%r71yET9lX<>zs8$9`&h1Evi$6N|Yy?QWU2cMJPmP_IRRzHngPupJ#S_ zY|FYLpJp_sA@!(DO{$SYMaofzlJr1Px+6s=_B+sytiQnPq9gYwSnsJoVan2l`_rsd zYLNSvh_%Z)p!4;9))7sqN@aSaB|Y)+0_%nX%2Jx1=uDx%%-}U?o=S8nb3Q(HWZl!2D%@YE7ImmkKKHL^Mq?V1$NdwU(}LF2=KdZvsYVX%xc@*! zu5)zaTKyGX7q2J7?K`fc^gv0<(3FoQ`PhKU8Axg~ARq;dY7gbkA*z5@d5bP7z9TJ4*!$ zaXaAb8!B_VN)1|adqiEz@^>%;?n|(`tZCLR>m!Y5O8LLaV_0q0H7#h0ORLBl}F)Bg5ddFc+8Q< z*LW_MeGlvz@c22uAN6=#mHW!H;3FopfYu-K`u>cKqGpjC2c66CpuH8 z!uye86sHu~l&2C^s7@_P+030i9gxsKdT} z^2q1c%M;cW>zuX1=e$lOdj0>EK9m1mfR>~_i@)!pF$EO;Z2nsS>X1)oO7{8h0?4B+ zMLvhWqal~(bfoy_@^?Bkpf!a*kN*aOnlz;YSp&{PJzA3be4d-?G^T)}U%>NIhkQCy z@(X!>@@PwuAY zKAkD~WjsH5w57c6F_mTYmnpPC%dqn2_I2&cYqoQ)0;o8FDHuotyetSjTao@G;{iEw`S|8rBW3JO*Qc+LeSWz{uuRh6o-Rtz;ukGdWu{qb*j}^IYaee)Gm}{Hs>t2u3iVAUk z-K);^GRA*f_4R!G8!DmFS`*8IAPT2KU2rZHXjEby^hHXs1oobfz5f5Q?^xyE8CCiBM^*k^Qk8$N#N&95)Ynwh@V)qayhD|LBUI(z4psR# zMOFT-QT2D8XT)(C zsq$}ms{9)tu6d1ZI==_+kvh-&Nw3uE6JM#v=QaGi9&)eUKY3nL&+GP+U%P+!ygody znPFAcKE0|EpHWpW*UQg)?e_IKYWY`cOxNdmxxPNv%k}m7Uaqgt`Eq@I-k0mUH@s54 zD8F8z`ls_g;r(;%dcXJX{F?!?|4u~(Kf|w|C|qK8pY%8W;~M+as>=P%s(M*7@66ZS zyYcyCol%49BWvfKcrS3hVD;biW-eU6m^Rlh=1wy?&8+Wlro{EjbM?7?*(au%>vub24|LU%<>H0dZui<*`>;2c)a=rh0_UrxEvtIANKF{_3 z>v^yDU(a{F|N6Yw`>$ub-v9djU%&6`_j~<5|NrCv-~IepZ^pkpqCB6g|J3!%eZSWl z(H^H?Zz8w-^!xQ|-TYqH18txGr_As5TK>Pd-{SRM=YM_f{X5>SYua^EyPm(p&9t;@ zTf1Jq{mtBK*TcKp{fD=^UDvhi$G5%RAJ(o{Z*#l9r(Nei;njaUe^I;N3*UTPyMB7> z+x=7Rx}jaCwd>1U-Mp_|x3%k>c73N^uix_a*uHjM(yoKh%~ZAP<6FFTe}en2pBwdj zJHvXty?FE6<2u@PM7ti~UOuaohRLS87OG zy63+7<&~PyfgZT;@~f{@`us|rf8&)(ao-)cbL4XSkz&8{N|h+gb(Rvp{7O}+_v`#T zrp)P;YEqQzBE9Ul`?cF%9@j7XRJeZGBhK~9ZO-G<%N~8sv!<7Q zMw}<0m%V13=ScZqdZjvaI=)iLU--Y?F8l|6#{X;P^Y59BcD?2H%l+2BVTRi6G5+EC zcKzQmN4nbU^+dbAJ}#x*zCP~!^qS4GK5Eylc71(ZSi60F-0J6Fdt8*Yr(GAd>+9oo zKX-H2$9d1UpMLh0s%Y17?fUw-DIdSShO4_iuJL@^Kk(krt}ooay6gSd$F;TF*T?0a zZ{Izy>z{eeUv2;S`szy0*Rkg{__sGVdcMB8>hpEtc|HF0&CQ;#udexgoq1lB<`(e_=j;6Q8hKu?=iAWrwO!rd`MUhPUO&F){_DrD*H@E#zJ0xZ{0Y9+ezB@f|B8A2 z7+*WwF8spn_G z_g~NZa@)o@KgIVD)(}m8^0n(iaJ&DW>zDf&IW_qtE7goqc}4T(84i50CtwiR+hn>9e}t z|1ziRb@chYbG_d2zIb`;%j~X?eVN$>;k| zTwm{Rv0m>F(e-({+;_ddK+_-LX9jDUb-QLxKg2x+HZ5Uuzi|T+xtjWUKf||pjAFZs`7ob zd`3uBKKcCqDE*K9(E{XQme18H)9353tYxx4>gV(Jz`qa!`n;_&#f4>kuPT(SzM5wU zuj!9=rVF3Zi}&^C_Hf_sBif>};(H4~zx25igwk+`Mptvn6E8e$(eie_4%8J`E z#yAw$r?TSu<{1Z-h2xSwqAe;b-Z%AO)+_sl^Rc~LC=17L_J}giZ}UgFhEa#-)_KpX z^5L91@A*_-bLlzq{+=J_JvZLp^WwbcM0wTcarXWmW9L1--rr;EyvJ2})#tJD{vIdC zdpyFiu-1G_=U#F+PR@Ir!ZEVe{7Y*;9}~`d{M5EkD^|yV_x16h{XE9<_V`+dZ49@m zK99ZX@VHys$8lOuZlmW!Z49+yeY_~v$BDG(P3`iWS%+;5x2ZnQr|R%rT8C{6w`o7m zv)UMHZS!%YdVKsydo8G4q1Ha@98;6v^`ZDsE2cY+@o}Y?o!fJbVx4$>HIY}ly}ss) zw(mFo=JuhY?Mp@52RMdZpW3bUx=m_7tuOnlJz7(a*Vt%Hgz;JjVZ7!yjMw~x@f!Cq zUSl1`YaE?d`!r_GhvO5Tt2{>Gxys`d#(Av5IFDBt=P?W8JZ@oJ!!hSW^*4<3n1=Ov zT*LFVj!}(G80Ya0>+_h0aUS=uJ{?cR^?5$R`aCCLeV&)FKCS)Y`aEA@eV((hKCN-h zV_4?3u6Yi%jt$SL<~-Ee=DF2=q1HCfvGxnKwt23#U#PXsbFTeDt!UpVxxw54GaFCKMNHZS&etouSq?uMzF%wW0b$ ztvIg{#f4hiyjE0ysI|>&M*DfKsQyqZ&TB?-q1HC99c|NCZMSoOd|&RtbuL1yze?3N zr7N#1r0QE6_n=xMD%W~Ys-O29^bf7Rs7&ovIu`G%c57d)6P0UCDAmu1G$(4m@(1%w zsx~XHxmBt*D^7J}KUCP(5!bCXq!_JvrCLKuwa%3e6JNo8Epb{Fr&S*;l&^h^&qPoI zq25~Ia}eaYR|&P+*h{-rx5i#=9BeD(J*KVqDdaVWYPYs)o7(7D?W;CAR@*fPVcnVw z$7{Rh#PO;s2;5^YppZuKO{zDuIq=d70QR7J2VgBHA4CDvx??Md0&$>KViJ` zVZ4sfuznq*;dbA5`I@A84BMxCxWDE$^iw{pPxGz3+ow4XT_P>8^-$_?)mh2+vDl;w(~jX|L;p@_0>4d;Lm#?HAddkTxP9yNiTnd{q*@b zJ_oC8G%oYHRjT=SUNJ7S*6}Uf9_*`qR8|?6`8wk3hu5}K#fI9S+r7S>D$bw#!?IBO z_;9LyTwhogYG0>(-1wMr{-BOvoO~Q9RbQP~oXezree!k5$C*>b_;^#Qx}5hmkEM@4 zAA8O#&SlcRM)}(0fPQx;3U#EP`I@PvN``C4=?V;AZY5h3W z_T#kXOR-KBdz|)l(Z|12?W6fo-<+z<*EydToNAlT4^CC)^Mq5CX%1AcQvY=`FRhsBIL1D%=b-&@ zjQivLwaxplzV)}qL}kTeoO|_e$EmD1ZtjRUl@-UyW1?stRbO$L_AM@Ro7GphRoZQ| zmZ!AaWbJad!SV8OjP>SQ3T>Z%GxrTp|8DL#UiaH&yRZH2GVQCeF5b7eO#2p>*;nf% z^mN{S&fCj*wNZ6CZx82Pzv>RP)|C4f`buk?eU%Tjwz&8Ym-+8w& z%!k|EHg9*koOhd?cYDINSZi#hH4kp5^KPf|(rSZsxL>$U^|<|tmG*vNx#PUe{yy&9 z$FMEl=Kgw{`)fbPsm`u973L>Am#gf+H#p}n5PPs+QCV?ZbVQuWisR(bOnK-lkK!`z zTU_QgYyNbec6*(7Tf@Bkop&3w@I(PhjV6Jzw5M*^TqW$uezjJALkvf*ifq-_SAl%J{a%VJFHXsU=G=L0z7u3?L@#?Q*)mO(!JH}}^zTPJs zSMM8+r^m;A@i@5s&U+lx9>=N;j+1tb({Q}JPdHBAS7lpV|7V~d(v08aI}80*s&*?~ zW{#DrE~VOEsqWWmm>b>aDb;`1A5ppPHujKRBczP_E*Mj^Ewan>Q9(gzt-9Bz=Lh-Uzk@v!@T;dyy{k; zt<`U9_0b-_w+i#>bC_4(?V)-#24P-f5#}`}>Z{wVu?h1Uqc9(iiPomQ!?6g*AsmCS z|L(i{?LLS7)x5g?u%BTc!~TVR`;C4DeF*!LqTd^D=h@x@KdXf8e=Fq2-of)nP`-?E z=VyzyD<5tjh`0Ar=M*Tf?ant8#Vap=*ROmPzRvHmul9HQTF_y8l@GUfuy5EN<-_`w z59`nIxmtO*PkF_M`Pv{q7k@VQ=N*4$_PMV3bGkn}d%HiwI`7ZDJ~#Putn*qU;dM=U z-4A$we;y3;;dXy6^mgUL?W#}rDc-L7!o1?cyv{>vkNdClQJB|xDa>mv%g^yz&tYC` zI?O9R+~1$0yuaeZ?K%#Wcl(tO`=?_g+^&4MUB^qfUHNdk>I?g?{lmQC!@Q0;{^6S9QsoU*TbsVQvkNVkMVKkK7VM;eD09; zdBa+5kXAkWjH`~HQ2V^$cpc-?o18xuUsXuU<5c-h#zosyX6^Dl$}(}Rx3|V+Zm-+w zyvEjL(r&-ccg}m8`XjA2RL5;m>b6*`PW8p9_g9(fRI0KWjsuU2w8#Cpa-SzPMm|SM z`}}C_aaTQCpm7hi_SN~&@z(ZLsN;Ap25|M`(dzSa}KeQ>3#!{7efPU;wh+{5~3Vuzd_RCOH3-_L5FP?#28pgmjQ} z4)$Ke@j!Y-d;V{Y&+@VQ&*NSRQqSd_0F$r|m6UBhllDA|_Q1xo3;E)|{}RTuUe2`%7GVz>M>q$- z9OR&uI;N>J+-ID+m!3gipeaM&U>JJK`%(W^pTHOnF@}(VMc9MJ%kYLd z_+9^&2Jwcb$Keh0umg3EXWU_0>Ae__G5#jb!x_tq=tmdlI_SLjVR?U0ULBOz2jz9t zv(tLGPyW7cwUC~pqR2WC0XzxHsSDA>0D%ER*Io)%Jyl9u-0PY*4;-kHh$ZpuCB>mfen$s)F)S*0akuSj%41>%4>G@~NP__NBaYGJ3cz$Fbmj^zMw_2U?scycbfe_1?9& z>0KGW3$oP6`H8&WEAe|HelNuDy#agJN4*qQfZ7_zsAX0V`Y8t zepeiS@ZMFd58i)^^}#z~u|9ZLE7p3?$MtCbtTl($2k+p;@dxjl#rohquvlxZ9k2Pe z)|^`(y!#i&YtCG*d9xnpoRwwH)Ia_0FZE5S`lZz6`uzZJllFFLeZDNC4)tIAsP9VE zZ>28R`t>$xZ$uS~Cas(PK-UL4j9KQo={oFZFPHzWwuE(s+V$#PP1UPZ z^(s}pnpd}9W%jUktoy5Y_fh*R&cAQq`knW_&fCxV(AQ<5e^^#rSJ<8~PIZnl_xgKX zl@RJ-?rp2?%=r&iAouq?k7x$U%SeBt{D|0A{ys$U{&~*nD(i^ro54TKYkTjV3SPCO zQ?LQW<=XG4xZ?7#KYxrKxC`gqyYiU~q*J8bv7RNr4gOn@t1srf%HN0F=_@=(m7YiI zS?bLBhvog~;&N|y+CaS`9HT5_zZ=g(@%Wx(%yn<7dNjWpzcAJPx9;(k>a&;g<9FnG z2F{;!yFRC={*$Kl+&kdUTKP&qZ#(^G^R%%hk_L#@p?5nsj^h`B(FN(lpC? zpn~iFAF{vZ-JiDyS$lKfywg9`a`jW|&h2!XbbIxzK=X0ZG{ZSq^YMr5ulew^3HQT! zr+=#D>Zj(z?R1)Sd&Bdc&x=W?I#0<*sgG~xo&Nu|T-T~r<~ak>8lyj@vdtG2&eLI= z);O-THj`?vo(uKiqxz&b@4)k6t_@*X@iynfm@D=x%thq~*;QB1;w2kZ8R9xm%Wxa8kQ`ocqT=eQ+=+{IZ@Y0$LTYT zwf0e7ep<)Ii94okoy(q;Xk6j^*68{p&L@LJ!RLnXQ$MnQeo7_5W(uW?ABH3k}s z0cb%FLl(yVig|@H^akToh3){2mBwre2LF=zh8!&3ka>khbUA4&WT5jem{(W@jjzVJ z8ok4u*P;7B^RIEAhY{v|3HIap*F3a==3H|z0h(vc#}?%OjN^+mO}YTf*Q5WW%}|MM zhf(OhF8zmf*si4Sqywb0ki8D$01fCe(iRwoj%zaxumT&`Vhl)oNv9xJ!B~(ElFq^2 zHR(HPhIA3ip%pr>LH}VDrms%_p&GqYPXEz;FpnOBCfL6k{f7}~g9=!?D*c8osDZ7k z(0}NMxjUWZJGsyDJ(`3@uOwE5AM)jX?)g!N#x7 zMpMuWwUGPe*=P<1p%M1>X)k1;70O}t7ql5Vp&B-SPP?HG>R{);&qnhw1WmBNcQ#sr z5om)7So_)8Xac&R2DW~BHkyHcsE7Pd&PEH6hGvLhdG~BI3hht{>pwmlO+q)MVEez$ zMzb&g4Y2#8vr!g?p#{odB~SmM1FB%-hx8wMp%!vKp#Lxkjj;E9`VSdsg>qQkq5sec z)v)T$U4F5B*RN`ESvGNJBG3u>4K> z5A9G1>)Z4nx*-MI-=P0601dGFb@~s(&;n(!@-_Mo9Z&@uTl61#p%!vqrT;Jpjj;C> z`VZCL=Q;Xk*bg>7O+0i`Hn&C`EPjgdfpN;lKS?}He}eIVRm!edzgMi^|I6!lA;Vr{zjH zPFLgOwKG0uH{;{BFFtm6Rym&qOn#pGDe~Q<`yZ#>q)VjRpX1(&be6P@bbz#iw1IT( zKj_ms_gbV`(k{|r(i+kh(yfotFVY#(mCy1sBhoR_deRQk{0d{&!Do*%d@mMMqSKTu z!1{wYzmPV=Bzp9tj5leT4mB7M&vPh5_{Khv^42pc_aB zVD|z1OnjLXvgj7lVS!%x5bZ{{pgYiG%A+?v$oUn$($4!fv~`SBZB|~X-tSYpl~<~F zN!51cmFk^RwO@IqQ{>f$UQ)GRd8M_a>Vxu1bNA!tmT_L`9C`Ic+m#NISAQBw)feTJ z?%lWlpg+p1UyJ0`C*_r9$g5w}V{>smj z_q)0p)1hFy@=fG5P7C;HtoIi=uE{gs~}uld>pfg+$uD12n6nx3-mW?9C$D*&p+3!F zeXw2m{JXhMv%R0~n$rdH-e37NdChY@+cn3{!FJ^%@|w4G!CWq9Ij+#%pt&C<@9oOB zllME$S__rIcIDUK#c{^^(7VqEYlOV_SH7FP--*^*Nd?=L-+m|YoO^U0(m6=yADw%2 z-qATn=Np}Cbe_>UM&}ouTXbI0IYn!4mO3=21Ed;@22!oT-G3{rwJfRD)G(>mP7A5l zL>Z~(er2IB$77_L%MMb_Q5C7?V&ff!F`pvU*!GgDetD`M)uA<_edVuxwV&om@vTtH zKGki+y`6i@dlO5#bT8sbCtBHuwEv#$_crcNwJ+%^@fp%_(pJ(=(sI(x`*0qd=iZET zoV1U$leCVsnslD}H{Z&=E9o?86KNmmK7MtiBcwZT;TlLfPg+4bM7l;hnn=4y_utHQ zk#vc4i*}8W&XBf|){|C{=I_DrFvt0ubb>TZ+C{4QuOZdC+ImxA{mhVRo%EAxJ=BwG z?lg`%A839wH-G4u>a%|Sja+}3KueJ}uv zuV$=Y#duCL&*)YthgHftp&B;XHVt*K^Ge1VhM<|gN3eW%jv;7=Kc+tU%Tqq8x9jEf z^JVlC*3dQ3gs<~kQ_Sxx4)ZhQmx6ph`H>)BPrfb4=c%_M$TyRpz{B;2{_=KP(Lm;NbkM45F@>a z&Oj@a!|IFv_xbKD=SA3l7w0(`fYuSlgtU5zVx#!GdQOVa}1KsJe~8&Qwuu%G~#02&h~+)6v`*!_&nSD<9O-jI9__4 z{S+_V6~`}AM|~VG9mVm|-EqA17BOniHv2CSqxMLTQl|Du&w}cgR;>D<_A6HHlUA&} zr4_4sr4_G!s%?r_AEXtp_DL&V-qMQKSg37^S3ji{uRcgCUhR`syv9pyQ@qAPTJh?q zwBpqV=>`~lBFFrbIo@IKvVz`t6317p=h(hFR4CsiM)4hK&IO=&>8Utgx-pKI&c^Yz zY#)o`rF-Le=|$>L{n9OQd@E&DalCYnI@KQOa!|aq+M+(F{c4NaC#_g{ODk6ON-JLd zRNEAd>Xy?s6xE-B3kuJXV8k5Zbd7; z9mXG7h?lNLD_(lKuMjU?hgN(gsQujo1+Dg{Vy*UXUs@Z!BcNwU&7^72^P=SkF?VP^8)`?7f}Xwh4HcgC z=o#Wvy71gU&kK9edVZj1gSBWqN6>S?+>;8=6C9&w4UUm^jP${C<;x1s9`sCbj(zo9 zN6-HT(R#k4XMK%mJ?GJLy}c(Ep7%KB;Q3P=BkdSzJ@*@@emxt~GrmRk)iWYJ&�o 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�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

A|}+W8VUg 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%0ASdwkoA5%@1A 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

)0#A5ar$rj*yvM$RaOLB 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�Ok^OwjL`=i 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�M* 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

D&(S7WM&(>g*^_0nsq^nWmJ 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

EaHOLl&($8aYQ3#~}N$k`>Bd9?#3^4cv!cTPI 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�U@TyN5gbL1rzX2DE0LewfkHT+U5HT5XT$Im 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%0A|8nIr5pyP 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%0Ah|-V{l#hdEUhLyP9`=$vw)U?IpvZM-SC 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