OSDN Git Service

Fix floating-point luminance/alpha pixel upload.
authorNicolas Capens <capn@google.com>
Wed, 28 Feb 2018 15:02:07 +0000 (10:02 -0500)
committerNicolas Capens <nicolascapens@google.com>
Wed, 28 Feb 2018 16:07:28 +0000 (16:07 +0000)
We were expecting R or RG internal formats, instead of L, A, or LA.

Change-Id: I6ee145341819460dda262b017db6d8105860f49a
Reviewed-on: https://swiftshader-review.googlesource.com/17508
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
src/OpenGL/common/Image.cpp

index 49de8d7..280486a 100644 (file)
@@ -1548,12 +1548,13 @@ namespace egl
                        case GL_FLOAT:
                                switch(internalformat)
                                {
-                               case GL_RG32F: return Transfer<Bytes>(buffer, input, rect);
-                               case GL_RG16F: return Transfer<RG32FtoRG16F>(buffer, input, rect);
+                               case GL_LUMINANCE_ALPHA32F_EXT: return Transfer<Bytes>(buffer, input, rect);
+                               case GL_LUMINANCE_ALPHA16F_EXT: return Transfer<RG32FtoRG16F>(buffer, input, rect);
                                default: UNREACHABLE(internalformat);
                                }
                        case GL_HALF_FLOAT:
                        case GL_HALF_FLOAT_OES:
+                               ASSERT_OR_RETURN(internalformat == GL_LUMINANCE_ALPHA16F_EXT);
                                return Transfer<Bytes>(buffer, input, rect);
                        default:
                                UNREACHABLE(type);
@@ -1567,12 +1568,15 @@ namespace egl
                        case GL_FLOAT:
                                switch(internalformat)
                                {
-                               case GL_R32F: return Transfer<Bytes>(buffer, input, rect);
-                               case GL_R16F: return Transfer<R32FtoR16F>(buffer, input, rect);
+                               case GL_LUMINANCE32F_EXT: return Transfer<Bytes>(buffer, input, rect);
+                               case GL_LUMINANCE16F_EXT: return Transfer<R32FtoR16F>(buffer, input, rect);
+                               case GL_ALPHA32F_EXT:     return Transfer<Bytes>(buffer, input, rect);
+                               case GL_ALPHA16F_EXT:     return Transfer<R32FtoR16F>(buffer, input, rect);
                                default: UNREACHABLE(internalformat);
                                }
                        case GL_HALF_FLOAT:
                        case GL_HALF_FLOAT_OES:
+                               ASSERT_OR_RETURN(internalformat == GL_LUMINANCE16F_EXT || internalformat == GL_ALPHA16F_EXT);
                                return Transfer<Bytes>(buffer, input, rect);
                        default:
                                UNREACHABLE(type);