From 99338daa8f2f75af607a1347bbbd2bc7959b2294 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 24 Apr 2014 02:28:30 -0500 Subject: [PATCH 1/2] Fixes glVertexAttribIPointer on GLES. We need to pull in function pointers for OpenGL 3.0 in order to use glAttribIPointer. This isn't too big of an issue, and this code will be gone in the future when we change over to libepoxy. Just need to push code upstream to libepoxy to support Android with GLES and GL first. --- Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp index 7c6bb7aeff..f6fd98a48a 100644 --- a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp +++ b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp @@ -1604,6 +1604,7 @@ namespace GLExtensions "GL_ARB_sync", "GL_ARB_ES2_compatibility", "VERSION_GLES3", + "VERSION_3_0", }; for (auto it : gles3exts) m_extension_list[it] = true; From 2d8cfb89d777ac36d3dcca8976caa2f7804ab43c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 24 Apr 2014 02:30:05 -0500 Subject: [PATCH 2/2] Changes posmtx vertex attribute to integer. This makes it so we don't need to do some dumb casting from float to integer in our shaders. Only tested in OpenGL, needs to be tested in D3D. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 2 +- Source/Core/VideoCommon/VertexLoader.cpp | 2 +- Source/Core/VideoCommon/VertexShaderGen.cpp | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 7cf40eed34..90b86194e1 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -102,7 +102,7 @@ void SHADER::SetProgramBindings() // Need to set some attribute locations glBindAttribLocation(glprogid, SHADER_POSITION_ATTRIB, "rawpos"); - glBindAttribLocation(glprogid, SHADER_POSMTX_ATTRIB, "fposmtx"); + glBindAttribLocation(glprogid, SHADER_POSMTX_ATTRIB, "posmtx"); glBindAttribLocation(glprogid, SHADER_COLOR0_ATTRIB, "color0"); glBindAttribLocation(glprogid, SHADER_COLOR1_ATTRIB, "color1"); diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index e9288aac29..80fbf08cb5 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -753,7 +753,7 @@ void VertexLoader::CompileVertexTranslator() vtx_decl.posmtx.enable = true; vtx_decl.posmtx.offset = nat_offset; vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE; - vtx_decl.posmtx.integer = false; + vtx_decl.posmtx.integer = true; nat_offset += 4; } diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp index 7d0dc878cd..41549609c7 100644 --- a/Source/Core/VideoCommon/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/VertexShaderGen.cpp @@ -109,7 +109,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ { out.Write("in float4 rawpos; // ATTR%d,\n", SHADER_POSITION_ATTRIB); if (components & VB_HAS_POSMTXIDX) - out.Write("in float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); + out.Write("in int posmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB); if (components & VB_HAS_NRM0) out.Write("in float3 rawnorm0; // ATTR%d,\n", SHADER_NORM0_ATTRIB); if (components & VB_HAS_NRM1) @@ -168,7 +168,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ out.Write(" float%d tex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i); } if (components & VB_HAS_POSMTXIDX) - out.Write(" float fposmtx : BLENDINDICES,\n"); + out.Write(" int posmtx : BLENDINDICES,\n"); out.Write(" float4 rawpos : POSITION) {\n"); } out.Write("VS_OUTPUT o;\n"); @@ -176,8 +176,6 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ // transforms if (components & VB_HAS_POSMTXIDX) { - out.Write("int posmtx = int(fposmtx * 255.0);\n"); // TODO: Ugly, should use an integer instead - if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) ) { // This'll cause issues, but it can't be helped