Fix texture upload and internalformat handling. We weren't handling several of the format/type/internalformat combos from table 3.2 of the OpenGL ES 3.0.5 spec. In particular those where the format/type of a glTexSubImage2D() call can be used to update images with an internal format not directly corresponding to it. Some of these cases were handled using the blitter, but not all GL formats have a SwiftShader equivalent. Also, the blitter is slower than specialized C++ pixel transfer code, and the blitter's fallback path is even slower. This patch provides specialized pixel rectangle transfer code for each combination of formats. We also now only store the effective sized internal format of the images. Validation also happens using the sized internal format wherever feasible, instead of unsized formats or SwiftShader formats. Change-Id: Id55db490002ab8fc2f16f766c43b43f121e5768e Reviewed-on: https://swiftshader-review.googlesource.com/17429 Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp index ca2984c..91f865c 100644 --- a/src/OpenGL/libGLES_CM/Context.cpp +++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -2413,7 +2413,7 @@ } } - GLsizei outputPitch = egl::ComputePitch(width, format, type, mState.packAlignment); + GLsizei outputPitch = gl::ComputePitch(width, format, type, mState.packAlignment); // Sized query sanity check if(bufSize)