Changeset 225585 in webkit


Ignore:
Timestamp:
Dec 6, 2017 11:45:55 AM (6 years ago)
Author:
dino@apple.com
Message:

Update ANGLE's changes.diff
https://bugs.webkit.org/show_bug.cgi?id=180491

Reviewed by Antoine Quint.

Here is the list of things we've changed from the
ANGLE commit that we merged in.

  • changes.diff:
Location:
trunk/Source/ThirdParty/ANGLE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/ThirdParty/ANGLE/ChangeLog

    r225584 r225585  
     12017-12-06  Dean Jackson  <dino@apple.com>
     2
     3        Update ANGLE's changes.diff
     4        https://bugs.webkit.org/show_bug.cgi?id=180491
     5
     6        Reviewed by Antoine Quint.
     7
     8        Here is the list of things we've changed from the
     9        ANGLE commit that we merged in.
     10
     11        * changes.diff:
     12
    1132017-12-06  Dean Jackson  <dino@apple.com>
    214
  • trunk/Source/ThirdParty/ANGLE/changes.diff

    r219446 r225585  
    1 diff --git a/include/EGL/egl.h b/include/EGL/egl.h
    2 index 9f9e021..8ada051 100644
    3 --- a/include/EGL/egl.h
    4 +++ b/include/EGL/egl.h
    5 @@ -38,6 +38,12 @@ extern "C" {
    6  
    7  #include <EGL/eglplatform.h>
    8  
    9 +#if defined(_MSC_VER) && !defined(ANGLE_WEBKIT_WIN)
    10 +#define EGL_SOFT_LINKING 1
    11 +#else
    12 +#define EGL_SOFT_LINKING 0
    13 +#endif
    14 +
    15  /* Generated on date 20150623 */
    16  
    17  /* Generated C header for:
    18 @@ -118,6 +124,7 @@ typedef void (*__eglMustCastToProperFunctionPointerType)(void);
    19  #define EGL_VERSION                       0x3054
    20  #define EGL_WIDTH                         0x3057
    21  #define EGL_WINDOW_BIT                    0x0004
    22 +#if !EGL_SOFT_LINKING
    23  EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
    24  EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
    25  EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
    26 @@ -142,6 +149,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface
    27  EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
    28  EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
    29  EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
    30 +#endif
    31  #endif /* EGL_VERSION_1_0 */
    32  
    33  #ifndef EGL_VERSION_1_1
    34 @@ -160,10 +168,12 @@ EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
    35  #define EGL_TEXTURE_RGB                   0x305D
    36  #define EGL_TEXTURE_RGBA                  0x305E
    37  #define EGL_TEXTURE_TARGET                0x3081
    38 +#if !EGL_SOFT_LINKING
    39  EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
    40  EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
    41  EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
    42  EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
    43 +#endif
    44  #endif /* EGL_VERSION_1_1 */
    45  
    46  #ifndef EGL_VERSION_1_2
    47 @@ -199,11 +209,13 @@ typedef void *EGLClientBuffer;
    48  #define EGL_SWAP_BEHAVIOR                 0x3093
    49  #define EGL_UNKNOWN                       ((EGLint)-1)
    50  #define EGL_VERTICAL_RESOLUTION           0x3091
    51 +#if !EGL_SOFT_LINKING
    52  EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
    53  EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
    54  EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
    55  EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
    56  EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
    57 +#endif
    58  #endif /* EGL_VERSION_1_2 */
    59  
    60  #ifndef EGL_VERSION_1_3
    61 @@ -232,7 +244,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
    62  #define EGL_OPENGL_API                    0x30A2
    63  #define EGL_OPENGL_BIT                    0x0008
    64  #define EGL_SWAP_BEHAVIOR_PRESERVED_BIT   0x0400
    65 +#if !EGL_SOFT_LINKING
    66  EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
    67 +#endif
    68  #endif /* EGL_VERSION_1_4 */
    69  
    70  #ifndef EGL_VERSION_1_5
    71 @@ -284,6 +298,7 @@ typedef void *EGLImage;
    72  #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
    73  #define EGL_IMAGE_PRESERVED               0x30D2
    74  #define EGL_NO_IMAGE                      ((EGLImage)0)
    75 +#if !EGL_SOFT_LINKING
    76  EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
    77  EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
    78  EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
    79 @@ -294,8 +309,13 @@ EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *nat
    80  EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
    81  EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
    82  EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
    83 +#endif
    84  #endif /* EGL_VERSION_1_5 */
    85  
    86 +#if EGL_SOFT_LINKING
    87 +#include <EGL/eglsoftlinking.h>
    88 +#endif
    89 +
    90  #ifdef __cplusplus
    91  }
    92  #endif
    93 diff --git a/include/GLES2/gl2.h b/include/GLES2/gl2.h
    94 index 027e1f7..4d710c2 100644
    95 --- a/include/GLES2/gl2.h
    96 +++ b/include/GLES2/gl2.h
    97 @@ -520,6 +520,11 @@ typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GL
    98  typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
    99  typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
    100  typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
    101 +
    102 +#if defined(_MSC_VER) && !defined(ANGLE_WEBKIT_WIN)
    103 +#include <GLES2/gl2softlinking.h>
    104 +#else
    105 +
    106  #ifdef GL_GLEXT_PROTOTYPES
    107  GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
    108  GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
    109 @@ -664,6 +669,7 @@ GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
    110  GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
    111  GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
    112  #endif
    113 +#endif
    114  #endif /* GL_ES_VERSION_2_0 */
    115  
    116  #ifdef __cplusplus
    1171diff --git a/include/GLSLANG/ShaderLang.h b/include/GLSLANG/ShaderLang.h
    118 index 965f7ab..f7b0ef7 100644
     2index 1468bb146..2875c02ab 100644
    1193--- a/include/GLSLANG/ShaderLang.h
    1204+++ b/include/GLSLANG/ShaderLang.h
    121 @@ -25,7 +25,7 @@
     5@@ -8,7 +8,7 @@
    1226 
    1237 #include <stddef.h>
     
    12812 #include <array>
    12913 #include <map>
    130 diff --git a/src/common/angleutils.cpp b/src/common/angleutils.cpp
    131 index 7099c21..4641928 100644
    132 --- a/src/common/angleutils.cpp
    133 +++ b/src/common/angleutils.cpp
    134 @@ -36,7 +36,10 @@ size_t FormatStringIntoVector(const char *fmt, va_list vararg, std::vector<char>
    135  
    136  std::string FormatString(const char *fmt, va_list vararg)
    137  {
     14diff --git a/include/GLSLANG/ShaderVars.h b/include/GLSLANG/ShaderVars.h
     15index 709428aeb..acd9c358f 100644
     16--- a/include/GLSLANG/ShaderVars.h
     17+++ b/include/GLSLANG/ShaderVars.h
     18@@ -281,10 +281,17 @@ struct WorkGroupSize
     19 {
     20     // Must have a trivial default constructor since it is used in YYSTYPE.
     21     WorkGroupSize() = default;
     22+#if defined(__clang__)
    13823+#pragma clang diagnostic push
    139 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    140      static std::vector<char> buffer(512);
     24+#pragma clang diagnostic ignored "-Wmissing-braces"
     25+#endif
     26     explicit constexpr WorkGroupSize(int initialSize)
     27         : localSizeQualifiers{initialSize, initialSize, initialSize}
     28     {
     29     }
     30+#if defined(__clang__)
    14131+#pragma clang diagnostic pop
    142  
    143      size_t len = FormatStringIntoVector(fmt, vararg, buffer);
    144      return std::string(&buffer[0], len);
    145 diff --git a/src/common/angleutils.h b/src/common/angleutils.h
    146 index f5ef7bd..4cb556c 100644
    147 --- a/src/common/angleutils.h
    148 +++ b/src/common/angleutils.h
    149 @@ -116,7 +116,10 @@ inline bool IsMaskFlagSet(T mask, T flag)
    150  
    151  inline const char* MakeStaticString(const std::string &str)
    152  {
     32+#endif
     33 
     34     void fill(int fillValue);
     35     void setLocalSize(int localSizeX, int localSizeY, int localSizeZ);
     36diff --git a/include/KHR/khrplatform.h b/include/KHR/khrplatform.h
     37old mode 100755
     38new mode 100644
     39index 68fca4827..07b61b9bd
     40--- a/include/KHR/khrplatform.h
     41+++ b/include/KHR/khrplatform.h
     42@@ -282,4 +282,4 @@ typedef enum {
     43     KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
     44 } khronos_boolean_enum_t;
     45 
     46-#endif /* __khrplatform_h_ */
     47\ No newline at end of file
     48+#endif /* __khrplatform_h_ */
     49diff --git a/src/common/third_party/smhasher/src/PMurHash.cpp b/src/common/third_party/smhasher/src/PMurHash.cpp
     50index 071bc3153..2d608e97d 100644
     51--- a/src/common/third_party/smhasher/src/PMurHash.cpp
     52+++ b/src/common/third_party/smhasher/src/PMurHash.cpp
     53@@ -74,6 +74,12 @@ on big endian machines, or a byte-by-byte read if the endianess is unknown.
     54  * ROTL32(x,r)      Rotate x left by r bits
     55  */
     56 
     57+#if !defined(__BYTE_ORDER) && defined(__GNUC__)
     58+  #define __BIG_ENDIAN __ORDER_BIG_ENDIAN__
     59+  #define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
     60+  #define __BYTE_ORDER __BYTE_ORDER__
     61+#endif
     62+
     63 /* Convention is to define __BYTE_ORDER == to one of these values */
     64 #if !defined(__BIG_ENDIAN)
     65   #define __BIG_ENDIAN 4321
     66@@ -84,7 +90,9 @@ on big endian machines, or a byte-by-byte read if the endianess is unknown.
     67 
     68 /* I386 */
     69 #if defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(i386)
     70-  #define __BYTE_ORDER __LITTLE_ENDIAN
     71+  #if !defined(__BYTE_ORDER)
     72+    #define __BYTE_ORDER __LITTLE_ENDIAN
     73+  #endif
     74   #define UNALIGNED_SAFE
     75 #endif
     76 
     77@@ -111,7 +119,14 @@ on big endian machines, or a byte-by-byte read if the endianess is unknown.
     78 /* Now find best way we can to READ_UINT32 */
     79 #if __BYTE_ORDER==__LITTLE_ENDIAN
     80   /* CPU endian matches murmurhash algorithm, so read 32-bit word directly */
     81+#if defined(__clang__)
    15382+#pragma clang diagnostic push
    154 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    155      static std::set<std::string> strings;
     83+#pragma clang diagnostic ignored "-Wcast-align"
     84+#endif
     85   #define READ_UINT32(ptr)   (*((uint32_t*)(ptr)))
     86+#if defined(__clang__)
    15687+#pragma clang diagnostic pop
    157      std::set<std::string>::iterator it = strings.find(str);
    158      if (it != strings.end())
    159      {
    160 diff --git a/src/common/debug.cpp b/src/common/debug.cpp
    161 index 746da5e..47e1565 100644
    162 --- a/src/common/debug.cpp
    163 +++ b/src/common/debug.cpp
    164 @@ -69,7 +69,10 @@ void output(bool traceInDebugOnly, MessageType messageType, DebugTraceOutputType
    165  {
    166      if (DebugAnnotationsActive())
    167      {
     88+#endif
     89 #elif __BYTE_ORDER==__BIG_ENDIAN
     90   /* TODO: Add additional cases below where a compiler provided bswap32 is available */
     91   #if defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
     92@@ -218,14 +233,28 @@ void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int le
     93   switch(n) { /* how many bytes in c */
     94   case 0: /* c=[----]  w=[3210]  b=[3210]=w            c'=[----] */
     95     for( ; ptr < end ; ptr+=4) {
     96+#if defined(__clang__)
    16897+#pragma clang diagnostic push
    169 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    170          static std::vector<char> buffer(512);
     98+#pragma clang diagnostic ignored "-Wcast-align"
     99+#endif
     100       uint32_t k1 = READ_UINT32(ptr);
     101+#if defined(__clang__)
    171102+#pragma clang diagnostic pop
    172          size_t len = FormatStringIntoVector(format, vararg, buffer);
    173          std::wstring formattedWideMessage(buffer.begin(), buffer.begin() + len);
    174  
    175 diff --git a/src/common/mathutil.cpp b/src/common/mathutil.cpp
    176 index acbcbdf..ba6da52 100644
    177 --- a/src/common/mathutil.cpp
    178 +++ b/src/common/mathutil.cpp
    179 @@ -31,9 +31,12 @@ static const int g_sharedexp_mantissabits = 9;
    180  // Emax is the maximum allowed biased exponent value (31)
    181  static const int g_sharedexp_maxexponent = 31;
    182  
     103+#endif
     104       DOBLOCK(h1, k1);
     105     }
     106     break;
     107   case 1: /* c=[0---]  w=[4321]  b=[3210]=c>>24|w<<8   c'=[4---] */
     108     for( ; ptr < end ; ptr+=4) {
     109       uint32_t k1 = c>>24;
     110+#if defined(__clang__)
    183111+#pragma clang diagnostic push
    184 +#pragma clang diagnostic ignored "-Wglobal-constructors"
    185  static const float g_sharedexp_max = ((pow(2.0f, g_sharedexp_mantissabits) - 1) /
    186                                         pow(2.0f, g_sharedexp_mantissabits)) *
    187                                       pow(2.0f, g_sharedexp_maxexponent - g_sharedexp_bias);
     112+#pragma clang diagnostic ignored "-Wcast-align"
     113+#endif
     114       c = READ_UINT32(ptr);
     115+#if defined(__clang__)
    188116+#pragma clang diagnostic pop
    189  
    190  unsigned int convertRGBFloatsTo999E5(float red, float green, float blue)
    191  {
    192 diff --git a/src/common/version.h b/src/common/version.h
    193 index e7ffa7c..b653ae3 100644
    194 --- a/src/common/version.h
    195 +++ b/src/common/version.h
    196 @@ -7,7 +7,7 @@
    197  #ifndef COMMON_VERSION_H_
    198  #define COMMON_VERSION_H_
    199  
    200 -#include "id/commit.h"
    201 +#include "commit.h"
    202  
    203  #define ANGLE_MAJOR_VERSION 2
    204  #define ANGLE_MINOR_VERSION 1
     117+#endif
     118       k1 |= c<<8;
     119       DOBLOCK(h1, k1);
     120     }
     121@@ -233,7 +262,14 @@ void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int le
     122   case 2: /* c=[10--]  w=[5432]  b=[3210]=c>>16|w<<16  c'=[54--] */
     123     for( ; ptr < end ; ptr+=4) {
     124       uint32_t k1 = c>>16;
     125+#if defined(__clang__)
     126+#pragma clang diagnostic push
     127+#pragma clang diagnostic ignored "-Wcast-align"
     128+#endif
     129       c = READ_UINT32(ptr);
     130+#if defined(__clang__)
     131+#pragma clang diagnostic pop
     132+#endif
     133       k1 |= c<<16;
     134       DOBLOCK(h1, k1);
     135     }
     136@@ -241,7 +277,14 @@ void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int le
     137   case 3: /* c=[210-]  w=[6543]  b=[3210]=c>>8|w<<24   c'=[654-] */
     138     for( ; ptr < end ; ptr+=4) {
     139       uint32_t k1 = c>>8;
     140+#if defined(__clang__)
     141+#pragma clang diagnostic push
     142+#pragma clang diagnostic ignored "-Wcast-align"
     143+#endif
     144       c = READ_UINT32(ptr);
     145+#if defined(__clang__)
     146+#pragma clang diagnostic pop
     147+#endif
     148       k1 |= c<<24;
     149       DOBLOCK(h1, k1);
     150     }
    205151diff --git a/src/compiler/preprocessor/ExpressionParser.cpp b/src/compiler/preprocessor/ExpressionParser.cpp
    206 index f737a2e..a8df235 100644
     152index ede334619..c0f8b9c97 100644
    207153--- a/src/compiler/preprocessor/ExpressionParser.cpp
    208154+++ b/src/compiler/preprocessor/ExpressionParser.cpp
     
    216162    Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
    217163diff --git a/src/compiler/preprocessor/Tokenizer.cpp b/src/compiler/preprocessor/Tokenizer.cpp
    218 index 40e910e..fee20c6 100644
     164index d8a9b9a12..d7fad68f1 100644
    219165--- a/src/compiler/preprocessor/Tokenizer.cpp
    220166+++ b/src/compiler/preprocessor/Tokenizer.cpp
    221 @@ -969,7 +969,7 @@ static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
    222  static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
     167@@ -1148,7 +1148,7 @@ static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner);
     168 static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
    223169 #endif
    224170 
    225171-#ifndef YY_NO_INPUT
    226 +#if 0
    227  
     172+#if 0 // #ifndef YY_NO_INPUT
    228173 #ifdef __cplusplus
    229  static int yyinput (yyscan_t yyscanner );
    230 @@ -1858,7 +1858,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
     174 static int yyinput ( yyscan_t yyscanner );
     175 #else
     176@@ -2049,7 +2049,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
    231177 
    232178 #endif
    233179 
    234180-#ifndef YY_NO_INPUT
    235 +#if 0
     181+#if 0 // #ifndef YY_NO_INPUT
    236182 #ifdef __cplusplus
    237183     static int yyinput (yyscan_t yyscanner)
    238184 #else
    239 @@ -1883,7 +1883,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
    240  
    241                 else
    242                         { /* need more input */
    243 -                       int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
    244 +                       auto offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
    245                         ++yyg->yy_c_buf_p;
    246  
    247                         switch ( yy_get_next_buffer( yyscanner ) )
    248 @@ -2014,7 +2014,7 @@ static void pp_load_buffer_state  (yyscan_t yyscanner)
    249         if ( ! b )
    250                 YY_FATAL_ERROR( "out of dynamic memory in pp_create_buffer()" );
    251  
    252 -       b->yy_buf_size = (yy_size_t)size;
    253 +       b->yy_buf_size = size;
    254  
    255         /* yy_ch_buf has to be 2 characters longer than the size given because
    256          * we need to put in 2 end-of-buffer characters.
    257 diff --git a/src/compiler/translator/Operator.cpp b/src/compiler/translator/Operator.cpp
    258 index 57878b9..0b693e2 100644
    259 --- a/src/compiler/translator/Operator.cpp
    260 +++ b/src/compiler/translator/Operator.cpp
    261 @@ -224,4 +224,4 @@ bool IsAssignment(TOperator op)
    262          default:
    263              return false;
     185diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
     186index c97f91d78..d0a4f6aeb 100644
     187--- a/src/compiler/translator/ParseContext.cpp
     188+++ b/src/compiler/translator/ParseContext.cpp
     189@@ -3240,8 +3240,11 @@ TIntermFunctionPrototype *TParseContext::addFunctionPrototypeDeclaration(
    264190     }
    265 -}
    266 \ No newline at end of file
    267 +}
    268 diff --git a/src/compiler/translator/OutputHLSL.h b/src/compiler/translator/OutputHLSL.h
    269 index db78859..f296dd9 100644
    270 --- a/src/compiler/translator/OutputHLSL.h
    271 +++ b/src/compiler/translator/OutputHLSL.h
    272 @@ -56,21 +56,21 @@ class OutputHLSL : public TIntermTraverser
    273      void header(TInfoSinkBase &out, const BuiltInFunctionEmulator *builtInFunctionEmulator);
    274  
    275      // Visit AST nodes and output their code to the body stream
    276 -    void visitSymbol(TIntermSymbol*);
    277 -    void visitRaw(TIntermRaw*);
    278 -    void visitConstantUnion(TIntermConstantUnion*);
    279 +    void visitSymbol(TIntermSymbol*) override;
    280 +    void visitRaw(TIntermRaw*) override;
    281 +    void visitConstantUnion(TIntermConstantUnion*) override;
    282      bool visitSwizzle(Visit visit, TIntermSwizzle *node) override;
    283 -    bool visitBinary(Visit visit, TIntermBinary*);
    284 -    bool visitUnary(Visit visit, TIntermUnary*);
    285 -    bool visitTernary(Visit visit, TIntermTernary *);
    286 -    bool visitIfElse(Visit visit, TIntermIfElse *);
    287 -    bool visitSwitch(Visit visit, TIntermSwitch *);
    288 -    bool visitCase(Visit visit, TIntermCase *);
    289 +    bool visitBinary(Visit visit, TIntermBinary*) override;
    290 +    bool visitUnary(Visit visit, TIntermUnary*) override;
    291 +    bool visitTernary(Visit visit, TIntermTernary *) override;
    292 +    bool visitIfElse(Visit visit, TIntermIfElse *) override;
    293 +    bool visitSwitch(Visit visit, TIntermSwitch *) override;
    294 +    bool visitCase(Visit visit, TIntermCase *) override;
    295      bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
    296 -    bool visitAggregate(Visit visit, TIntermAggregate*);
    297 -    bool visitBlock(Visit visit, TIntermBlock *node);
    298 -    bool visitLoop(Visit visit, TIntermLoop*);
    299 -    bool visitBranch(Visit visit, TIntermBranch*);
    300 +    bool visitAggregate(Visit visit, TIntermAggregate*) override;
    301 +    bool visitBlock(Visit visit, TIntermBlock *node) override;
    302 +    bool visitLoop(Visit visit, TIntermLoop*) override;
    303 +    bool visitBranch(Visit visit, TIntermBranch*) override;
    304  
    305      bool isSingleStatement(TIntermNode *node);
    306      bool handleExcessiveLoop(TInfoSinkBase &out, TIntermLoop *node);
    307 diff --git a/src/compiler/translator/RewriteTexelFetchOffset.cpp b/src/compiler/translator/RewriteTexelFetchOffset.cpp
    308 index 487c909..6d0c866 100644
    309 --- a/src/compiler/translator/RewriteTexelFetchOffset.cpp
    310 +++ b/src/compiler/translator/RewriteTexelFetchOffset.cpp
    311 @@ -167,4 +167,4 @@ void RewriteTexelFetchOffset(TIntermNode *root,
    312      Traverser::Apply(root, symbolTable, shaderVersion);
    313  }
    314  
    315 -}  // namespace sh
    316 \ No newline at end of file
    317 +}  // namespace sh
    318 diff --git a/src/compiler/translator/RewriteTexelFetchOffset.h b/src/compiler/translator/RewriteTexelFetchOffset.h
    319 index 4218f0b..c6db664 100644
    320 --- a/src/compiler/translator/RewriteTexelFetchOffset.h
    321 +++ b/src/compiler/translator/RewriteTexelFetchOffset.h
    322 @@ -27,4 +27,4 @@ void RewriteTexelFetchOffset(TIntermNode *root,
    323  
    324  }  // namespace sh
    325  
    326 -#endif  // COMPILER_TRANSLATOR_REWRITE_TEXELFETCHOFFSET_H_
    327 \ No newline at end of file
    328 +#endif  // COMPILER_TRANSLATOR_REWRITE_TEXELFETCHOFFSET_H_
    329 diff --git a/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp b/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp
    330 index ef708cb..d205805 100644
    331 --- a/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp
    332 +++ b/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp
    333 @@ -109,4 +109,4 @@ void RewriteUnaryMinusOperatorInt(TIntermNode *root)
    334      Traverser::Apply(root);
    335  }
    336  
    337 -}  // namespace sh
    338 \ No newline at end of file
    339 +}  // namespace sh
    340 diff --git a/src/compiler/translator/RewriteUnaryMinusOperatorInt.h b/src/compiler/translator/RewriteUnaryMinusOperatorInt.h
    341 index 50f0c44..802ed57 100644
    342 --- a/src/compiler/translator/RewriteUnaryMinusOperatorInt.h
    343 +++ b/src/compiler/translator/RewriteUnaryMinusOperatorInt.h
    344 @@ -17,4 +17,4 @@ void RewriteUnaryMinusOperatorInt(TIntermNode *root);
    345  
    346  }  // namespace sh
    347  
    348 -#endif  // COMPILER_TRANSLATOR_REWRITEUNARYMINUSOPERATORINT_H_
    349 \ No newline at end of file
    350 +#endif  // COMPILER_TRANSLATOR_REWRITEUNARYMINUSOPERATORINT_H_
     191     function->setHasPrototypeDeclaration();
     192 
     193+    // WebKit note: We currently pass true instead of false for the last parameter
     194+    // here because some compilers have an issue with nameless parameters in function
     195+    // declarations.
     196     TIntermFunctionPrototype *prototype =
     197-        createPrototypeNodeFromFunction(*function, location, false);
     198+        createPrototypeNodeFromFunction(*function, location, true);
     199 
     200     symbolTable.pop();
     201 
    351202diff --git a/src/compiler/translator/TranslatorHLSL.h b/src/compiler/translator/TranslatorHLSL.h
    352 index 213d860..d2add14 100644
     203index d7005a603..e8436e98e 100644
    353204--- a/src/compiler/translator/TranslatorHLSL.h
    354205+++ b/src/compiler/translator/TranslatorHLSL.h
    355 @@ -13,7 +13,9 @@ class TranslatorHLSL : public TCompiler
     206@@ -16,7 +16,7 @@ class TranslatorHLSL : public TCompiler
    356207 {
    357208   public:
    358209     TranslatorHLSL(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output);
    359 +#ifdef ANGLE_ENABLE_HLSL
    360      TranslatorHLSL *getAsTranslatorHLSL() override { return this; }
    361 +#endif // ANGLE_ENABLE_HLSL
    362  
    363      bool hasInterfaceBlock(const std::string &interfaceBlockName) const;
    364      unsigned int getInterfaceBlockRegister(const std::string &interfaceBlockName) const;
     210-    TranslatorHLSL *getAsTranslatorHLSL() override { return this; }
     211+    TranslatorHLSL *getAsTranslatorHLSL() { return this; }
     212 
     213     bool hasUniformBlock(const std::string &interfaceBlockName) const;
     214     unsigned int getUniformBlockRegister(const std::string &interfaceBlockName) const;
    365215diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
    366 index d9b8ada..3e50fbc 100644
     216index ce4aacf40..14cd5360c 100644
    367217--- a/src/compiler/translator/glslang_tab.cpp
    368218+++ b/src/compiler/translator/glslang_tab.cpp
     
    376226    Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
    377227diff --git a/src/compiler/translator/glslang_tab.h b/src/compiler/translator/glslang_tab.h
    378 index d0e691d..74a56da 100644
     228index 1f5308551..cb43a46df 100644
    379229--- a/src/compiler/translator/glslang_tab.h
    380230+++ b/src/compiler/translator/glslang_tab.h
     
    387237 
    388238    Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
    389 diff --git a/src/libANGLE/Caps.cpp b/src/libANGLE/Caps.cpp
    390 index 47e1cf0..0f4d69d 100644
    391 --- a/src/libANGLE/Caps.cpp
    392 +++ b/src/libANGLE/Caps.cpp
    393 @@ -77,7 +77,10 @@ void TextureCapsMap::clear()
    394  
    395  const TextureCaps &TextureCapsMap::get(GLenum internalFormat) const
    396  {
     239diff --git a/src/libANGLE/MemoryProgramCache.cpp b/src/libANGLE/MemoryProgramCache.cpp
     240index 9eec12e3e..2a9c6836a 100644
     241--- a/src/libANGLE/MemoryProgramCache.cpp
     242+++ b/src/libANGLE/MemoryProgramCache.cpp
     243@@ -234,7 +234,10 @@ LinkResult MemoryProgramCache::Deserialize(const Context *context,
     244 
     245     static_assert(MAX_VERTEX_ATTRIBS <= sizeof(unsigned long) * 8,
     246                   "Too many vertex attribs for mask");
    397247+#pragma clang diagnostic push
    398 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    399      static TextureCaps defaultUnsupportedTexture;
     248+#pragma clang diagnostic ignored "-Wconversion"
     249     state->mActiveAttribLocationsMask = stream.readInt<unsigned long>();
    400250+#pragma clang diagnostic pop
    401      InternalFormatToCapsMap::const_iterator iter = mCapsMap.find(internalFormat);
    402      return (iter != mCapsMap.end()) ? iter->second : defaultUnsupportedTexture;
    403  }
    404 @@ -594,7 +597,10 @@ const ExtensionInfoMap &GetExtensionInfoMap()
    405          return map;
    406      };
    407  
     251 
     252     unsigned int attribCount = stream.readInt<unsigned int>();
     253     ASSERT(state->mAttributes.empty());
     254@@ -408,7 +411,10 @@ LinkResult MemoryProgramCache::Deserialize(const Context *context,
     255     state->mAtomicCounterUniformRange   = RangeUI(atomicCounterRangeLow, atomicCounterRangeHigh);
     256 
     257     static_assert(SHADER_TYPE_MAX <= sizeof(unsigned long) * 8, "Too many shader types");
    408258+#pragma clang diagnostic push
    409 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    410      static const ExtensionInfoMap extensionInfo = buildExtensionInfoMap();
     259+#pragma clang diagnostic ignored "-Wconversion"
     260     state->mLinkedShaderStages = stream.readInt<unsigned long>();
    411261+#pragma clang diagnostic pop
    412      return extensionInfo;
    413  }
    414  
    415 diff --git a/src/libANGLE/Device.cpp b/src/libANGLE/Device.cpp
    416 index eb30b20..a94d500 100644
    417 --- a/src/libANGLE/Device.cpp
    418 +++ b/src/libANGLE/Device.cpp
    419 @@ -38,7 +38,10 @@ static std::string GenerateExtensionsString(const T &extensions)
    420  typedef std::set<egl::Device *> DeviceSet;
    421  static DeviceSet *GetDeviceSet()
    422  {
     262 
     263     return program->getImplementation()->load(context, infoLog, &stream);
     264 }
     265diff --git a/src/libANGLE/Platform.cpp b/src/libANGLE/Platform.cpp
     266index 702091624..c51289423 100644
     267--- a/src/libANGLE/Platform.cpp
     268+++ b/src/libANGLE/Platform.cpp
     269@@ -15,7 +15,14 @@
     270 namespace
     271 {
     272 // TODO(jmadill): Make methods owned by egl::Display.
     273-angle::PlatformMethods g_platformMethods;
     274+#if defined(__clang__)
    423275+#pragma clang diagnostic push
    424 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    425      static DeviceSet devices;
     276+#pragma clang diagnostic ignored "-Wglobal-constructors"
     277+#endif
     278+    angle::PlatformMethods g_platformMethods;
     279+#if defined(__clang__)
    426280+#pragma clang diagnostic pop
    427      return &devices;
    428  }
    429  
    430 diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp
    431 index 92d7dda..5711117 100644
    432 --- a/src/libANGLE/Display.cpp
    433 +++ b/src/libANGLE/Display.cpp
    434 @@ -90,21 +90,30 @@ typedef std::map<EGLNativeWindowType, Surface*> WindowSurfaceMap;
    435  // associated with it.
    436  static WindowSurfaceMap *GetWindowSurfaces()
    437  {
    438 +#pragma clang diagnostic push
    439 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    440      static WindowSurfaceMap windowSurfaces;
    441 +#pragma clang diagnostic pop
    442      return &windowSurfaces;
    443  }
    444  
    445  typedef std::map<EGLNativeDisplayType, Display *> ANGLEPlatformDisplayMap;
    446  static ANGLEPlatformDisplayMap *GetANGLEPlatformDisplayMap()
    447  {
    448 +#pragma clang diagnostic push
    449 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    450      static ANGLEPlatformDisplayMap displays;
    451 +#pragma clang diagnostic pop
    452      return &displays;
    453  }
    454  
    455  typedef std::map<Device *, Display *> DevicePlatformDisplayMap;
    456  static DevicePlatformDisplayMap *GetDevicePlatformDisplayMap()
    457  {
    458 +#pragma clang diagnostic push
    459 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    460      static DevicePlatformDisplayMap displays;
    461 +#pragma clang diagnostic pop
    462      return &displays;
    463  }
    464  
    465 @@ -921,7 +930,10 @@ const ClientExtensions &Display::getClientExtensions()
    466  
    467  const std::string &Display::getClientExtensionString()
    468  {
    469 +#pragma clang diagnostic push
    470 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    471      static const std::string clientExtensionsString = GenerateExtensionsString(getClientExtensions());
    472 +#pragma clang diagnostic pop
    473      return clientExtensionsString;
    474  }
    475  
    476 diff --git a/src/libANGLE/HandleRangeAllocator.cpp b/src/libANGLE/HandleRangeAllocator.cpp
    477 index f219f95..3831aca 100644
    478 --- a/src/libANGLE/HandleRangeAllocator.cpp
    479 +++ b/src/libANGLE/HandleRangeAllocator.cpp
    480 @@ -223,4 +223,4 @@ bool HandleRangeAllocator::isUsed(GLuint handle) const
    481      return current->second >= handle;
    482  }
    483  
    484 -}  // namespace gl
    485 \ No newline at end of file
    486 +}  // namespace gl
    487 diff --git a/src/libANGLE/HandleRangeAllocator.h b/src/libANGLE/HandleRangeAllocator.h
    488 index 20f9a11..1023a84 100644
    489 --- a/src/libANGLE/HandleRangeAllocator.h
    490 +++ b/src/libANGLE/HandleRangeAllocator.h
    491 @@ -56,4 +56,4 @@ class HandleRangeAllocator final : angle::NonCopyable
    492  
    493  }  // namespace gl
    494  
    495 -#endif  // LIBANGLE_HANDLERANGEALLOCATOR_H_
    496 \ No newline at end of file
    497 +#endif  // LIBANGLE_HANDLERANGEALLOCATOR_H_
    498 diff --git a/src/libANGLE/Path.h b/src/libANGLE/Path.h
    499 index b103c84..85f49c1 100644
    500 --- a/src/libANGLE/Path.h
    501 +++ b/src/libANGLE/Path.h
    502 @@ -68,4 +68,4 @@ class Path final : angle::NonCopyable
    503  
    504  }  // namespace gl
    505  
    506 -#endif  // LIBANGLE_PATH_H_
    507 \ No newline at end of file
    508 +#endif  // LIBANGLE_PATH_H_
    509 diff --git a/src/libANGLE/formatutils.cpp b/src/libANGLE/formatutils.cpp
    510 index ff285dd..55a5fc8 100644
    511 --- a/src/libANGLE/formatutils.cpp
    512 +++ b/src/libANGLE/formatutils.cpp
    513 @@ -615,7 +615,10 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
    514  
    515  static const InternalFormatInfoMap &GetInternalFormatMap()
    516  {
    517 +#pragma clang diagnostic push
    518 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    519      static const InternalFormatInfoMap formatMap = BuildInternalFormatInfoMap();
    520 +#pragma clang diagnostic pop
    521      return formatMap;
    522  }
    523  
    524 @@ -859,7 +862,10 @@ GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type)
    525  
    526  const FormatSet &GetAllSizedInternalFormats()
    527  {
    528 +#pragma clang diagnostic push
    529 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    530      static FormatSet formatSet = BuildAllSizedInternalFormatSet();
    531 +#pragma clang diagnostic pop
    532      return formatSet;
    533  }
    534  
    535 diff --git a/src/libANGLE/renderer/PathImpl.h b/src/libANGLE/renderer/PathImpl.h
    536 index 3607f69..cb03ed6 100644
    537 --- a/src/libANGLE/renderer/PathImpl.h
    538 +++ b/src/libANGLE/renderer/PathImpl.h
    539 @@ -33,4 +33,4 @@ class PathImpl : angle::NonCopyable
    540  
    541  }  // namespace rx
    542  
    543 -#endif  // LIBANGLE_RENDERER_PATHIMPL_H_
    544 \ No newline at end of file
    545 +#endif  // LIBANGLE_RENDERER_PATHIMPL_H_
    546 diff --git a/src/libANGLE/validationES3.cpp b/src/libANGLE/validationES3.cpp
    547 index 2f93651..49aa604 100644
    548 --- a/src/libANGLE/validationES3.cpp
    549 +++ b/src/libANGLE/validationES3.cpp
    550 @@ -524,7 +524,10 @@ static bool IsValidES3CopyTexImageCombination(const Format &textureFormat,
    551      const auto &textureFormatInfo     = *textureFormat.info;
    552      const auto &framebufferFormatInfo = *framebufferFormat.info;
    553  
    554 +#pragma clang diagnostic push
    555 +#pragma clang diagnostic ignored "-Wexit-time-destructors"
    556      static const CopyConversionSet conversionSet = BuildValidES3CopyTexImageCombinations();
    557 +#pragma clang diagnostic pop
    558      if (conversionSet.find(CopyConversion(textureFormatInfo.format,
    559                                            framebufferFormatInfo.format)) != conversionSet.end())
    560      {
    561 diff --git a/include/EGL/eglplatform.h b/include/EGL/eglplatform.h
    562 index 9bb75910ac0..ccaf7e6f343 100644
    563 --- a/include/EGL/eglplatform.h
    564 +++ b/include/EGL/eglplatform.h
    565 @@ -89,6 +89,12 @@ typedef int   EGLNativeDisplayType;
    566  typedef void *EGLNativeWindowType;
    567  typedef void *EGLNativePixmapType;
    568  
    569 +#elif defined(WL_EGL_PLATFORM)
    570 +
    571 +typedef struct wl_display    *EGLNativeDisplayType;
    572 +typedef struct wl_egl_pixmap *EGLNativePixmapType;
    573 +typedef struct wl_egl_window *EGLNativeWindowType;
    574 +
    575  #elif defined(__ANDROID__) || defined(ANDROID)
    576  
    577  #include <android/native_window.h>
    578 @@ -107,6 +113,8 @@ typedef intptr_t EGLNativePixmapType;
    579  
    580  #elif defined(__unix__)
    581  
    582 +#if defined(ANGLE_USE_X11) && !defined(MESA_EGL_NO_X11_HEADERS)
    583 +
    584  /* X11 (tentative)  */
    585  #include <X11/Xlib.h>
    586  #include <X11/Xutil.h>
    587 @@ -116,6 +124,14 @@ typedef Pixmap   EGLNativePixmapType;
    588  typedef Window   EGLNativeWindowType;
    589  
     281+#endif
     282 }  // anonymous namespace
     283 
     284 angle::PlatformMethods::PlatformMethods()
     285diff --git a/src/tests/compiler_tests/QualificationOrder_test.cpp b/src/tests/compiler_tests/QualificationOrder_test.cpp
     286index c0249dbb9..c82acffd7 100644
     287--- a/src/tests/compiler_tests/QualificationOrder_test.cpp
     288+++ b/src/tests/compiler_tests/QualificationOrder_test.cpp
     289@@ -429,7 +429,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersInvariant)
     290         "}\n"
     291         "void main()\n"
     292         "{\n"
     293-        "      gl_FragColor = vec4(foo0(value));\n"
     294+        "   gl_FragColor = vec4(foo0(value));\n"
     295         "}\n";
     296 
     297     if (compile(shaderString))
     298@@ -449,7 +449,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersAttribute)
     299         "}\n"
     300         "void main()\n"
     301         "{\n"
     302-        "      gl_FragColor = vec4(foo0(value));\n"
     303+        "   gl_FragColor = vec4(foo0(value));\n"
     304         "}\n";
     305 
     306     if (compile(shaderString))
     307@@ -469,7 +469,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersVarying)
     308         "}\n"
     309         "void main()\n"
     310         "{\n"
     311-        "      gl_FragColor = vec4(foo0(value));\n"
     312+        "   gl_FragColor = vec4(foo0(value));\n"
     313         "}\n";
     314 
     315     if (compile(shaderString))
     316@@ -491,7 +491,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersLayout)
     317         "out vec4 colorOUT;\n"
     318         "void main()\n"
     319         "{\n"
     320-        "      colorOUT = vec4(foo0(value));\n"
     321+        "   colorOUT = vec4(foo0(value));\n"
     322         "}\n";
     323 
     324     if (compile(shaderString))
     325@@ -513,7 +513,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersCentroidIn
     326         "out vec4 colorOUT;\n"
     327         "void main()\n"
     328         "{\n"
     329-        "      colorOUT = vec4(foo0(value));\n"
     330+        "   colorOUT = vec4(foo0(value));\n"
     331         "}\n";
     332 
     333     if (compile(shaderString))
     334@@ -535,7 +535,7 @@ TEST_F(QualificationOrderFragmentShaderTest, InvalidFunctionParametersFlatIn)
     335         "out vec4 colorOUT;\n"
     336         "void main()\n"
     337         "{\n"
     338-        "      colorOUT = vec4(foo0(value));\n"
     339+        "   colorOUT = vec4(foo0(value));\n"
     340         "}\n";
     341 
     342     if (compile(shaderString))
     343diff --git a/src/tests/deqp_support/es2fShaderMatrixTests.cpp b/src/tests/deqp_support/es2fShaderMatrixTests.cpp
     344index 9feb4dcfa..54d8474fd 100644
     345--- a/src/tests/deqp_support/es2fShaderMatrixTests.cpp
     346+++ b/src/tests/deqp_support/es2fShaderMatrixTests.cpp
     347@@ -69,77 +69,77 @@ using tcu::Mat4;
     348 // Uniform / constant values for tests.
     349 // \note Input1 should not contain 0 components as it is used as divisor in div cases.
     350 // \todo [2012-02-14 pyry] Make these dynamic.
     351-static const float     s_constInFloat[2]       = { 0.5f, -0.2f };
     352-static const Vec2      s_constInVec2[2]        = { Vec2(1.2f, 0.5f), Vec2(0.5f, 1.0f) };
     353-static const Vec3      s_constInVec3[2]        = { Vec3(1.1f, 0.1f, 0.5f), Vec3(-0.2f, 0.5f, 0.8f) };
     354-static const Vec4      s_constInVec4[2]        = { Vec4(1.4f, 0.2f, -0.5f, 0.7f), Vec4(0.2f, -1.0f, 0.5f, 0.8f) };
     355+static const float  s_constInFloat[2]   = { 0.5f, -0.2f };
     356+static const Vec2   s_constInVec2[2]    = { Vec2(1.2f, 0.5f), Vec2(0.5f, 1.0f) };
     357+static const Vec3   s_constInVec3[2]    = { Vec3(1.1f, 0.1f, 0.5f), Vec3(-0.2f, 0.5f, 0.8f) };
     358+static const Vec4   s_constInVec4[2]    = { Vec4(1.4f, 0.2f, -0.5f, 0.7f), Vec4(0.2f, -1.0f, 0.5f, 0.8f) };
     359 
     360 static const float s_constInMat20[] = { 0.6f, -1.0f, 0.7f, 0.4f };
     361 static const float s_constInMat21[] = { -0.5f, -0.4f, 0.7f, -0.8f };
     362 
     363 static const float s_constInMat31[] =
     364 {
     365-       1.2f,  0.1f, -0.1f,
     366-       0.1f,  0.9f,  0.2f,
     367-       0.2f, -0.1f,  0.7f
     368+    1.2f,  0.1f, -0.1f,
     369+    0.1f,  0.9f,  0.2f,
     370+    0.2f, -0.1f,  0.7f
     371 };
     372 static const float s_constInMat41[] =
     373 {
     374-        1.2f, -0.2f,  0.4f,  0.1f,
     375-        0.1f,  0.8f, -0.1f, -0.2f,
     376-       -0.2f,  0.1f, -1.1f,  0.3f,
     377-        0.1f,  0.2f,  0.3f,  0.9f
     378+     1.2f, -0.2f,  0.4f,  0.1f,
     379+     0.1f,  0.8f, -0.1f, -0.2f,
     380+    -0.2f,  0.1f, -1.1f,  0.3f,
     381+     0.1f,  0.2f,  0.3f,  0.9f
     382 };
     383 
     384-static const Mat2      s_constInMat2[2]        = { tcu::Mat2(s_constInMat20), tcu::Mat2(s_constInMat21) };
     385-static const Mat3      s_constInMat3[2]        = { tcu::translationMatrix(tcu::Vec2(0.2f, -0.3f)), tcu::Mat3(s_constInMat31) };
     386-static const Mat4      s_constInMat4[2]        = { tcu::translationMatrix(tcu::Vec3(0.2f, -0.3f, 0.15f)), tcu::Mat4(s_constInMat41) };
     387+static const Mat2   s_constInMat2[2]    = { tcu::Mat2(s_constInMat20), tcu::Mat2(s_constInMat21) };
     388+static const Mat3   s_constInMat3[2]    = { tcu::translationMatrix(tcu::Vec2(0.2f, -0.3f)), tcu::Mat3(s_constInMat31) };
     389+static const Mat4   s_constInMat4[2]    = { tcu::translationMatrix(tcu::Vec3(0.2f, -0.3f, 0.15f)), tcu::Mat4(s_constInMat41) };
     390 
     391 namespace MatrixCaseUtils
     392 {
     393 
     394 enum InputType
     395 {
     396-       INPUTTYPE_CONST = 0,
     397-       INPUTTYPE_UNIFORM,
     398-       INPUTTYPE_DYNAMIC,
     399+    INPUTTYPE_CONST = 0,
     400+    INPUTTYPE_UNIFORM,
     401+    INPUTTYPE_DYNAMIC,
     402 
     403-       INPUTTYPE_LAST
     404+    INPUTTYPE_LAST
     405 };
     406 
     407 struct ShaderInput
     408 {
     409-       ShaderInput (InputType inputType_, DataType dataType_, Precision precision_)
     410-               : inputType     (inputType_)
     411-               , dataType      (dataType_)
     412-               , precision     (precision_)
     413-       {
     414-       }
     415-
     416-       InputType               inputType;
     417-       DataType                dataType;
     418-       Precision               precision;
     419+    ShaderInput (InputType inputType_, DataType dataType_, Precision precision_)
     420+        : inputType (inputType_)
     421+        , dataType  (dataType_)
     422+        , precision (precision_)
     423+    {
     424+    }
     425+
     426+    InputType       inputType;
     427+    DataType        dataType;
     428+    Precision       precision;
     429 };
     430 
     431 enum MatrixOp
     432 {
     433-       OP_ADD = 0,
     434-       OP_SUB,
     435-       OP_MUL,
     436-       OP_DIV,
     437-       OP_COMP_MUL,
     438-       OP_UNARY_PLUS,
     439-       OP_NEGATION,
     440-       OP_PRE_INCREMENT,
     441-       OP_PRE_DECREMENT,
     442-       OP_POST_INCREMENT,
     443-       OP_POST_DECREMENT,
     444-       OP_ADD_INTO,
     445-       OP_SUBTRACT_FROM,
     446-       OP_MULTIPLY_INTO,
     447-       OP_DIVIDE_INTO,
     448-
     449-       OP_LAST
     450+    OP_ADD = 0,
     451+    OP_SUB,
     452+    OP_MUL,
     453+    OP_DIV,
     454+    OP_COMP_MUL,
     455+    OP_UNARY_PLUS,
     456+    OP_NEGATION,
     457+    OP_PRE_INCREMENT,
     458+    OP_PRE_DECREMENT,
     459+    OP_POST_INCREMENT,
     460+    OP_POST_DECREMENT,
     461+    OP_ADD_INTO,
     462+    OP_SUBTRACT_FROM,
     463+    OP_MULTIPLY_INTO,
     464+    OP_DIVIDE_INTO,
     465+
     466+    OP_LAST
     467 };
     468 
     469 // Type traits.
     470@@ -147,16 +147,16 @@ enum MatrixOp
     471 template <int DataT>
     472 struct TypeTraits;
     473 
     474-#define DECLARE_TYPE_TRAIT(DATATYPE, TYPE)     \
     475-template<>                                                                     \
     476-struct TypeTraits<DATATYPE> {                          \
     477-       typedef TYPE Type;                                              \
     478+#define DECLARE_TYPE_TRAIT(DATATYPE, TYPE)  \
     479+template<>                                  \
     480+struct TypeTraits<DATATYPE> {               \
     481+    typedef TYPE Type;                      \
     482 }
     483 
     484-DECLARE_TYPE_TRAIT(TYPE_FLOAT,         float);
     485-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC2,    tcu::Vec2);
     486-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC3,    tcu::Vec3);
     487-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC4,    tcu::Vec4);
     488+DECLARE_TYPE_TRAIT(TYPE_FLOAT,      float);
     489+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC2, tcu::Vec2);
     490+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC3, tcu::Vec3);
     491+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC4, tcu::Vec4);
     492 DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2, tcu::Mat2);
     493 DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3, tcu::Mat3);
     494 DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4, tcu::Mat4);
     495@@ -165,169 +165,169 @@ DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4, tcu::Mat4);
     496 
     497 enum OperationType
     498 {
     499-       OPERATIONTYPE_BINARY_OPERATOR = 0,
     500-       OPERATIONTYPE_BINARY_FUNCTION,
     501-       OPERATIONTYPE_UNARY_PREFIX_OPERATOR,
     502-       OPERATIONTYPE_UNARY_POSTFIX_OPERATOR,
     503-       OPERATIONTYPE_ASSIGNMENT,
     504+    OPERATIONTYPE_BINARY_OPERATOR = 0,
     505+    OPERATIONTYPE_BINARY_FUNCTION,
     506+    OPERATIONTYPE_UNARY_PREFIX_OPERATOR,
     507+    OPERATIONTYPE_UNARY_POSTFIX_OPERATOR,
     508+    OPERATIONTYPE_ASSIGNMENT,
     509 
     510-       OPERATIONTYPE_LAST
     511+    OPERATIONTYPE_LAST
     512 };
     513 
     514 static const char* getOperationName (MatrixOp op)
     515 {
     516-       switch (op)
     517-       {
     518-               case OP_ADD:                    return "+";
     519-               case OP_SUB:                    return "-";
     520-               case OP_MUL:                    return "*";
     521-               case OP_DIV:                    return "/";
     522-               case OP_COMP_MUL:               return "matrixCompMult";
     523-               case OP_UNARY_PLUS:             return "+";
     524-               case OP_NEGATION:               return "-";
     525-               case OP_PRE_INCREMENT:  return "++";
     526-               case OP_PRE_DECREMENT:  return "--";
     527-               case OP_POST_INCREMENT: return "++";
     528-               case OP_POST_DECREMENT: return "--";
     529-               case OP_ADD_INTO:               return "+=";
     530-               case OP_SUBTRACT_FROM:  return "-=";
     531-               case OP_MULTIPLY_INTO:  return "*=";
     532-               case OP_DIVIDE_INTO:    return "/=";
     533-               default:
     534-                       DE_ASSERT(DE_FALSE);
     535-                       return "";
     536-       }
     537+    switch (op)
     538+    {
     539+        case OP_ADD:            return "+";
     540+        case OP_SUB:            return "-";
     541+        case OP_MUL:            return "*";
     542+        case OP_DIV:            return "/";
     543+        case OP_COMP_MUL:       return "matrixCompMult";
     544+        case OP_UNARY_PLUS:     return "+";
     545+        case OP_NEGATION:       return "-";
     546+        case OP_PRE_INCREMENT:  return "++";
     547+        case OP_PRE_DECREMENT:  return "--";
     548+        case OP_POST_INCREMENT: return "++";
     549+        case OP_POST_DECREMENT: return "--";
     550+        case OP_ADD_INTO:       return "+=";
     551+        case OP_SUBTRACT_FROM:  return "-=";
     552+        case OP_MULTIPLY_INTO:  return "*=";
     553+        case OP_DIVIDE_INTO:    return "/=";
     554+        default:
     555+            DE_ASSERT(DE_FALSE);
     556+            return "";
     557+    }
     558 }
     559 
     560 static OperationType getOperationType (MatrixOp op)
     561 {
     562-       switch (op)
     563-       {
     564-               case OP_ADD:                    return OPERATIONTYPE_BINARY_OPERATOR;
     565-               case OP_SUB:                    return OPERATIONTYPE_BINARY_OPERATOR;
     566-               case OP_MUL:                    return OPERATIONTYPE_BINARY_OPERATOR;
     567-               case OP_DIV:                    return OPERATIONTYPE_BINARY_OPERATOR;
     568-               case OP_COMP_MUL:               return OPERATIONTYPE_BINARY_FUNCTION;
     569-               case OP_UNARY_PLUS:             return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     570-               case OP_NEGATION:               return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     571-               case OP_PRE_INCREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     572-               case OP_PRE_DECREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     573-               case OP_POST_INCREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     574-               case OP_POST_DECREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     575-               case OP_ADD_INTO:               return OPERATIONTYPE_ASSIGNMENT;
     576-               case OP_SUBTRACT_FROM:  return OPERATIONTYPE_ASSIGNMENT;
     577-               case OP_MULTIPLY_INTO:  return OPERATIONTYPE_ASSIGNMENT;
     578-               case OP_DIVIDE_INTO:    return OPERATIONTYPE_ASSIGNMENT;
     579-               default:
     580-                       DE_ASSERT(DE_FALSE);
     581-                       return OPERATIONTYPE_LAST;
     582-       }
     583+    switch (op)
     584+    {
     585+        case OP_ADD:            return OPERATIONTYPE_BINARY_OPERATOR;
     586+        case OP_SUB:            return OPERATIONTYPE_BINARY_OPERATOR;
     587+        case OP_MUL:            return OPERATIONTYPE_BINARY_OPERATOR;
     588+        case OP_DIV:            return OPERATIONTYPE_BINARY_OPERATOR;
     589+        case OP_COMP_MUL:       return OPERATIONTYPE_BINARY_FUNCTION;
     590+        case OP_UNARY_PLUS:     return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     591+        case OP_NEGATION:       return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     592+        case OP_PRE_INCREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     593+        case OP_PRE_DECREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     594+        case OP_POST_INCREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     595+        case OP_POST_DECREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     596+        case OP_ADD_INTO:       return OPERATIONTYPE_ASSIGNMENT;
     597+        case OP_SUBTRACT_FROM:  return OPERATIONTYPE_ASSIGNMENT;
     598+        case OP_MULTIPLY_INTO:  return OPERATIONTYPE_ASSIGNMENT;
     599+        case OP_DIVIDE_INTO:    return OPERATIONTYPE_ASSIGNMENT;
     600+        default:
     601+            DE_ASSERT(DE_FALSE);
     602+            return OPERATIONTYPE_LAST;
     603+    }
     604 }
     605 
     606 enum TestMatrixType
     607 {
     608-       TESTMATRIXTYPE_DEFAULT = 0,
     609-       TESTMATRIXTYPE_NEGATED,
     610-       TESTMATRIXTYPE_INCREMENTED,
     611-       TESTMATRIXTYPE_DECREMENTED,
     612+    TESTMATRIXTYPE_DEFAULT = 0,
     613+    TESTMATRIXTYPE_NEGATED,
     614+    TESTMATRIXTYPE_INCREMENTED,
     615+    TESTMATRIXTYPE_DECREMENTED,
     616 
     617-       TESTMATRIXTYPE_LAST
     618+    TESTMATRIXTYPE_LAST
     619 };
     620 
     621 static TestMatrixType getOperationTestMatrixType (MatrixOp op)
     622 {
     623-       switch(op)
     624-       {
     625-               case OP_ADD:                    return TESTMATRIXTYPE_DEFAULT;
     626-               case OP_SUB:                    return TESTMATRIXTYPE_DEFAULT;
     627-               case OP_MUL:                    return TESTMATRIXTYPE_DEFAULT;
     628-               case OP_DIV:                    return TESTMATRIXTYPE_DEFAULT;
     629-               case OP_COMP_MUL:               return TESTMATRIXTYPE_DEFAULT;
     630-               case OP_UNARY_PLUS:             return TESTMATRIXTYPE_DEFAULT;
     631-               case OP_NEGATION:               return TESTMATRIXTYPE_NEGATED;
     632-               case OP_PRE_INCREMENT:  return TESTMATRIXTYPE_NEGATED;
     633-               case OP_PRE_DECREMENT:  return TESTMATRIXTYPE_INCREMENTED;
     634-               case OP_POST_INCREMENT: return TESTMATRIXTYPE_NEGATED;
     635-               case OP_POST_DECREMENT: return TESTMATRIXTYPE_DEFAULT;
     636-               case OP_ADD_INTO:               return TESTMATRIXTYPE_DECREMENTED;
     637-               case OP_SUBTRACT_FROM:  return TESTMATRIXTYPE_DEFAULT;
     638-               case OP_MULTIPLY_INTO:  return TESTMATRIXTYPE_DEFAULT;
     639-               case OP_DIVIDE_INTO:    return TESTMATRIXTYPE_DEFAULT;
     640-
     641-               default:
     642-                       DE_ASSERT(DE_FALSE);
     643-                       return TESTMATRIXTYPE_LAST;
     644-       }
     645+    switch(op)
     646+    {
     647+        case OP_ADD:            return TESTMATRIXTYPE_DEFAULT;
     648+        case OP_SUB:            return TESTMATRIXTYPE_DEFAULT;
     649+        case OP_MUL:            return TESTMATRIXTYPE_DEFAULT;
     650+        case OP_DIV:            return TESTMATRIXTYPE_DEFAULT;
     651+        case OP_COMP_MUL:       return TESTMATRIXTYPE_DEFAULT;
     652+        case OP_UNARY_PLUS:     return TESTMATRIXTYPE_DEFAULT;
     653+        case OP_NEGATION:       return TESTMATRIXTYPE_NEGATED;
     654+        case OP_PRE_INCREMENT:  return TESTMATRIXTYPE_NEGATED;
     655+        case OP_PRE_DECREMENT:  return TESTMATRIXTYPE_INCREMENTED;
     656+        case OP_POST_INCREMENT: return TESTMATRIXTYPE_NEGATED;
     657+        case OP_POST_DECREMENT: return TESTMATRIXTYPE_DEFAULT;
     658+        case OP_ADD_INTO:       return TESTMATRIXTYPE_DECREMENTED;
     659+        case OP_SUBTRACT_FROM:  return TESTMATRIXTYPE_DEFAULT;
     660+        case OP_MULTIPLY_INTO:  return TESTMATRIXTYPE_DEFAULT;
     661+        case OP_DIVIDE_INTO:    return TESTMATRIXTYPE_DEFAULT;
     662+
     663+        default:
     664+            DE_ASSERT(DE_FALSE);
     665+            return TESTMATRIXTYPE_LAST;
     666+    }
     667 }
     668 
     669 static bool isOperationBinary (MatrixOp op)
     670 {
     671-       return getOperationType(op) == OPERATIONTYPE_BINARY_OPERATOR ||
     672-              getOperationType(op) == OPERATIONTYPE_BINARY_FUNCTION ||
     673-              getOperationType(op) == OPERATIONTYPE_ASSIGNMENT;
     674+    return getOperationType(op) == OPERATIONTYPE_BINARY_OPERATOR ||
     675+           getOperationType(op) == OPERATIONTYPE_BINARY_FUNCTION ||
     676+           getOperationType(op) == OPERATIONTYPE_ASSIGNMENT;
     677 }
     678 
     679 static bool isOperationMatrixScalar (MatrixOp op)
     680 {
     681-       return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV;
     682+    return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV;
     683 }
     684 
     685 static bool isOperationMatrixVector (MatrixOp op)
     686 {
     687-       return op == OP_MUL;
     688+    return op == OP_MUL;
     689 }
     690 
     691 static bool isOperationMatrixMatrix (MatrixOp op)
     692 {
     693-       return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV || op == OP_COMP_MUL;
     694+    return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV || op == OP_COMP_MUL;
     695 }
     696 
     697 static bool isOperationUnary (MatrixOp op)
     698 {
     699-       return  op == OP_UNARY_PLUS                     ||
     700-                       op == OP_NEGATION                       ||
     701-                       op == OP_PRE_INCREMENT          ||
     702-                       op == OP_PRE_DECREMENT          ||
     703-                       op == OP_POST_INCREMENT         ||
     704-                       op == OP_POST_DECREMENT;
     705+    return  op == OP_UNARY_PLUS         ||
     706+            op == OP_NEGATION           ||
     707+            op == OP_PRE_INCREMENT      ||
     708+            op == OP_PRE_DECREMENT      ||
     709+            op == OP_POST_INCREMENT     ||
     710+            op == OP_POST_DECREMENT;
     711 }
     712 
     713 static bool isOperationValueModifying (MatrixOp op)
     714 {
     715-       return  op == OP_PRE_INCREMENT          ||
     716-                       op == OP_PRE_DECREMENT          ||
     717-                       op == OP_POST_INCREMENT         ||
     718-                       op == OP_POST_DECREMENT;
     719+    return  op == OP_PRE_INCREMENT      ||
     720+            op == OP_PRE_DECREMENT      ||
     721+            op == OP_POST_INCREMENT     ||
     722+            op == OP_POST_DECREMENT;
     723 }
     724 
     725 static bool isOperationAssignment (MatrixOp op)
     726 {
     727-       return  op == OP_ADD_INTO                ||
     728-                       op == OP_SUBTRACT_FROM   ||
     729-                       op == OP_MULTIPLY_INTO   ||
     730-                       op == OP_DIVIDE_INTO;
     731+    return  op == OP_ADD_INTO        ||
     732+            op == OP_SUBTRACT_FROM   ||
     733+            op == OP_MULTIPLY_INTO   ||
     734+            op == OP_DIVIDE_INTO;
     735 }
     736 
     737 // Operation nature
     738 
     739 enum OperationNature
     740 {
     741-       OPERATIONNATURE_PURE = 0,
     742-       OPERATIONNATURE_MUTATING,
     743-       OPERATIONNATURE_ASSIGNMENT,
     744+    OPERATIONNATURE_PURE = 0,
     745+    OPERATIONNATURE_MUTATING,
     746+    OPERATIONNATURE_ASSIGNMENT,
     747 
     748-       OPERATIONNATURE_LAST
     749+    OPERATIONNATURE_LAST
     750 };
     751 
     752 static OperationNature getOperationNature (MatrixOp op)
     753 {
     754-       if (isOperationAssignment(op))
     755-               return OPERATIONNATURE_ASSIGNMENT;
     756+    if (isOperationAssignment(op))
     757+        return OPERATIONNATURE_ASSIGNMENT;
     758 
     759-       if (isOperationValueModifying(op))
     760-               return OPERATIONNATURE_MUTATING;
     761+    if (isOperationValueModifying(op))
     762+        return OPERATIONNATURE_MUTATING;
     763 
     764-       return OPERATIONNATURE_PURE;
     765+    return OPERATIONNATURE_PURE;
     766 }
     767 
     768 // Input value loader.
     769@@ -335,47 +335,47 @@ static OperationNature getOperationNature (MatrixOp op)
     770 template <int InputT, int DataT>
     771 typename TypeTraits<DataT>::Type getInputValue (const ShaderEvalContext& evalCtx, int inputNdx);
     772 
     773-template <> inline float               getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT>                     (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInFloat[inputNdx];  }
     774-template <> inline tcu::Vec2   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec2[inputNdx];   }
     775-template <> inline tcu::Vec3   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec3[inputNdx];   }
     776-template <> inline tcu::Vec4   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec4[inputNdx];   }
     777-template <> inline tcu::Mat2   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat2[inputNdx];   }
     778-template <> inline tcu::Mat3   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat3[inputNdx];   }
     779-template <> inline tcu::Mat4   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat4[inputNdx];   }
     780+template <> inline float        getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT>         (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInFloat[inputNdx];  }
     781+template <> inline tcu::Vec2    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec2[inputNdx];   }
     782+template <> inline tcu::Vec3    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec3[inputNdx];   }
     783+template <> inline tcu::Vec4    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec4[inputNdx];   }
     784+template <> inline tcu::Mat2    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat2[inputNdx];   }
     785+template <> inline tcu::Mat3    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat3[inputNdx];   }
     786+template <> inline tcu::Mat4    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInMat4[inputNdx];   }
     787 
     788-template <> inline float               getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT>                     (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.x();                                       }
     789-template <> inline tcu::Vec2   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1);                     }
     790-template <> inline tcu::Vec3   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2);          }
     791-template <> inline tcu::Vec4   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2, 3);       }
     792+template <> inline float        getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT>         (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.x();                   }
     793+template <> inline tcu::Vec2    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1);         }
     794+template <> inline tcu::Vec3    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2);      }
     795+template <> inline tcu::Vec4    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2, 3);   }
     796 
     797 template <> inline tcu::Mat2 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT2> (const ShaderEvalContext& evalCtx, int inputNdx)
     798 {
     799-       DE_UNREF(inputNdx); // Not used.
     800-       tcu::Mat2 m;
     801-       m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     802-       m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     803-       return m;
     804+    DE_UNREF(inputNdx); // Not used.
     805+    tcu::Mat2 m;
     806+    m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     807+    m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     808+    return m;
     809 }
     810 
     811 template <> inline tcu::Mat3 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT3> (const ShaderEvalContext& evalCtx, int inputNdx)
     812 {
     813-       DE_UNREF(inputNdx); // Not used.
     814-       tcu::Mat3 m;
     815-       m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     816-       m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     817-       m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     818-       return m;
     819+    DE_UNREF(inputNdx); // Not used.
     820+    tcu::Mat3 m;
     821+    m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     822+    m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     823+    m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     824+    return m;
     825 }
     826 
     827 template <> inline tcu::Mat4 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT4> (const ShaderEvalContext& evalCtx, int inputNdx)
     828 {
     829-       DE_UNREF(inputNdx); // Not used.
     830-       tcu::Mat4 m;
     831-       m.setColumn(0, evalCtx.in[0]);
     832-       m.setColumn(1, evalCtx.in[1]);
     833-       m.setColumn(2, evalCtx.in[2]);
     834-       m.setColumn(3, evalCtx.in[3]);
     835-       return m;
     836+    DE_UNREF(inputNdx); // Not used.
     837+    tcu::Mat4 m;
     838+    m.setColumn(0, evalCtx.in[0]);
     839+    m.setColumn(1, evalCtx.in[1]);
     840+    m.setColumn(2, evalCtx.in[2]);
     841+    m.setColumn(3, evalCtx.in[3]);
     842+    return m;
     843 }
     844 
     845 // Reduction from expression result to vec3.
     846@@ -392,13 +392,13 @@ inline tcu::Vec3 reduceToVec3 (const tcu::Mat4& value) { return value.getColumn(
     847 template <typename T, int Rows, int Cols>
     848 tcu::Matrix<T, Rows, Cols> matrixCompMult (const tcu::Matrix<T, Rows, Cols>& a, const tcu::Matrix<T, Rows, Cols>& b)
     849 {
     850-       tcu::Matrix<T, Rows, Cols> retVal;
     851+    tcu::Matrix<T, Rows, Cols> retVal;
     852 
     853-       for (int r = 0; r < Rows; ++r)
     854-               for (int c = 0; c < Cols; ++c)
     855-                       retVal(r,c) = a(r,c) * b(r, c);
     856+    for (int r = 0; r < Rows; ++r)
     857+        for (int c = 0; c < Cols; ++c)
     858+            retVal(r,c) = a(r,c) * b(r, c);
     859 
     860-       return retVal;
     861+    return retVal;
     862 }
     863 
     864 // negate
     865@@ -406,13 +406,13 @@ tcu::Matrix<T, Rows, Cols> matrixCompMult (const tcu::Matrix<T, Rows, Cols>& a,
     866 template <typename T, int Rows, int Cols>
     867 tcu::Matrix<T, Rows, Cols> negate (const tcu::Matrix<T, Rows, Cols>& mat)
     868 {
     869-       tcu::Matrix<T, Rows, Cols> retVal;
     870+    tcu::Matrix<T, Rows, Cols> retVal;
     871 
     872-       for (int r = 0; r < Rows; ++r)
     873-               for (int c = 0; c < Cols; ++c)
     874-                       retVal(r,c) = -mat(r, c);
     875+    for (int r = 0; r < Rows; ++r)
     876+        for (int c = 0; c < Cols; ++c)
     877+            retVal(r,c) = -mat(r, c);
     878 
     879-       return retVal;
     880+    return retVal;
     881 }
     882 
     883 // increment/decrement
     884@@ -420,25 +420,25 @@ tcu::Matrix<T, Rows, Cols> negate (const tcu::Matrix<T, Rows, Cols>& mat)
     885 template <typename T, int Rows, int Cols>
     886 tcu::Matrix<T, Rows, Cols> increment (const tcu::Matrix<T, Rows, Cols>& mat)
     887 {
     888-       tcu::Matrix<T, Rows, Cols> retVal;
     889+    tcu::Matrix<T, Rows, Cols> retVal;
     890 
     891-       for (int r = 0; r < Rows; ++r)
     892-               for (int c = 0; c < Cols; ++c)
     893-                       retVal(r,c) = mat(r, c) + 1.0f;
     894+    for (int r = 0; r < Rows; ++r)
     895+        for (int c = 0; c < Cols; ++c)
     896+            retVal(r,c) = mat(r, c) + 1.0f;
     897 
     898-       return retVal;
     899+    return retVal;
     900 }
     901 
     902 template <typename T, int Rows, int Cols>
     903 tcu::Matrix<T, Rows, Cols> decrement (const tcu::Matrix<T, Rows, Cols>& mat)
     904 {
     905-       tcu::Matrix<T, Rows, Cols> retVal;
     906+    tcu::Matrix<T, Rows, Cols> retVal;
     907 
     908-       for (int r = 0; r < Rows; ++r)
     909-               for (int c = 0; c < Cols; ++c)
     910-                       retVal(r,c) = mat(r, c) - 1.0f;
     911+    for (int r = 0; r < Rows; ++r)
     912+        for (int c = 0; c < Cols; ++c)
     913+            retVal(r,c) = mat(r, c) - 1.0f;
     914 
     915-       return retVal;
     916+    return retVal;
     917 }
     918 
     919 // Evaluator template.
     920@@ -449,244 +449,244 @@ struct Evaluator;
     921 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     922 struct Evaluator<OP_ADD, In0Type, In0DataType, In1Type, In1DataType>
     923 {
     924-       static void evaluate (ShaderEvalContext& evalCtx)
     925-       {
     926-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) + getInputValue<In1Type, In1DataType>(evalCtx, 1));
     927-       }
     928+    static void evaluate (ShaderEvalContext& evalCtx)
     929+    {
     930+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) + getInputValue<In1Type, In1DataType>(evalCtx, 1));
     931+    }
     932 };
     933 
     934 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     935 struct Evaluator<OP_SUB, In0Type, In0DataType, In1Type, In1DataType>
     936 {
     937-       static void evaluate (ShaderEvalContext& evalCtx)
     938-       {
     939-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) - getInputValue<In1Type, In1DataType>(evalCtx, 1));
     940-       }
     941+    static void evaluate (ShaderEvalContext& evalCtx)
     942+    {
     943+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) - getInputValue<In1Type, In1DataType>(evalCtx, 1));
     944+    }
     945 };
     946 
     947 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     948 struct Evaluator<OP_MUL, In0Type, In0DataType, In1Type, In1DataType>
     949 {
     950-       static void evaluate (ShaderEvalContext& evalCtx)
     951-       {
     952-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) * getInputValue<In1Type, In1DataType>(evalCtx, 1));
     953-       }
     954+    static void evaluate (ShaderEvalContext& evalCtx)
     955+    {
     956+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) * getInputValue<In1Type, In1DataType>(evalCtx, 1));
     957+    }
     958 };
     959 
     960 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     961 struct Evaluator<OP_DIV, In0Type, In0DataType, In1Type, In1DataType>
     962 {
     963-       static void evaluate (ShaderEvalContext& evalCtx)
     964-       {
     965-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) / getInputValue<In1Type, In1DataType>(evalCtx, 1));
     966-       }
     967+    static void evaluate (ShaderEvalContext& evalCtx)
     968+    {
     969+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) / getInputValue<In1Type, In1DataType>(evalCtx, 1));
     970+    }
     971 };
     972 
     973 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     974 struct Evaluator<OP_COMP_MUL, In0Type, In0DataType, In1Type, In1DataType>
     975 {
     976-       static void evaluate (ShaderEvalContext& evalCtx)
     977-       {
     978-               evalCtx.color.xyz() = reduceToVec3(matrixCompMult(getInputValue<In0Type, In0DataType>(evalCtx, 0), getInputValue<In1Type, In1DataType>(evalCtx, 1)));
     979-       }
     980+    static void evaluate (ShaderEvalContext& evalCtx)
     981+    {
     982+        evalCtx.color.xyz() = reduceToVec3(matrixCompMult(getInputValue<In0Type, In0DataType>(evalCtx, 0), getInputValue<In1Type, In1DataType>(evalCtx, 1)));
     983+    }
     984 };
     985 
     986 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     987 struct Evaluator<OP_UNARY_PLUS, In0Type, In0DataType, In1Type, In1DataType>
     988 {
     989-       static void evaluate (ShaderEvalContext& evalCtx)
     990-       {
     991-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0));
     992-       }
     993+    static void evaluate (ShaderEvalContext& evalCtx)
     994+    {
     995+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0));
     996+    }
     997 };
     998 
     999 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1000 struct Evaluator<OP_NEGATION, In0Type, In0DataType, In1Type, In1DataType>
     1001 {
     1002-       static void evaluate (ShaderEvalContext& evalCtx)
     1003-       {
     1004-               evalCtx.color.xyz() = reduceToVec3(negate(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1005-       }
     1006+    static void evaluate (ShaderEvalContext& evalCtx)
     1007+    {
     1008+        evalCtx.color.xyz() = reduceToVec3(negate(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1009+    }
     1010 };
     1011 
     1012 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1013 struct Evaluator<OP_PRE_INCREMENT, In0Type, In0DataType, In1Type, In1DataType>
     1014 {
     1015-       static void evaluate (ShaderEvalContext& evalCtx)
     1016-       {
     1017-               // modifying reduction: sum modified value too
     1018-               evalCtx.color.xyz() = reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0))) + reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1019-       }
     1020+    static void evaluate (ShaderEvalContext& evalCtx)
     1021+    {
     1022+        // modifying reduction: sum modified value too
     1023+        evalCtx.color.xyz() = reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0))) + reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1024+    }
     1025 };
     1026 
     1027 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1028 struct Evaluator<OP_PRE_DECREMENT, In0Type, In0DataType, In1Type, In1DataType>
     1029 {
     1030-       static void evaluate (ShaderEvalContext& evalCtx)
     1031-       {
     1032-               // modifying reduction: sum modified value too
     1033-               evalCtx.color.xyz() = reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0))) + reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1034-       }
     1035+    static void evaluate (ShaderEvalContext& evalCtx)
     1036+    {
     1037+        // modifying reduction: sum modified value too
     1038+        evalCtx.color.xyz() = reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0))) + reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1039+    }
     1040 };
     1041 
     1042 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1043 struct Evaluator<OP_POST_INCREMENT, In0Type, In0DataType, In1Type, In1DataType>
     1044 {
     1045-       static void evaluate (ShaderEvalContext& evalCtx)
     1046-       {
     1047-               // modifying reduction: sum modified value too
     1048-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0)) + reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1049-       }
     1050+    static void evaluate (ShaderEvalContext& evalCtx)
     1051+    {
     1052+        // modifying reduction: sum modified value too
     1053+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0)) + reduceToVec3(increment(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1054+    }
     1055 };
     1056 
     1057 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1058 struct Evaluator<OP_POST_DECREMENT, In0Type, In0DataType, In1Type, In1DataType>
     1059 {
     1060-       static void evaluate (ShaderEvalContext& evalCtx)
     1061-       {
     1062-               // modifying reduction: sum modified value too
     1063-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0)) + reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1064-       }
     1065+    static void evaluate (ShaderEvalContext& evalCtx)
     1066+    {
     1067+        // modifying reduction: sum modified value too
     1068+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0)) + reduceToVec3(decrement(getInputValue<In0Type, In0DataType>(evalCtx, 0)));
     1069+    }
     1070 };
     1071 
     1072 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1073 struct Evaluator<OP_ADD_INTO, In0Type, In0DataType, In1Type, In1DataType>
     1074 {
     1075-       static void evaluate (ShaderEvalContext& evalCtx)
     1076-       {
     1077-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) + getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1078-       }
     1079+    static void evaluate (ShaderEvalContext& evalCtx)
     1080+    {
     1081+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) + getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1082+    }
     1083 };
     1084 
     1085 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1086 struct Evaluator<OP_SUBTRACT_FROM, In0Type, In0DataType, In1Type, In1DataType>
     1087 {
     1088-       static void evaluate (ShaderEvalContext& evalCtx)
     1089-       {
     1090-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) - getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1091-       }
     1092+    static void evaluate (ShaderEvalContext& evalCtx)
     1093+    {
     1094+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) - getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1095+    }
     1096 };
     1097 
     1098 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1099 struct Evaluator<OP_MULTIPLY_INTO, In0Type, In0DataType, In1Type, In1DataType>
     1100 {
     1101-       static void evaluate (ShaderEvalContext& evalCtx)
     1102-       {
     1103-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) * getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1104-       }
     1105+    static void evaluate (ShaderEvalContext& evalCtx)
     1106+    {
     1107+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) * getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1108+    }
     1109 };
     1110 
     1111 template <int In0Type, int In0DataType, int In1Type, int In1DataType>
     1112 struct Evaluator<OP_DIVIDE_INTO, In0Type, In0DataType, In1Type, In1DataType>
     1113 {
     1114-       static void evaluate (ShaderEvalContext& evalCtx)
     1115-       {
     1116-               evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) / getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1117-       }
     1118+    static void evaluate (ShaderEvalContext& evalCtx)
     1119+    {
     1120+        evalCtx.color.xyz() = reduceToVec3(getInputValue<In0Type, In0DataType>(evalCtx, 0) / getInputValue<In1Type, In1DataType>(evalCtx, 1));
     1121+    }
     1122 };
     1123 
     1124 ShaderEvalFunc getEvalFunc (const ShaderInput& in0, const ShaderInput& in1, MatrixOp op)
     1125 {
     1126-       DE_STATIC_ASSERT(TYPE_LAST              <= (1<<7));
     1127-       DE_STATIC_ASSERT(OP_LAST                <= (1<<4));
     1128-       DE_STATIC_ASSERT(INPUTTYPE_LAST <= (1<<2));
     1129-
     1130-#define PACK_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE) (((OP) << 18) | ((IN0TYPE) << 16) | ((IN0DATATYPE) << 9) | ((IN1TYPE) << 7) | (IN1DATATYPE))
     1131-
     1132-#define MAKE_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)         \
     1133-       case PACK_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE):    \
     1134-               return Evaluator<OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE>::evaluate
     1135-
     1136-#define SCALAR_OPS(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE) \
     1137-       MAKE_EVAL_CASE(OP_ADD,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1138-       MAKE_EVAL_CASE(OP_SUB,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1139-       MAKE_EVAL_CASE(OP_MUL,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1140-       MAKE_EVAL_CASE(OP_DIV,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1141-
     1142-#define ALL_OPS(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)    \
     1143-       MAKE_EVAL_CASE(OP_ADD,                  IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1144-       MAKE_EVAL_CASE(OP_SUB,                  IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1145-       MAKE_EVAL_CASE(OP_MUL,                  IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1146-       MAKE_EVAL_CASE(OP_DIV,                  IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1147-       MAKE_EVAL_CASE(OP_COMP_MUL,             IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);
     1148-
     1149-#define MUL_OP(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)     \
     1150-       MAKE_EVAL_CASE(OP_MUL, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1151-
     1152-#define MAKE_MAT_SCALAR_VEC_CASES(OP, TYPE0, TYPE1)                            \
     1153-       OP(INPUTTYPE_CONST,             TYPE0, INPUTTYPE_CONST,         TYPE1); \
     1154-       OP(INPUTTYPE_DYNAMIC,   TYPE0, INPUTTYPE_CONST,         TYPE1); \
     1155-       OP(INPUTTYPE_CONST,             TYPE0, INPUTTYPE_DYNAMIC,       TYPE1); \
     1156-       OP(INPUTTYPE_DYNAMIC,   TYPE0, INPUTTYPE_DYNAMIC,       TYPE1)
     1157-
     1158-#define MAKE_MAT_MAT_CASES(OP, MATTYPE)                                                                \
     1159-       OP(INPUTTYPE_CONST,             MATTYPE, INPUTTYPE_CONST,       MATTYPE);       \
     1160-       OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_CONST,       MATTYPE)
     1161-
     1162-#define UNARY_OP(IN0TYPE, IN0DATATYPE)                                                                                                         \
     1163-       MAKE_EVAL_CASE(OP_UNARY_PLUS,           IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);      \
     1164-       MAKE_EVAL_CASE(OP_NEGATION,                     IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);      \
     1165-       MAKE_EVAL_CASE(OP_PRE_INCREMENT,        IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);      \
     1166-       MAKE_EVAL_CASE(OP_PRE_DECREMENT,        IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);      \
     1167-       MAKE_EVAL_CASE(OP_POST_INCREMENT,       IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);      \
     1168-       MAKE_EVAL_CASE(OP_POST_DECREMENT,       IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST)
     1169-
     1170-#define MAKE_UNARY_CASES(OP, MATTYPE)  \
     1171-       OP(INPUTTYPE_CONST,             MATTYPE);       \
     1172-       OP(INPUTTYPE_DYNAMIC,   MATTYPE)
     1173-
     1174-#define ASSIGN_OP(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)                                                  \
     1175-       MAKE_EVAL_CASE(OP_ADD_INTO,                     IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1176-       MAKE_EVAL_CASE(OP_SUBTRACT_FROM,        IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1177-       MAKE_EVAL_CASE(OP_MULTIPLY_INTO,        IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1178-       MAKE_EVAL_CASE(OP_DIVIDE_INTO,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1179-
     1180-#define MAKE_ASSIGNMENT_CASES(OP, MATTYPE)                                             \
     1181-       OP(INPUTTYPE_CONST,             MATTYPE, INPUTTYPE_CONST,       MATTYPE);       \
     1182-       OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_CONST,       MATTYPE);       \
     1183-       OP(INPUTTYPE_CONST,             MATTYPE, INPUTTYPE_DYNAMIC,     MATTYPE);       \
     1184-       OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_DYNAMIC,     MATTYPE)
     1185-
     1186-       // \note At the moment there is no difference between uniform and const inputs. This saves binary size.
     1187-       InputType in0Type = in0.inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_DYNAMIC : INPUTTYPE_CONST;
     1188-       InputType in1Type = in1.inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_DYNAMIC : INPUTTYPE_CONST;
     1189-
     1190-       switch (PACK_EVAL_CASE(op, in0Type, in0.dataType, in1Type, in1.dataType))
     1191-       {
     1192-               // Matrix-scalar.
     1193-               MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT2, TYPE_FLOAT);
     1194-               MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT3, TYPE_FLOAT);
     1195-               MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT4, TYPE_FLOAT);
     1196-
     1197-               // Matrix-vector.
     1198-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_MAT2, TYPE_FLOAT_VEC2);
     1199-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_MAT3, TYPE_FLOAT_VEC3);
     1200-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_MAT4, TYPE_FLOAT_VEC4);
     1201-
     1202-               // Vector-matrix.
     1203-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT2);
     1204-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT3);
     1205-               MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,               TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT4);
     1206-
     1207-               // Matrix-matrix.
     1208-               MAKE_MAT_MAT_CASES(ALL_OPS,     TYPE_FLOAT_MAT2);
     1209-               MAKE_MAT_MAT_CASES(ALL_OPS,     TYPE_FLOAT_MAT3);
     1210-               MAKE_MAT_MAT_CASES(ALL_OPS,     TYPE_FLOAT_MAT4);
     1211-
     1212-               // Unary matrix
     1213-               MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT2);
     1214-               MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT3);
     1215-               MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT4);
     1216-
     1217-               // Assignment matrix
     1218-               MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT2);
     1219-               MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT3);
     1220-               MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT4);
     1221-
     1222-               default:
     1223-                       DE_ASSERT(DE_FALSE);
     1224-                       return DE_NULL;
     1225-       }
     1226+    DE_STATIC_ASSERT(TYPE_LAST      <= (1<<7));
     1227+    DE_STATIC_ASSERT(OP_LAST        <= (1<<4));
     1228+    DE_STATIC_ASSERT(INPUTTYPE_LAST <= (1<<2));
     1229+
     1230+#define PACK_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)  (((OP) << 18) | ((IN0TYPE) << 16) | ((IN0DATATYPE) << 9) | ((IN1TYPE) << 7) | (IN1DATATYPE))
     1231+
     1232+#define MAKE_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)      \
     1233+    case PACK_EVAL_CASE(OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE):    \
     1234+        return Evaluator<OP, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE>::evaluate
     1235+
     1236+#define SCALAR_OPS(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)  \
     1237+    MAKE_EVAL_CASE(OP_ADD,      IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1238+    MAKE_EVAL_CASE(OP_SUB,      IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1239+    MAKE_EVAL_CASE(OP_MUL,      IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1240+    MAKE_EVAL_CASE(OP_DIV,      IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1241+
     1242+#define ALL_OPS(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE) \
     1243+    MAKE_EVAL_CASE(OP_ADD,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1244+    MAKE_EVAL_CASE(OP_SUB,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1245+    MAKE_EVAL_CASE(OP_MUL,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1246+    MAKE_EVAL_CASE(OP_DIV,          IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1247+    MAKE_EVAL_CASE(OP_COMP_MUL,     IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);
     1248+
     1249+#define MUL_OP(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)  \
     1250+    MAKE_EVAL_CASE(OP_MUL, IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1251+
     1252+#define MAKE_MAT_SCALAR_VEC_CASES(OP, TYPE0, TYPE1)             \
     1253+    OP(INPUTTYPE_CONST,     TYPE0, INPUTTYPE_CONST,     TYPE1); \
     1254+    OP(INPUTTYPE_DYNAMIC,   TYPE0, INPUTTYPE_CONST,     TYPE1); \
     1255+    OP(INPUTTYPE_CONST,     TYPE0, INPUTTYPE_DYNAMIC,   TYPE1); \
     1256+    OP(INPUTTYPE_DYNAMIC,   TYPE0, INPUTTYPE_DYNAMIC,   TYPE1)
     1257+
     1258+#define MAKE_MAT_MAT_CASES(OP, MATTYPE)                             \
     1259+    OP(INPUTTYPE_CONST,     MATTYPE, INPUTTYPE_CONST,   MATTYPE);   \
     1260+    OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_CONST,   MATTYPE)
     1261+
     1262+#define UNARY_OP(IN0TYPE, IN0DATATYPE)                                                      \
     1263+    MAKE_EVAL_CASE(OP_UNARY_PLUS,       IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);  \
     1264+    MAKE_EVAL_CASE(OP_NEGATION,         IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);  \
     1265+    MAKE_EVAL_CASE(OP_PRE_INCREMENT,    IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);  \
     1266+    MAKE_EVAL_CASE(OP_PRE_DECREMENT,    IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);  \
     1267+    MAKE_EVAL_CASE(OP_POST_INCREMENT,   IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST);  \
     1268+    MAKE_EVAL_CASE(OP_POST_DECREMENT,   IN0TYPE, IN0DATATYPE, INPUTTYPE_CONST, TYPE_LAST)
     1269+
     1270+#define MAKE_UNARY_CASES(OP, MATTYPE)   \
     1271+    OP(INPUTTYPE_CONST,     MATTYPE);   \
     1272+    OP(INPUTTYPE_DYNAMIC,   MATTYPE)
     1273+
     1274+#define ASSIGN_OP(IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)                           \
     1275+    MAKE_EVAL_CASE(OP_ADD_INTO,         IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1276+    MAKE_EVAL_CASE(OP_SUBTRACT_FROM,    IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1277+    MAKE_EVAL_CASE(OP_MULTIPLY_INTO,    IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE);    \
     1278+    MAKE_EVAL_CASE(OP_DIVIDE_INTO,      IN0TYPE, IN0DATATYPE, IN1TYPE, IN1DATATYPE)
     1279+
     1280+#define MAKE_ASSIGNMENT_CASES(OP, MATTYPE)                      \
     1281+    OP(INPUTTYPE_CONST,     MATTYPE, INPUTTYPE_CONST,   MATTYPE);   \
     1282+    OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_CONST,   MATTYPE);   \
     1283+    OP(INPUTTYPE_CONST,     MATTYPE, INPUTTYPE_DYNAMIC, MATTYPE);   \
     1284+    OP(INPUTTYPE_DYNAMIC,   MATTYPE, INPUTTYPE_DYNAMIC, MATTYPE)
     1285+
     1286+    // \note At the moment there is no difference between uniform and const inputs. This saves binary size.
     1287+    InputType in0Type = in0.inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_DYNAMIC : INPUTTYPE_CONST;
     1288+    InputType in1Type = in1.inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_DYNAMIC : INPUTTYPE_CONST;
     1289+
     1290+    switch (PACK_EVAL_CASE(op, in0Type, in0.dataType, in1Type, in1.dataType))
     1291+    {
     1292+        // Matrix-scalar.
     1293+        MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT2, TYPE_FLOAT);
     1294+        MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT3, TYPE_FLOAT);
     1295+        MAKE_MAT_SCALAR_VEC_CASES(SCALAR_OPS,   TYPE_FLOAT_MAT4, TYPE_FLOAT);
     1296+
     1297+        // Matrix-vector.
     1298+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_MAT2, TYPE_FLOAT_VEC2);
     1299+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_MAT3, TYPE_FLOAT_VEC3);
     1300+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_MAT4, TYPE_FLOAT_VEC4);
     1301+
     1302+        // Vector-matrix.
     1303+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT2);
     1304+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT3);
     1305+        MAKE_MAT_SCALAR_VEC_CASES(MUL_OP,       TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT4);
     1306+
     1307+        // Matrix-matrix.
     1308+        MAKE_MAT_MAT_CASES(ALL_OPS, TYPE_FLOAT_MAT2);
     1309+        MAKE_MAT_MAT_CASES(ALL_OPS, TYPE_FLOAT_MAT3);
     1310+        MAKE_MAT_MAT_CASES(ALL_OPS, TYPE_FLOAT_MAT4);
     1311+
     1312+        // Unary matrix
     1313+        MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT2);
     1314+        MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT3);
     1315+        MAKE_UNARY_CASES(UNARY_OP, TYPE_FLOAT_MAT4);
     1316+
     1317+        // Assignment matrix
     1318+        MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT2);
     1319+        MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT3);
     1320+        MAKE_ASSIGNMENT_CASES(ASSIGN_OP, TYPE_FLOAT_MAT4);
     1321+
     1322+        default:
     1323+            DE_ASSERT(DE_FALSE);
     1324+            return DE_NULL;
     1325+    }
     1326 
     1327 #undef PACK_EVAL_CASE
     1328 #undef MAKE_EVAL_CASE
     1329@@ -701,35 +701,35 @@ ShaderEvalFunc getEvalFunc (const ShaderInput& in0, const ShaderInput& in1, Matr
     1330 template <int Size>
     1331 void writeVectorConstructor (std::ostream& str, const tcu::Vector<float, Size>& v)
     1332 {
     1333-       str << "vec" << Size << "(";
     1334-       for (int ndx = 0; ndx < Size; ndx++)
     1335-       {
     1336-               if (ndx != 0)
     1337-                       str << ", ";
     1338-               str << de::floatToString(v[ndx], 1);
     1339-       }
     1340-       str << ")";
     1341+    str << "vec" << Size << "(";
     1342+    for (int ndx = 0; ndx < Size; ndx++)
     1343+    {
     1344+        if (ndx != 0)
     1345+            str << ", ";
     1346+        str << de::floatToString(v[ndx], 1);
     1347+    }
     1348+    str << ")";
     1349 }
     1350 
     1351 template <int Cols, int Rows>
     1352 void writeMatrixConstructor (std::ostream& str, const tcu::Matrix<float, Rows, Cols>& m)
     1353 {
     1354-       if (Rows == Cols)
     1355-               str << "mat" << Cols;
     1356-       else
     1357-               str << "mat" << Cols << "x" << Rows;
     1358-
     1359-       str << "(";
     1360-       for (int colNdx = 0; colNdx < Cols; colNdx++)
     1361-       {
     1362-               for (int rowNdx = 0; rowNdx < Rows; rowNdx++)
     1363-               {
     1364-                       if (rowNdx > 0 || colNdx > 0)
     1365-                               str << ", ";
     1366-                       str << de::floatToString(m(rowNdx, colNdx), 1);
     1367-               }
     1368-       }
     1369-       str << ")";
     1370+    if (Rows == Cols)
     1371+        str << "mat" << Cols;
     1372+    else
     1373+        str << "mat" << Cols << "x" << Rows;
     1374+
     1375+    str << "(";
     1376+    for (int colNdx = 0; colNdx < Cols; colNdx++)
     1377+    {
     1378+        for (int rowNdx = 0; rowNdx < Rows; rowNdx++)
     1379+        {
     1380+            if (rowNdx > 0 || colNdx > 0)
     1381+                str << ", ";
     1382+            str << de::floatToString(m(rowNdx, colNdx), 1);
     1383+        }
     1384+    }
     1385+    str << ")";
     1386 }
     1387 
     1388 } // MatrixCaseUtils
     1389@@ -739,26 +739,26 @@ using namespace MatrixCaseUtils;
     1390 class ShaderMatrixCase : public ShaderRenderCase
     1391 {
     1392 public:
     1393-                                       ShaderMatrixCase                        (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase);
     1394-                                       ~ShaderMatrixCase                       (void);
     1395+                    ShaderMatrixCase            (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase);
     1396+                    ~ShaderMatrixCase           (void);
     1397 
     1398-       void                    init                                            (void);
     1399+    void            init                        (void);
     1400 
     1401 protected:
     1402-       std::string             genGLSLMatToVec3Reduction       (const glu::DataType& matType, const char* varName);
     1403-       void                    setupUniforms                           (int programID, const tcu::Vec4& constCoords);
     1404+    std::string     genGLSLMatToVec3Reduction   (const glu::DataType& matType, const char* varName);
     1405+    void            setupUniforms               (int programID, const tcu::Vec4& constCoords);
     1406 
     1407 private:
     1408-       ShaderInput             m_in0;
     1409-       ShaderInput             m_in1;
     1410-       MatrixOp                m_op;
     1411+    ShaderInput     m_in0;
     1412+    ShaderInput     m_in1;
     1413+    MatrixOp        m_op;
     1414 };
     1415 
     1416 ShaderMatrixCase::ShaderMatrixCase (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase)
     1417-       : ShaderRenderCase      (context.getTestContext(), context.getRenderContext(), context.getContextInfo(), name, desc, isVertexCase, getEvalFunc(in0, in1, op))
     1418-       , m_in0                         (in0)
     1419-       , m_in1                         (in1)
     1420-       , m_op                          (op)
     1421+    : ShaderRenderCase  (context.getTestContext(), context.getRenderContext(), context.getContextInfo(), name, desc, isVertexCase, getEvalFunc(in0, in1, op))
     1422+    , m_in0             (in0)
     1423+    , m_in1             (in1)
     1424+    , m_op              (op)
     1425 {
     1426 }
     1427 
     1428@@ -768,315 +768,315 @@ ShaderMatrixCase::~ShaderMatrixCase (void)
     1429 
     1430 void ShaderMatrixCase::init (void)
     1431 {
     1432-       std::ostringstream      vtx;
     1433-       std::ostringstream      frag;
     1434-       std::ostringstream&     op                              = m_isVertexCase ? vtx : frag;
     1435-
     1436-       bool                            isInDynMat0             = isDataTypeMatrix(m_in0.dataType) && m_in0.inputType == INPUTTYPE_DYNAMIC;
     1437-       bool                            isInDynMat1             = isDataTypeMatrix(m_in1.dataType) && m_in1.inputType == INPUTTYPE_DYNAMIC;
     1438-       string                          inValue0;
     1439-       string                          inValue1;
     1440-       DataType                        resultType              = TYPE_LAST;
     1441-       Precision                       resultPrec              = m_in0.precision;
     1442-       vector<string>          passVars;
     1443-       int                                     numInputs               = (isOperationBinary(m_op)) ? (2) : (1);
     1444-
     1445-       std::string                     operationValue0;
     1446-       std::string                     operationValue1;
     1447-
     1448-       DE_ASSERT(!isInDynMat0 || !isInDynMat1); // Only single dynamic matrix input is allowed.
     1449-       DE_UNREF(isInDynMat0 && isInDynMat1);
     1450-
     1451-       // Compute result type.
     1452-       if (isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     1453-       {
     1454-               DE_ASSERT(m_in0.dataType == m_in1.dataType);
     1455-               resultType = m_in0.dataType;
     1456-       }
     1457-       else if (getOperationType(m_op) == OPERATIONTYPE_UNARY_PREFIX_OPERATOR ||
     1458-                        getOperationType(m_op) == OPERATIONTYPE_UNARY_POSTFIX_OPERATOR)
     1459-       {
     1460-               resultType = m_in0.dataType;
     1461-       }
     1462-       else
     1463-       {
     1464-               int                     matNdx          = isDataTypeMatrix(m_in0.dataType) ? 0 : 1;
     1465-               DataType        matrixType      = matNdx == 0 ? m_in0.dataType : m_in1.dataType;
     1466-               DataType        otherType       = matNdx == 0 ? m_in1.dataType : m_in0.dataType;
     1467-
     1468-               if (otherType == TYPE_FLOAT)
     1469-                       resultType = matrixType;
     1470-               else
     1471-               {
     1472-                       DE_ASSERT(isDataTypeVector(otherType));
     1473-                       resultType = otherType;
     1474-               }
     1475-       }
     1476-
     1477-       vtx << "attribute highp vec4 a_position;\n";
     1478-       if (m_isVertexCase)
     1479-       {
     1480-               vtx << "varying mediump vec4 v_color;\n";
     1481-               frag << "varying mediump vec4 v_color;\n";
     1482-       }
     1483-
     1484-       // Input declarations.
     1485-       for (int inNdx = 0; inNdx < numInputs; inNdx++)
     1486-       {
     1487-               const ShaderInput&      in                      = inNdx > 0 ? m_in1 : m_in0;
     1488-               const char*                     precName        = getPrecisionName(in.precision);
     1489-               const char*                     typeName        = getDataTypeName(in.dataType);
     1490-               string&                         inValue         = inNdx > 0 ? inValue1 : inValue0;
     1491-
     1492-               if (in.inputType == INPUTTYPE_DYNAMIC)
     1493-               {
     1494-                       vtx << "attribute " << precName << " " << typeName << " a_";
     1495-
     1496-                       if (isDataTypeMatrix(in.dataType))
     1497-                       {
     1498-                               // a_matN, v_matN
     1499-                               vtx << typeName << ";\n";
     1500-                               if (!m_isVertexCase)
     1501-                               {
     1502-                                       vtx << "varying " << precName << " " << typeName << " v_" << typeName << ";\n";
     1503-                                       frag << "varying " << precName << " " << typeName << " v_" << typeName << ";\n";
     1504-                                       passVars.push_back(typeName);
     1505-                               }
     1506-
     1507-                               inValue = string(m_isVertexCase ? "a_" : "v_") + getDataTypeName(in.dataType);
     1508-                       }
     1509-                       else
     1510-                       {
     1511-                               // a_coords, v_coords
     1512-                               vtx << "coords;\n";
     1513-                               if (!m_isVertexCase)
     1514-                               {
     1515-                                       vtx << "varying " << precName << " " << typeName << " v_coords;\n";
     1516-                                       frag << "varying " << precName << " " << typeName << " v_coords;\n";
     1517-                                       passVars.push_back("coords");
     1518-                               }
     1519-
     1520-                               inValue = m_isVertexCase ? "a_coords" : "v_coords";
     1521-                       }
     1522-               }
     1523-               else if (in.inputType == INPUTTYPE_UNIFORM)
     1524-               {
     1525-                       op << "uniform " << precName << " " << typeName << " u_in" << inNdx << ";\n";
     1526-                       inValue = string("u_in") + de::toString(inNdx);
     1527-               }
     1528-               else if (in.inputType == INPUTTYPE_CONST)
     1529-               {
     1530-                       op << "const " << precName << " " << typeName << " in" << inNdx << " = ";
     1531-
     1532-                       // Generate declaration.
     1533-                       switch (in.dataType)
     1534-                       {
     1535-                               case TYPE_FLOAT:                op << de::floatToString(s_constInFloat[inNdx], 1);                                      break;
     1536-                               case TYPE_FLOAT_VEC2:   writeVectorConstructor<2>(op, s_constInVec2[inNdx]);                            break;
     1537-                               case TYPE_FLOAT_VEC3:   writeVectorConstructor<3>(op, s_constInVec3[inNdx]);                            break;
     1538-                               case TYPE_FLOAT_VEC4:   writeVectorConstructor<4>(op, s_constInVec4[inNdx]);                            break;
     1539-                               case TYPE_FLOAT_MAT2:   writeMatrixConstructor<2, 2>(op, Mat2(s_constInMat2[inNdx]));           break;
     1540-                               case TYPE_FLOAT_MAT3:   writeMatrixConstructor<3, 3>(op, Mat3(s_constInMat3[inNdx]));           break;
     1541-                               case TYPE_FLOAT_MAT4:   writeMatrixConstructor<4, 4>(op, Mat4(s_constInMat4[inNdx]));           break;
     1542-
     1543-                               default:
     1544-                                       DE_ASSERT(DE_FALSE);
     1545-                       }
     1546-
     1547-                       op << ";\n";
     1548-
     1549-                       inValue = string("in") + de::toString(inNdx);
     1550-               }
     1551-       }
     1552-
     1553-       vtx << "\n"
     1554-               << "void main (void)\n"
     1555-               << "{\n"
     1556-               << "    gl_Position = a_position;\n";
     1557-       frag << "\n"
     1558-                << "void main (void)\n"
     1559-                << "{\n";
     1560-
     1561-       if (m_isVertexCase)
     1562-       {
     1563-               frag << "       gl_FragColor = v_color;\n";
     1564-       }
     1565-       else
     1566-       {
     1567-               for (vector<string>::const_iterator copyIter = passVars.begin(); copyIter != passVars.end(); copyIter++)
     1568-                       vtx << "        v_" << *copyIter << " = " << "a_" << *copyIter << ";\n";
     1569-       }
     1570-
     1571-       // Operation.
     1572-
     1573-       switch (getOperationNature(m_op))
     1574-       {
     1575-               case OPERATIONNATURE_PURE:
     1576-                       DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     1577-
     1578-                       operationValue0 = inValue0;
     1579-                       operationValue1 = inValue1;
     1580-                       break;
     1581-
     1582-               case OPERATIONNATURE_MUTATING:
     1583-                       DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     1584-
     1585-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " tmpValue = " << inValue0 << ";\n";
     1586-
     1587-                       operationValue0 = "tmpValue";
     1588-                       operationValue1 = inValue1;
     1589-                       break;
     1590-
     1591-               case OPERATIONNATURE_ASSIGNMENT:
     1592-                       DE_ASSERT(getOperationType(m_op) == OPERATIONTYPE_ASSIGNMENT);
     1593-
     1594-                       operationValue0 = inValue0;
     1595-                       operationValue1 = inValue1;
     1596-                       break;
     1597-
     1598-               default:
     1599-                       DE_ASSERT(DE_FALSE);
     1600-       }
     1601-
     1602-       switch (getOperationType(m_op))
     1603-       {
     1604-               case OPERATIONTYPE_BINARY_OPERATOR:
     1605-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << " " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     1606-                       break;
     1607-
     1608-               case OPERATIONTYPE_UNARY_PREFIX_OPERATOR:
     1609-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << operationValue0 << ";\n";
     1610-                       break;
     1611-
     1612-               case OPERATIONTYPE_UNARY_POSTFIX_OPERATOR:
     1613-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << getOperationName(m_op) << ";\n";
     1614-                       break;
     1615-
     1616-               case OPERATIONTYPE_BINARY_FUNCTION:
     1617-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ", " << operationValue1 << ");\n";
     1618-                       break;
     1619-
     1620-               case OPERATIONTYPE_ASSIGNMENT:
     1621-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << ";\n";
     1622-                       op << " res " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     1623-                       break;
     1624-
     1625-               default:
     1626-                       DE_ASSERT(DE_FALSE);
     1627-       }
     1628-
     1629-       // Reduction to vec3 (rgb). Check the used value too if it was modified.
     1630-       op << " " << (m_isVertexCase ? "v_color" : "gl_FragColor") << " = ";
     1631-
     1632-       if (isOperationValueModifying(m_op))
     1633-               op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0) + vec4(" << genGLSLMatToVec3Reduction(resultType, "tmpValue") << ", 0.0);\n";
     1634-       else
     1635-               op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0);\n";
     1636-
     1637-       vtx << "}\n";
     1638-       frag << "}\n";
     1639-
     1640-       m_vertShaderSource      = vtx.str();
     1641-       m_fragShaderSource      = frag.str();
     1642-
     1643-       // \todo [2012-02-14 pyry] Compute better values for matrix tests.
     1644-       m_userAttribTransforms.resize(4);
     1645-       for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     1646-       {
     1647-               m_userAttribTransforms[attribNdx] = Mat4(0.0f);
     1648-               m_userAttribTransforms[attribNdx]((0 + attribNdx) % 4, 0) = 1.0f;
     1649-               m_userAttribTransforms[attribNdx]((1 + attribNdx) % 4, 1) = 1.0f;
     1650-               m_userAttribTransforms[attribNdx]((2 + attribNdx) % 4, 2) = 1.0f;
     1651-               m_userAttribTransforms[attribNdx]((3 + attribNdx) % 4, 3) = 1.0f;
     1652-       }
     1653-
     1654-       // prevent bad reference cases such as black result images by fine-tuning used matrices
     1655-       if (getOperationTestMatrixType(m_op) != TESTMATRIXTYPE_DEFAULT)
     1656-       {
     1657-               for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     1658-               {
     1659-                       for (int row = 0; row < 4; row++)
     1660-                       for (int col = 0; col < 4; col++)
     1661-                       {
     1662-                               switch (getOperationTestMatrixType(m_op))
     1663-                               {
     1664-                                       case TESTMATRIXTYPE_NEGATED:
     1665-                                               m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col);
     1666-                                               break;
     1667-                                       case TESTMATRIXTYPE_INCREMENTED:
     1668-                                               m_userAttribTransforms[attribNdx](row, col) += 0.3f;
     1669-                                               break;
     1670-                                       case TESTMATRIXTYPE_DECREMENTED:
     1671-                                               m_userAttribTransforms[attribNdx](row, col) -= 0.1f;
     1672-                                               break;
     1673-
     1674-                                       default:
     1675-                                               DE_ASSERT(DE_FALSE);
     1676-                                               break;
     1677-                               }
     1678-                       }
     1679-               }
     1680-       }
     1681-
     1682-       ShaderRenderCase::init();
     1683+    std::ostringstream  vtx;
     1684+    std::ostringstream  frag;
     1685+    std::ostringstream& op              = m_isVertexCase ? vtx : frag;
     1686+
     1687+    bool                isInDynMat0     = isDataTypeMatrix(m_in0.dataType) && m_in0.inputType == INPUTTYPE_DYNAMIC;
     1688+    bool                isInDynMat1     = isDataTypeMatrix(m_in1.dataType) && m_in1.inputType == INPUTTYPE_DYNAMIC;
     1689+    string              inValue0;
     1690+    string              inValue1;
     1691+    DataType            resultType      = TYPE_LAST;
     1692+    Precision           resultPrec      = m_in0.precision;
     1693+    vector<string>      passVars;
     1694+    int                 numInputs       = (isOperationBinary(m_op)) ? (2) : (1);
     1695+
     1696+    std::string         operationValue0;
     1697+    std::string         operationValue1;
     1698+
     1699+    DE_ASSERT(!isInDynMat0 || !isInDynMat1); // Only single dynamic matrix input is allowed.
     1700+    DE_UNREF(isInDynMat0 && isInDynMat1);
     1701+
     1702+    // Compute result type.
     1703+    if (isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     1704+    {
     1705+        DE_ASSERT(m_in0.dataType == m_in1.dataType);
     1706+        resultType = m_in0.dataType;
     1707+    }
     1708+    else if (getOperationType(m_op) == OPERATIONTYPE_UNARY_PREFIX_OPERATOR ||
     1709+             getOperationType(m_op) == OPERATIONTYPE_UNARY_POSTFIX_OPERATOR)
     1710+    {
     1711+        resultType = m_in0.dataType;
     1712+    }
     1713+    else
     1714+    {
     1715+        int         matNdx      = isDataTypeMatrix(m_in0.dataType) ? 0 : 1;
     1716+        DataType    matrixType  = matNdx == 0 ? m_in0.dataType : m_in1.dataType;
     1717+        DataType    otherType   = matNdx == 0 ? m_in1.dataType : m_in0.dataType;
     1718+
     1719+        if (otherType == TYPE_FLOAT)
     1720+            resultType = matrixType;
     1721+        else
     1722+        {
     1723+            DE_ASSERT(isDataTypeVector(otherType));
     1724+            resultType = otherType;
     1725+        }
     1726+    }
     1727+
     1728+    vtx << "attribute highp vec4 a_position;\n";
     1729+    if (m_isVertexCase)
     1730+    {
     1731+        vtx << "varying mediump vec4 v_color;\n";
     1732+        frag << "varying mediump vec4 v_color;\n";
     1733+    }
     1734+
     1735+    // Input declarations.
     1736+    for (int inNdx = 0; inNdx < numInputs; inNdx++)
     1737+    {
     1738+        const ShaderInput&  in          = inNdx > 0 ? m_in1 : m_in0;
     1739+        const char*         precName    = getPrecisionName(in.precision);
     1740+        const char*         typeName    = getDataTypeName(in.dataType);
     1741+        string&             inValue     = inNdx > 0 ? inValue1 : inValue0;
     1742+
     1743+        if (in.inputType == INPUTTYPE_DYNAMIC)
     1744+        {
     1745+            vtx << "attribute " << precName << " " << typeName << " a_";
     1746+
     1747+            if (isDataTypeMatrix(in.dataType))
     1748+            {
     1749+                // a_matN, v_matN
     1750+                vtx << typeName << ";\n";
     1751+                if (!m_isVertexCase)
     1752+                {
     1753+                    vtx << "varying " << precName << " " << typeName << " v_" << typeName << ";\n";
     1754+                    frag << "varying " << precName << " " << typeName << " v_" << typeName << ";\n";
     1755+                    passVars.push_back(typeName);
     1756+                }
     1757+
     1758+                inValue = string(m_isVertexCase ? "a_" : "v_") + getDataTypeName(in.dataType);
     1759+            }
     1760+            else
     1761+            {
     1762+                // a_coords, v_coords
     1763+                vtx << "coords;\n";
     1764+                if (!m_isVertexCase)
     1765+                {
     1766+                    vtx << "varying " << precName << " " << typeName << " v_coords;\n";
     1767+                    frag << "varying " << precName << " " << typeName << " v_coords;\n";
     1768+                    passVars.push_back("coords");
     1769+                }
     1770+
     1771+                inValue = m_isVertexCase ? "a_coords" : "v_coords";
     1772+            }
     1773+        }
     1774+        else if (in.inputType == INPUTTYPE_UNIFORM)
     1775+        {
     1776+            op << "uniform " << precName << " " << typeName << " u_in" << inNdx << ";\n";
     1777+            inValue = string("u_in") + de::toString(inNdx);
     1778+        }
     1779+        else if (in.inputType == INPUTTYPE_CONST)
     1780+        {
     1781+            op << "const " << precName << " " << typeName << " in" << inNdx << " = ";
     1782+
     1783+            // Generate declaration.
     1784+            switch (in.dataType)
     1785+            {
     1786+                case TYPE_FLOAT:        op << de::floatToString(s_constInFloat[inNdx], 1);                  break;
     1787+                case TYPE_FLOAT_VEC2:   writeVectorConstructor<2>(op, s_constInVec2[inNdx]);                break;
     1788+                case TYPE_FLOAT_VEC3:   writeVectorConstructor<3>(op, s_constInVec3[inNdx]);                break;
     1789+                case TYPE_FLOAT_VEC4:   writeVectorConstructor<4>(op, s_constInVec4[inNdx]);                break;
     1790+                case TYPE_FLOAT_MAT2:   writeMatrixConstructor<2, 2>(op, Mat2(s_constInMat2[inNdx]));       break;
     1791+                case TYPE_FLOAT_MAT3:   writeMatrixConstructor<3, 3>(op, Mat3(s_constInMat3[inNdx]));       break;
     1792+                case TYPE_FLOAT_MAT4:   writeMatrixConstructor<4, 4>(op, Mat4(s_constInMat4[inNdx]));       break;
     1793+
     1794+                default:
     1795+                    DE_ASSERT(DE_FALSE);
     1796+            }
     1797+
     1798+            op << ";\n";
     1799+
     1800+            inValue = string("in") + de::toString(inNdx);
     1801+        }
     1802+    }
     1803+
     1804+    vtx << "\n"
     1805+        << "void main (void)\n"
     1806+        << "{\n"
     1807+        << "    gl_Position = a_position;\n";
     1808+    frag << "\n"
     1809+         << "void main (void)\n"
     1810+         << "{\n";
     1811+
     1812+    if (m_isVertexCase)
     1813+    {
     1814+        frag << "   gl_FragColor = v_color;\n";
     1815+    }
     1816+    else
     1817+    {
     1818+        for (vector<string>::const_iterator copyIter = passVars.begin(); copyIter != passVars.end(); copyIter++)
     1819+            vtx << "    v_" << *copyIter << " = " << "a_" << *copyIter << ";\n";
     1820+    }
     1821+
     1822+    // Operation.
     1823+
     1824+    switch (getOperationNature(m_op))
     1825+    {
     1826+        case OPERATIONNATURE_PURE:
     1827+            DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     1828+
     1829+            operationValue0 = inValue0;
     1830+            operationValue1 = inValue1;
     1831+            break;
     1832+
     1833+        case OPERATIONNATURE_MUTATING:
     1834+            DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     1835+
     1836+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " tmpValue = " << inValue0 << ";\n";
     1837+
     1838+            operationValue0 = "tmpValue";
     1839+            operationValue1 = inValue1;
     1840+            break;
     1841+
     1842+        case OPERATIONNATURE_ASSIGNMENT:
     1843+            DE_ASSERT(getOperationType(m_op) == OPERATIONTYPE_ASSIGNMENT);
     1844+
     1845+            operationValue0 = inValue0;
     1846+            operationValue1 = inValue1;
     1847+            break;
     1848+
     1849+        default:
     1850+            DE_ASSERT(DE_FALSE);
     1851+    }
     1852+
     1853+    switch (getOperationType(m_op))
     1854+    {
     1855+        case OPERATIONTYPE_BINARY_OPERATOR:
     1856+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << " " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     1857+            break;
     1858+
     1859+        case OPERATIONTYPE_UNARY_PREFIX_OPERATOR:
     1860+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << operationValue0 << ";\n";
     1861+            break;
     1862+
     1863+        case OPERATIONTYPE_UNARY_POSTFIX_OPERATOR:
     1864+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << getOperationName(m_op) << ";\n";
     1865+            break;
     1866+
     1867+        case OPERATIONTYPE_BINARY_FUNCTION:
     1868+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ", " << operationValue1 << ");\n";
     1869+            break;
     1870+
     1871+        case OPERATIONTYPE_ASSIGNMENT:
     1872+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << ";\n";
     1873+            op << " res " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     1874+            break;
     1875+
     1876+        default:
     1877+            DE_ASSERT(DE_FALSE);
     1878+    }
     1879+
     1880+    // Reduction to vec3 (rgb). Check the used value too if it was modified.
     1881+    op << " " << (m_isVertexCase ? "v_color" : "gl_FragColor") << " = ";
     1882+
     1883+    if (isOperationValueModifying(m_op))
     1884+        op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0) + vec4(" << genGLSLMatToVec3Reduction(resultType, "tmpValue") << ", 0.0);\n";
     1885+    else
     1886+        op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0);\n";
     1887+
     1888+    vtx << "}\n";
     1889+    frag << "}\n";
     1890+
     1891+    m_vertShaderSource  = vtx.str();
     1892+    m_fragShaderSource  = frag.str();
     1893+
     1894+    // \todo [2012-02-14 pyry] Compute better values for matrix tests.
     1895+    m_userAttribTransforms.resize(4);
     1896+    for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     1897+    {
     1898+        m_userAttribTransforms[attribNdx] = Mat4(0.0f);
     1899+        m_userAttribTransforms[attribNdx]((0 + attribNdx) % 4, 0) = 1.0f;
     1900+        m_userAttribTransforms[attribNdx]((1 + attribNdx) % 4, 1) = 1.0f;
     1901+        m_userAttribTransforms[attribNdx]((2 + attribNdx) % 4, 2) = 1.0f;
     1902+        m_userAttribTransforms[attribNdx]((3 + attribNdx) % 4, 3) = 1.0f;
     1903+    }
     1904+
     1905+    // prevent bad reference cases such as black result images by fine-tuning used matrices
     1906+    if (getOperationTestMatrixType(m_op) != TESTMATRIXTYPE_DEFAULT)
     1907+    {
     1908+        for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     1909+        {
     1910+            for (int row = 0; row < 4; row++)
     1911+            for (int col = 0; col < 4; col++)
     1912+            {
     1913+                switch (getOperationTestMatrixType(m_op))
     1914+                {
     1915+                    case TESTMATRIXTYPE_NEGATED:
     1916+                        m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col);
     1917+                        break;
     1918+                    case TESTMATRIXTYPE_INCREMENTED:
     1919+                        m_userAttribTransforms[attribNdx](row, col) += 0.3f;
     1920+                        break;
     1921+                    case TESTMATRIXTYPE_DECREMENTED:
     1922+                        m_userAttribTransforms[attribNdx](row, col) -= 0.1f;
     1923+                        break;
     1924+
     1925+                    default:
     1926+                        DE_ASSERT(DE_FALSE);
     1927+                        break;
     1928+                }
     1929+            }
     1930+        }
     1931+    }
     1932+
     1933+    ShaderRenderCase::init();
     1934 }
     1935 
     1936 std::string ShaderMatrixCase::genGLSLMatToVec3Reduction (const glu::DataType& matType, const char* varName)
     1937 {
     1938-       std::ostringstream op;
     1939-
     1940-       switch (matType)
     1941-       {
     1942-               case TYPE_FLOAT:                op << varName << ", "           << varName << ", "                      << varName << "";                                                                               break;
     1943-               case TYPE_FLOAT_VEC2:   op << varName << ".x, "         << varName << ".y, "            << varName << ".x";                                                                             break;
     1944-               case TYPE_FLOAT_VEC3:   op << varName << "";                                                                                                                                                                                    break;
     1945-               case TYPE_FLOAT_VEC4:   op << varName << ".x, "         << varName << ".y, "            << varName << ".z+"                     << varName << ".w";                     break;
     1946-               case TYPE_FLOAT_MAT2:   op << varName << "[0][0], "     << varName << "[1][0], "        << varName << "[0][1]+"         << varName << "[1][1]";         break;
     1947-               case TYPE_FLOAT_MAT3:   op << varName << "[0]+"         << varName << "[1]+"            << varName << "[2]";                                                                    break;
     1948-               case TYPE_FLOAT_MAT4:   op << varName << "[0].xyz+"     << varName << "[1].yzw+"        << varName << "[2].zwx+"        << varName << "[3].wxy";        break;
     1949-
     1950-               default:
     1951-                       DE_ASSERT(DE_FALSE);
     1952-       }
     1953-
     1954-       return op.str();
     1955+    std::ostringstream op;
     1956+
     1957+    switch (matType)
     1958+    {
     1959+        case TYPE_FLOAT:        op << varName << ", "       << varName << ", "          << varName << "";                                       break;
     1960+        case TYPE_FLOAT_VEC2:   op << varName << ".x, "     << varName << ".y, "        << varName << ".x";                                     break;
     1961+        case TYPE_FLOAT_VEC3:   op << varName << "";                                                                                            break;
     1962+        case TYPE_FLOAT_VEC4:   op << varName << ".x, "     << varName << ".y, "        << varName << ".z+"         << varName << ".w";         break;
     1963+        case TYPE_FLOAT_MAT2:   op << varName << "[0][0], " << varName << "[1][0], "    << varName << "[0][1]+"     << varName << "[1][1]";     break;
     1964+        case TYPE_FLOAT_MAT3:   op << varName << "[0]+"     << varName << "[1]+"        << varName << "[2]";                                    break;
     1965+        case TYPE_FLOAT_MAT4:   op << varName << "[0].xyz+" << varName << "[1].yzw+"    << varName << "[2].zwx+"    << varName << "[3].wxy";    break;
     1966+
     1967+        default:
     1968+            DE_ASSERT(DE_FALSE);
     1969+    }
     1970+
     1971+    return op.str();
     1972 }
     1973 
     1974 void ShaderMatrixCase::setupUniforms (int programID, const tcu::Vec4& constCoords)
     1975 {
     1976-       const glw::Functions& gl = m_renderCtx.getFunctions();
     1977-
     1978-       DE_UNREF(constCoords);
     1979-
     1980-       for (int inNdx = 0; inNdx < 2; inNdx++)
     1981-       {
     1982-               const ShaderInput& in = inNdx > 0 ? m_in1 : m_in0;
     1983-
     1984-               if (in.inputType == INPUTTYPE_UNIFORM)
     1985-               {
     1986-                       int loc = gl.getUniformLocation(programID, (string("u_in") + de::toString(inNdx)).c_str());
     1987-
     1988-                       if (loc < 0)
     1989-                               continue;
     1990-
     1991-                       switch (in.dataType)
     1992-                       {
     1993-                               case TYPE_FLOAT:                gl.uniform1f(loc, s_constInFloat[inNdx]);                                                                                                       break;
     1994-                               case TYPE_FLOAT_VEC2:   gl.uniform2fv(loc, 1, s_constInVec2[inNdx].getPtr());                                                                           break;
     1995-                               case TYPE_FLOAT_VEC3:   gl.uniform3fv(loc, 1, s_constInVec3[inNdx].getPtr());                                                                           break;
     1996-                               case TYPE_FLOAT_VEC4:   gl.uniform4fv(loc, 1, s_constInVec4[inNdx].getPtr());                                                                           break;
     1997-                               case TYPE_FLOAT_MAT2:   gl.uniformMatrix2fv(loc, 1, GL_FALSE, s_constInMat2[inNdx].getColumnMajorData().getPtr());      break;
     1998-                               case TYPE_FLOAT_MAT3:   gl.uniformMatrix3fv(loc, 1, GL_FALSE, s_constInMat3[inNdx].getColumnMajorData().getPtr());      break;
     1999-                               case TYPE_FLOAT_MAT4:   gl.uniformMatrix4fv(loc, 1, GL_FALSE, s_constInMat4[inNdx].getColumnMajorData().getPtr());      break;
     2000-                               default:
     2001-                                       DE_ASSERT(false);
     2002-                       }
     2003-               }
     2004-       }
     2005+    const glw::Functions& gl = m_renderCtx.getFunctions();
     2006+
     2007+    DE_UNREF(constCoords);
     2008+
     2009+    for (int inNdx = 0; inNdx < 2; inNdx++)
     2010+    {
     2011+        const ShaderInput& in = inNdx > 0 ? m_in1 : m_in0;
     2012+
     2013+        if (in.inputType == INPUTTYPE_UNIFORM)
     2014+        {
     2015+            int loc = gl.getUniformLocation(programID, (string("u_in") + de::toString(inNdx)).c_str());
     2016+
     2017+            if (loc < 0)
     2018+                continue;
     2019+
     2020+            switch (in.dataType)
     2021+            {
     2022+                case TYPE_FLOAT:        gl.uniform1f(loc, s_constInFloat[inNdx]);                                                   break;
     2023+                case TYPE_FLOAT_VEC2:   gl.uniform2fv(loc, 1, s_constInVec2[inNdx].getPtr());                                       break;
     2024+                case TYPE_FLOAT_VEC3:   gl.uniform3fv(loc, 1, s_constInVec3[inNdx].getPtr());                                       break;
     2025+                case TYPE_FLOAT_VEC4:   gl.uniform4fv(loc, 1, s_constInVec4[inNdx].getPtr());                                       break;
     2026+                case TYPE_FLOAT_MAT2:   gl.uniformMatrix2fv(loc, 1, GL_FALSE, s_constInMat2[inNdx].getColumnMajorData().getPtr());  break;
     2027+                case TYPE_FLOAT_MAT3:   gl.uniformMatrix3fv(loc, 1, GL_FALSE, s_constInMat3[inNdx].getColumnMajorData().getPtr());  break;
     2028+                case TYPE_FLOAT_MAT4:   gl.uniformMatrix4fv(loc, 1, GL_FALSE, s_constInMat4[inNdx].getColumnMajorData().getPtr());  break;
     2029+                default:
     2030+                    DE_ASSERT(false);
     2031+            }
     2032+        }
     2033+    }
     2034 }
     2035 
     2036 ShaderMatrixTests::ShaderMatrixTests (Context& context)
     2037-       : TestCaseGroup(context, "matrix", "Matrix Tests")
     2038+    : TestCaseGroup(context, "matrix", "Matrix Tests")
     2039 {
     2040 }
     2041 
     2042@@ -1086,136 +1086,136 @@ ShaderMatrixTests::~ShaderMatrixTests (void)
     2043 
     2044 void ShaderMatrixTests::init (void)
     2045 {
     2046-       static const struct
     2047-       {
     2048-               const char*             name;
     2049-               const char*             desc;
     2050-               MatrixOp                op;
     2051-               bool                    extendedInputTypeCases; // !< test with const and uniform types too
     2052-       } ops[] =
     2053-       {
     2054-               { "add",                        "Matrix addition tests",                                                OP_ADD,                         true    },
     2055-               { "sub",                        "Matrix subtraction tests",                                             OP_SUB,                         true    },
     2056-               { "mul",                        "Matrix multiplication tests",                                  OP_MUL,                         true    },
     2057-               { "div",                        "Matrix division tests",                                                OP_DIV,                         true    },
     2058-               { "matrixcompmult",     "Matrix component-wise multiplication tests",   OP_COMP_MUL,            false   },
     2059-               { "unary_addition",     "Matrix unary addition tests",                                  OP_UNARY_PLUS,          false   },
     2060-               { "negation",           "Matrix negation tests",                                                OP_NEGATION,            false   },
     2061-               { "pre_increment",      "Matrix prefix increment tests",                                OP_PRE_INCREMENT,       false   },
     2062-               { "pre_decrement",      "Matrix prefix decrement tests",                                OP_PRE_DECREMENT,       false   },
     2063-               { "post_increment",     "Matrix postfix increment tests",                               OP_POST_INCREMENT,      false   },
     2064-               { "post_decrement",     "Matrix postfix decrement tests",                               OP_POST_DECREMENT,      false   },
     2065-               { "add_assign",         "Matrix add into tests",                                                OP_ADD_INTO,            false   },
     2066-               { "sub_assign",         "Matrix subtract from tests",                                   OP_SUBTRACT_FROM,       false   },
     2067-               { "mul_assign",         "Matrix multiply into tests",                                   OP_MULTIPLY_INTO,       false   },
     2068-               { "div_assign",         "Matrix divide into tests",                                             OP_DIVIDE_INTO,         false   },
     2069-       };
     2070-
     2071-       struct InputTypeSpec
     2072-       {
     2073-               const char*             name;
     2074-               const char*             desc;
     2075-               InputType               type;
     2076-       };
     2077-       static const InputTypeSpec extendedInputTypes[] =
     2078-       {
     2079-               { "const",              "Constant matrix input",        INPUTTYPE_CONST         },
     2080-               { "uniform",    "Uniform matrix input",         INPUTTYPE_UNIFORM       },
     2081-               { "dynamic",    "Dynamic matrix input",         INPUTTYPE_DYNAMIC       }
     2082-       };
     2083-       static const InputTypeSpec reducedInputTypes[] =
     2084-       {
     2085-               { "dynamic",    "Dynamic matrix input",         INPUTTYPE_DYNAMIC       }
     2086-       };
     2087-
     2088-       static const DataType matrixTypes[] =
     2089-       {
     2090-               TYPE_FLOAT_MAT2,
     2091-               TYPE_FLOAT_MAT3,
     2092-               TYPE_FLOAT_MAT4
     2093-       };
     2094-
     2095-       static const Precision precisions[] =
     2096-       {
     2097-               PRECISION_LOWP,
     2098-               PRECISION_MEDIUMP,
     2099-               PRECISION_HIGHP
     2100-       };
     2101-
     2102-       for (int opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
     2103-       {
     2104-               const InputTypeSpec*    inTypeList              = (ops[opNdx].extendedInputTypeCases) ? (extendedInputTypes) : (reducedInputTypes);
     2105-               const int                               inTypeListSize  = (ops[opNdx].extendedInputTypeCases) ? (DE_LENGTH_OF_ARRAY(extendedInputTypes)) : (DE_LENGTH_OF_ARRAY(reducedInputTypes));
     2106-               const MatrixOp                  op                              = ops[opNdx].op;
     2107-               tcu::TestCaseGroup*             opGroup                 = new tcu::TestCaseGroup(m_testCtx, ops[opNdx].name, ops[opNdx].desc);
     2108-
     2109-               addChild(opGroup);
     2110-
     2111-               for (int inTypeNdx = 0; inTypeNdx < inTypeListSize; inTypeNdx++)
     2112-               {
     2113-                       const InputType         inputType       = inTypeList[inTypeNdx].type;
     2114-
     2115-                       for (int matTypeNdx = 0; matTypeNdx < DE_LENGTH_OF_ARRAY(matrixTypes); matTypeNdx++)
     2116-                       {
     2117-                               DataType        matType         = matrixTypes[matTypeNdx];
     2118-                               const char*     matTypeName     = getDataTypeName(matType);
     2119-
     2120-                               for (int precNdx = 0; precNdx < DE_LENGTH_OF_ARRAY(precisions); precNdx++)
     2121-                               {
     2122-                                       Precision       precision       = precisions[precNdx];
     2123-                                       const char*     precName        = getPrecisionName(precision);
     2124-                                       string          baseName        = string(inTypeList[inTypeNdx].name) + "_" + precName + "_" + matTypeName + "_";
     2125-                                       ShaderInput     matIn           (inputType, matType, precision);
     2126-
     2127-                                       if (isOperationMatrixScalar(op))
     2128-                                       {
     2129-                                               // Matrix-scalar \note For div cases we use uniform input.
     2130-                                               ShaderInput scalarIn(op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, TYPE_FLOAT, precision);
     2131-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),          "Matrix-scalar case", matIn, scalarIn, op, true));
     2132-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),        "Matrix-scalar case", matIn, scalarIn, op, false));
     2133-                                       }
     2134-
     2135-                                       if (isOperationMatrixVector(op))
     2136-                                       {
     2137-                                               // Matrix-vector.
     2138-                                               DataType        vecType = getDataTypeFloatVec(getDataTypeMatrixNumColumns(matType));
     2139-                                               ShaderInput vecIn       (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, vecType, precision);
     2140-
     2141-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(vecType) + "_vertex").c_str(),    "Matrix-vector case", matIn, vecIn, op, true));
     2142-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(vecType) + "_fragment").c_str(),  "Matrix-vector case", matIn, vecIn, op, false));
     2143-
     2144-                                               // Vector-matrix.
     2145-                                               string vecMatName = string(inTypeList[inTypeNdx].name) + "_" + precName + "_" + getDataTypeName(vecType) + "_" + matTypeName;
     2146-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_vertex").c_str(),             "Vector-matrix case", vecIn, matIn, op, true));
     2147-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_fragment").c_str(),   "Vector-matrix case", vecIn, matIn, op, false));
     2148-                                       }
     2149-
     2150-                                       if (isOperationMatrixMatrix(op))
     2151-                                       {
     2152-                                               // Matrix-matrix.
     2153-                                               ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     2154-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_vertex").c_str(),         "Matrix-matrix case", matIn, otherMatIn, op, true));
     2155-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_fragment").c_str(),       "Matrix-matrix case", matIn, otherMatIn, op, false));
     2156-                                       }
     2157-
     2158-                                       if (isOperationUnary(op))
     2159-                                       {
     2160-                                               // op matrix
     2161-                                               ShaderInput voidInput(INPUTTYPE_LAST, TYPE_LAST, PRECISION_LAST);
     2162-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "vertex").c_str(),                "Matrix case", matIn, voidInput, op, true));
     2163-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "fragment").c_str(),      "Matrix case", matIn, voidInput, op, false));
     2164-                                       }
     2165-
     2166-                                       if (isOperationAssignment(op))
     2167-                                       {
     2168-                                               ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     2169-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "vertex").c_str(),                "Matrix assignment case", matIn, otherMatIn, op, true));
     2170-                                               opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "fragment").c_str(),      "Matrix assignment case", matIn, otherMatIn, op, false));
     2171-                                       }
     2172-                               }
     2173-                       }
     2174-               }
     2175-       }
     2176+    static const struct
     2177+    {
     2178+        const char*     name;
     2179+        const char*     desc;
     2180+        MatrixOp        op;
     2181+        bool            extendedInputTypeCases; // !< test with const and uniform types too
     2182+    } ops[] =
     2183+    {
     2184+        { "add",            "Matrix addition tests",                        OP_ADD,             true    },
     2185+        { "sub",            "Matrix subtraction tests",                     OP_SUB,             true    },
     2186+        { "mul",            "Matrix multiplication tests",                  OP_MUL,             true    },
     2187+        { "div",            "Matrix division tests",                        OP_DIV,             true    },
     2188+        { "matrixcompmult", "Matrix component-wise multiplication tests",   OP_COMP_MUL,        false   },
     2189+        { "unary_addition", "Matrix unary addition tests",                  OP_UNARY_PLUS,      false   },
     2190+        { "negation",       "Matrix negation tests",                        OP_NEGATION,        false   },
     2191+        { "pre_increment",  "Matrix prefix increment tests",                OP_PRE_INCREMENT,   false   },
     2192+        { "pre_decrement",  "Matrix prefix decrement tests",                OP_PRE_DECREMENT,   false   },
     2193+        { "post_increment", "Matrix postfix increment tests",               OP_POST_INCREMENT,  false   },
     2194+        { "post_decrement", "Matrix postfix decrement tests",               OP_POST_DECREMENT,  false   },
     2195+        { "add_assign",     "Matrix add into tests",                        OP_ADD_INTO,        false   },
     2196+        { "sub_assign",     "Matrix subtract from tests",                   OP_SUBTRACT_FROM,   false   },
     2197+        { "mul_assign",     "Matrix multiply into tests",                   OP_MULTIPLY_INTO,   false   },
     2198+        { "div_assign",     "Matrix divide into tests",                     OP_DIVIDE_INTO,     false   },
     2199+    };
     2200+
     2201+    struct InputTypeSpec
     2202+    {
     2203+        const char*     name;
     2204+        const char*     desc;
     2205+        InputType       type;
     2206+    };
     2207+    static const InputTypeSpec extendedInputTypes[] =
     2208+    {
     2209+        { "const",      "Constant matrix input",    INPUTTYPE_CONST     },
     2210+        { "uniform",    "Uniform matrix input",     INPUTTYPE_UNIFORM   },
     2211+        { "dynamic",    "Dynamic matrix input",     INPUTTYPE_DYNAMIC   }
     2212+    };
     2213+    static const InputTypeSpec reducedInputTypes[] =
     2214+    {
     2215+        { "dynamic",    "Dynamic matrix input",     INPUTTYPE_DYNAMIC   }
     2216+    };
     2217+
     2218+    static const DataType matrixTypes[] =
     2219+    {
     2220+        TYPE_FLOAT_MAT2,
     2221+        TYPE_FLOAT_MAT3,
     2222+        TYPE_FLOAT_MAT4
     2223+    };
     2224+
     2225+    static const Precision precisions[] =
     2226+    {
     2227+        PRECISION_LOWP,
     2228+        PRECISION_MEDIUMP,
     2229+        PRECISION_HIGHP
     2230+    };
     2231+
     2232+    for (int opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
     2233+    {
     2234+        const InputTypeSpec*    inTypeList      = (ops[opNdx].extendedInputTypeCases) ? (extendedInputTypes) : (reducedInputTypes);
     2235+        const int               inTypeListSize  = (ops[opNdx].extendedInputTypeCases) ? (DE_LENGTH_OF_ARRAY(extendedInputTypes)) : (DE_LENGTH_OF_ARRAY(reducedInputTypes));
     2236+        const MatrixOp          op              = ops[opNdx].op;
     2237+        tcu::TestCaseGroup*     opGroup         = new tcu::TestCaseGroup(m_testCtx, ops[opNdx].name, ops[opNdx].desc);
     2238+
     2239+        addChild(opGroup);
     2240+
     2241+        for (int inTypeNdx = 0; inTypeNdx < inTypeListSize; inTypeNdx++)
     2242+        {
     2243+            const InputType     inputType   = inTypeList[inTypeNdx].type;
     2244+
     2245+            for (int matTypeNdx = 0; matTypeNdx < DE_LENGTH_OF_ARRAY(matrixTypes); matTypeNdx++)
     2246+            {
     2247+                DataType    matType     = matrixTypes[matTypeNdx];
     2248+                const char* matTypeName = getDataTypeName(matType);
     2249+
     2250+                for (int precNdx = 0; precNdx < DE_LENGTH_OF_ARRAY(precisions); precNdx++)
     2251+                {
     2252+                    Precision   precision   = precisions[precNdx];
     2253+                    const char* precName    = getPrecisionName(precision);
     2254+                    string      baseName    = string(inTypeList[inTypeNdx].name) + "_" + precName + "_" + matTypeName + "_";
     2255+                    ShaderInput matIn       (inputType, matType, precision);
     2256+
     2257+                    if (isOperationMatrixScalar(op))
     2258+                    {
     2259+                        // Matrix-scalar \note For div cases we use uniform input.
     2260+                        ShaderInput scalarIn(op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, TYPE_FLOAT, precision);
     2261+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),      "Matrix-scalar case", matIn, scalarIn, op, true));
     2262+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),    "Matrix-scalar case", matIn, scalarIn, op, false));
     2263+                    }
     2264+
     2265+                    if (isOperationMatrixVector(op))
     2266+                    {
     2267+                        // Matrix-vector.
     2268+                        DataType    vecType = getDataTypeFloatVec(getDataTypeMatrixNumColumns(matType));
     2269+                        ShaderInput vecIn   (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, vecType, precision);
     2270+
     2271+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(vecType) + "_vertex").c_str(),    "Matrix-vector case", matIn, vecIn, op, true));
     2272+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(vecType) + "_fragment").c_str(),  "Matrix-vector case", matIn, vecIn, op, false));
     2273+
     2274+                        // Vector-matrix.
     2275+                        string vecMatName = string(inTypeList[inTypeNdx].name) + "_" + precName + "_" + getDataTypeName(vecType) + "_" + matTypeName;
     2276+                        opGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_vertex").c_str(),     "Vector-matrix case", vecIn, matIn, op, true));
     2277+                        opGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_fragment").c_str(),   "Vector-matrix case", vecIn, matIn, op, false));
     2278+                    }
     2279+
     2280+                    if (isOperationMatrixMatrix(op))
     2281+                    {
     2282+                        // Matrix-matrix.
     2283+                        ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     2284+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_vertex").c_str(),     "Matrix-matrix case", matIn, otherMatIn, op, true));
     2285+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_fragment").c_str(),   "Matrix-matrix case", matIn, otherMatIn, op, false));
     2286+                    }
     2287+
     2288+                    if (isOperationUnary(op))
     2289+                    {
     2290+                        // op matrix
     2291+                        ShaderInput voidInput(INPUTTYPE_LAST, TYPE_LAST, PRECISION_LAST);
     2292+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "vertex").c_str(),        "Matrix case", matIn, voidInput, op, true));
     2293+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "fragment").c_str(),  "Matrix case", matIn, voidInput, op, false));
     2294+                    }
     2295+
     2296+                    if (isOperationAssignment(op))
     2297+                    {
     2298+                        ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     2299+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "vertex").c_str(),        "Matrix assignment case", matIn, otherMatIn, op, true));
     2300+                        opGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "fragment").c_str(),  "Matrix assignment case", matIn, otherMatIn, op, false));
     2301+                    }
     2302+                }
     2303+            }
     2304+        }
     2305+    }
     2306 }
     2307 
     2308 } // Functional
     2309diff --git a/src/tests/deqp_support/es3fShaderMatrixTests.cpp b/src/tests/deqp_support/es3fShaderMatrixTests.cpp
     2310index b18f8ba14..25784982c 100644
     2311--- a/src/tests/deqp_support/es3fShaderMatrixTests.cpp
     2312+++ b/src/tests/deqp_support/es3fShaderMatrixTests.cpp
     2313@@ -77,127 +77,127 @@ using tcu::Mat4;
     2314 // Uniform / constant values for tests.
     2315 // \note Input1 should not contain 0 components as it is used as divisor in div cases.
     2316 // \todo [2012-02-14 pyry] Make these dynamic.
     2317-static const float     s_constInFloat[2]       = { 0.5f, -0.2f };
     2318-static const Vec2      s_constInVec2[2]        = { Vec2(1.2f, 0.5f), Vec2(0.5f, 1.0f) };
     2319-static const Vec3      s_constInVec3[2]        = { Vec3(1.1f, 0.1f, 0.5f), Vec3(-0.2f, 0.5f, 0.8f) };
     2320-static const Vec4      s_constInVec4[2]        = { Vec4(1.4f, 0.2f, -0.5f, 0.7f), Vec4(0.2f, -1.0f, 0.5f, 0.8f) };
     2321+static const float  s_constInFloat[2]   = { 0.5f, -0.2f };
     2322+static const Vec2   s_constInVec2[2]    = { Vec2(1.2f, 0.5f), Vec2(0.5f, 1.0f) };
     2323+static const Vec3   s_constInVec3[2]    = { Vec3(1.1f, 0.1f, 0.5f), Vec3(-0.2f, 0.5f, 0.8f) };
     2324+static const Vec4   s_constInVec4[2]    = { Vec4(1.4f, 0.2f, -0.5f, 0.7f), Vec4(0.2f, -1.0f, 0.5f, 0.8f) };
     2325 
     2326 static const float s_constInMat2x2[2][4] =
     2327 {
     2328-       {
     2329-               -0.1f,  1.0f,
     2330-               -0.2f,  0.0f,
     2331-       },
     2332-       {
     2333-                0.8f,  0.1f,
     2334-                0.5f, -0.9f,
     2335-       },
     2336+    {
     2337+        -0.1f,  1.0f,
     2338+        -0.2f,  0.0f,
     2339+    },
     2340+    {
     2341+         0.8f,  0.1f,
     2342+         0.5f, -0.9f,
     2343+    },
     2344 };
     2345 static const float s_constInMat3x2[2][6] =
     2346 {
     2347-       {
     2348-                0.8f, -0.3f,  0.3f,
     2349-                1.0f,  1.2f, -1.2f,
     2350-       },
     2351-       {
     2352-                1.2f, -1.0f,  0.5f,
     2353-               -0.8f,  1.1f,  0.3f,
     2354-       },
     2355+    {
     2356+         0.8f, -0.3f,  0.3f,
     2357+         1.0f,  1.2f, -1.2f,
     2358+    },
     2359+    {
     2360+         1.2f, -1.0f,  0.5f,
     2361+        -0.8f,  1.1f,  0.3f,
     2362+    },
     2363 };
     2364 static const float s_constInMat4x2[2][8] =
     2365 {
     2366-       {
     2367-               -0.2f,  0.5f, 0.0f, -1.0f,
     2368-                1.2f, -0.5f, 0.3f, -0.9f,
     2369-       },
     2370-       {
     2371-               1.0f,  0.1f, -1.1f,  0.6f,
     2372-               0.8f, -1.2f, -1.1f,  0.7f,
     2373-       },
     2374+    {
     2375+        -0.2f,  0.5f, 0.0f, -1.0f,
     2376+         1.2f, -0.5f, 0.3f, -0.9f,
     2377+    },
     2378+    {
     2379+        1.0f,  0.1f, -1.1f,  0.6f,
     2380+        0.8f, -1.2f, -1.1f,  0.7f,
     2381+    },
     2382 };
     2383 static const float s_constInMat2x3[2][6] =
     2384 {
     2385-       {
     2386-               -0.6f, -0.1f,
     2387-               -0.7f, -1.2f,
     2388-               -0.2f,  0.0f,
     2389-       },
     2390-       {
     2391-                1.1f,  0.6f,
     2392-                0.8f,  1.0f,
     2393-                0.7f,  0.1f,
     2394-       },
     2395+    {
     2396+        -0.6f, -0.1f,
     2397+        -0.7f, -1.2f,
     2398+        -0.2f,  0.0f,
     2399+    },
     2400+    {
     2401+         1.1f,  0.6f,
     2402+         0.8f,  1.0f,
     2403+         0.7f,  0.1f,
     2404+    },
     2405 };
     2406 static const float s_constInMat3x3[2][9] =
     2407 {
     2408-       {
     2409-               -0.2f,  1.1f, 1.2f,
     2410-               -1.0f,  1.2f, 0.5f,
     2411-                0.7f, -0.2f, 1.0f,
     2412-       },
     2413-       {
     2414-               -0.1f, -0.1f,  0.1f,
     2415-               -0.1f, -0.2f,  1.0f,
     2416-               -0.5f,  0.1f, -0.4f,
     2417-       },
     2418+    {
     2419+        -0.2f,  1.1f, 1.2f,
     2420+        -1.0f,  1.2f, 0.5f,
     2421+         0.7f, -0.2f, 1.0f,
     2422+    },
     2423+    {
     2424+        -0.1f, -0.1f,  0.1f,
     2425+        -0.1f, -0.2f,  1.0f,
     2426+        -0.5f,  0.1f, -0.4f,
     2427+    },
     2428 };
     2429 static const float s_constInMat4x3[2][12] =
     2430 {
     2431-       {
     2432-               -0.9f,  0.0f,  0.6f,  0.2f,
     2433-                0.9f, -0.1f, -0.3f, -0.7f,
     2434-               -0.1f,  0.1f,  1.0f,  0.0f,
     2435-       },
     2436-       {
     2437-                0.5f,  0.7f,  0.7f,  1.2f,
     2438-                1.1f,  0.1f,  1.0f, -1.0f,
     2439-               -0.2f, -0.2f, -0.3f, -0.5f,
     2440-       },
     2441+    {
     2442+        -0.9f,  0.0f,  0.6f,  0.2f,
     2443+         0.9f, -0.1f, -0.3f, -0.7f,
     2444+        -0.1f,  0.1f,  1.0f,  0.0f,
     2445+    },
     2446+    {
     2447+         0.5f,  0.7f,  0.7f,  1.2f,
     2448+         1.1f,  0.1f,  1.0f, -1.0f,
     2449+        -0.2f, -0.2f, -0.3f, -0.5f,
     2450+    },
     2451 };
     2452 static const float s_constInMat2x4[2][8] =
     2453 {
     2454-       {
     2455-               -0.6f, -1.1f,
     2456-               -0.6f, -0.6f,
     2457-               -0.2f, -0.6f,
     2458-               -0.1f, -0.1f,
     2459-       },
     2460-       {
     2461-               -1.2f, -1.0f,
     2462-                0.7f, -1.0f,
     2463-                0.7f,  0.7f,
     2464-               -0.4f, -0.3f,
     2465-       },
     2466+    {
     2467+        -0.6f, -1.1f,
     2468+        -0.6f, -0.6f,
     2469+        -0.2f, -0.6f,
     2470+        -0.1f, -0.1f,
     2471+    },
     2472+    {
     2473+        -1.2f, -1.0f,
     2474+         0.7f, -1.0f,
     2475+         0.7f,  0.7f,
     2476+        -0.4f, -0.3f,
     2477+    },
     2478 };
     2479 static const float s_constInMat3x4[2][12] =
     2480 {
     2481-       {
     2482-                0.6f, -0.4f,  1.2f,
     2483-                0.9f,  0.8f,  0.4f,
     2484-                1.1f,  0.3f,  0.5f,
     2485-               -0.2f,  0.0f,  1.1f,
     2486-       },
     2487-       {
     2488-               -0.8f,  1.2f, -0.2f,
     2489-               -1.1f, -0.9f, -0.5f,
     2490-               -1.2f,  1.0f,  1.2f,
     2491-                0.1f, -0.7f, -0.5f,
     2492-       },
     2493+    {
     2494+         0.6f, -0.4f,  1.2f,
     2495+         0.9f,  0.8f,  0.4f,
     2496+         1.1f,  0.3f,  0.5f,
     2497+        -0.2f,  0.0f,  1.1f,
     2498+    },
     2499+    {
     2500+        -0.8f,  1.2f, -0.2f,
     2501+        -1.1f, -0.9f, -0.5f,
     2502+        -1.2f,  1.0f,  1.2f,
     2503+         0.1f, -0.7f, -0.5f,
     2504+    },
     2505 };
     2506 static const float s_constInMat4x4[2][16] =
     2507 {
     2508-       {
     2509-                0.3f,  0.9f, -0.2f,  1.0f,
     2510-               -0.4f, -0.6f,  0.6f, -1.0f,
     2511-               -0.9f, -0.1f,  0.3f, -0.2f,
     2512-               -0.3f, -0.9f,  1.0f,  0.1f,
     2513-       },
     2514-       {
     2515-                0.4f, -0.7f, -0.8f,  0.7f,
     2516-               -0.4f, -0.8f,  0.6f, -0.3f,
     2517-                0.7f, -1.0f,  0.1f, -0.3f,
     2518-                0.2f,  0.6f,  0.4f, -1.0f,
     2519-       },
     2520+    {
     2521+         0.3f,  0.9f, -0.2f,  1.0f,
     2522+        -0.4f, -0.6f,  0.6f, -1.0f,
     2523+        -0.9f, -0.1f,  0.3f, -0.2f,
     2524+        -0.3f, -0.9f,  1.0f,  0.1f,
     2525+    },
     2526+    {
     2527+         0.4f, -0.7f, -0.8f,  0.7f,
     2528+        -0.4f, -0.8f,  0.6f, -0.3f,
     2529+         0.7f, -1.0f,  0.1f, -0.3f,
     2530+         0.2f,  0.6f,  0.4f, -1.0f,
     2531+    },
     2532 };
     2533 
     2534 namespace MatrixCaseUtils
     2535@@ -205,49 +205,49 @@ namespace MatrixCaseUtils
     2536 
     2537 enum InputType
     2538 {
     2539-       INPUTTYPE_CONST = 0,
     2540-       INPUTTYPE_UNIFORM,
     2541-       INPUTTYPE_DYNAMIC,
     2542+    INPUTTYPE_CONST = 0,
     2543+    INPUTTYPE_UNIFORM,
     2544+    INPUTTYPE_DYNAMIC,
     2545 
     2546-       INPUTTYPE_LAST
     2547+    INPUTTYPE_LAST
     2548 };
     2549 
     2550 struct ShaderInput
     2551 {
     2552-       ShaderInput (InputType inputType_, DataType dataType_, Precision precision_)
     2553-               : inputType     (inputType_)
     2554-               , dataType      (dataType_)
     2555-               , precision     (precision_)
     2556-       {
     2557-       }
     2558+    ShaderInput (InputType inputType_, DataType dataType_, Precision precision_)
     2559+        : inputType (inputType_)
     2560+        , dataType  (dataType_)
     2561+        , precision (precision_)
     2562+    {
     2563+    }
     2564 
     2565-       InputType               inputType;
     2566-       DataType                dataType;
     2567-       Precision               precision;
     2568+    InputType       inputType;
     2569+    DataType        dataType;
     2570+    Precision       precision;
     2571 };
     2572 
     2573 enum MatrixOp
     2574 {
     2575-       OP_ADD = 0,
     2576-       OP_SUB,
     2577-       OP_MUL,
     2578-       OP_DIV,
     2579-       OP_COMP_MUL,
     2580-       OP_OUTER_PRODUCT,
     2581-       OP_TRANSPOSE,
     2582-       OP_INVERSE,
     2583-       OP_DETERMINANT,
     2584-       OP_UNARY_PLUS,
     2585-       OP_NEGATION,
     2586-       OP_PRE_INCREMENT,
     2587-       OP_PRE_DECREMENT,
     2588-       OP_POST_INCREMENT,
     2589-       OP_POST_DECREMENT,
     2590-       OP_ADD_INTO,
     2591-       OP_SUBTRACT_FROM,
     2592-       OP_MULTIPLY_INTO,
     2593-       OP_DIVIDE_INTO,
     2594-       OP_LAST
     2595+    OP_ADD = 0,
     2596+    OP_SUB,
     2597+    OP_MUL,
     2598+    OP_DIV,
     2599+    OP_COMP_MUL,
     2600+    OP_OUTER_PRODUCT,
     2601+    OP_TRANSPOSE,
     2602+    OP_INVERSE,
     2603+    OP_DETERMINANT,
     2604+    OP_UNARY_PLUS,
     2605+    OP_NEGATION,
     2606+    OP_PRE_INCREMENT,
     2607+    OP_PRE_DECREMENT,
     2608+    OP_POST_INCREMENT,
     2609+    OP_POST_DECREMENT,
     2610+    OP_ADD_INTO,
     2611+    OP_SUBTRACT_FROM,
     2612+    OP_MULTIPLY_INTO,
     2613+    OP_DIVIDE_INTO,
     2614+    OP_LAST
     2615 };
     2616 
     2617 // Type traits.
     2618@@ -255,237 +255,237 @@ enum MatrixOp
     2619 template <int DataT>
     2620 struct TypeTraits;
     2621 
     2622-#define DECLARE_TYPE_TRAIT(DATATYPE, TYPE)     \
     2623-template<>                                                                     \
     2624-struct TypeTraits<DATATYPE> {                          \
     2625-       typedef TYPE Type;                                              \
     2626+#define DECLARE_TYPE_TRAIT(DATATYPE, TYPE)  \
     2627+template<>                                  \
     2628+struct TypeTraits<DATATYPE> {               \
     2629+    typedef TYPE Type;                      \
     2630 }
     2631 
     2632-DECLARE_TYPE_TRAIT(TYPE_FLOAT,                 float);
     2633-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC2,            tcu::Vec2);
     2634-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC3,            tcu::Vec3);
     2635-DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC4,            tcu::Vec4);
     2636-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2,            tcu::Mat2);
     2637-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2X3,  tcu::Mat2x3);
     2638-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2X4,  tcu::Mat2x4);
     2639-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3X2,  tcu::Mat3x2);
     2640-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3,            tcu::Mat3);
     2641-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3X4,  tcu::Mat3x4);
     2642-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4X2,  tcu::Mat4x2);
     2643-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4X3,  tcu::Mat4x3);
     2644-DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4,            tcu::Mat4);
     2645+DECLARE_TYPE_TRAIT(TYPE_FLOAT,          float);
     2646+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC2,     tcu::Vec2);
     2647+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC3,     tcu::Vec3);
     2648+DECLARE_TYPE_TRAIT(TYPE_FLOAT_VEC4,     tcu::Vec4);
     2649+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2,     tcu::Mat2);
     2650+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2X3,   tcu::Mat2x3);
     2651+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT2X4,   tcu::Mat2x4);
     2652+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3X2,   tcu::Mat3x2);
     2653+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3,     tcu::Mat3);
     2654+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT3X4,   tcu::Mat3x4);
     2655+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4X2,   tcu::Mat4x2);
     2656+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4X3,   tcu::Mat4x3);
     2657+DECLARE_TYPE_TRAIT(TYPE_FLOAT_MAT4,     tcu::Mat4);
     2658 
     2659 // Operation info
     2660 
     2661 enum OperationType
     2662 {
     2663-       OPERATIONTYPE_BINARY_OPERATOR = 0,
     2664-       OPERATIONTYPE_BINARY_FUNCTION,
     2665-       OPERATIONTYPE_UNARY_PREFIX_OPERATOR,
     2666-       OPERATIONTYPE_UNARY_POSTFIX_OPERATOR,
     2667-       OPERATIONTYPE_UNARY_FUNCTION,
     2668-       OPERATIONTYPE_ASSIGNMENT,
     2669+    OPERATIONTYPE_BINARY_OPERATOR = 0,
     2670+    OPERATIONTYPE_BINARY_FUNCTION,
     2671+    OPERATIONTYPE_UNARY_PREFIX_OPERATOR,
     2672+    OPERATIONTYPE_UNARY_POSTFIX_OPERATOR,
     2673+    OPERATIONTYPE_UNARY_FUNCTION,
     2674+    OPERATIONTYPE_ASSIGNMENT,
     2675 
     2676-       OPERATIONTYPE_LAST
     2677+    OPERATIONTYPE_LAST
     2678 };
     2679 
     2680 static const char* getOperationName (MatrixOp op)
     2681 {
     2682-       switch (op)
     2683-       {
     2684-               case OP_ADD:                    return "+";
     2685-               case OP_SUB:                    return "-";
     2686-               case OP_MUL:                    return "*";
     2687-               case OP_DIV:                    return "/";
     2688-               case OP_COMP_MUL:               return "matrixCompMult";
     2689-               case OP_OUTER_PRODUCT:  return "outerProduct";
     2690-               case OP_TRANSPOSE:              return "transpose";
     2691-               case OP_INVERSE:                return "inverse";
     2692-               case OP_DETERMINANT:    return "determinant";
     2693-               case OP_UNARY_PLUS:             return "+";
     2694-               case OP_NEGATION:               return "-";
     2695-               case OP_PRE_INCREMENT:  return "++";
     2696-               case OP_PRE_DECREMENT:  return "--";
     2697-               case OP_POST_INCREMENT: return "++";
     2698-               case OP_POST_DECREMENT: return "--";
     2699-               case OP_ADD_INTO:               return "+=";
     2700-               case OP_SUBTRACT_FROM:  return "-=";
     2701-               case OP_MULTIPLY_INTO:  return "*=";
     2702-               case OP_DIVIDE_INTO:    return "/=";
     2703-
     2704-               default:
     2705-                       DE_ASSERT(DE_FALSE);
     2706-                       return "";
     2707-       }
     2708+    switch (op)
     2709+    {
     2710+        case OP_ADD:            return "+";
     2711+        case OP_SUB:            return "-";
     2712+        case OP_MUL:            return "*";
     2713+        case OP_DIV:            return "/";
     2714+        case OP_COMP_MUL:       return "matrixCompMult";
     2715+        case OP_OUTER_PRODUCT:  return "outerProduct";
     2716+        case OP_TRANSPOSE:      return "transpose";
     2717+        case OP_INVERSE:        return "inverse";
     2718+        case OP_DETERMINANT:    return "determinant";
     2719+        case OP_UNARY_PLUS:     return "+";
     2720+        case OP_NEGATION:       return "-";
     2721+        case OP_PRE_INCREMENT:  return "++";
     2722+        case OP_PRE_DECREMENT:  return "--";
     2723+        case OP_POST_INCREMENT: return "++";
     2724+        case OP_POST_DECREMENT: return "--";
     2725+        case OP_ADD_INTO:       return "+=";
     2726+        case OP_SUBTRACT_FROM:  return "-=";
     2727+        case OP_MULTIPLY_INTO:  return "*=";
     2728+        case OP_DIVIDE_INTO:    return "/=";
     2729+
     2730+        default:
     2731+            DE_ASSERT(DE_FALSE);
     2732+            return "";
     2733+    }
     2734 }
     2735 
     2736 static OperationType getOperationType (MatrixOp op)
     2737 {
     2738-       switch (op)
     2739-       {
     2740-               case OP_ADD:                    return OPERATIONTYPE_BINARY_OPERATOR;
     2741-               case OP_SUB:                    return OPERATIONTYPE_BINARY_OPERATOR;
     2742-               case OP_MUL:                    return OPERATIONTYPE_BINARY_OPERATOR;
     2743-               case OP_DIV:                    return OPERATIONTYPE_BINARY_OPERATOR;
     2744-               case OP_COMP_MUL:               return OPERATIONTYPE_BINARY_FUNCTION;
     2745-               case OP_OUTER_PRODUCT:  return OPERATIONTYPE_BINARY_FUNCTION;
     2746-               case OP_TRANSPOSE:              return OPERATIONTYPE_UNARY_FUNCTION;
     2747-               case OP_INVERSE:                return OPERATIONTYPE_UNARY_FUNCTION;
     2748-               case OP_DETERMINANT:    return OPERATIONTYPE_UNARY_FUNCTION;
     2749-               case OP_UNARY_PLUS:             return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2750-               case OP_NEGATION:               return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2751-               case OP_PRE_INCREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2752-               case OP_PRE_DECREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2753-               case OP_POST_INCREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     2754-               case OP_POST_DECREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     2755-               case OP_ADD_INTO:               return OPERATIONTYPE_ASSIGNMENT;
     2756-               case OP_SUBTRACT_FROM:  return OPERATIONTYPE_ASSIGNMENT;
     2757-               case OP_MULTIPLY_INTO:  return OPERATIONTYPE_ASSIGNMENT;
     2758-               case OP_DIVIDE_INTO:    return OPERATIONTYPE_ASSIGNMENT;
     2759-               default:
     2760-                       DE_ASSERT(DE_FALSE);
     2761-                       return OPERATIONTYPE_LAST;
     2762-       }
     2763+    switch (op)
     2764+    {
     2765+        case OP_ADD:            return OPERATIONTYPE_BINARY_OPERATOR;
     2766+        case OP_SUB:            return OPERATIONTYPE_BINARY_OPERATOR;
     2767+        case OP_MUL:            return OPERATIONTYPE_BINARY_OPERATOR;
     2768+        case OP_DIV:            return OPERATIONTYPE_BINARY_OPERATOR;
     2769+        case OP_COMP_MUL:       return OPERATIONTYPE_BINARY_FUNCTION;
     2770+        case OP_OUTER_PRODUCT:  return OPERATIONTYPE_BINARY_FUNCTION;
     2771+        case OP_TRANSPOSE:      return OPERATIONTYPE_UNARY_FUNCTION;
     2772+        case OP_INVERSE:        return OPERATIONTYPE_UNARY_FUNCTION;
     2773+        case OP_DETERMINANT:    return OPERATIONTYPE_UNARY_FUNCTION;
     2774+        case OP_UNARY_PLUS:     return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2775+        case OP_NEGATION:       return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2776+        case OP_PRE_INCREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2777+        case OP_PRE_DECREMENT:  return OPERATIONTYPE_UNARY_PREFIX_OPERATOR;
     2778+        case OP_POST_INCREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     2779+        case OP_POST_DECREMENT: return OPERATIONTYPE_UNARY_POSTFIX_OPERATOR;
     2780+        case OP_ADD_INTO:       return OPERATIONTYPE_ASSIGNMENT;
     2781+        case OP_SUBTRACT_FROM:  return OPERATIONTYPE_ASSIGNMENT;
     2782+        case OP_MULTIPLY_INTO:  return OPERATIONTYPE_ASSIGNMENT;
     2783+        case OP_DIVIDE_INTO:    return OPERATIONTYPE_ASSIGNMENT;
     2784+        default:
     2785+            DE_ASSERT(DE_FALSE);
     2786+            return OPERATIONTYPE_LAST;
     2787+    }
     2788 }
     2789 
     2790 enum TestMatrixType
     2791 {
     2792-       TESTMATRIXTYPE_DEFAULT = 0,
     2793-       TESTMATRIXTYPE_NEGATED,
     2794-       TESTMATRIXTYPE_INCREMENTED,
     2795-       TESTMATRIXTYPE_DECREMENTED,
     2796-       TESTMATRIXTYPE_NEGATED_INCREMENTED,
     2797-       TESTMATRIXTYPE_INCREMENTED_LESS,
     2798+    TESTMATRIXTYPE_DEFAULT = 0,
     2799+    TESTMATRIXTYPE_NEGATED,
     2800+    TESTMATRIXTYPE_INCREMENTED,
     2801+    TESTMATRIXTYPE_DECREMENTED,
     2802+    TESTMATRIXTYPE_NEGATED_INCREMENTED,
     2803+    TESTMATRIXTYPE_INCREMENTED_LESS,
     2804 
     2805-       TESTMATRIXTYPE_LAST
     2806+    TESTMATRIXTYPE_LAST
     2807 };
     2808 
     2809 static TestMatrixType getOperationTestMatrixType (MatrixOp op)
     2810 {
     2811-       switch(op)
     2812-       {
     2813-               case OP_ADD:                    return TESTMATRIXTYPE_DEFAULT;
     2814-               case OP_SUB:                    return TESTMATRIXTYPE_DEFAULT;
     2815-               case OP_MUL:                    return TESTMATRIXTYPE_DEFAULT;
     2816-               case OP_DIV:                    return TESTMATRIXTYPE_DEFAULT;
     2817-               case OP_COMP_MUL:               return TESTMATRIXTYPE_DEFAULT;
     2818-               case OP_OUTER_PRODUCT:  return TESTMATRIXTYPE_DEFAULT;
     2819-               case OP_TRANSPOSE:              return TESTMATRIXTYPE_DEFAULT;
     2820-               case OP_INVERSE:                return TESTMATRIXTYPE_DEFAULT;
     2821-               case OP_DETERMINANT:    return TESTMATRIXTYPE_DEFAULT;
     2822-               case OP_UNARY_PLUS:             return TESTMATRIXTYPE_DECREMENTED;
     2823-               case OP_NEGATION:               return TESTMATRIXTYPE_NEGATED_INCREMENTED;
     2824-               case OP_PRE_INCREMENT:  return TESTMATRIXTYPE_NEGATED;
     2825-               case OP_PRE_DECREMENT:  return TESTMATRIXTYPE_INCREMENTED;
     2826-               case OP_POST_INCREMENT: return TESTMATRIXTYPE_NEGATED;
     2827-               case OP_POST_DECREMENT: return TESTMATRIXTYPE_DEFAULT;
     2828-               case OP_ADD_INTO:               return TESTMATRIXTYPE_DEFAULT;
     2829-               case OP_SUBTRACT_FROM:  return TESTMATRIXTYPE_INCREMENTED_LESS;
     2830-               case OP_MULTIPLY_INTO:  return TESTMATRIXTYPE_NEGATED;
     2831-               case OP_DIVIDE_INTO:    return TESTMATRIXTYPE_DECREMENTED;
     2832-
     2833-               default:
     2834-                       DE_ASSERT(DE_FALSE);
     2835-                       return TESTMATRIXTYPE_LAST;
     2836-       }
     2837+    switch(op)
     2838+    {
     2839+        case OP_ADD:            return TESTMATRIXTYPE_DEFAULT;
     2840+        case OP_SUB:            return TESTMATRIXTYPE_DEFAULT;
     2841+        case OP_MUL:            return TESTMATRIXTYPE_DEFAULT;
     2842+        case OP_DIV:            return TESTMATRIXTYPE_DEFAULT;
     2843+        case OP_COMP_MUL:       return TESTMATRIXTYPE_DEFAULT;
     2844+        case OP_OUTER_PRODUCT:  return TESTMATRIXTYPE_DEFAULT;
     2845+        case OP_TRANSPOSE:      return TESTMATRIXTYPE_DEFAULT;
     2846+        case OP_INVERSE:        return TESTMATRIXTYPE_DEFAULT;
     2847+        case OP_DETERMINANT:    return TESTMATRIXTYPE_DEFAULT;
     2848+        case OP_UNARY_PLUS:     return TESTMATRIXTYPE_DECREMENTED;
     2849+        case OP_NEGATION:       return TESTMATRIXTYPE_NEGATED_INCREMENTED;
     2850+        case OP_PRE_INCREMENT:  return TESTMATRIXTYPE_NEGATED;
     2851+        case OP_PRE_DECREMENT:  return TESTMATRIXTYPE_INCREMENTED;
     2852+        case OP_POST_INCREMENT: return TESTMATRIXTYPE_NEGATED;
     2853+        case OP_POST_DECREMENT: return TESTMATRIXTYPE_DEFAULT;
     2854+        case OP_ADD_INTO:       return TESTMATRIXTYPE_DEFAULT;
     2855+        case OP_SUBTRACT_FROM:  return TESTMATRIXTYPE_INCREMENTED_LESS;
     2856+        case OP_MULTIPLY_INTO:  return TESTMATRIXTYPE_NEGATED;
     2857+        case OP_DIVIDE_INTO:    return TESTMATRIXTYPE_DECREMENTED;
     2858+
     2859+        default:
     2860+            DE_ASSERT(DE_FALSE);
     2861+            return TESTMATRIXTYPE_LAST;
     2862+    }
     2863 }
     2864 
     2865 static bool isOperationBinary (MatrixOp op)
     2866 {
     2867-       return getOperationType(op) == OPERATIONTYPE_BINARY_OPERATOR ||
     2868-              getOperationType(op) == OPERATIONTYPE_BINARY_FUNCTION ||
     2869-              getOperationType(op) == OPERATIONTYPE_ASSIGNMENT;
     2870+    return getOperationType(op) == OPERATIONTYPE_BINARY_OPERATOR ||
     2871+           getOperationType(op) == OPERATIONTYPE_BINARY_FUNCTION ||
     2872+           getOperationType(op) == OPERATIONTYPE_ASSIGNMENT;
     2873 }
     2874 
     2875 static bool isOperationMatrixScalar (MatrixOp op)
     2876 {
     2877-       return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV;
     2878+    return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV;
     2879 }
     2880 
     2881 static bool isOperationMatrixVector (MatrixOp op)
     2882 {
     2883-       return op == OP_MUL;
     2884+    return op == OP_MUL;
     2885 }
     2886 
     2887 static bool isOperationArithmeticMatrixMatrix (MatrixOp op)
     2888 {
     2889-       return op == OP_MUL;
     2890+    return op == OP_MUL;
     2891 }
     2892 
     2893 static bool isOperationComponentwiseMatrixMatrix (MatrixOp op)
     2894 {
     2895-       return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV || op == OP_COMP_MUL;
     2896+    return op == OP_ADD || op == OP_SUB || op == OP_MUL || op == OP_DIV || op == OP_COMP_MUL;
     2897 }
     2898 
     2899 static bool isOperationVectorVector (MatrixOp op)
     2900 {
     2901-       return op == OP_OUTER_PRODUCT;
     2902+    return op == OP_OUTER_PRODUCT;
     2903 }
     2904 
     2905 static bool isOperationUnaryAnyMatrix (MatrixOp op)
     2906 {
     2907-       return  op == OP_TRANSPOSE                       ||
     2908-                       op == OP_UNARY_PLUS                      ||
     2909-                       op == OP_NEGATION                        ||
     2910-                       op == OP_PRE_INCREMENT           ||
     2911-                       op == OP_PRE_DECREMENT           ||
     2912-                       op == OP_POST_INCREMENT          ||
     2913-                       op == OP_POST_DECREMENT;
     2914+    return  op == OP_TRANSPOSE           ||
     2915+            op == OP_UNARY_PLUS          ||
     2916+            op == OP_NEGATION            ||
     2917+            op == OP_PRE_INCREMENT       ||
     2918+            op == OP_PRE_DECREMENT       ||
     2919+            op == OP_POST_INCREMENT      ||
     2920+            op == OP_POST_DECREMENT;
     2921 }
     2922 
     2923 static bool isOperationUnarySymmetricMatrix (MatrixOp op)
     2924 {
     2925-       return op == OP_INVERSE || op == OP_DETERMINANT;
     2926+    return op == OP_INVERSE || op == OP_DETERMINANT;
     2927 }
     2928 
     2929 static bool isOperationValueModifying (MatrixOp op)
     2930 {
     2931-       return  op == OP_PRE_INCREMENT           ||
     2932-                       op == OP_PRE_DECREMENT           ||
     2933-                       op == OP_POST_INCREMENT          ||
     2934-                       op == OP_POST_DECREMENT;
     2935+    return  op == OP_PRE_INCREMENT       ||
     2936+            op == OP_PRE_DECREMENT       ||
     2937+            op == OP_POST_INCREMENT      ||
     2938+            op == OP_POST_DECREMENT;
     2939 }
     2940 
     2941 static bool isOperationAssignment (MatrixOp op)
     2942 {
     2943-       return  op == OP_ADD_INTO                ||
     2944-                       op == OP_SUBTRACT_FROM   ||
     2945-                       op == OP_MULTIPLY_INTO   ||
     2946-                       op == OP_DIVIDE_INTO;
     2947+    return  op == OP_ADD_INTO        ||
     2948+            op == OP_SUBTRACT_FROM   ||
     2949+            op == OP_MULTIPLY_INTO   ||
     2950+            op == OP_DIVIDE_INTO;
     2951 }
     2952 
     2953 static bool isOperationAssignmentAnyMatrix (MatrixOp op)
     2954 {
     2955-       return  op == OP_ADD_INTO                ||
     2956-                       op == OP_SUBTRACT_FROM   ||
     2957-                       op == OP_DIVIDE_INTO;
     2958+    return  op == OP_ADD_INTO        ||
     2959+            op == OP_SUBTRACT_FROM   ||
     2960+            op == OP_DIVIDE_INTO;
     2961 }
     2962 
     2963 static bool isOperationAssignmentSymmetricMatrix (MatrixOp op)
     2964 {
     2965-       return op == OP_MULTIPLY_INTO;
     2966+    return op == OP_MULTIPLY_INTO;
     2967 }
     2968 
     2969 // Operation nature
     2970 
     2971 enum OperationNature
     2972 {
     2973-       OPERATIONNATURE_PURE = 0,
     2974-       OPERATIONNATURE_MUTATING,
     2975-       OPERATIONNATURE_ASSIGNMENT,
     2976+    OPERATIONNATURE_PURE = 0,
     2977+    OPERATIONNATURE_MUTATING,
     2978+    OPERATIONNATURE_ASSIGNMENT,
     2979 
     2980-       OPERATIONNATURE_LAST
     2981+    OPERATIONNATURE_LAST
     2982 };
     2983 
     2984 static OperationNature getOperationNature (MatrixOp op)
     2985 {
     2986-       if (isOperationAssignment(op))
     2987-               return OPERATIONNATURE_ASSIGNMENT;
     2988+    if (isOperationAssignment(op))
     2989+        return OPERATIONNATURE_ASSIGNMENT;
     2990 
     2991-       if (isOperationValueModifying(op))
     2992-               return OPERATIONNATURE_MUTATING;
     2993+    if (isOperationValueModifying(op))
     2994+        return OPERATIONNATURE_MUTATING;
     2995 
     2996-       return OPERATIONNATURE_PURE;
     2997+    return OPERATIONNATURE_PURE;
     2998 }
     2999 
     3000 // Input value loader.
     3001@@ -493,143 +493,143 @@ static OperationNature getOperationNature (MatrixOp op)
     3002 template <int InputT, int DataT>
     3003 typename TypeTraits<DataT>::Type getInputValue (const ShaderEvalContext& evalCtx, int inputNdx);
     3004 
     3005-template <> inline float               getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT>                     (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInFloat[inputNdx];  }
     3006-template <> inline tcu::Vec2   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec2[inputNdx];   }
     3007-template <> inline tcu::Vec3   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec3[inputNdx];   }
     3008-template <> inline tcu::Vec4   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_VEC4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec4[inputNdx];   }
     3009-
     3010-template <> inline tcu::Mat2   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2(s_constInMat2x2[inputNdx]);              }
     3011-template <> inline tcu::Mat2x3 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT2X3>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2x3(s_constInMat2x3[inputNdx]);    }
     3012-template <> inline tcu::Mat2x4 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT2X4>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2x4(s_constInMat2x4[inputNdx]);    }
     3013-template <> inline tcu::Mat3x2 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT3X2>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3x2(s_constInMat3x2[inputNdx]);    }
     3014-template <> inline tcu::Mat3   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3(s_constInMat3x3[inputNdx]);              }
     3015-template <> inline tcu::Mat3x4 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT3X4>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3x4(s_constInMat3x4[inputNdx]);    }
     3016-template <> inline tcu::Mat4x2 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT4X2>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4x2(s_constInMat4x2[inputNdx]);    }
     3017-template <> inline tcu::Mat4x3 getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT4X3>      (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4x3(s_constInMat4x3[inputNdx]);    }
     3018-template <> inline tcu::Mat4   getInputValue<INPUTTYPE_CONST,          TYPE_FLOAT_MAT4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4(s_constInMat4x4[inputNdx]);              }
     3019-
     3020-template <> inline float               getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT>                     (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.x();                                       }
     3021-template <> inline tcu::Vec2   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC2>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1);                     }
     3022-template <> inline tcu::Vec3   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC3>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2);          }
     3023-template <> inline tcu::Vec4   getInputValue<INPUTTYPE_DYNAMIC,        TYPE_FLOAT_VEC4>        (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2, 3);       }
     3024+template <> inline float        getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT>         (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInFloat[inputNdx];  }
     3025+template <> inline tcu::Vec2    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec2[inputNdx];   }
     3026+template <> inline tcu::Vec3    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec3[inputNdx];   }
     3027+template <> inline tcu::Vec4    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_VEC4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return s_constInVec4[inputNdx];   }
     3028+
     3029+template <> inline tcu::Mat2    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2(s_constInMat2x2[inputNdx]);      }
     3030+template <> inline tcu::Mat2x3  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT2X3>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2x3(s_constInMat2x3[inputNdx]);    }
     3031+template <> inline tcu::Mat2x4  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT2X4>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat2x4(s_constInMat2x4[inputNdx]);    }
     3032+template <> inline tcu::Mat3x2  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT3X2>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3x2(s_constInMat3x2[inputNdx]);    }
     3033+template <> inline tcu::Mat3    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3(s_constInMat3x3[inputNdx]);      }
     3034+template <> inline tcu::Mat3x4  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT3X4>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat3x4(s_constInMat3x4[inputNdx]);    }
     3035+template <> inline tcu::Mat4x2  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT4X2>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4x2(s_constInMat4x2[inputNdx]);    }
     3036+template <> inline tcu::Mat4x3  getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT4X3>  (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4x3(s_constInMat4x3[inputNdx]);    }
     3037+template <> inline tcu::Mat4    getInputValue<INPUTTYPE_CONST,      TYPE_FLOAT_MAT4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(evalCtx); return tcu::Mat4(s_constInMat4x4[inputNdx]);      }
     3038+
     3039+template <> inline float        getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT>         (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.x();                   }
     3040+template <> inline tcu::Vec2    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC2>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1);         }
     3041+template <> inline tcu::Vec3    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC3>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2);      }
     3042+template <> inline tcu::Vec4    getInputValue<INPUTTYPE_DYNAMIC,    TYPE_FLOAT_VEC4>    (const ShaderEvalContext& evalCtx, int inputNdx) { DE_UNREF(inputNdx); return evalCtx.coords.swizzle(0, 1, 2, 3);   }
     3043 
     3044 template <> inline tcu::Mat2 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT2> (const ShaderEvalContext& evalCtx, int inputNdx)
     3045 {
     3046-       DE_UNREF(inputNdx); // Not used.
     3047-       tcu::Mat2 m;
     3048-       m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3049-       m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3050-       return m;
     3051+    DE_UNREF(inputNdx); // Not used.
     3052+    tcu::Mat2 m;
     3053+    m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3054+    m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3055+    return m;
     3056 }
     3057 
     3058 template <> inline tcu::Mat2x3 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT2X3> (const ShaderEvalContext& evalCtx, int inputNdx)
     3059 {
     3060-       DE_UNREF(inputNdx); // Not used.
     3061-       tcu::Mat2x3 m;
     3062-       m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3063-       m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3064-       return m;
     3065+    DE_UNREF(inputNdx); // Not used.
     3066+    tcu::Mat2x3 m;
     3067+    m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3068+    m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3069+    return m;
     3070 }
     3071 
     3072 template <> inline tcu::Mat2x4 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT2X4> (const ShaderEvalContext& evalCtx, int inputNdx)
     3073 {
     3074-       DE_UNREF(inputNdx); // Not used.
     3075-       tcu::Mat2x4 m;
     3076-       m.setColumn(0, evalCtx.in[0]);
     3077-       m.setColumn(1, evalCtx.in[1]);
     3078-       return m;
     3079+    DE_UNREF(inputNdx); // Not used.
     3080+    tcu::Mat2x4 m;
     3081+    m.setColumn(0, evalCtx.in[0]);
     3082+    m.setColumn(1, evalCtx.in[1]);
     3083+    return m;
     3084 }
     3085 
     3086 template <> inline tcu::Mat3x2 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT3X2> (const ShaderEvalContext& evalCtx, int inputNdx)
     3087 {
     3088-       DE_UNREF(inputNdx); // Not used.
     3089-       tcu::Mat3x2 m;
     3090-       m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3091-       m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3092-       m.setColumn(2, evalCtx.in[2].swizzle(0,1));
     3093-       return m;
     3094+    DE_UNREF(inputNdx); // Not used.
     3095+    tcu::Mat3x2 m;
     3096+    m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3097+    m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3098+    m.setColumn(2, evalCtx.in[2].swizzle(0,1));
     3099+    return m;
     3100 }
     3101 
     3102 template <> inline tcu::Mat3 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT3> (const ShaderEvalContext& evalCtx, int inputNdx)
     3103 {
     3104-       DE_UNREF(inputNdx); // Not used.
     3105-       tcu::Mat3 m;
     3106-       m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3107-       m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3108-       m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     3109-       return m;
     3110+    DE_UNREF(inputNdx); // Not used.
     3111+    tcu::Mat3 m;
     3112+    m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3113+    m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3114+    m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     3115+    return m;
     3116 }
     3117 
     3118 template <> inline tcu::Mat3x4 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT3X4> (const ShaderEvalContext& evalCtx, int inputNdx)
     3119 {
     3120-       DE_UNREF(inputNdx); // Not used.
     3121-       tcu::Mat3x4 m;
     3122-       m.setColumn(0, evalCtx.in[0]);
     3123-       m.setColumn(1, evalCtx.in[1]);
     3124-       m.setColumn(2, evalCtx.in[2]);
     3125-       return m;
     3126+    DE_UNREF(inputNdx); // Not used.
     3127+    tcu::Mat3x4 m;
     3128+    m.setColumn(0, evalCtx.in[0]);
     3129+    m.setColumn(1, evalCtx.in[1]);
     3130+    m.setColumn(2, evalCtx.in[2]);
     3131+    return m;
     3132 }
     3133 
     3134 template <> inline tcu::Mat4x2 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT4X2> (const ShaderEvalContext& evalCtx, int inputNdx)
     3135 {
     3136-       DE_UNREF(inputNdx); // Not used.
     3137-       tcu::Mat4x2 m;
     3138-       m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3139-       m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3140-       m.setColumn(2, evalCtx.in[2].swizzle(0,1));
     3141-       m.setColumn(3, evalCtx.in[3].swizzle(0,1));
     3142-       return m;
     3143+    DE_UNREF(inputNdx); // Not used.
     3144+    tcu::Mat4x2 m;
     3145+    m.setColumn(0, evalCtx.in[0].swizzle(0,1));
     3146+    m.setColumn(1, evalCtx.in[1].swizzle(0,1));
     3147+    m.setColumn(2, evalCtx.in[2].swizzle(0,1));
     3148+    m.setColumn(3, evalCtx.in[3].swizzle(0,1));
     3149+    return m;
     3150 }
     3151 
     3152 template <> inline tcu::Mat4x3 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT4X3> (const ShaderEvalContext& evalCtx, int inputNdx)
     3153 {
     3154-       DE_UNREF(inputNdx); // Not used.
     3155-       tcu::Mat4x3 m;
     3156-       m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3157-       m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3158-       m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     3159-       m.setColumn(3, evalCtx.in[3].swizzle(0,1,2));
     3160-       return m;
     3161+    DE_UNREF(inputNdx); // Not used.
     3162+    tcu::Mat4x3 m;
     3163+    m.setColumn(0, evalCtx.in[0].swizzle(0,1,2));
     3164+    m.setColumn(1, evalCtx.in[1].swizzle(0,1,2));
     3165+    m.setColumn(2, evalCtx.in[2].swizzle(0,1,2));
     3166+    m.setColumn(3, evalCtx.in[3].swizzle(0,1,2));
     3167+    return m;
     3168 }
     3169 
     3170 template <> inline tcu::Mat4 getInputValue<INPUTTYPE_DYNAMIC, TYPE_FLOAT_MAT4> (const ShaderEvalContext& evalCtx, int inputNdx)
     3171 {
     3172-       DE_UNREF(inputNdx); // Not used.
     3173-       tcu::Mat4 m;
     3174-       m.setColumn(0, evalCtx.in[0]);
     3175-       m.setColumn(1, evalCtx.in[1]);
     3176-       m.setColumn(2, evalCtx.in[2]);
     3177-       m.setColumn(3, evalCtx.in[3]);
     3178-       return m;
     3179+    DE_UNREF(inputNdx); // Not used.
     3180+    tcu::Mat4 m;
     3181+    m.setColumn(0, evalCtx.in[0]);
     3182+    m.setColumn(1, evalCtx.in[1]);
     3183+    m.setColumn(2, evalCtx.in[2]);
     3184+    m.setColumn(3, evalCtx.in[3]);
     3185+    return m;
     3186 }
     3187 
     3188 // Reduction from expression result to vec3.
     3189 
     3190-inline tcu::Vec3 reduceToVec3 (const tcu::Vec2& value)         { return value.swizzle(0,1,0); }
     3191-inline tcu::Vec3 reduceToVec3 (const tcu::Vec3& value)         { return value; }
     3192-inline tcu::Vec3 reduceToVec3 (const tcu::Vec4& value)         { return tcu::Vec3(value.x(), value.y(), value.z()+value.w()); }
     3193-inline tcu::Vec3 reduceToVec3 (const tcu::Mat2& value)         { return tcu::Vec3(value(0, 0), value(0, 1), value(1, 0)+value(1, 1)); }
     3194-inline tcu::Vec3 reduceToVec3 (const tcu::Mat2x3& value)       { return value.getColumn(0) + value.getColumn(1); }
     3195-inline tcu::Vec3 reduceToVec3 (const tcu::Mat2x4& value)       { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3); }
     3196-inline tcu::Vec3 reduceToVec3 (const tcu::Mat3x2& value)       { return tcu::Vec3(value(0,0)+value(1,0), value(0,1)+value(1,1), value(0,2)+value(1,2)); }
     3197-inline tcu::Vec3 reduceToVec3 (const tcu::Mat3& value)         { return value.getColumn(0) + value.getColumn(1) + value.getColumn(2); }
     3198-inline tcu::Vec3 reduceToVec3 (const tcu::Mat3x4& value)       { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3) + value.getColumn(2).swizzle(2,3,0); }
     3199-inline tcu::Vec3 reduceToVec3 (const tcu::Mat4x2& value)       { return tcu::Vec3(value(0,0)+value(1,0)+value(0,3), value(0,1)+value(1,1)+value(1,3), value(0,2)+value(1,2)); }
     3200-inline tcu::Vec3 reduceToVec3 (const tcu::Mat4x3& value)       { return value.getColumn(0) + value.getColumn(1) + value.getColumn(2) + value.getColumn(3); }
     3201-inline tcu::Vec3 reduceToVec3 (const tcu::Mat4& value)         { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3) + value.getColumn(2).swizzle(2,3,0) + value.getColumn(3).swizzle(3,0,1); }
     3202+inline tcu::Vec3 reduceToVec3 (const tcu::Vec2& value)      { return value.swizzle(0,1,0); }
     3203+inline tcu::Vec3 reduceToVec3 (const tcu::Vec3& value)      { return value; }
     3204+inline tcu::Vec3 reduceToVec3 (const tcu::Vec4& value)      { return tcu::Vec3(value.x(), value.y(), value.z()+value.w()); }
     3205+inline tcu::Vec3 reduceToVec3 (const tcu::Mat2& value)      { return tcu::Vec3(value(0, 0), value(0, 1), value(1, 0)+value(1, 1)); }
     3206+inline tcu::Vec3 reduceToVec3 (const tcu::Mat2x3& value)    { return value.getColumn(0) + value.getColumn(1); }
     3207+inline tcu::Vec3 reduceToVec3 (const tcu::Mat2x4& value)    { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3); }
     3208+inline tcu::Vec3 reduceToVec3 (const tcu::Mat3x2& value)    { return tcu::Vec3(value(0,0)+value(1,0), value(0,1)+value(1,1), value(0,2)+value(1,2)); }
     3209+inline tcu::Vec3 reduceToVec3 (const tcu::Mat3& value)      { return value.getColumn(0) + value.getColumn(1) + value.getColumn(2); }
     3210+inline tcu::Vec3 reduceToVec3 (const tcu::Mat3x4& value)    { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3) + value.getColumn(2).swizzle(2,3,0); }
     3211+inline tcu::Vec3 reduceToVec3 (const tcu::Mat4x2& value)    { return tcu::Vec3(value(0,0)+value(1,0)+value(0,3), value(0,1)+value(1,1)+value(1,3), value(0,2)+value(1,2)); }
     3212+inline tcu::Vec3 reduceToVec3 (const tcu::Mat4x3& value)    { return value.getColumn(0) + value.getColumn(1) + value.getColumn(2) + value.getColumn(3); }
     3213+inline tcu::Vec3 reduceToVec3 (const tcu::Mat4& value)      { return value.getColumn(0).swizzle(0,1,2) + value.getColumn(1).swizzle(1,2,3) + value.getColumn(2).swizzle(2,3,0) + value.getColumn(3).swizzle(3,0,1); }
     3214 
     3215 // matrixCompMult
     3216 
     3217 template <typename T, int Rows, int Cols>
     3218 tcu::Matrix<T, Rows, Cols> matrixCompMult (const tcu::Matrix<T, Rows, Cols>& a, const tcu::Matrix<T, Rows, Cols>& b)
     3219 {
     3220-       tcu::Matrix<T, Rows, Cols> retVal;
     3221+    tcu::Matrix<T, Rows, Cols> retVal;
     3222 
     3223-       for (int r = 0; r < Rows; ++r)
     3224-               for (int c = 0; c < Cols; ++c)
     3225-                       retVal(r,c) = a(r,c) * b(r, c);
     3226+    for (int r = 0; r < Rows; ++r)
     3227+        for (int c = 0; c < Cols; ++c)
     3228+            retVal(r,c) = a(r,c) * b(r, c);
     3229 
     3230-       return retVal;
     3231+    return retVal;
     3232 }
     3233 
     3234 // transpose
     3235@@ -637,13 +637,13 @@ tcu::Matrix<T, Rows, Cols> matrixCompMult (const tcu::Matrix<T, Rows, Cols>& a,
     3236 template <typename T, int Rows, int Cols>
     3237 tcu::Matrix<T, Cols, Rows> transpose (const tcu::Matrix<T, Rows, Cols>& mat)
     3238 {
     3239-       tcu::Matrix<T, Cols, Rows> retVal;
     3240+    tcu::Matrix<T, Cols, Rows> retVal;
     3241 
     3242-       for (int r = 0; r < Rows; ++r)
     3243-               for (int c = 0; c < Cols; ++c)
     3244-                       retVal(c, r) = mat(r, c);
     3245+    for (int r = 0; r < Rows; ++r)
     3246+        for (int c = 0; c < Cols; ++c)
     3247+            retVal(c, r) = mat(r, c);
     3248 
     3249-       return retVal;
     3250+    return retVal;
     3251 }
     3252 
     3253 // outerProduct
     3254@@ -651,13 +651,13 @@ tcu::Matrix<T, Cols, Rows> transpose (const tcu::Matrix<T, Rows, Cols>& mat)
     3255 template <typename T, int Rows, int Cols>
     3256 tcu::Matrix<T, Cols, Rows> outerProduct (const tcu::Vector<T, Cols>& a, const tcu::Vector<T, Rows>& b)
     3257 {
     3258-       tcu::Matrix<T, Rows, Cols> retVal;
     3259+    tcu::Matrix<T, Rows, Cols> retVal;
     3260 
     3261-       for (int r = 0; r < Rows; ++r)
     3262-               for (int c = 0; c < Cols; ++c)
     3263-                       retVal(r,c) = a[c] * b[r];
     3264+    for (int r = 0; r < Rows; ++r)
     3265+        for (int c = 0; c < Cols; ++c)
     3266+            retVal(r,c) = a[c] * b[r];
     3267 
     3268-       return transpose(retVal); // to gl-form (column-major)
     3269+    return transpose(retVal); // to gl-form (column-major)
     3270 }
     3271 
     3272 // Determinant
     3273@@ -668,51 +668,51 @@ float determinant (const tcu::Matrix<float, Size, Size>& mat);
     3274 template <>
     3275 float determinant<2> (const tcu::Matrix<float, 2, 2>& mat)
     3276 {
     3277-       return mat(0,0) * mat(1,1) - mat(1,0) * mat(0,1);
     3278+    return mat(0,0) * mat(1,1) - mat(1,0) * mat(0,1);
     3279 }
     3280 
     3281 template <>
     3282 float determinant<3> (const tcu::Matrix<float, 3, 3>& mat)
     3283 {
     3284-       return  + mat(0,0) * mat(1,1) * mat(2,2)
     3285-                       + mat(0,1) * mat(1,2) * mat(2,0)
     3286-                       + mat(0,2) * mat(1,0) * mat(2,1)
     3287-                       - mat(0,0) * mat(1,2) * mat(2,1)
     3288-                       - mat(0,1) * mat(1,0) * mat(2,2)
     3289-                       - mat(0,2) * mat(1,1) * mat(2,0);
     3290+    return  + mat(0,0) * mat(1,1) * mat(2,2)
     3291+            + mat(0,1) * mat(1,2) * mat(2,0)
     3292+            + mat(0,2) * mat(1,0) * mat(2,1)
     3293+            - mat(0,0) * mat(1,2) * mat(2,1)
     3294+            - mat(0,1) * mat(1,0) * mat(2,2)
     3295+            - mat(0,2) * mat(1,1) * mat(2,0);
     3296 }
     3297 
     3298 template <>
     3299 float determinant<4> (const tcu::Matrix<float, 4, 4>& mat)
     3300 {
     3301-       const float minorMatrices[4][3*3] =
     3302-       {
     3303-               {
     3304-                       mat(1,1),       mat(2,1),       mat(3,1),
     3305-                       mat(1,2),       mat(2,2),       mat(3,2),
     3306-                       mat(1,3),       mat(2,3),       mat(3,3),
     3307-               },
     3308-               {
     3309-                       mat(1,0),       mat(2,0),       mat(3,0),
     3310-                       mat(1,2),       mat(2,2),       mat(3,2),
     3311-                       mat(1,3),       mat(2,3),       mat(3,3),
     3312-               },
     3313-               {
     3314-                       mat(1,0),       mat(2,0),       mat(3,0),
     3315-                       mat(1,1),       mat(2,1),       mat(3,1),
     3316-                       mat(1,3),       mat(2,3),       mat(3,3),
     3317-               },
     3318-               {
     3319-                       mat(1,0),       mat(2,0),       mat(3,0),
     3320-                       mat(1,1),       mat(2,1),       mat(3,1),
     3321-                       mat(1,2),       mat(2,2),       mat(3,2),
     3322-               }
     3323-       };
     3324-
     3325-       return  + mat(0,0) * determinant(tcu::Mat3(minorMatrices[0]))
     3326-                       - mat(0,1) * determinant(tcu::Mat3(minorMatrices[1]))
     3327-                       + mat(0,2) * determinant(tcu::Mat3(minorMatrices[2]))
     3328-                       - mat(0,3) * determinant(tcu::Mat3(minorMatrices[3]));
     3329+    const float minorMatrices[4][3*3] =
     3330+    {
     3331+        {
     3332+            mat(1,1),   mat(2,1),   mat(3,1),
     3333+            mat(1,2),   mat(2,2),   mat(3,2),
     3334+            mat(1,3),   mat(2,3),   mat(3,3),
     3335+        },
     3336+        {
     3337+            mat(1,0),   mat(2,0),   mat(3,0),
     3338+            mat(1,2),   mat(2,2),   mat(3,2),
     3339+            mat(1,3),   mat(2,3),   mat(3,3),
     3340+        },
     3341+        {
     3342+            mat(1,0),   mat(2,0),   mat(3,0),
     3343+            mat(1,1),   mat(2,1),   mat(3,1),
     3344+            mat(1,3),   mat(2,3),   mat(3,3),
     3345+        },
     3346+        {
     3347+            mat(1,0),   mat(2,0),   mat(3,0),
     3348+            mat(1,1),   mat(2,1),   mat(3,1),
     3349+            mat(1,2),   mat(2,2),   mat(3,2),
     3350+        }
     3351+    };
     3352+
     3353+    return  + mat(0,0) * determinant(tcu::Mat3(minorMatrices[0]))
     3354+            - mat(0,1) * determinant(tcu::Mat3(minorMatrices[1]))
     3355+            + mat(0,2) * determinant(tcu::Mat3(minorMatrices[2]))
     3356+            - mat(0,3) * determinant(tcu::Mat3(minorMatrices[3]));
     3357 }
     3358 
     3359 // Inverse
     3360@@ -723,120 +723,120 @@ tcu::Matrix<float, Size, Size> inverse (const tcu::Matrix<float, Size, Size>& ma
     3361 template <>
     3362 tcu::Matrix<float, 2, 2> inverse<2> (const tcu::Matrix<float, 2, 2>& mat)
     3363 {
     3364-       const float                                     det             = determinant(mat);
     3365-       tcu::Matrix<float, 2, 2>        retVal;
     3366+    const float                 det     = determinant(mat);
     3367+    tcu::Matrix<float, 2, 2>    retVal;
     3368 
     3369-       DE_ASSERT(det != 0.0f);
     3370+    DE_ASSERT(det != 0.0f);
     3371 
     3372-       retVal(0, 0) =  mat(1, 1) / det;
     3373-       retVal(0, 1) = -mat(0, 1) / det;
     3374-       retVal(1, 0) = -mat(1, 0) / det;
     3375-       retVal(1, 1) =  mat(0, 0) / det;
     3376+    retVal(0, 0) =  mat(1, 1) / det;
     3377+    retVal(0, 1) = -mat(0, 1) / det;
     3378+    retVal(1, 0) = -mat(1, 0) / det;
     3379+    retVal(1, 1) =  mat(0, 0) / det;
     3380 
     3381-       return retVal;
     3382+    return retVal;
     3383 }
     3384 
     3385 template <>
     3386 tcu::Matrix<float, 3, 3> inverse<3> (const tcu::Matrix<float, 3, 3>& mat)
     3387 {
     3388-       // Blockwise inversion
     3389-
     3390-       DE_ASSERT(determinant(mat) != 0.0f);
     3391-
     3392-       const float areaA[2*2] =
     3393-       {
     3394-               mat(0,0),       mat(0,1),
     3395-               mat(1,0),       mat(1,1)
     3396-       };
     3397-       const float areaB[2] =
     3398-       {
     3399-               mat(0,2),
     3400-               mat(1,2),
     3401-       };
     3402-       const float areaC[2] =
     3403-       {
     3404-               mat(2,0),       mat(2,1),
     3405-       };
     3406-       const float areaD[1] =
     3407-       {
     3408-               mat(2,2)
     3409-       };
     3410-       const float nullField[4] = { 0.0f };
     3411-
     3412-       const tcu::Matrix<float, 2, 2>  invA = inverse(tcu::Matrix<float, 2, 2>(areaA));
     3413-       const tcu::Matrix<float, 2, 1>  matB =         tcu::Matrix<float, 2, 1>(areaB);
     3414-       const tcu::Matrix<float, 1, 2>  matC =         tcu::Matrix<float, 1, 2>(areaC);
     3415-       const tcu::Matrix<float, 1, 1>  matD =         tcu::Matrix<float, 1, 1>(areaD);
     3416-
     3417-       const float                                             schurComplement = 1.0f / (matD - matC*invA*matB)(0,0);
     3418-       const tcu::Matrix<float, 2, 2>  zeroMat         = Mat2(nullField);
     3419-
     3420-       const tcu::Matrix<float, 2, 2>  blockA = invA + invA*matB*schurComplement*matC*invA;
     3421-       const tcu::Matrix<float, 2, 1>  blockB = (zeroMat-invA)*matB*schurComplement;
     3422-       const tcu::Matrix<float, 1, 2>  blockC = matC*invA*(-schurComplement);
     3423-       const float                                             blockD = schurComplement;
     3424-
     3425-       const float result[3*3] =
     3426-       {
     3427-               blockA(0,0),    blockA(0,1),    blockB(0,0),
     3428-               blockA(1,0),    blockA(1,1),    blockB(1,0),
     3429-               blockC(0,0),    blockC(0,1),    blockD,
     3430-       };
     3431-
     3432-       return Mat3(result);
     3433+    // Blockwise inversion
     3434+
     3435+    DE_ASSERT(determinant(mat) != 0.0f);
     3436+
     3437+    const float areaA[2*2] =
     3438+    {
     3439+        mat(0,0),   mat(0,1),
     3440+        mat(1,0),   mat(1,1)
     3441+    };
     3442+    const float areaB[2] =
     3443+    {
     3444+        mat(0,2),
     3445+        mat(1,2),
     3446+    };
     3447+    const float areaC[2] =
     3448+    {
     3449+        mat(2,0),   mat(2,1),
     3450+    };
     3451+    const float areaD[1] =
     3452+    {
     3453+        mat(2,2)
     3454+    };
     3455+    const float nullField[4] = { 0.0f };
     3456+
     3457+    const tcu::Matrix<float, 2, 2>  invA = inverse(tcu::Matrix<float, 2, 2>(areaA));
     3458+    const tcu::Matrix<float, 2, 1>  matB =         tcu::Matrix<float, 2, 1>(areaB);
     3459+    const tcu::Matrix<float, 1, 2>  matC =         tcu::Matrix<float, 1, 2>(areaC);
     3460+    const tcu::Matrix<float, 1, 1>  matD =         tcu::Matrix<float, 1, 1>(areaD);
     3461+
     3462+    const float                     schurComplement = 1.0f / (matD - matC*invA*matB)(0,0);
     3463+    const tcu::Matrix<float, 2, 2>  zeroMat         = Mat2(nullField);
     3464+
     3465+    const tcu::Matrix<float, 2, 2>  blockA = invA + invA*matB*schurComplement*matC*invA;
     3466+    const tcu::Matrix<float, 2, 1>  blockB = (zeroMat-invA)*matB*schurComplement;
     3467+    const tcu::Matrix<float, 1, 2>  blockC = matC*invA*(-schurComplement);
     3468+    const float                     blockD = schurComplement;
     3469+
     3470+    const float result[3*3] =
     3471+    {
     3472+        blockA(0,0),    blockA(0,1),    blockB(0,0),
     3473+        blockA(1,0),    blockA(1,1),    blockB(1,0),
     3474+        blockC(0,0),    blockC(0,1),    blockD,
     3475+    };
     3476+
     3477+    return Mat3(result);
     3478 }
     3479 
     3480 template <>
     3481 tcu::Matrix<float, 4, 4> inverse<4> (const tcu::Matrix<float, 4, 4>& mat)
     3482 {
     3483-       // Blockwise inversion
     3484-
     3485-       DE_ASSERT(determinant(mat) != 0.0f);
     3486-
     3487-       const float areaA[2*2] =
     3488-       {
     3489-               mat(0,0),       mat(0,1),
     3490-               mat(1,0),       mat(1,1)
     3491-       };
     3492-       const float areaB[2*2] =
     3493-       {
     3494-               mat(0,2),       mat(0,3),
     3495-               mat(1,2),       mat(1,3)
     3496-       };
     3497-       const float areaC[2*2] =
     3498-       {
     3499-               mat(2,0),       mat(2,1),
     3500-               mat(3,0),       mat(3,1)
     3501-       };
     3502-       const float areaD[2*2] =
     3503-       {
     3504-               mat(2,2),       mat(2,3),
     3505-               mat(3,2),       mat(3,3)
     3506-       };
     3507-       const float nullField[4] = { 0.0f };
     3508-
     3509-       const tcu::Matrix<float, 2, 2> invA = inverse(Mat2(areaA));
     3510-       const tcu::Matrix<float, 2, 2> matB =         Mat2(areaB);
     3511-       const tcu::Matrix<float, 2, 2> matC =         Mat2(areaC);
     3512-       const tcu::Matrix<float, 2, 2> matD =         Mat2(areaD);
     3513-
     3514-       const tcu::Matrix<float, 2, 2> schurComplement = inverse(matD - matC*invA*matB);
     3515-       const tcu::Matrix<float, 2, 2> zeroMat         = Mat2(nullField);
     3516-
     3517-       const tcu::Matrix<float, 2, 2> blockA = invA + invA*matB*schurComplement*matC*invA;
     3518-       const tcu::Matrix<float, 2, 2> blockB = (zeroMat-invA)*matB*schurComplement;
     3519-       const tcu::Matrix<float, 2, 2> blockC = (zeroMat-schurComplement)*matC*invA;
     3520-       const tcu::Matrix<float, 2, 2> blockD = schurComplement;
     3521-
     3522-       const float result[4*4] =
     3523-       {
     3524-               blockA(0,0),    blockA(0,1),    blockB(0,0),    blockB(0,1),
     3525-               blockA(1,0),    blockA(1,1),    blockB(1,0),    blockB(1,1),
     3526-               blockC(0,0),    blockC(0,1),    blockD(0,0),    blockD(0,1),
     3527-               blockC(1,0),    blockC(1,1),    blockD(1,0),    blockD(1,1),
     3528-       };
     3529-
     3530-       return Mat4(result);
     3531+    // Blockwise inversion
     3532+
     3533+    DE_ASSERT(determinant(mat) != 0.0f);
     3534+
     3535+    const float areaA[2*2] =
     3536+    {
     3537+        mat(0,0),   mat(0,1),
     3538+        mat(1,0),   mat(1,1)
     3539+    };
     3540+    const float areaB[2*2] =
     3541+    {
     3542+        mat(0,2),   mat(0,3),
     3543+        mat(1,2),   mat(1,3)
     3544+    };
     3545+    const float areaC[2*2] =
     3546+    {
     3547+        mat(2,0),   mat(2,1),
     3548+        mat(3,0),   mat(3,1)
     3549+    };
     3550+    const float areaD[2*2] =
     3551+    {
     3552+        mat(2,2),   mat(2,3),
     3553+        mat(3,2),   mat(3,3)
     3554+    };
     3555+    const float nullField[4] = { 0.0f };
     3556+
     3557+    const tcu::Matrix<float, 2, 2> invA = inverse(Mat2(areaA));
     3558+    const tcu::Matrix<float, 2, 2> matB =         Mat2(areaB);
     3559+    const tcu::Matrix<float, 2, 2> matC =         Mat2(areaC);
     3560+    const tcu::Matrix<float, 2, 2> matD =         Mat2(areaD);
     3561+
     3562+    const tcu::Matrix<float, 2, 2> schurComplement = inverse(matD - matC*invA*matB);
     3563+    const tcu::Matrix<float, 2, 2> zeroMat         = Mat2(nullField);
     3564+
     3565+    const tcu::Matrix<float, 2, 2> blockA = invA + invA*matB*schurComplement*matC*invA;
     3566+    const tcu::Matrix<float, 2, 2> blockB = (zeroMat-invA)*matB*schurComplement;
     3567+    const tcu::Matrix<float, 2, 2> blockC = (zeroMat-schurComplement)*matC*invA;
     3568+    const tcu::Matrix<float, 2, 2> blockD = schurComplement;
     3569+
     3570+    const float result[4*4] =
     3571+    {
     3572+        blockA(0,0),    blockA(0,1),    blockB(0,0),    blockB(0,1),
     3573+        blockA(1,0),    blockA(1,1),    blockB(1,0),    blockB(1,1),
     3574+        blockC(0,0),    blockC(0,1),    blockD(0,0),    blockD(0,1),
     3575+        blockC(1,0),    blockC(1,1),    blockD(1,0),    blockD(1,1),
     3576+    };
     3577+
     3578+    return Mat4(result);
     3579 }
     3580 
     3581 // negate
     3582@@ -844,13 +844,13 @@ tcu::Matrix<float, 4, 4> inverse<4> (const tcu::Matrix<float, 4, 4>& mat)
     3583 template <typename T, int Rows, int Cols>
     3584 tcu::Matrix<T, Rows, Cols> negate (const tcu::Matrix<T, Rows, Cols>& mat)
     3585 {
     3586-       tcu::Matrix<T, Rows, Cols> retVal;
     3587+    tcu::Matrix<T, Rows, Cols> retVal;
     3588 
     3589-       for (int r = 0; r < Rows; ++r)
     3590-               for (int c = 0; c < Cols; ++c)
     3591-                       retVal(r,c) = -mat(r, c);
     3592+    for (int r = 0; r < Rows; ++r)
     3593+        for (int c = 0; c < Cols; ++c)
     3594+            retVal(r,c) = -mat(r, c);
     3595 
     3596-       return retVal;
     3597+    return retVal;
     3598 }
     3599 
     3600 // increment/decrement
     3601@@ -858,25 +858,25 @@ tcu::Matrix<T, Rows, Cols> negate (const tcu::Matrix<T, Rows, Cols>& mat)
     3602 template <typename T, int Rows, int Cols>
     3603 tcu::Matrix<T, Rows, Cols> increment (const tcu::Matrix<T, Rows, Cols>& mat)
     3604 {
     3605-       tcu::Matrix<T, Rows, Cols> retVal;
     3606+    tcu::Matrix<T, Rows, Cols> retVal;
     3607 
     3608-       for (int r = 0; r < Rows; ++r)
     3609-               for (int c = 0; c < Cols; ++c)
     3610-                       retVal(r,c) = mat(r, c) + 1.0f;
     3611+    for (int r = 0; r < Rows; ++r)
     3612+        for (int c = 0; c < Cols; ++c)
     3613+            retVal(r,c) = mat(r, c) + 1.0f;
     3614 
     3615-       return retVal;
     3616+    return retVal;
     3617 }
     3618 
     3619 template <typename T, int Rows, int Cols>
     3620 tcu::Matrix<T, Rows, Cols> decrement (const tcu::Matrix<T, Rows, Cols>& mat)
     3621 {
     3622-       tcu::Matrix<T, Rows, Cols> retVal;
     3623+    tcu::Matrix<T, Rows, Cols> retVal;
     3624 
     3625-       for (int r = 0; r < Rows; ++r)
     3626-               for (int c = 0; c < Cols; ++c)
     3627-                       retVal(r,c) = mat(r, c) - 1.0f;
     3628+    for (int r = 0; r < Rows; ++r)
     3629+        for (int c = 0; c < Cols; ++c)
     3630+            retVal(r,c) = mat(r, c) - 1.0f;
     3631 
     3632-       return retVal;
     3633+    return retVal;
     3634 }
     3635 
     3636 // Evaluator template.
     3637@@ -889,423 +889,423 @@ struct Evaluator;
     3638 template <int In0DataType, int In1DataType>
     3639 struct Evaluator<OP_ADD, In0DataType, In1DataType>
     3640 {
     3641-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3642-       {
     3643-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3644-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3645-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3646-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3647-               evalCtx.color.xyz() = reduceToVec3(in0 + in1);
     3648-       }
     3649+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3650+    {
     3651+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3652+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3653+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3654+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3655+        evalCtx.color.xyz() = reduceToVec3(in0 + in1);
     3656+    }
     3657 };
     3658 
     3659 template <int In0DataType, int In1DataType>
     3660 struct Evaluator<OP_SUB, In0DataType, In1DataType>
     3661 {
     3662-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3663-       {
     3664-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3665-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3666-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3667-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3668-               evalCtx.color.xyz() = reduceToVec3(in0 - in1);
     3669-       }
     3670+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3671+    {
     3672+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3673+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3674+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3675+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3676+        evalCtx.color.xyz() = reduceToVec3(in0 - in1);
     3677+    }
     3678 };
     3679 
     3680 template <int In0DataType, int In1DataType>
     3681 struct Evaluator<OP_MUL, In0DataType, In1DataType>
     3682 {
     3683-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3684-       {
     3685-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3686-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3687-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3688-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3689-               evalCtx.color.xyz() = reduceToVec3(in0 * in1);
     3690-       }
     3691+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3692+    {
     3693+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3694+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3695+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3696+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3697+        evalCtx.color.xyz() = reduceToVec3(in0 * in1);
     3698+    }
     3699 };
     3700 
     3701 template <int In0DataType, int In1DataType>
     3702 struct Evaluator<OP_DIV, In0DataType, In1DataType>
     3703 {
     3704-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3705-       {
     3706-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3707-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3708-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3709-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3710-               evalCtx.color.xyz() = reduceToVec3(in0 / in1);
     3711-       }
     3712+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3713+    {
     3714+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3715+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3716+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3717+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3718+        evalCtx.color.xyz() = reduceToVec3(in0 / in1);
     3719+    }
     3720 };
     3721 
     3722 template <int In0DataType, int In1DataType>
     3723 struct Evaluator<OP_COMP_MUL, In0DataType, In1DataType>
     3724 {
     3725-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3726-       {
     3727-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3728-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3729-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3730-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3731-               evalCtx.color.xyz() = reduceToVec3(matrixCompMult(in0, in1));
     3732-       }
     3733+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3734+    {
     3735+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3736+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3737+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3738+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3739+        evalCtx.color.xyz() = reduceToVec3(matrixCompMult(in0, in1));
     3740+    }
     3741 };
     3742 
     3743 template <int In0DataType, int In1DataType>
     3744 struct Evaluator<OP_OUTER_PRODUCT, In0DataType, In1DataType>
     3745 {
     3746-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3747-       {
     3748-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3749-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3750-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3751-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3752-               evalCtx.color.xyz() = reduceToVec3(outerProduct(in0, in1));
     3753-       }
     3754+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3755+    {
     3756+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3757+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3758+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3759+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3760+        evalCtx.color.xyz() = reduceToVec3(outerProduct(in0, in1));
     3761+    }
     3762 };
     3763 
     3764 template <int In0DataType, int In1DataType>
     3765 struct Evaluator<OP_TRANSPOSE, In0DataType, In1DataType>
     3766 {
     3767-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3768-       {
     3769-               DE_UNREF(in1Type);
     3770-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3771-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3772-               evalCtx.color.xyz() = reduceToVec3(transpose(in0));
     3773-       }
     3774+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3775+    {
     3776+        DE_UNREF(in1Type);
     3777+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3778+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3779+        evalCtx.color.xyz() = reduceToVec3(transpose(in0));
     3780+    }
     3781 };
     3782 
     3783 template <int In0DataType, int In1DataType>
     3784 struct Evaluator<OP_INVERSE, In0DataType, In1DataType>
     3785 {
     3786-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3787-       {
     3788-               DE_UNREF(in1Type);
     3789-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3790-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3791-               evalCtx.color.xyz() = reduceToVec3(inverse(in0));
     3792-       }
     3793+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3794+    {
     3795+        DE_UNREF(in1Type);
     3796+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3797+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3798+        evalCtx.color.xyz() = reduceToVec3(inverse(in0));
     3799+    }
     3800 };
     3801 
     3802 template <int In0DataType, int In1DataType>
     3803 struct Evaluator<OP_DETERMINANT, In0DataType, In1DataType>
     3804 {
     3805-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3806-       {
     3807-               DE_UNREF(in1Type);
     3808-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3809-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3810-               evalCtx.color.xyz() = Vec3(determinant(in0));
     3811-       }
     3812+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3813+    {
     3814+        DE_UNREF(in1Type);
     3815+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3816+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3817+        evalCtx.color.xyz() = Vec3(determinant(in0));
     3818+    }
     3819 };
     3820 
     3821 template <int In0DataType, int In1DataType>
     3822 struct Evaluator<OP_UNARY_PLUS, In0DataType, In1DataType>
     3823 {
     3824-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3825-       {
     3826-               DE_UNREF(in1Type);
     3827-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3828-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3829-               evalCtx.color.xyz() = reduceToVec3(in0);
     3830-       }
     3831+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3832+    {
     3833+        DE_UNREF(in1Type);
     3834+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3835+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3836+        evalCtx.color.xyz() = reduceToVec3(in0);
     3837+    }
     3838 };
     3839 
     3840 template <int In0DataType, int In1DataType>
     3841 struct Evaluator<OP_NEGATION, In0DataType, In1DataType>
     3842 {
     3843-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3844-       {
     3845-               DE_UNREF(in1Type);
     3846-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3847-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3848-               evalCtx.color.xyz() = reduceToVec3(negate(in0));
     3849-       }
     3850+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3851+    {
     3852+        DE_UNREF(in1Type);
     3853+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3854+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3855+        evalCtx.color.xyz() = reduceToVec3(negate(in0));
     3856+    }
     3857 };
     3858 
     3859 template <int In0DataType, int In1DataType>
     3860 struct Evaluator<OP_PRE_INCREMENT, In0DataType, In1DataType>
     3861 {
     3862-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3863-       {
     3864-               DE_UNREF(in1Type);
     3865-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3866-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3867+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3868+    {
     3869+        DE_UNREF(in1Type);
     3870+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3871+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3872 
     3873-               // modifying reduction: sum modified value too
     3874-               evalCtx.color.xyz() = reduceToVec3(increment(in0)) + reduceToVec3(increment(in0));
     3875-       }
     3876+        // modifying reduction: sum modified value too
     3877+        evalCtx.color.xyz() = reduceToVec3(increment(in0)) + reduceToVec3(increment(in0));
     3878+    }
     3879 };
     3880 
     3881 template <int In0DataType, int In1DataType>
     3882 struct Evaluator<OP_PRE_DECREMENT, In0DataType, In1DataType>
     3883 {
     3884-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3885-       {
     3886-               DE_UNREF(in1Type);
     3887-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3888-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3889+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3890+    {
     3891+        DE_UNREF(in1Type);
     3892+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3893+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3894 
     3895-               // modifying reduction: sum modified value too
     3896-               evalCtx.color.xyz() = reduceToVec3(decrement(in0)) + reduceToVec3(decrement(in0));
     3897-       }
     3898+        // modifying reduction: sum modified value too
     3899+        evalCtx.color.xyz() = reduceToVec3(decrement(in0)) + reduceToVec3(decrement(in0));
     3900+    }
     3901 };
     3902 
     3903 template <int In0DataType, int In1DataType>
     3904 struct Evaluator<OP_POST_INCREMENT, In0DataType, In1DataType>
     3905 {
     3906-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3907-       {
     3908-               DE_UNREF(in1Type);
     3909-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3910-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3911+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3912+    {
     3913+        DE_UNREF(in1Type);
     3914+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3915+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3916 
     3917-               // modifying reduction: sum modified value too
     3918-               evalCtx.color.xyz() = reduceToVec3(in0) + reduceToVec3(increment(in0));
     3919-       }
     3920+        // modifying reduction: sum modified value too
     3921+        evalCtx.color.xyz() = reduceToVec3(in0) + reduceToVec3(increment(in0));
     3922+    }
     3923 };
     3924 
     3925 template <int In0DataType, int In1DataType>
     3926 struct Evaluator<OP_POST_DECREMENT, In0DataType, In1DataType>
     3927 {
     3928-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3929-       {
     3930-               DE_UNREF(in1Type);
     3931-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3932-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3933+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3934+    {
     3935+        DE_UNREF(in1Type);
     3936+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3937+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3938 
     3939-               // modifying reduction: sum modified value too
     3940-               evalCtx.color.xyz() = reduceToVec3(in0) + reduceToVec3(decrement(in0));
     3941-       }
     3942+        // modifying reduction: sum modified value too
     3943+        evalCtx.color.xyz() = reduceToVec3(in0) + reduceToVec3(decrement(in0));
     3944+    }
     3945 };
     3946 
     3947 template <int In0DataType, int In1DataType>
     3948 struct Evaluator<OP_ADD_INTO, In0DataType, In1DataType>
     3949 {
     3950-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3951-       {
     3952-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3953-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3954-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3955-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3956-               evalCtx.color.xyz() = reduceToVec3(in0 + in1);
     3957-       }
     3958+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3959+    {
     3960+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3961+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3962+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3963+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3964+        evalCtx.color.xyz() = reduceToVec3(in0 + in1);
     3965+    }
     3966 };
     3967 
     3968 template <int In0DataType, int In1DataType>
     3969 struct Evaluator<OP_SUBTRACT_FROM, In0DataType, In1DataType>
     3970 {
     3971-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3972-       {
     3973-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3974-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3975-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3976-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3977-               evalCtx.color.xyz() = reduceToVec3(in0 - in1);
     3978-       }
     3979+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3980+    {
     3981+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3982+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3983+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3984+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3985+        evalCtx.color.xyz() = reduceToVec3(in0 - in1);
     3986+    }
     3987 };
     3988 
     3989 template <int In0DataType, int In1DataType>
     3990 struct Evaluator<OP_MULTIPLY_INTO, In0DataType, In1DataType>
     3991 {
     3992-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     3993-       {
     3994-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     3995-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     3996-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     3997-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     3998-               evalCtx.color.xyz() = reduceToVec3(in0 * in1);
     3999-       }
     4000+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     4001+    {
     4002+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     4003+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     4004+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     4005+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     4006+        evalCtx.color.xyz() = reduceToVec3(in0 * in1);
     4007+    }
     4008 };
     4009 
     4010 template <int In0DataType, int In1DataType>
     4011 struct Evaluator<OP_DIVIDE_INTO, In0DataType, In1DataType>
     4012 {
     4013-       static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     4014-       {
     4015-               typename TypeTraits<In0DataType>::Type  in0     = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     4016-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     4017-               typename TypeTraits<In1DataType>::Type  in1     = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     4018-                                                                                                                                                                    : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     4019-               evalCtx.color.xyz() = reduceToVec3(in0 / in1);
     4020-       }
     4021+    static void evaluate (ShaderEvalContext& evalCtx, InputType in0Type, InputType in1Type)
     4022+    {
     4023+        typename TypeTraits<In0DataType>::Type  in0 = (in0Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In0DataType>(evalCtx, 0)
     4024+                                                                                     : getInputValue<INPUTTYPE_CONST,   In0DataType>(evalCtx, 0);
     4025+        typename TypeTraits<In1DataType>::Type  in1 = (in1Type == INPUTTYPE_DYNAMIC) ? getInputValue<INPUTTYPE_DYNAMIC, In1DataType>(evalCtx, 1)
     4026+                                                                                     : getInputValue<INPUTTYPE_CONST,   In1DataType>(evalCtx, 1);
     4027+        evalCtx.color.xyz() = reduceToVec3(in0 / in1);
     4028+    }
     4029 };
     4030 
     4031 MatrixShaderEvalFunc getEvalFunc (const ShaderInput& in0, const ShaderInput& in1, MatrixOp op)
     4032 {
     4033-       // Evaluator is selected based on op and input data types.
     4034-       // For efficient lookup the types and op enums are packed together to form a 19-bit key:
     4035-       // [18..14 OP] [13..7 TYPE0] [6..0 TYPE1]
     4036-
     4037-       DE_STATIC_ASSERT(TYPE_LAST      <= (1<<7));
     4038-       DE_STATIC_ASSERT(OP_LAST        <= (1<<5));
     4039-
     4040-#define PACK_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE)   (((OP) << 14) | ((IN0DATATYPE) << 7) | (IN1DATATYPE))
     4041-
     4042-#define MAKE_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE)   \
     4043-       case PACK_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE):      \
     4044-               return Evaluator<OP, IN0DATATYPE, IN1DATATYPE>::evaluate
     4045-
     4046-#define MAKE_SCALAR_OPS(IN0DATATYPE, IN1DATATYPE)              \
     4047-       MAKE_EVAL_CASE(OP_ADD, IN0DATATYPE, IN1DATATYPE);       \
     4048-       MAKE_EVAL_CASE(OP_SUB, IN0DATATYPE, IN1DATATYPE);       \
     4049-       MAKE_EVAL_CASE(OP_MUL, IN0DATATYPE, IN1DATATYPE);       \
     4050-       MAKE_EVAL_CASE(OP_DIV, IN0DATATYPE, IN1DATATYPE)
     4051-
     4052-#define MAKE_CWISE_OPS(IN0DATATYPE, IN1DATATYPE)                       \
     4053-       MAKE_EVAL_CASE(OP_ADD,          IN0DATATYPE, IN1DATATYPE);      \
     4054-       MAKE_EVAL_CASE(OP_SUB,          IN0DATATYPE, IN1DATATYPE);      \
     4055-       MAKE_EVAL_CASE(OP_DIV,          IN0DATATYPE, IN1DATATYPE);      \
     4056-       MAKE_EVAL_CASE(OP_COMP_MUL,     IN0DATATYPE, IN1DATATYPE)
     4057-
     4058-#define MAKE_MUL_OP(IN0DATATYPE, IN1DATATYPE)                  \
     4059-       MAKE_EVAL_CASE(OP_MUL, IN0DATATYPE, IN1DATATYPE)
     4060-
     4061-#define MAKE_VECVEC_OP(IN0DATATYPE, IN1DATATYPE)                       \
     4062-       MAKE_EVAL_CASE(OP_OUTER_PRODUCT, IN0DATATYPE, IN1DATATYPE)
     4063-
     4064-#define MAKE_UNARY_OP(IN0DATATYPE)                                                             \
     4065-       MAKE_EVAL_CASE(OP_TRANSPOSE,            IN0DATATYPE, TYPE_LAST);        \
     4066-       MAKE_EVAL_CASE(OP_UNARY_PLUS,           IN0DATATYPE, TYPE_LAST);        \
     4067-       MAKE_EVAL_CASE(OP_NEGATION,                     IN0DATATYPE, TYPE_LAST);        \
     4068-       MAKE_EVAL_CASE(OP_PRE_INCREMENT,        IN0DATATYPE, TYPE_LAST);        \
     4069-       MAKE_EVAL_CASE(OP_PRE_DECREMENT,        IN0DATATYPE, TYPE_LAST);        \
     4070-       MAKE_EVAL_CASE(OP_POST_INCREMENT,       IN0DATATYPE, TYPE_LAST);        \
     4071-       MAKE_EVAL_CASE(OP_POST_DECREMENT,       IN0DATATYPE, TYPE_LAST)
     4072-
     4073-#define MAKE_UNARY_SYMMETRIC_OP(IN0DATATYPE)                                   \
     4074-       MAKE_UNARY_OP(IN0DATATYPE);                                                                     \
     4075-       MAKE_EVAL_CASE(OP_DETERMINANT,  IN0DATATYPE, TYPE_LAST);        \
     4076-       MAKE_EVAL_CASE(OP_INVERSE,              IN0DATATYPE, TYPE_LAST)
     4077-
     4078-#define MAKE_ASSIGNMENT_OP(IN0DATATYPE)                                                                \
     4079-       MAKE_EVAL_CASE(OP_ADD_INTO,                     IN0DATATYPE, IN0DATATYPE);      \
     4080-       MAKE_EVAL_CASE(OP_SUBTRACT_FROM,        IN0DATATYPE, IN0DATATYPE);      \
     4081-       MAKE_EVAL_CASE(OP_DIVIDE_INTO,          IN0DATATYPE, IN0DATATYPE)
     4082-
     4083-#define MAKE_ASSIGNMENT_SYMMETRIC_OP(IN0DATATYPE)                                      \
     4084-       MAKE_ASSIGNMENT_OP(IN0DATATYPE);                                                                \
     4085-       MAKE_EVAL_CASE(OP_MULTIPLY_INTO,        IN0DATATYPE, IN0DATATYPE)
     4086-
     4087-       switch (PACK_EVAL_CASE(op, in0.dataType, in1.dataType))
     4088-       {
     4089-               // Matrix-scalar.
     4090-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2,        TYPE_FLOAT);
     4091-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2X3,      TYPE_FLOAT);
     4092-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2X4,      TYPE_FLOAT);
     4093-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3X2,      TYPE_FLOAT);
     4094-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3,        TYPE_FLOAT);
     4095-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3X4,      TYPE_FLOAT);
     4096-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4X2,      TYPE_FLOAT);
     4097-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4X3,      TYPE_FLOAT);
     4098-               MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4,        TYPE_FLOAT);
     4099-
     4100-               // Matrix-vector.
     4101-               MAKE_MUL_OP(TYPE_FLOAT_MAT2,    TYPE_FLOAT_VEC2);
     4102-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,  TYPE_FLOAT_VEC2);
     4103-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,  TYPE_FLOAT_VEC2);
     4104-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,  TYPE_FLOAT_VEC3);
     4105-               MAKE_MUL_OP(TYPE_FLOAT_MAT3,    TYPE_FLOAT_VEC3);
     4106-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,  TYPE_FLOAT_VEC3);
     4107-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,  TYPE_FLOAT_VEC4);
     4108-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,  TYPE_FLOAT_VEC4);
     4109-               MAKE_MUL_OP(TYPE_FLOAT_MAT4,    TYPE_FLOAT_VEC4);
     4110-
     4111-               // Vector-matrix.
     4112-               MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT2);
     4113-               MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT2X3);
     4114-               MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT2X4);
     4115-               MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT3X2);
     4116-               MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT3);
     4117-               MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT3X4);
     4118-               MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT4X2);
     4119-               MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT4X3);
     4120-               MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT4);
     4121-
     4122-               // Matrix-matrix.
     4123-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT2,         TYPE_FLOAT_MAT2);
     4124-               MAKE_MUL_OP(TYPE_FLOAT_MAT2,            TYPE_FLOAT_MAT2);
     4125-               MAKE_MUL_OP(TYPE_FLOAT_MAT2,            TYPE_FLOAT_MAT3X2);
     4126-               MAKE_MUL_OP(TYPE_FLOAT_MAT2,            TYPE_FLOAT_MAT4X2);
     4127-
     4128-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT2X3,       TYPE_FLOAT_MAT2X3);
     4129-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,          TYPE_FLOAT_MAT2);
     4130-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,          TYPE_FLOAT_MAT3X2);
     4131-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,          TYPE_FLOAT_MAT4X2);
     4132-
     4133-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT2X4,       TYPE_FLOAT_MAT2X4);
     4134-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,          TYPE_FLOAT_MAT2);
     4135-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,          TYPE_FLOAT_MAT3X2);
     4136-               MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,          TYPE_FLOAT_MAT4X2);
     4137-
     4138-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT3X2,       TYPE_FLOAT_MAT3X2);
     4139-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,          TYPE_FLOAT_MAT2X3);
     4140-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,          TYPE_FLOAT_MAT3);
     4141-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,          TYPE_FLOAT_MAT4X3);
     4142-
     4143-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT3,         TYPE_FLOAT_MAT3);
     4144-               MAKE_MUL_OP(TYPE_FLOAT_MAT3,            TYPE_FLOAT_MAT2X3);
     4145-               MAKE_MUL_OP(TYPE_FLOAT_MAT3,            TYPE_FLOAT_MAT3);
     4146-               MAKE_MUL_OP(TYPE_FLOAT_MAT3,            TYPE_FLOAT_MAT4X3);
     4147-
     4148-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT3X4,       TYPE_FLOAT_MAT3X4);
     4149-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,          TYPE_FLOAT_MAT2X3);
     4150-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,          TYPE_FLOAT_MAT3);
     4151-               MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,          TYPE_FLOAT_MAT4X3);
     4152-
     4153-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT4X2,       TYPE_FLOAT_MAT4X2);
     4154-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,          TYPE_FLOAT_MAT2X4);
     4155-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,          TYPE_FLOAT_MAT3X4);
     4156-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,          TYPE_FLOAT_MAT4);
     4157-
     4158-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT4X3,       TYPE_FLOAT_MAT4X3);
     4159-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,          TYPE_FLOAT_MAT2X4);
     4160-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,          TYPE_FLOAT_MAT3X4);
     4161-               MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,          TYPE_FLOAT_MAT4);
     4162-
     4163-               MAKE_CWISE_OPS(TYPE_FLOAT_MAT4,         TYPE_FLOAT_MAT4);
     4164-               MAKE_MUL_OP(TYPE_FLOAT_MAT4,            TYPE_FLOAT_MAT2X4);
     4165-               MAKE_MUL_OP(TYPE_FLOAT_MAT4,            TYPE_FLOAT_MAT3X4);
     4166-               MAKE_MUL_OP(TYPE_FLOAT_MAT4,            TYPE_FLOAT_MAT4);
     4167-
     4168-               // Vector-vector.
     4169-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,         TYPE_FLOAT_VEC2);
     4170-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,         TYPE_FLOAT_VEC3);
     4171-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,         TYPE_FLOAT_VEC4);
     4172-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,         TYPE_FLOAT_VEC2);
     4173-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,         TYPE_FLOAT_VEC3);
     4174-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,         TYPE_FLOAT_VEC4);
     4175-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,         TYPE_FLOAT_VEC2);
     4176-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,         TYPE_FLOAT_VEC3);
     4177-               MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,         TYPE_FLOAT_VEC4);
     4178-
     4179-               // Unary Matrix.
     4180-               MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT2);
     4181-               MAKE_UNARY_OP(TYPE_FLOAT_MAT2X3);
     4182-               MAKE_UNARY_OP(TYPE_FLOAT_MAT2X4);
     4183-               MAKE_UNARY_OP(TYPE_FLOAT_MAT3X2);
     4184-               MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT3);
     4185-               MAKE_UNARY_OP(TYPE_FLOAT_MAT3X4);
     4186-               MAKE_UNARY_OP(TYPE_FLOAT_MAT4X2);
     4187-               MAKE_UNARY_OP(TYPE_FLOAT_MAT4X3);
     4188-               MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT4);
     4189-
     4190-               // Assignments
     4191-               MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT2);
     4192-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT2X3);
     4193-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT2X4);
     4194-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT3X2);
     4195-               MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT3);
     4196-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT3X4);
     4197-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT4X2);
     4198-               MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT4X3);
     4199-               MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT4);
     4200-
     4201-               default:
     4202-                       DE_ASSERT(DE_FALSE);
     4203-                       return DE_NULL;
     4204-       }
     4205+    // Evaluator is selected based on op and input data types.
     4206+    // For efficient lookup the types and op enums are packed together to form a 19-bit key:
     4207+    // [18..14 OP] [13..7 TYPE0] [6..0 TYPE1]
     4208+
     4209+    DE_STATIC_ASSERT(TYPE_LAST  <= (1<<7));
     4210+    DE_STATIC_ASSERT(OP_LAST    <= (1<<5));
     4211+
     4212+#define PACK_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE)    (((OP) << 14) | ((IN0DATATYPE) << 7) | (IN1DATATYPE))
     4213+
     4214+#define MAKE_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE)    \
     4215+    case PACK_EVAL_CASE(OP, IN0DATATYPE, IN1DATATYPE):  \
     4216+        return Evaluator<OP, IN0DATATYPE, IN1DATATYPE>::evaluate
     4217+
     4218+#define MAKE_SCALAR_OPS(IN0DATATYPE, IN1DATATYPE)       \
     4219+    MAKE_EVAL_CASE(OP_ADD, IN0DATATYPE, IN1DATATYPE);   \
     4220+    MAKE_EVAL_CASE(OP_SUB, IN0DATATYPE, IN1DATATYPE);   \
     4221+    MAKE_EVAL_CASE(OP_MUL, IN0DATATYPE, IN1DATATYPE);   \
     4222+    MAKE_EVAL_CASE(OP_DIV, IN0DATATYPE, IN1DATATYPE)
     4223+
     4224+#define MAKE_CWISE_OPS(IN0DATATYPE, IN1DATATYPE)            \
     4225+    MAKE_EVAL_CASE(OP_ADD,      IN0DATATYPE, IN1DATATYPE);  \
     4226+    MAKE_EVAL_CASE(OP_SUB,      IN0DATATYPE, IN1DATATYPE);  \
     4227+    MAKE_EVAL_CASE(OP_DIV,      IN0DATATYPE, IN1DATATYPE);  \
     4228+    MAKE_EVAL_CASE(OP_COMP_MUL, IN0DATATYPE, IN1DATATYPE)
     4229+
     4230+#define MAKE_MUL_OP(IN0DATATYPE, IN1DATATYPE)           \
     4231+    MAKE_EVAL_CASE(OP_MUL, IN0DATATYPE, IN1DATATYPE)
     4232+
     4233+#define MAKE_VECVEC_OP(IN0DATATYPE, IN1DATATYPE)            \
     4234+    MAKE_EVAL_CASE(OP_OUTER_PRODUCT, IN0DATATYPE, IN1DATATYPE)
     4235+
     4236+#define MAKE_UNARY_OP(IN0DATATYPE)                              \
     4237+    MAKE_EVAL_CASE(OP_TRANSPOSE,        IN0DATATYPE, TYPE_LAST);    \
     4238+    MAKE_EVAL_CASE(OP_UNARY_PLUS,       IN0DATATYPE, TYPE_LAST);    \
     4239+    MAKE_EVAL_CASE(OP_NEGATION,         IN0DATATYPE, TYPE_LAST);    \
     4240+    MAKE_EVAL_CASE(OP_PRE_INCREMENT,    IN0DATATYPE, TYPE_LAST);    \
     4241+    MAKE_EVAL_CASE(OP_PRE_DECREMENT,    IN0DATATYPE, TYPE_LAST);    \
     4242+    MAKE_EVAL_CASE(OP_POST_INCREMENT,   IN0DATATYPE, TYPE_LAST);    \
     4243+    MAKE_EVAL_CASE(OP_POST_DECREMENT,   IN0DATATYPE, TYPE_LAST)
     4244+
     4245+#define MAKE_UNARY_SYMMETRIC_OP(IN0DATATYPE)                    \
     4246+    MAKE_UNARY_OP(IN0DATATYPE);                                 \
     4247+    MAKE_EVAL_CASE(OP_DETERMINANT,  IN0DATATYPE, TYPE_LAST);    \
     4248+    MAKE_EVAL_CASE(OP_INVERSE,      IN0DATATYPE, TYPE_LAST)
     4249+
     4250+#define MAKE_ASSIGNMENT_OP(IN0DATATYPE)                             \
     4251+    MAKE_EVAL_CASE(OP_ADD_INTO,         IN0DATATYPE, IN0DATATYPE);  \
     4252+    MAKE_EVAL_CASE(OP_SUBTRACT_FROM,    IN0DATATYPE, IN0DATATYPE);  \
     4253+    MAKE_EVAL_CASE(OP_DIVIDE_INTO,      IN0DATATYPE, IN0DATATYPE)
     4254+
     4255+#define MAKE_ASSIGNMENT_SYMMETRIC_OP(IN0DATATYPE)                   \
     4256+    MAKE_ASSIGNMENT_OP(IN0DATATYPE);                                \
     4257+    MAKE_EVAL_CASE(OP_MULTIPLY_INTO,    IN0DATATYPE, IN0DATATYPE)
     4258+
     4259+    switch (PACK_EVAL_CASE(op, in0.dataType, in1.dataType))
     4260+    {
     4261+        // Matrix-scalar.
     4262+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2,    TYPE_FLOAT);
     4263+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2X3,  TYPE_FLOAT);
     4264+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT2X4,  TYPE_FLOAT);
     4265+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3X2,  TYPE_FLOAT);
     4266+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3,    TYPE_FLOAT);
     4267+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT3X4,  TYPE_FLOAT);
     4268+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4X2,  TYPE_FLOAT);
     4269+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4X3,  TYPE_FLOAT);
     4270+        MAKE_SCALAR_OPS(TYPE_FLOAT_MAT4,    TYPE_FLOAT);
     4271+
     4272+        // Matrix-vector.
     4273+        MAKE_MUL_OP(TYPE_FLOAT_MAT2,    TYPE_FLOAT_VEC2);
     4274+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,  TYPE_FLOAT_VEC2);
     4275+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,  TYPE_FLOAT_VEC2);
     4276+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,  TYPE_FLOAT_VEC3);
     4277+        MAKE_MUL_OP(TYPE_FLOAT_MAT3,    TYPE_FLOAT_VEC3);
     4278+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,  TYPE_FLOAT_VEC3);
     4279+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,  TYPE_FLOAT_VEC4);
     4280+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,  TYPE_FLOAT_VEC4);
     4281+        MAKE_MUL_OP(TYPE_FLOAT_MAT4,    TYPE_FLOAT_VEC4);
     4282+
     4283+        // Vector-matrix.
     4284+        MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT2);
     4285+        MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT2X3);
     4286+        MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT2X4);
     4287+        MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT3X2);
     4288+        MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT3);
     4289+        MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT3X4);
     4290+        MAKE_MUL_OP(TYPE_FLOAT_VEC2, TYPE_FLOAT_MAT4X2);
     4291+        MAKE_MUL_OP(TYPE_FLOAT_VEC3, TYPE_FLOAT_MAT4X3);
     4292+        MAKE_MUL_OP(TYPE_FLOAT_VEC4, TYPE_FLOAT_MAT4);
     4293+
     4294+        // Matrix-matrix.
     4295+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT2,     TYPE_FLOAT_MAT2);
     4296+        MAKE_MUL_OP(TYPE_FLOAT_MAT2,        TYPE_FLOAT_MAT2);
     4297+        MAKE_MUL_OP(TYPE_FLOAT_MAT2,        TYPE_FLOAT_MAT3X2);
     4298+        MAKE_MUL_OP(TYPE_FLOAT_MAT2,        TYPE_FLOAT_MAT4X2);
     4299+
     4300+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT2X3,   TYPE_FLOAT_MAT2X3);
     4301+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,      TYPE_FLOAT_MAT2);
     4302+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,      TYPE_FLOAT_MAT3X2);
     4303+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X3,      TYPE_FLOAT_MAT4X2);
     4304+
     4305+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT2X4,   TYPE_FLOAT_MAT2X4);
     4306+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,      TYPE_FLOAT_MAT2);
     4307+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,      TYPE_FLOAT_MAT3X2);
     4308+        MAKE_MUL_OP(TYPE_FLOAT_MAT2X4,      TYPE_FLOAT_MAT4X2);
     4309+
     4310+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT3X2,   TYPE_FLOAT_MAT3X2);
     4311+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,      TYPE_FLOAT_MAT2X3);
     4312+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,      TYPE_FLOAT_MAT3);
     4313+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X2,      TYPE_FLOAT_MAT4X3);
     4314+
     4315+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT3,     TYPE_FLOAT_MAT3);
     4316+        MAKE_MUL_OP(TYPE_FLOAT_MAT3,        TYPE_FLOAT_MAT2X3);
     4317+        MAKE_MUL_OP(TYPE_FLOAT_MAT3,        TYPE_FLOAT_MAT3);
     4318+        MAKE_MUL_OP(TYPE_FLOAT_MAT3,        TYPE_FLOAT_MAT4X3);
     4319+
     4320+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT3X4,   TYPE_FLOAT_MAT3X4);
     4321+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,      TYPE_FLOAT_MAT2X3);
     4322+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,      TYPE_FLOAT_MAT3);
     4323+        MAKE_MUL_OP(TYPE_FLOAT_MAT3X4,      TYPE_FLOAT_MAT4X3);
     4324+
     4325+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT4X2,   TYPE_FLOAT_MAT4X2);
     4326+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,      TYPE_FLOAT_MAT2X4);
     4327+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,      TYPE_FLOAT_MAT3X4);
     4328+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X2,      TYPE_FLOAT_MAT4);
     4329+
     4330+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT4X3,   TYPE_FLOAT_MAT4X3);
     4331+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,      TYPE_FLOAT_MAT2X4);
     4332+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,      TYPE_FLOAT_MAT3X4);
     4333+        MAKE_MUL_OP(TYPE_FLOAT_MAT4X3,      TYPE_FLOAT_MAT4);
     4334+
     4335+        MAKE_CWISE_OPS(TYPE_FLOAT_MAT4,     TYPE_FLOAT_MAT4);
     4336+        MAKE_MUL_OP(TYPE_FLOAT_MAT4,        TYPE_FLOAT_MAT2X4);
     4337+        MAKE_MUL_OP(TYPE_FLOAT_MAT4,        TYPE_FLOAT_MAT3X4);
     4338+        MAKE_MUL_OP(TYPE_FLOAT_MAT4,        TYPE_FLOAT_MAT4);
     4339+
     4340+        // Vector-vector.
     4341+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,     TYPE_FLOAT_VEC2);
     4342+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,     TYPE_FLOAT_VEC3);
     4343+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC2,     TYPE_FLOAT_VEC4);
     4344+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,     TYPE_FLOAT_VEC2);
     4345+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,     TYPE_FLOAT_VEC3);
     4346+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC3,     TYPE_FLOAT_VEC4);
     4347+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,     TYPE_FLOAT_VEC2);
     4348+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,     TYPE_FLOAT_VEC3);
     4349+        MAKE_VECVEC_OP(TYPE_FLOAT_VEC4,     TYPE_FLOAT_VEC4);
     4350+
     4351+        // Unary Matrix.
     4352+        MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT2);
     4353+        MAKE_UNARY_OP(TYPE_FLOAT_MAT2X3);
     4354+        MAKE_UNARY_OP(TYPE_FLOAT_MAT2X4);
     4355+        MAKE_UNARY_OP(TYPE_FLOAT_MAT3X2);
     4356+        MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT3);
     4357+        MAKE_UNARY_OP(TYPE_FLOAT_MAT3X4);
     4358+        MAKE_UNARY_OP(TYPE_FLOAT_MAT4X2);
     4359+        MAKE_UNARY_OP(TYPE_FLOAT_MAT4X3);
     4360+        MAKE_UNARY_SYMMETRIC_OP(TYPE_FLOAT_MAT4);
     4361+
     4362+        // Assignments
     4363+        MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT2);
     4364+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT2X3);
     4365+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT2X4);
     4366+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT3X2);
     4367+        MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT3);
     4368+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT3X4);
     4369+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT4X2);
     4370+        MAKE_ASSIGNMENT_OP(TYPE_FLOAT_MAT4X3);
     4371+        MAKE_ASSIGNMENT_SYMMETRIC_OP(TYPE_FLOAT_MAT4);
     4372+
     4373+        default:
     4374+            DE_ASSERT(DE_FALSE);
     4375+            return DE_NULL;
     4376+    }
     4377 
     4378 #undef PACK_EVAL_CASE
     4379 #undef MAKE_EVAL_CASE
     4380@@ -1320,35 +1320,35 @@ MatrixShaderEvalFunc getEvalFunc (const ShaderInput& in0, const ShaderInput& in1
     4381 template <int Size>
     4382 void writeVectorConstructor (std::ostream& str, const tcu::Vector<float, Size>& v)
     4383 {
     4384-       str << "vec" << Size << "(";
     4385-       for (int ndx = 0; ndx < Size; ndx++)
     4386-       {
     4387-               if (ndx != 0)
     4388-                       str << ", ";
     4389-               str << de::floatToString(v[ndx], 1);
     4390-       }
     4391-       str << ")";
     4392+    str << "vec" << Size << "(";
     4393+    for (int ndx = 0; ndx < Size; ndx++)
     4394+    {
     4395+        if (ndx != 0)
     4396+            str << ", ";
     4397+        str << de::floatToString(v[ndx], 1);
     4398+    }
     4399+    str << ")";
     4400 }
     4401 
     4402 template <int Cols, int Rows>
     4403 void writeMatrixConstructor (std::ostream& str, const tcu::Matrix<float, Rows, Cols>& m)
     4404 {
     4405-       if (Rows == Cols)
     4406-               str << "mat" << Cols;
     4407-       else
     4408-               str << "mat" << Cols << "x" << Rows;
     4409-
     4410-       str << "(";
     4411-       for (int colNdx = 0; colNdx < Cols; colNdx++)
     4412-       {
     4413-               for (int rowNdx = 0; rowNdx < Rows; rowNdx++)
     4414-               {
     4415-                       if (rowNdx > 0 || colNdx > 0)
     4416-                               str << ", ";
     4417-                       str << de::floatToString(m(rowNdx, colNdx), 1);
     4418-               }
     4419-       }
     4420-       str << ")";
     4421+    if (Rows == Cols)
     4422+        str << "mat" << Cols;
     4423+    else
     4424+        str << "mat" << Cols << "x" << Rows;
     4425+
     4426+    str << "(";
     4427+    for (int colNdx = 0; colNdx < Cols; colNdx++)
     4428+    {
     4429+        for (int rowNdx = 0; rowNdx < Rows; rowNdx++)
     4430+        {
     4431+            if (rowNdx > 0 || colNdx > 0)
     4432+                str << ", ";
     4433+            str << de::floatToString(m(rowNdx, colNdx), 1);
     4434+        }
     4435+    }
     4436+    str << ")";
     4437 }
     4438 
     4439 } // MatrixCaseUtils
     4440@@ -1358,53 +1358,53 @@ using namespace MatrixCaseUtils;
     4441 class MatrixShaderEvaluator : public ShaderEvaluator
     4442 {
     4443 public:
     4444-                                                       MatrixShaderEvaluator   (MatrixShaderEvalFunc evalFunc, InputType inType0, InputType inType1);
     4445+                            MatrixShaderEvaluator   (MatrixShaderEvalFunc evalFunc, InputType inType0, InputType inType1);
     4446 
     4447-       virtual void                    evaluate                                (ShaderEvalContext& evalCtx);
     4448+    virtual void            evaluate                (ShaderEvalContext& evalCtx);
     4449 
     4450 private:
     4451-       MatrixShaderEvalFunc    m_matEvalFunc;
     4452-       InputType                               m_inType0;
     4453-       InputType                               m_inType1;
     4454+    MatrixShaderEvalFunc    m_matEvalFunc;
     4455+    InputType               m_inType0;
     4456+    InputType               m_inType1;
     4457 };
     4458 
     4459 MatrixShaderEvaluator::MatrixShaderEvaluator (MatrixShaderEvalFunc evalFunc, InputType inType0, InputType inType1)
     4460-       : m_matEvalFunc (evalFunc)
     4461-       , m_inType0             (inType0)
     4462-       , m_inType1             (inType1)
     4463+    : m_matEvalFunc (evalFunc)
     4464+    , m_inType0     (inType0)
     4465+    , m_inType1     (inType1)
     4466 {
     4467 }
     4468 
     4469 void MatrixShaderEvaluator::evaluate (ShaderEvalContext& evalCtx)
     4470 {
     4471-       m_matEvalFunc(evalCtx, m_inType0, m_inType1);
     4472+    m_matEvalFunc(evalCtx, m_inType0, m_inType1);
     4473 }
     4474 
     4475 class ShaderMatrixCase : public ShaderRenderCase
     4476 {
     4477 public:
     4478-                                                       ShaderMatrixCase                        (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase);
     4479-                                                       ~ShaderMatrixCase                       (void);
     4480+                            ShaderMatrixCase            (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase);
     4481+                            ~ShaderMatrixCase           (void);
     4482 
     4483-       void                                    init                                            (void);
     4484+    void                    init                        (void);
     4485 
     4486 protected:
     4487-       std::string                             genGLSLMatToVec3Reduction       (const glu::DataType& matType, const char* varName);
     4488-       void                                    setupUniforms                           (int programID, const tcu::Vec4& constCoords);
     4489+    std::string             genGLSLMatToVec3Reduction   (const glu::DataType& matType, const char* varName);
     4490+    void                    setupUniforms               (int programID, const tcu::Vec4& constCoords);
     4491 
     4492 private:
     4493-       ShaderInput                             m_in0;
     4494-       ShaderInput                             m_in1;
     4495-       MatrixOp                                m_op;
     4496-       MatrixShaderEvaluator   m_matEvaluator;
     4497+    ShaderInput             m_in0;
     4498+    ShaderInput             m_in1;
     4499+    MatrixOp                m_op;
     4500+    MatrixShaderEvaluator   m_matEvaluator;
     4501 };
     4502 
     4503 ShaderMatrixCase::ShaderMatrixCase (Context& context, const char* name, const char* desc, const ShaderInput& in0, const ShaderInput& in1, MatrixOp op, bool isVertexCase)
     4504-       : ShaderRenderCase      (context.getTestContext(), context.getRenderContext(), context.getContextInfo(), name, desc, isVertexCase, m_matEvaluator)
     4505-       , m_in0                         (in0)
     4506-       , m_in1                         (in1)
     4507-       , m_op                          (op)
     4508-       , m_matEvaluator        (getEvalFunc(in0, in1, op), in0.inputType, in1.inputType)
     4509+    : ShaderRenderCase  (context.getTestContext(), context.getRenderContext(), context.getContextInfo(), name, desc, isVertexCase, m_matEvaluator)
     4510+    , m_in0             (in0)
     4511+    , m_in1             (in1)
     4512+    , m_op              (op)
     4513+    , m_matEvaluator    (getEvalFunc(in0, in1, op), in0.inputType, in1.inputType)
     4514 {
     4515 }
     4516 
     4517@@ -1414,374 +1414,374 @@ ShaderMatrixCase::~ShaderMatrixCase (void)
     4518 
     4519 void ShaderMatrixCase::init (void)
     4520 {
     4521-       std::ostringstream      vtx;
     4522-       std::ostringstream      frag;
     4523-       std::ostringstream&     op                              = m_isVertexCase ? vtx : frag;
     4524-
     4525-       bool                            isInDynMat0             = isDataTypeMatrix(m_in0.dataType) && m_in0.inputType == INPUTTYPE_DYNAMIC;
     4526-       bool                            isInDynMat1             = isDataTypeMatrix(m_in1.dataType) && m_in1.inputType == INPUTTYPE_DYNAMIC;
     4527-       string                          inValue0;
     4528-       string                          inValue1;
     4529-       DataType                        resultType              = TYPE_LAST;
     4530-       Precision                       resultPrec              = m_in0.precision;
     4531-       vector<string>          passVars;
     4532-       int                                     numInputs               = (isOperationBinary(m_op)) ? (2) : (1);
     4533-
     4534-       std::string                     operationValue0;
     4535-       std::string                     operationValue1;
     4536-
     4537-       DE_ASSERT(!isInDynMat0 || !isInDynMat1); // Only single dynamic matrix input is allowed.
     4538-       DE_UNREF(isInDynMat0 && isInDynMat1);
     4539-
     4540-       // Compute result type.
     4541-       if (m_op == OP_MUL && isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     4542-       {
     4543-               resultType = getDataTypeMatrix(getDataTypeMatrixNumColumns(m_in1.dataType), getDataTypeMatrixNumRows(m_in0.dataType));
     4544-       }
     4545-       else if (m_op == OP_OUTER_PRODUCT)
     4546-       {
     4547-               resultType = getDataTypeMatrix(getDataTypeScalarSize(m_in1.dataType), getDataTypeScalarSize(m_in0.dataType));
     4548-       }
     4549-       else if (m_op == OP_TRANSPOSE)
     4550-       {
     4551-               resultType = getDataTypeMatrix(getDataTypeMatrixNumRows(m_in0.dataType), getDataTypeMatrixNumColumns(m_in0.dataType));
     4552-       }
     4553-       else if (m_op == OP_INVERSE)
     4554-       {
     4555-               resultType = m_in0.dataType;
     4556-       }
     4557-       else if (m_op == OP_DETERMINANT)
     4558-       {
     4559-               resultType = TYPE_FLOAT;
     4560-       }
     4561-       else if (getOperationType(m_op) == OPERATIONTYPE_UNARY_PREFIX_OPERATOR ||
     4562-                        getOperationType(m_op) == OPERATIONTYPE_UNARY_POSTFIX_OPERATOR)
     4563-       {
     4564-               resultType = m_in0.dataType;
     4565-       }
     4566-       else if (isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     4567-       {
     4568-               DE_ASSERT(m_in0.dataType == m_in1.dataType);
     4569-               resultType = m_in0.dataType;
     4570-       }
     4571-       else if (isDataTypeMatrix(m_in0.dataType) || isDataTypeMatrix(m_in1.dataType))
     4572-       {
     4573-               int                     matNdx          = isDataTypeMatrix(m_in0.dataType) ? 0 : 1;
     4574-               DataType        matrixType      = matNdx == 0 ? m_in0.dataType : m_in1.dataType;
     4575-               DataType        otherType       = matNdx == 0 ? m_in1.dataType : m_in0.dataType;
     4576-
     4577-               if (otherType == TYPE_FLOAT)
     4578-                       resultType = matrixType;
     4579-               else
     4580-               {
     4581-                       DE_ASSERT(isDataTypeVector(otherType));
     4582-                       resultType = getDataTypeFloatVec(matNdx == 0 ? getDataTypeMatrixNumRows(matrixType) : getDataTypeMatrixNumColumns(matrixType));
     4583-               }
     4584-       }
     4585-       else
     4586-       {
     4587-               DE_ASSERT(DE_FALSE);
     4588-       }
     4589-
     4590-       vtx << "#version 300 es\n";
     4591-       frag << "#version 300 es\n";
     4592-
     4593-       vtx << "in highp vec4 a_position;\n";
     4594-       frag << "layout(location = 0) out mediump vec4 dEQP_FragColor;\n";
     4595-       if (m_isVertexCase)
     4596-       {
     4597-               vtx << "out mediump vec4 v_color;\n";
     4598-               frag << "in mediump vec4 v_color;\n";
     4599-       }
     4600-
     4601-       // Input declarations.
     4602-       for (int inNdx = 0; inNdx < numInputs; inNdx++)
     4603-       {
     4604-               const ShaderInput&      in                      = inNdx > 0 ? m_in1 : m_in0;
     4605-               const char*                     precName        = getPrecisionName(in.precision);
     4606-               const char*                     typeName        = getDataTypeName(in.dataType);
     4607-               string&                         inValue         = inNdx > 0 ? inValue1 : inValue0;
     4608-
     4609-               if (in.inputType == INPUTTYPE_DYNAMIC)
     4610-               {
     4611-                       vtx << "in " << precName << " " << typeName << " a_";
     4612-
     4613-                       if (isDataTypeMatrix(in.dataType))
     4614-                       {
     4615-                               // a_matN, v_matN
     4616-                               vtx << typeName << ";\n";
     4617-                               if (!m_isVertexCase)
     4618-                               {
     4619-                                       vtx << "out " << precName << " " << typeName << " v_" << typeName << ";\n";
     4620-                                       frag << "in " << precName << " " << typeName << " v_" << typeName << ";\n";
     4621-                                       passVars.push_back(typeName);
     4622-                               }
     4623-
     4624-                               inValue = string(m_isVertexCase ? "a_" : "v_") + getDataTypeName(in.dataType);
     4625-                       }
     4626-                       else
     4627-                       {
     4628-                               // a_coords, v_coords
     4629-                               vtx << "coords;\n";
     4630-                               if (!m_isVertexCase)
     4631-                               {
     4632-                                       vtx << "out " << precName << " " << typeName << " v_coords;\n";
     4633-                                       frag << "in " << precName << " " << typeName << " v_coords;\n";
     4634-                                       passVars.push_back("coords");
     4635-                               }
     4636-
     4637-                               inValue = m_isVertexCase ? "a_coords" : "v_coords";
     4638-                       }
     4639-               }
     4640-               else if (in.inputType == INPUTTYPE_UNIFORM)
     4641-               {
     4642-                       op << "uniform " << precName << " " << typeName << " u_in" << inNdx << ";\n";
     4643-                       inValue = string("u_in") + de::toString(inNdx);
     4644-               }
     4645-               else if (in.inputType == INPUTTYPE_CONST)
     4646-               {
     4647-                       op << "const " << precName << " " << typeName << " in" << inNdx << " = ";
     4648-
     4649-                       // Generate declaration.
     4650-                       switch (in.dataType)
     4651-                       {
     4652-                               case TYPE_FLOAT:                op << de::floatToString(s_constInFloat[inNdx], 1);                                      break;
     4653-                               case TYPE_FLOAT_VEC2:   writeVectorConstructor<2>(op, s_constInVec2[inNdx]);                            break;
     4654-                               case TYPE_FLOAT_VEC3:   writeVectorConstructor<3>(op, s_constInVec3[inNdx]);                            break;
     4655-                               case TYPE_FLOAT_VEC4:   writeVectorConstructor<4>(op, s_constInVec4[inNdx]);                            break;
     4656-                               case TYPE_FLOAT_MAT2:   writeMatrixConstructor<2, 2>(op, Mat2(s_constInMat2x2[inNdx]));         break;
     4657-                               case TYPE_FLOAT_MAT2X3: writeMatrixConstructor<2, 3>(op, Mat2x3(s_constInMat2x3[inNdx]));       break;
     4658-                               case TYPE_FLOAT_MAT2X4: writeMatrixConstructor<2, 4>(op, Mat2x4(s_constInMat2x4[inNdx]));       break;
     4659-                               case TYPE_FLOAT_MAT3X2: writeMatrixConstructor<3, 2>(op, Mat3x2(s_constInMat3x2[inNdx]));       break;
     4660-                               case TYPE_FLOAT_MAT3:   writeMatrixConstructor<3, 3>(op, Mat3(s_constInMat3x3[inNdx]));         break;
     4661-                               case TYPE_FLOAT_MAT3X4: writeMatrixConstructor<3, 4>(op, Mat3x4(s_constInMat3x4[inNdx]));       break;
     4662-                               case TYPE_FLOAT_MAT4X2: writeMatrixConstructor<4, 2>(op, Mat4x2(s_constInMat4x2[inNdx]));       break;
     4663-                               case TYPE_FLOAT_MAT4X3: writeMatrixConstructor<4, 3>(op, Mat4x3(s_constInMat4x3[inNdx]));       break;
     4664-                               case TYPE_FLOAT_MAT4:   writeMatrixConstructor<4, 4>(op, Mat4(s_constInMat4x4[inNdx]));         break;
     4665-
     4666-                               default:
     4667-                                       DE_ASSERT(DE_FALSE);
     4668-                       }
     4669-
     4670-                       op << ";\n";
     4671-
     4672-                       inValue = string("in") + de::toString(inNdx);
     4673-               }
     4674-       }
     4675-
     4676-       vtx << "\n"
     4677-               << "void main (void)\n"
     4678-               << "{\n"
     4679-               << "    gl_Position = a_position;\n";
     4680-       frag << "\n"
     4681-                << "void main (void)\n"
     4682-                << "{\n";
     4683-
     4684-       if (m_isVertexCase)
     4685-               frag << "       dEQP_FragColor = v_color;\n";
     4686-       else
     4687-       {
     4688-               for (vector<string>::const_iterator copyIter = passVars.begin(); copyIter != passVars.end(); copyIter++)
     4689-                       vtx << "        v_" << *copyIter << " = " << "a_" << *copyIter << ";\n";
     4690-       }
     4691-
     4692-       // Operation.
     4693-
     4694-       switch (getOperationNature(m_op))
     4695-       {
     4696-               case OPERATIONNATURE_PURE:
     4697-                       DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     4698-
     4699-                       operationValue0 = inValue0;
     4700-                       operationValue1 = inValue1;
     4701-                       break;
     4702-
     4703-               case OPERATIONNATURE_MUTATING:
     4704-                       DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     4705-
     4706-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " tmpValue = " << inValue0 << ";\n";
     4707-
     4708-                       operationValue0 = "tmpValue";
     4709-                       operationValue1 = inValue1;
     4710-                       break;
     4711-
     4712-               case OPERATIONNATURE_ASSIGNMENT:
     4713-                       DE_ASSERT(getOperationType(m_op) == OPERATIONTYPE_ASSIGNMENT);
     4714-
     4715-                       operationValue0 = inValue0;
     4716-                       operationValue1 = inValue1;
     4717-                       break;
     4718-
     4719-               default:
     4720-                       DE_ASSERT(DE_FALSE);
     4721-       }
     4722-
     4723-       switch (getOperationType(m_op))
     4724-       {
     4725-               case OPERATIONTYPE_BINARY_OPERATOR:
     4726-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << " " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     4727-                       break;
     4728-
     4729-               case OPERATIONTYPE_UNARY_PREFIX_OPERATOR:
     4730-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << operationValue0 << ";\n";
     4731-                       break;
     4732-
     4733-               case OPERATIONTYPE_UNARY_POSTFIX_OPERATOR:
     4734-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << getOperationName(m_op) << ";\n";
     4735-                       break;
     4736-
     4737-               case OPERATIONTYPE_BINARY_FUNCTION:
     4738-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ", " << operationValue1 << ");\n";
     4739-                       break;
     4740-
     4741-               case OPERATIONTYPE_UNARY_FUNCTION:
     4742-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ");\n";
     4743-                       break;
     4744-
     4745-               case OPERATIONTYPE_ASSIGNMENT:
     4746-                       op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << ";\n";
     4747-                       op << " res " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     4748-                       break;
     4749-
     4750-               default:
     4751-                       DE_ASSERT(DE_FALSE);
     4752-       }
     4753-
     4754-       // Reduction to vec3 (rgb). Check the used value too if it was modified
     4755-       op << " " << (m_isVertexCase ? "v_color" : "dEQP_FragColor") << " = ";
     4756-
     4757-       if (isOperationValueModifying(m_op))
     4758-               op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0) + vec4(" << genGLSLMatToVec3Reduction(resultType, "tmpValue") << ", 0.0);\n";
     4759-       else
     4760-               op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0);\n";
     4761-
     4762-       vtx << "}\n";
     4763-       frag << "}\n";
     4764-
     4765-       m_vertShaderSource      = vtx.str();
     4766-       m_fragShaderSource      = frag.str();
     4767-
     4768-       // \todo [2012-02-14 pyry] Compute better values for matrix tests.
     4769-       m_userAttribTransforms.resize(4);
     4770-       for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     4771-       {
     4772-               m_userAttribTransforms[attribNdx] = Mat4(0.0f);
     4773-               m_userAttribTransforms[attribNdx](                  0, 3) = 0.2f;                                                               // !< prevent matrix*vec from going into zero (assuming vec.w != 0)
     4774-               m_userAttribTransforms[attribNdx](                  1, 3) = 0.1f;                                                               // !<
     4775-               m_userAttribTransforms[attribNdx](                  2, 3) = 0.4f + 0.15f * float(attribNdx);    // !<
     4776-               m_userAttribTransforms[attribNdx](                  3, 3) = 0.7f;                                                               // !<
     4777-               m_userAttribTransforms[attribNdx]((0 + attribNdx) % 4, 0) = 1.0f;
     4778-               m_userAttribTransforms[attribNdx]((1 + attribNdx) % 4, 1) = 1.0f;
     4779-               m_userAttribTransforms[attribNdx]((2 + attribNdx) % 4, 2) = 1.0f;
     4780-               m_userAttribTransforms[attribNdx]((3 + attribNdx) % 4, 3) = 1.0f;
     4781-       }
     4782-
     4783-       // prevent bad reference cases such as black result images by fine-tuning used matrices
     4784-       if (getOperationTestMatrixType(m_op) != TESTMATRIXTYPE_DEFAULT)
     4785-       {
     4786-               for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     4787-               {
     4788-                       for (int row = 0; row < 4; row++)
     4789-                       for (int col = 0; col < 4; col++)
     4790-                       {
     4791-                               switch (getOperationTestMatrixType(m_op))
     4792-                               {
     4793-                                       case TESTMATRIXTYPE_NEGATED:
     4794-                                               m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col);
     4795-                                               break;
     4796-                                       case TESTMATRIXTYPE_INCREMENTED:
     4797-                                               m_userAttribTransforms[attribNdx](row, col) += 0.3f;
     4798-                                               break;
     4799-                                       case TESTMATRIXTYPE_DECREMENTED:
     4800-                                               m_userAttribTransforms[attribNdx](row, col) -= 0.3f;
     4801-                                               break;
     4802-                                       case TESTMATRIXTYPE_NEGATED_INCREMENTED:
     4803-                                               m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col) + 0.3f;
     4804-                                               break;
     4805-                                       case TESTMATRIXTYPE_INCREMENTED_LESS:
     4806-                                               m_userAttribTransforms[attribNdx](row, col) -= 0.1f;
     4807-                                               break;
     4808-
     4809-                                       default:
     4810-                                               DE_ASSERT(DE_FALSE);
     4811-                                               break;
     4812-                               }
     4813-                       }
     4814-               }
     4815-       }
     4816-
     4817-       ShaderRenderCase::init();
     4818+    std::ostringstream  vtx;
     4819+    std::ostringstream  frag;
     4820+    std::ostringstream& op              = m_isVertexCase ? vtx : frag;
     4821+
     4822+    bool                isInDynMat0     = isDataTypeMatrix(m_in0.dataType) && m_in0.inputType == INPUTTYPE_DYNAMIC;
     4823+    bool                isInDynMat1     = isDataTypeMatrix(m_in1.dataType) && m_in1.inputType == INPUTTYPE_DYNAMIC;
     4824+    string              inValue0;
     4825+    string              inValue1;
     4826+    DataType            resultType      = TYPE_LAST;
     4827+    Precision           resultPrec      = m_in0.precision;
     4828+    vector<string>      passVars;
     4829+    int                 numInputs       = (isOperationBinary(m_op)) ? (2) : (1);
     4830+
     4831+    std::string         operationValue0;
     4832+    std::string         operationValue1;
     4833+
     4834+    DE_ASSERT(!isInDynMat0 || !isInDynMat1); // Only single dynamic matrix input is allowed.
     4835+    DE_UNREF(isInDynMat0 && isInDynMat1);
     4836+
     4837+    // Compute result type.
     4838+    if (m_op == OP_MUL && isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     4839+    {
     4840+        resultType = getDataTypeMatrix(getDataTypeMatrixNumColumns(m_in1.dataType), getDataTypeMatrixNumRows(m_in0.dataType));
     4841+    }
     4842+    else if (m_op == OP_OUTER_PRODUCT)
     4843+    {
     4844+        resultType = getDataTypeMatrix(getDataTypeScalarSize(m_in1.dataType), getDataTypeScalarSize(m_in0.dataType));
     4845+    }
     4846+    else if (m_op == OP_TRANSPOSE)
     4847+    {
     4848+        resultType = getDataTypeMatrix(getDataTypeMatrixNumRows(m_in0.dataType), getDataTypeMatrixNumColumns(m_in0.dataType));
     4849+    }
     4850+    else if (m_op == OP_INVERSE)
     4851+    {
     4852+        resultType = m_in0.dataType;
     4853+    }
     4854+    else if (m_op == OP_DETERMINANT)
     4855+    {
     4856+        resultType = TYPE_FLOAT;
     4857+    }
     4858+    else if (getOperationType(m_op) == OPERATIONTYPE_UNARY_PREFIX_OPERATOR ||
     4859+             getOperationType(m_op) == OPERATIONTYPE_UNARY_POSTFIX_OPERATOR)
     4860+    {
     4861+        resultType = m_in0.dataType;
     4862+    }
     4863+    else if (isDataTypeMatrix(m_in0.dataType) && isDataTypeMatrix(m_in1.dataType))
     4864+    {
     4865+        DE_ASSERT(m_in0.dataType == m_in1.dataType);
     4866+        resultType = m_in0.dataType;
     4867+    }
     4868+    else if (isDataTypeMatrix(m_in0.dataType) || isDataTypeMatrix(m_in1.dataType))
     4869+    {
     4870+        int         matNdx      = isDataTypeMatrix(m_in0.dataType) ? 0 : 1;
     4871+        DataType    matrixType  = matNdx == 0 ? m_in0.dataType : m_in1.dataType;
     4872+        DataType    otherType   = matNdx == 0 ? m_in1.dataType : m_in0.dataType;
     4873+
     4874+        if (otherType == TYPE_FLOAT)
     4875+            resultType = matrixType;
     4876+        else
     4877+        {
     4878+            DE_ASSERT(isDataTypeVector(otherType));
     4879+            resultType = getDataTypeFloatVec(matNdx == 0 ? getDataTypeMatrixNumRows(matrixType) : getDataTypeMatrixNumColumns(matrixType));
     4880+        }
     4881+    }
     4882+    else
     4883+    {
     4884+        DE_ASSERT(DE_FALSE);
     4885+    }
     4886+
     4887+    vtx << "#version 300 es\n";
     4888+    frag << "#version 300 es\n";
     4889+
     4890+    vtx << "in highp vec4 a_position;\n";
     4891+    frag << "layout(location = 0) out mediump vec4 dEQP_FragColor;\n";
     4892+    if (m_isVertexCase)
     4893+    {
     4894+        vtx << "out mediump vec4 v_color;\n";
     4895+        frag << "in mediump vec4 v_color;\n";
     4896+    }
     4897+
     4898+    // Input declarations.
     4899+    for (int inNdx = 0; inNdx < numInputs; inNdx++)
     4900+    {
     4901+        const ShaderInput&  in          = inNdx > 0 ? m_in1 : m_in0;
     4902+        const char*         precName    = getPrecisionName(in.precision);
     4903+        const char*         typeName    = getDataTypeName(in.dataType);
     4904+        string&             inValue     = inNdx > 0 ? inValue1 : inValue0;
     4905+
     4906+        if (in.inputType == INPUTTYPE_DYNAMIC)
     4907+        {
     4908+            vtx << "in " << precName << " " << typeName << " a_";
     4909+
     4910+            if (isDataTypeMatrix(in.dataType))
     4911+            {
     4912+                // a_matN, v_matN
     4913+                vtx << typeName << ";\n";
     4914+                if (!m_isVertexCase)
     4915+                {
     4916+                    vtx << "out " << precName << " " << typeName << " v_" << typeName << ";\n";
     4917+                    frag << "in " << precName << " " << typeName << " v_" << typeName << ";\n";
     4918+                    passVars.push_back(typeName);
     4919+                }
     4920+
     4921+                inValue = string(m_isVertexCase ? "a_" : "v_") + getDataTypeName(in.dataType);
     4922+            }
     4923+            else
     4924+            {
     4925+                // a_coords, v_coords
     4926+                vtx << "coords;\n";
     4927+                if (!m_isVertexCase)
     4928+                {
     4929+                    vtx << "out " << precName << " " << typeName << " v_coords;\n";
     4930+                    frag << "in " << precName << " " << typeName << " v_coords;\n";
     4931+                    passVars.push_back("coords");
     4932+                }
     4933+
     4934+                inValue = m_isVertexCase ? "a_coords" : "v_coords";
     4935+            }
     4936+        }
     4937+        else if (in.inputType == INPUTTYPE_UNIFORM)
     4938+        {
     4939+            op << "uniform " << precName << " " << typeName << " u_in" << inNdx << ";\n";
     4940+            inValue = string("u_in") + de::toString(inNdx);
     4941+        }
     4942+        else if (in.inputType == INPUTTYPE_CONST)
     4943+        {
     4944+            op << "const " << precName << " " << typeName << " in" << inNdx << " = ";
     4945+
     4946+            // Generate declaration.
     4947+            switch (in.dataType)
     4948+            {
     4949+                case TYPE_FLOAT:        op << de::floatToString(s_constInFloat[inNdx], 1);                  break;
     4950+                case TYPE_FLOAT_VEC2:   writeVectorConstructor<2>(op, s_constInVec2[inNdx]);                break;
     4951+                case TYPE_FLOAT_VEC3:   writeVectorConstructor<3>(op, s_constInVec3[inNdx]);                break;
     4952+                case TYPE_FLOAT_VEC4:   writeVectorConstructor<4>(op, s_constInVec4[inNdx]);                break;
     4953+                case TYPE_FLOAT_MAT2:   writeMatrixConstructor<2, 2>(op, Mat2(s_constInMat2x2[inNdx]));     break;
     4954+                case TYPE_FLOAT_MAT2X3: writeMatrixConstructor<2, 3>(op, Mat2x3(s_constInMat2x3[inNdx]));   break;
     4955+                case TYPE_FLOAT_MAT2X4: writeMatrixConstructor<2, 4>(op, Mat2x4(s_constInMat2x4[inNdx]));   break;
     4956+                case TYPE_FLOAT_MAT3X2: writeMatrixConstructor<3, 2>(op, Mat3x2(s_constInMat3x2[inNdx]));   break;
     4957+                case TYPE_FLOAT_MAT3:   writeMatrixConstructor<3, 3>(op, Mat3(s_constInMat3x3[inNdx]));     break;
     4958+                case TYPE_FLOAT_MAT3X4: writeMatrixConstructor<3, 4>(op, Mat3x4(s_constInMat3x4[inNdx]));   break;
     4959+                case TYPE_FLOAT_MAT4X2: writeMatrixConstructor<4, 2>(op, Mat4x2(s_constInMat4x2[inNdx]));   break;
     4960+                case TYPE_FLOAT_MAT4X3: writeMatrixConstructor<4, 3>(op, Mat4x3(s_constInMat4x3[inNdx]));   break;
     4961+                case TYPE_FLOAT_MAT4:   writeMatrixConstructor<4, 4>(op, Mat4(s_constInMat4x4[inNdx]));     break;
     4962+
     4963+                default:
     4964+                    DE_ASSERT(DE_FALSE);
     4965+            }
     4966+
     4967+            op << ";\n";
     4968+
     4969+            inValue = string("in") + de::toString(inNdx);
     4970+        }
     4971+    }
     4972+
     4973+    vtx << "\n"
     4974+        << "void main (void)\n"
     4975+        << "{\n"
     4976+        << "    gl_Position = a_position;\n";
     4977+    frag << "\n"
     4978+         << "void main (void)\n"
     4979+         << "{\n";
     4980+
     4981+    if (m_isVertexCase)
     4982+        frag << "   dEQP_FragColor = v_color;\n";
     4983+    else
     4984+    {
     4985+        for (vector<string>::const_iterator copyIter = passVars.begin(); copyIter != passVars.end(); copyIter++)
     4986+            vtx << "    v_" << *copyIter << " = " << "a_" << *copyIter << ";\n";
     4987+    }
     4988+
     4989+    // Operation.
     4990+
     4991+    switch (getOperationNature(m_op))
     4992+    {
     4993+        case OPERATIONNATURE_PURE:
     4994+            DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     4995+
     4996+            operationValue0 = inValue0;
     4997+            operationValue1 = inValue1;
     4998+            break;
     4999+
     5000+        case OPERATIONNATURE_MUTATING:
     5001+            DE_ASSERT(getOperationType(m_op) != OPERATIONTYPE_ASSIGNMENT);
     5002+
     5003+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " tmpValue = " << inValue0 << ";\n";
     5004+
     5005+            operationValue0 = "tmpValue";
     5006+            operationValue1 = inValue1;
     5007+            break;
     5008+
     5009+        case OPERATIONNATURE_ASSIGNMENT:
     5010+            DE_ASSERT(getOperationType(m_op) == OPERATIONTYPE_ASSIGNMENT);
     5011+
     5012+            operationValue0 = inValue0;
     5013+            operationValue1 = inValue1;
     5014+            break;
     5015+
     5016+        default:
     5017+            DE_ASSERT(DE_FALSE);
     5018+    }
     5019+
     5020+    switch (getOperationType(m_op))
     5021+    {
     5022+        case OPERATIONTYPE_BINARY_OPERATOR:
     5023+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << " " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     5024+            break;
     5025+
     5026+        case OPERATIONTYPE_UNARY_PREFIX_OPERATOR:
     5027+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << operationValue0 << ";\n";
     5028+            break;
     5029+
     5030+        case OPERATIONTYPE_UNARY_POSTFIX_OPERATOR:
     5031+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << getOperationName(m_op) << ";\n";
     5032+            break;
     5033+
     5034+        case OPERATIONTYPE_BINARY_FUNCTION:
     5035+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ", " << operationValue1 << ");\n";
     5036+            break;
     5037+
     5038+        case OPERATIONTYPE_UNARY_FUNCTION:
     5039+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << getOperationName(m_op) << "(" << operationValue0 << ");\n";
     5040+            break;
     5041+
     5042+        case OPERATIONTYPE_ASSIGNMENT:
     5043+            op << " " << getPrecisionName(resultPrec) << " " << getDataTypeName(resultType) << " res = " << operationValue0 << ";\n";
     5044+            op << " res " << getOperationName(m_op) << " " << operationValue1 << ";\n";
     5045+            break;
     5046+
     5047+        default:
     5048+            DE_ASSERT(DE_FALSE);
     5049+    }
     5050+
     5051+    // Reduction to vec3 (rgb). Check the used value too if it was modified
     5052+    op << " " << (m_isVertexCase ? "v_color" : "dEQP_FragColor") << " = ";
     5053+
     5054+    if (isOperationValueModifying(m_op))
     5055+        op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0) + vec4(" << genGLSLMatToVec3Reduction(resultType, "tmpValue") << ", 0.0);\n";
     5056+    else
     5057+        op << "vec4(" << genGLSLMatToVec3Reduction(resultType, "res") << ", 1.0);\n";
     5058+
     5059+    vtx << "}\n";
     5060+    frag << "}\n";
     5061+
     5062+    m_vertShaderSource  = vtx.str();
     5063+    m_fragShaderSource  = frag.str();
     5064+
     5065+    // \todo [2012-02-14 pyry] Compute better values for matrix tests.
     5066+    m_userAttribTransforms.resize(4);
     5067+    for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     5068+    {
     5069+        m_userAttribTransforms[attribNdx] = Mat4(0.0f);
     5070+        m_userAttribTransforms[attribNdx](                  0, 3) = 0.2f;                               // !< prevent matrix*vec from going into zero (assuming vec.w != 0)
     5071+        m_userAttribTransforms[attribNdx](                  1, 3) = 0.1f;                               // !<
     5072+        m_userAttribTransforms[attribNdx](                  2, 3) = 0.4f + 0.15f * float(attribNdx);    // !<
     5073+        m_userAttribTransforms[attribNdx](                  3, 3) = 0.7f;                               // !<
     5074+        m_userAttribTransforms[attribNdx]((0 + attribNdx) % 4, 0) = 1.0f;
     5075+        m_userAttribTransforms[attribNdx]((1 + attribNdx) % 4, 1) = 1.0f;
     5076+        m_userAttribTransforms[attribNdx]((2 + attribNdx) % 4, 2) = 1.0f;
     5077+        m_userAttribTransforms[attribNdx]((3 + attribNdx) % 4, 3) = 1.0f;
     5078+    }
     5079+
     5080+    // prevent bad reference cases such as black result images by fine-tuning used matrices
     5081+    if (getOperationTestMatrixType(m_op) != TESTMATRIXTYPE_DEFAULT)
     5082+    {
     5083+        for (int attribNdx = 0; attribNdx < 4; attribNdx++)
     5084+        {
     5085+            for (int row = 0; row < 4; row++)
     5086+            for (int col = 0; col < 4; col++)
     5087+            {
     5088+                switch (getOperationTestMatrixType(m_op))
     5089+                {
     5090+                    case TESTMATRIXTYPE_NEGATED:
     5091+                        m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col);
     5092+                        break;
     5093+                    case TESTMATRIXTYPE_INCREMENTED:
     5094+                        m_userAttribTransforms[attribNdx](row, col) += 0.3f;
     5095+                        break;
     5096+                    case TESTMATRIXTYPE_DECREMENTED:
     5097+                        m_userAttribTransforms[attribNdx](row, col) -= 0.3f;
     5098+                        break;
     5099+                    case TESTMATRIXTYPE_NEGATED_INCREMENTED:
     5100+                        m_userAttribTransforms[attribNdx](row, col) = -m_userAttribTransforms[attribNdx](row, col) + 0.3f;
     5101+                        break;
     5102+                    case TESTMATRIXTYPE_INCREMENTED_LESS:
     5103+                        m_userAttribTransforms[attribNdx](row, col) -= 0.1f;
     5104+                        break;
     5105+
     5106+                    default:
     5107+                        DE_ASSERT(DE_FALSE);
     5108+                        break;
     5109+                }
     5110+            }
     5111+        }
     5112+    }
     5113+
     5114+    ShaderRenderCase::init();
     5115 }
     5116 
     5117 std::string ShaderMatrixCase::genGLSLMatToVec3Reduction (const glu::DataType& matType, const char* varName)
     5118 {
     5119-       std::ostringstream op;
     5120-
     5121-       switch (matType)
     5122-       {
     5123-               case TYPE_FLOAT:                op << varName << ", "                   << varName << ", "                      << varName << "";                                                                                                                                                                                                                                                                                       break;
     5124-               case TYPE_FLOAT_VEC2:   op << varName << ".x, "                 << varName << ".y, "            << varName << ".x";                                                                                                                                                                                                                                                                                     break;
     5125-               case TYPE_FLOAT_VEC3:   op << varName << "";                                                                                                                                                                                                                                                                                                                                                                                                    break;
     5126-               case TYPE_FLOAT_VEC4:   op << varName << ".x, "                 << varName << ".y, "            << varName << ".z+"                     << varName << ".w";                                                                                                                                                                                                                             break;
     5127-               case TYPE_FLOAT_MAT2:   op << varName << "[0][0], "             << varName << "[1][0], "        << varName << "[0][1]+"         << varName << "[1][1]";                                                                                                                                                                                                                 break;
     5128-               case TYPE_FLOAT_MAT2X3: op << varName << "[0] + "               << varName << "[1]";                                                                                                                                                                                                                                                                                                                                    break;
     5129-               case TYPE_FLOAT_MAT2X4: op << varName << "[0].xyz + "   << varName << "[1].yzw";                                                                                                                                                                                                                                                                                                                                break;
     5130-               case TYPE_FLOAT_MAT3X2: op << varName << "[0][0]+"              << varName << "[0][1], "        << varName << "[1][0]+"         << varName << "[1][1], "        << varName << "[2][0]+" << varName << "[2][1]";                                                                                                         break;
     5131-               case TYPE_FLOAT_MAT3:   op << varName << "[0] + "               << varName << "[1] + "          << varName << "[2]";                                                                                                                                                                                                                                                                            break;
     5132-               case TYPE_FLOAT_MAT3X4: op << varName << "[0].xyz + "   << varName << "[1].yzw + "      << varName << "[2].zwx";                                                                                                                                                                                                                                                                        break;
     5133-               case TYPE_FLOAT_MAT4X2: op << varName << "[0][0]+"              << varName << "[0][1]+"         << varName << "[3][0], "        << varName << "[1][0]+"         << varName << "[1][1]+" << varName << "[3][1], " << varName << "[2][0]+" << varName << "[2][1]";        break;
     5134-               case TYPE_FLOAT_MAT4X3: op << varName << "[0] + "               << varName << "[1] + "          << varName << "[2] + "          << varName << "[3]";                                                                                                                                                                                                                    break;
     5135-               case TYPE_FLOAT_MAT4:   op << varName << "[0].xyz+"             << varName << "[1].yzw+"        << varName << "[2].zwx+"        << varName << "[3].wxy";                                                                                                                                                                                                                break;
     5136-
     5137-               default:
     5138-                       DE_ASSERT(DE_FALSE);
     5139-       }
     5140-
     5141-       return op.str();
     5142+    std::ostringstream op;
     5143+
     5144+    switch (matType)
     5145+    {
     5146+        case TYPE_FLOAT:        op << varName << ", "           << varName << ", "          << varName << "";                                                                                                                                           break;
     5147+        case TYPE_FLOAT_VEC2:   op << varName << ".x, "         << varName << ".y, "        << varName << ".x";                                                                                                                                         break;
     5148+        case TYPE_FLOAT_VEC3:   op << varName << "";                                                                                                                                                                                                    break;
     5149+        case TYPE_FLOAT_VEC4:   op << varName << ".x, "         << varName << ".y, "        << varName << ".z+"         << varName << ".w";                                                                                                             break;
     5150+        case TYPE_FLOAT_MAT2:   op << varName << "[0][0], "     << varName << "[1][0], "    << varName << "[0][1]+"     << varName << "[1][1]";                                                                                                         break;
     5151+        case TYPE_FLOAT_MAT2X3: op << varName << "[0] + "       << varName << "[1]";                                                                                                                                                                    break;
     5152+        case TYPE_FLOAT_MAT2X4: op << varName << "[0].xyz + "   << varName << "[1].yzw";                                                                                                                                                                break;
     5153+        case TYPE_FLOAT_MAT3X2: op << varName << "[0][0]+"      << varName << "[0][1], "    << varName << "[1][0]+"     << varName << "[1][1], "    << varName << "[2][0]+" << varName << "[2][1]";                                                     break;
     5154+        case TYPE_FLOAT_MAT3:   op << varName << "[0] + "       << varName << "[1] + "      << varName << "[2]";                                                                                                                                        break;
     5155+        case TYPE_FLOAT_MAT3X4: op << varName << "[0].xyz + "   << varName << "[1].yzw + "  << varName << "[2].zwx";                                                                                                                                    break;
     5156+        case TYPE_FLOAT_MAT4X2: op << varName << "[0][0]+"      << varName << "[0][1]+"     << varName << "[3][0], "    << varName << "[1][0]+"     << varName << "[1][1]+" << varName << "[3][1], " << varName << "[2][0]+" << varName << "[2][1]";    break;
     5157+        case TYPE_FLOAT_MAT4X3: op << varName << "[0] + "       << varName << "[1] + "      << varName << "[2] + "      << varName << "[3]";                                                                                                            break;
     5158+        case TYPE_FLOAT_MAT4:   op << varName << "[0].xyz+"     << varName << "[1].yzw+"    << varName << "[2].zwx+"    << varName << "[3].wxy";                                                                                                        break;
     5159+
     5160+        default:
     5161+            DE_ASSERT(DE_FALSE);
     5162+    }
     5163+
     5164+    return op.str();
     5165 }
     5166 
     5167 void ShaderMatrixCase::setupUniforms (int programID, const tcu::Vec4& constCoords)
     5168 {
     5169-       const glw::Functions& gl = m_renderCtx.getFunctions();
     5170-
     5171-       DE_UNREF(constCoords);
     5172-
     5173-       for (int inNdx = 0; inNdx < 2; inNdx++)
     5174-       {
     5175-               const ShaderInput& in = inNdx > 0 ? m_in1 : m_in0;
     5176-
     5177-               if (in.inputType == INPUTTYPE_UNIFORM)
     5178-               {
     5179-                       int loc = gl.getUniformLocation(programID, (string("u_in") + de::toString(inNdx)).c_str());
     5180-
     5181-                       if (loc < 0)
     5182-                               continue;
     5183-
     5184-                       switch (in.dataType)
     5185-                       {
     5186-                               case TYPE_FLOAT:                gl.uniform1f(loc, s_constInFloat[inNdx]);                                               break;
     5187-                               case TYPE_FLOAT_VEC2:   gl.uniform2fv(loc, 1, s_constInVec2[inNdx].getPtr());                   break;
     5188-                               case TYPE_FLOAT_VEC3:   gl.uniform3fv(loc, 1, s_constInVec3[inNdx].getPtr());                   break;
     5189-                               case TYPE_FLOAT_VEC4:   gl.uniform4fv(loc, 1, s_constInVec4[inNdx].getPtr());                   break;
     5190-                               // \note GLES3 supports transpose in matrix upload.
     5191-                               case TYPE_FLOAT_MAT2:   gl.uniformMatrix2fv     (loc, 1, GL_TRUE, s_constInMat2x2[inNdx]);      break;
     5192-                               case TYPE_FLOAT_MAT2X3: gl.uniformMatrix2x3fv(loc, 1, GL_TRUE, s_constInMat2x3[inNdx]); break;
     5193-                               case TYPE_FLOAT_MAT2X4: gl.uniformMatrix2x4fv(loc, 1, GL_TRUE, s_constInMat2x4[inNdx]); break;
     5194-                               case TYPE_FLOAT_MAT3X2: gl.uniformMatrix3x2fv(loc, 1, GL_TRUE, s_constInMat3x2[inNdx]); break;
     5195-                               case TYPE_FLOAT_MAT3:   gl.uniformMatrix3fv     (loc, 1, GL_TRUE, s_constInMat3x3[inNdx]);      break;
     5196-                               case TYPE_FLOAT_MAT3X4: gl.uniformMatrix3x4fv(loc, 1, GL_TRUE, s_constInMat3x4[inNdx]); break;
     5197-                               case TYPE_FLOAT_MAT4X2: gl.uniformMatrix4x2fv(loc, 1, GL_TRUE, s_constInMat4x2[inNdx]); break;
     5198-                               case TYPE_FLOAT_MAT4X3: gl.uniformMatrix4x3fv(loc, 1, GL_TRUE, s_constInMat4x3[inNdx]); break;
     5199-                               case TYPE_FLOAT_MAT4:   gl.uniformMatrix4fv     (loc, 1, GL_TRUE, s_constInMat4x4[inNdx]);      break;
     5200-                               default:
     5201-                                       DE_ASSERT(false);
     5202-                       }
     5203-               }
     5204-       }
     5205+    const glw::Functions& gl = m_renderCtx.getFunctions();
     5206+
     5207+    DE_UNREF(constCoords);
     5208+
     5209+    for (int inNdx = 0; inNdx < 2; inNdx++)
     5210+    {
     5211+        const ShaderInput& in = inNdx > 0 ? m_in1 : m_in0;
     5212+
     5213+        if (in.inputType == INPUTTYPE_UNIFORM)
     5214+        {
     5215+            int loc = gl.getUniformLocation(programID, (string("u_in") + de::toString(inNdx)).c_str());
     5216+
     5217+            if (loc < 0)
     5218+                continue;
     5219+
     5220+            switch (in.dataType)
     5221+            {
     5222+                case TYPE_FLOAT:        gl.uniform1f(loc, s_constInFloat[inNdx]);                       break;
     5223+                case TYPE_FLOAT_VEC2:   gl.uniform2fv(loc, 1, s_constInVec2[inNdx].getPtr());           break;
     5224+                case TYPE_FLOAT_VEC3:   gl.uniform3fv(loc, 1, s_constInVec3[inNdx].getPtr());           break;
     5225+                case TYPE_FLOAT_VEC4:   gl.uniform4fv(loc, 1, s_constInVec4[inNdx].getPtr());           break;
     5226+                // \note GLES3 supports transpose in matrix upload.
     5227+                case TYPE_FLOAT_MAT2:   gl.uniformMatrix2fv (loc, 1, GL_TRUE, s_constInMat2x2[inNdx]);  break;
     5228+                case TYPE_FLOAT_MAT2X3: gl.uniformMatrix2x3fv(loc, 1, GL_TRUE, s_constInMat2x3[inNdx]); break;
     5229+                case TYPE_FLOAT_MAT2X4: gl.uniformMatrix2x4fv(loc, 1, GL_TRUE, s_constInMat2x4[inNdx]); break;
     5230+                case TYPE_FLOAT_MAT3X2: gl.uniformMatrix3x2fv(loc, 1, GL_TRUE, s_constInMat3x2[inNdx]); break;
     5231+                case TYPE_FLOAT_MAT3:   gl.uniformMatrix3fv (loc, 1, GL_TRUE, s_constInMat3x3[inNdx]);  break;
     5232+                case TYPE_FLOAT_MAT3X4: gl.uniformMatrix3x4fv(loc, 1, GL_TRUE, s_constInMat3x4[inNdx]); break;
     5233+                case TYPE_FLOAT_MAT4X2: gl.uniformMatrix4x2fv(loc, 1, GL_TRUE, s_constInMat4x2[inNdx]); break;
     5234+                case TYPE_FLOAT_MAT4X3: gl.uniformMatrix4x3fv(loc, 1, GL_TRUE, s_constInMat4x3[inNdx]); break;
     5235+                case TYPE_FLOAT_MAT4:   gl.uniformMatrix4fv (loc, 1, GL_TRUE, s_constInMat4x4[inNdx]);  break;
     5236+                default:
     5237+                    DE_ASSERT(false);
     5238+            }
     5239+        }
     5240+    }
     5241 }
     5242 
     5243 ShaderMatrixTests::ShaderMatrixTests (Context& context)
     5244-       : TestCaseGroup(context, "matrix", "Matrix Tests")
     5245+    : TestCaseGroup(context, "matrix", "Matrix Tests")
     5246 {
     5247 }
     5248 
     5249@@ -1791,181 +1791,181 @@ ShaderMatrixTests::~ShaderMatrixTests (void)
     5250 
     5251 void ShaderMatrixTests::init (void)
     5252 {
     5253-       static const struct
     5254-       {
     5255-               const char*             name;
     5256-               const char*             desc;
     5257-               MatrixOp                op;
     5258-               bool                    extendedInputTypeCases; // !< test with const and uniform types too
     5259-               bool                    createInputTypeGroup;   // !< create group for input types
     5260-       } ops[] =
     5261-       {
     5262-               { "add",                        "Matrix addition tests",                                                OP_ADD,                         true,   true    },
     5263-               { "sub",                        "Matrix subtraction tests",                                             OP_SUB,                         true,   true    },
     5264-               { "mul",                        "Matrix multiplication tests",                                  OP_MUL,                         true,   true    },
     5265-               { "div",                        "Matrix division tests",                                                OP_DIV,                         true,   true    },
     5266-               { "matrixcompmult",     "Matrix component-wise multiplication tests",   OP_COMP_MUL,            false,  true    },
     5267-               { "outerproduct",       "Matrix outerProduct() tests",                                  OP_OUTER_PRODUCT,       false,  true    },
     5268-               { "transpose",          "Matrix transpose() tests",                                             OP_TRANSPOSE,           false,  true    },
     5269-               { "determinant",        "Matrix determinant() tests",                                   OP_DETERMINANT,         false,  true    },
     5270-               { "inverse",            "Matrix inverse() tests",                                               OP_INVERSE,                     false,  true    },
     5271-               { "unary_addition",     "Matrix unary addition tests",                                  OP_UNARY_PLUS,          false,  false   },
     5272-               { "negation",           "Matrix negation tests",                                                OP_NEGATION,            false,  false   },
     5273-               { "pre_increment",      "Matrix prefix increment tests",                                OP_PRE_INCREMENT,       false,  false   },
     5274-               { "pre_decrement",      "Matrix prefix decrement tests",                                OP_PRE_DECREMENT,       false,  false   },
     5275-               { "post_increment",     "Matrix postfix increment tests",                               OP_POST_INCREMENT,      false,  false   },
     5276-               { "post_decrement",     "Matrix postfix decrement tests",                               OP_POST_DECREMENT,      false,  false   },
     5277-               { "add_assign",         "Matrix add into tests",                                                OP_ADD_INTO,            false,  false   },
     5278-               { "sub_assign",         "Matrix subtract from tests",                                   OP_SUBTRACT_FROM,       false,  false   },
     5279-               { "mul_assign",         "Matrix multiply into tests",                                   OP_MULTIPLY_INTO,       false,  false   },
     5280-               { "div_assign",         "Matrix divide into tests",                                             OP_DIVIDE_INTO,         false,  false   },
     5281-       };
     5282-
     5283-       struct InputTypeSpec
     5284-       {
     5285-               const char*             name;
     5286-               const char*             desc;
     5287-               InputType               type;
     5288-       };
     5289-       static const InputTypeSpec extendedInputTypes[] =
     5290-       {
     5291-               { "const",              "Constant matrix input",        INPUTTYPE_CONST         },
     5292-               { "uniform",    "Uniform matrix input",         INPUTTYPE_UNIFORM       },
     5293-               { "dynamic",    "Dynamic matrix input",         INPUTTYPE_DYNAMIC       }
     5294-       };
     5295-       static const InputTypeSpec reducedInputTypes[] =
     5296-       {
     5297-               { "dynamic",    "Dynamic matrix input",         INPUTTYPE_DYNAMIC       }
     5298-       };
     5299-
     5300-       static const DataType matrixTypes[] =
     5301-       {
     5302-               TYPE_FLOAT_MAT2,
     5303-               TYPE_FLOAT_MAT2X3,
     5304-               TYPE_FLOAT_MAT2X4,
     5305-               TYPE_FLOAT_MAT3X2,
     5306-               TYPE_FLOAT_MAT3,
     5307-               TYPE_FLOAT_MAT3X4,
     5308-               TYPE_FLOAT_MAT4X2,
     5309-               TYPE_FLOAT_MAT4X3,
     5310-               TYPE_FLOAT_MAT4
     5311-       };
     5312-
     5313-       static const Precision precisions[] =
     5314-       {
     5315-               PRECISION_LOWP,
     5316-               PRECISION_MEDIUMP,
     5317-               PRECISION_HIGHP
     5318-       };
     5319-
     5320-       for (int opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
     5321-       {
     5322-               const InputTypeSpec*    inTypeList              = (ops[opNdx].extendedInputTypeCases) ? (extendedInputTypes) : (reducedInputTypes);
     5323-               const int                               inTypeListSize  = (ops[opNdx].extendedInputTypeCases) ? (DE_LENGTH_OF_ARRAY(extendedInputTypes)) : (DE_LENGTH_OF_ARRAY(reducedInputTypes));
     5324-               const MatrixOp                  op                              = ops[opNdx].op;
     5325-               tcu::TestCaseGroup*             opGroup                 = new tcu::TestCaseGroup(m_testCtx, ops[opNdx].name, ops[opNdx].desc);
     5326-
     5327-               addChild(opGroup);
     5328-
     5329-               for (int inTypeNdx = 0; inTypeNdx < inTypeListSize; inTypeNdx++)
     5330-               {
     5331-                       const InputType         inputType       = inTypeList[inTypeNdx].type;
     5332-                       tcu::TestCaseGroup* inGroup;
     5333-
     5334-                       if (ops[opNdx].createInputTypeGroup)
     5335-                       {
     5336-                               inGroup = new tcu::TestCaseGroup(m_testCtx, inTypeList[inTypeNdx].name, inTypeList[inTypeNdx].desc);
     5337-                               opGroup->addChild(inGroup);
     5338-                       }
     5339-                       else
     5340-                               inGroup = opGroup;
     5341-
     5342-                       for (int matTypeNdx = 0; matTypeNdx < DE_LENGTH_OF_ARRAY(matrixTypes); matTypeNdx++)
     5343-                       {
     5344-                               DataType        matType         = matrixTypes[matTypeNdx];
     5345-                               int                     numCols         = getDataTypeMatrixNumColumns(matType);
     5346-                               int                     numRows         = getDataTypeMatrixNumRows(matType);
     5347-                               const char*     matTypeName     = getDataTypeName(matType);
     5348-
     5349-                               for (int precNdx = 0; precNdx < DE_LENGTH_OF_ARRAY(precisions); precNdx++)
     5350-                               {
     5351-                                       Precision       precision       = precisions[precNdx];
     5352-                                       const char*     precName        = getPrecisionName(precision);
     5353-                                       string          baseName        = string(precName) + "_" + matTypeName + "_";
     5354-                                       ShaderInput     matIn           (inputType, matType, precision);
     5355-
     5356-                                       if (isOperationMatrixScalar(op))
     5357-                                       {
     5358-                                               // Matrix-scalar \note For div cases we use uniform input.
     5359-                                               ShaderInput scalarIn(op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, TYPE_FLOAT, precision);
     5360-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),          "Matrix-scalar case", matIn, scalarIn, op, true));
     5361-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),        "Matrix-scalar case", matIn, scalarIn, op, false));
     5362-                                       }
     5363-
     5364-                                       if (isOperationMatrixVector(op))
     5365-                                       {
     5366-                                               // Matrix-vector.
     5367-                                               DataType        colVecType      = getDataTypeFloatVec(numCols);
     5368-                                               ShaderInput colVecIn    (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, colVecType, precision);
     5369-
     5370-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(colVecType) + "_vertex").c_str(),         "Matrix-vector case", matIn, colVecIn, op, true));
     5371-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(colVecType) + "_fragment").c_str(),       "Matrix-vector case", matIn, colVecIn, op, false));
     5372-
     5373-                                               // Vector-matrix.
     5374-                                               DataType        rowVecType      = getDataTypeFloatVec(numRows);
     5375-                                               ShaderInput     rowVecIn        (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, rowVecType, precision);
     5376-                                               string          vecMatName      = string(precName) + "_" + getDataTypeName(rowVecType) + "_" + matTypeName;
     5377-
     5378-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_vertex").c_str(),             "Vector-matrix case", rowVecIn, matIn, op, true));
     5379-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_fragment").c_str(),   "Vector-matrix case", rowVecIn, matIn, op, false));
     5380-                                       }
     5381-
     5382-                                       if (isOperationArithmeticMatrixMatrix(op))
     5383-                                       {
     5384-                                               // Arithmetic matrix-matrix multiplication.
     5385-                                               for (int otherCols = 2; otherCols <= 4; otherCols++)
     5386-                                               {
     5387-                                                       ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, getDataTypeMatrix(otherCols, numCols /* rows */), precision);
     5388-                                                       inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(otherMatIn.dataType) + "_vertex").c_str(),        "Matrix-matrix case", matIn, otherMatIn, op, true));
     5389-                                                       inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(otherMatIn.dataType) + "_fragment").c_str(),      "Matrix-matrix case", matIn, otherMatIn, op, false));
     5390-                                               }
     5391-                                       }
     5392-                                       else if (isOperationComponentwiseMatrixMatrix(op))
     5393-                                       {
     5394-                                               // Component-wise.
     5395-                                               ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     5396-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_vertex").c_str(),         "Matrix-matrix case", matIn, otherMatIn, op, true));
     5397-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_fragment").c_str(),       "Matrix-matrix case", matIn, otherMatIn, op, false));
     5398-                                       }
     5399-
     5400-                                       if (isOperationVectorVector(op))
     5401-                                       {
     5402-                                               ShaderInput vec1In(inputType,                                                                                                                           getDataTypeFloatVec(numRows), precision);
     5403-                                               ShaderInput vec2In((inputType == INPUTTYPE_DYNAMIC) ? (INPUTTYPE_UNIFORM) : (inputType),        getDataTypeFloatVec(numCols), precision);
     5404-
     5405-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),          "Vector-vector case", vec1In, vec2In, op, true));
     5406-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),        "Vector-vector case", vec1In, vec2In, op, false));
     5407-                                       }
     5408-
     5409-                                       if ((isOperationUnaryAnyMatrix(op)) ||
     5410-                                               (isOperationUnarySymmetricMatrix(op) && numCols == numRows))
     5411-                                       {
     5412-                                               ShaderInput voidInput(INPUTTYPE_LAST, TYPE_LAST, PRECISION_LAST);
     5413-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),          "Matrix case", matIn, voidInput, op, true));
     5414-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),        "Matrix case", matIn, voidInput, op, false));
     5415-                                       }
     5416-
     5417-                                       if ((isOperationAssignmentAnyMatrix(op)) ||
     5418-                                               (isOperationAssignmentSymmetricMatrix(op) && numCols == numRows))
     5419-                                       {
     5420-                                               ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     5421-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),          "Matrix assignment case", matIn, otherMatIn, op, true));
     5422-                                               inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),        "Matrix assignment case", matIn, otherMatIn, op, false));
     5423-                                       }
     5424-                               }
     5425-                       }
     5426-               }
     5427-       }
     5428+    static const struct
     5429+    {
     5430+        const char*     name;
     5431+        const char*     desc;
     5432+        MatrixOp        op;
     5433+        bool            extendedInputTypeCases; // !< test with const and uniform types too
     5434+        bool            createInputTypeGroup;   // !< create group for input types
     5435+    } ops[] =
     5436+    {
     5437+        { "add",            "Matrix addition tests",                        OP_ADD,             true,   true    },
     5438+        { "sub",            "Matrix subtraction tests",                     OP_SUB,             true,   true    },
     5439+        { "mul",            "Matrix multiplication tests",                  OP_MUL,             true,   true    },
     5440+        { "div",            "Matrix division tests",                        OP_DIV,             true,   true    },
     5441+        { "matrixcompmult", "Matrix component-wise multiplication tests",   OP_COMP_MUL,        false,  true    },
     5442+        { "outerproduct",   "Matrix outerProduct() tests",                  OP_OUTER_PRODUCT,   false,  true    },
     5443+        { "transpose",      "Matrix transpose() tests",                     OP_TRANSPOSE,       false,  true    },
     5444+        { "determinant",    "Matrix determinant() tests",                   OP_DETERMINANT,     false,  true    },
     5445+        { "inverse",        "Matrix inverse() tests",                       OP_INVERSE,         false,  true    },
     5446+        { "unary_addition", "Matrix unary addition tests",                  OP_UNARY_PLUS,      false,  false   },
     5447+        { "negation",       "Matrix negation tests",                        OP_NEGATION,        false,  false   },
     5448+        { "pre_increment",  "Matrix prefix increment tests",                OP_PRE_INCREMENT,   false,  false   },
     5449+        { "pre_decrement",  "Matrix prefix decrement tests",                OP_PRE_DECREMENT,   false,  false   },
     5450+        { "post_increment", "Matrix postfix increment tests",               OP_POST_INCREMENT,  false,  false   },
     5451+        { "post_decrement", "Matrix postfix decrement tests",               OP_POST_DECREMENT,  false,  false   },
     5452+        { "add_assign",     "Matrix add into tests",                        OP_ADD_INTO,        false,  false   },
     5453+        { "sub_assign",     "Matrix subtract from tests",                   OP_SUBTRACT_FROM,   false,  false   },
     5454+        { "mul_assign",     "Matrix multiply into tests",                   OP_MULTIPLY_INTO,   false,  false   },
     5455+        { "div_assign",     "Matrix divide into tests",                     OP_DIVIDE_INTO,     false,  false   },
     5456+    };
     5457+
     5458+    struct InputTypeSpec
     5459+    {
     5460+        const char*     name;
     5461+        const char*     desc;
     5462+        InputType       type;
     5463+    };
     5464+    static const InputTypeSpec extendedInputTypes[] =
     5465+    {
     5466+        { "const",      "Constant matrix input",    INPUTTYPE_CONST     },
     5467+        { "uniform",    "Uniform matrix input",     INPUTTYPE_UNIFORM   },
     5468+        { "dynamic",    "Dynamic matrix input",     INPUTTYPE_DYNAMIC   }
     5469+    };
     5470+    static const InputTypeSpec reducedInputTypes[] =
     5471+    {
     5472+        { "dynamic",    "Dynamic matrix input",     INPUTTYPE_DYNAMIC   }
     5473+    };
     5474+
     5475+    static const DataType matrixTypes[] =
     5476+    {
     5477+        TYPE_FLOAT_MAT2,
     5478+        TYPE_FLOAT_MAT2X3,
     5479+        TYPE_FLOAT_MAT2X4,
     5480+        TYPE_FLOAT_MAT3X2,
     5481+        TYPE_FLOAT_MAT3,
     5482+        TYPE_FLOAT_MAT3X4,
     5483+        TYPE_FLOAT_MAT4X2,
     5484+        TYPE_FLOAT_MAT4X3,
     5485+        TYPE_FLOAT_MAT4
     5486+    };
     5487+
     5488+    static const Precision precisions[] =
     5489+    {
     5490+        PRECISION_LOWP,
     5491+        PRECISION_MEDIUMP,
     5492+        PRECISION_HIGHP
     5493+    };
     5494+
     5495+    for (int opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
     5496+    {
     5497+        const InputTypeSpec*    inTypeList      = (ops[opNdx].extendedInputTypeCases) ? (extendedInputTypes) : (reducedInputTypes);
     5498+        const int               inTypeListSize  = (ops[opNdx].extendedInputTypeCases) ? (DE_LENGTH_OF_ARRAY(extendedInputTypes)) : (DE_LENGTH_OF_ARRAY(reducedInputTypes));
     5499+        const MatrixOp          op              = ops[opNdx].op;
     5500+        tcu::TestCaseGroup*     opGroup         = new tcu::TestCaseGroup(m_testCtx, ops[opNdx].name, ops[opNdx].desc);
     5501+
     5502+        addChild(opGroup);
     5503+
     5504+        for (int inTypeNdx = 0; inTypeNdx < inTypeListSize; inTypeNdx++)
     5505+        {
     5506+            const InputType     inputType   = inTypeList[inTypeNdx].type;
     5507+            tcu::TestCaseGroup* inGroup;
     5508+
     5509+            if (ops[opNdx].createInputTypeGroup)
     5510+            {
     5511+                inGroup = new tcu::TestCaseGroup(m_testCtx, inTypeList[inTypeNdx].name, inTypeList[inTypeNdx].desc);
     5512+                opGroup->addChild(inGroup);
     5513+            }
     5514+            else
     5515+                inGroup = opGroup;
     5516+
     5517+            for (int matTypeNdx = 0; matTypeNdx < DE_LENGTH_OF_ARRAY(matrixTypes); matTypeNdx++)
     5518+            {
     5519+                DataType    matType     = matrixTypes[matTypeNdx];
     5520+                int         numCols     = getDataTypeMatrixNumColumns(matType);
     5521+                int         numRows     = getDataTypeMatrixNumRows(matType);
     5522+                const char* matTypeName = getDataTypeName(matType);
     5523+
     5524+                for (int precNdx = 0; precNdx < DE_LENGTH_OF_ARRAY(precisions); precNdx++)
     5525+                {
     5526+                    Precision   precision   = precisions[precNdx];
     5527+                    const char* precName    = getPrecisionName(precision);
     5528+                    string      baseName    = string(precName) + "_" + matTypeName + "_";
     5529+                    ShaderInput matIn       (inputType, matType, precision);
     5530+
     5531+                    if (isOperationMatrixScalar(op))
     5532+                    {
     5533+                        // Matrix-scalar \note For div cases we use uniform input.
     5534+                        ShaderInput scalarIn(op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, TYPE_FLOAT, precision);
     5535+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),      "Matrix-scalar case", matIn, scalarIn, op, true));
     5536+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),    "Matrix-scalar case", matIn, scalarIn, op, false));
     5537+                    }
     5538+
     5539+                    if (isOperationMatrixVector(op))
     5540+                    {
     5541+                        // Matrix-vector.
     5542+                        DataType    colVecType  = getDataTypeFloatVec(numCols);
     5543+                        ShaderInput colVecIn    (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, colVecType, precision);
     5544+
     5545+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(colVecType) + "_vertex").c_str(),     "Matrix-vector case", matIn, colVecIn, op, true));
     5546+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(colVecType) + "_fragment").c_str(),   "Matrix-vector case", matIn, colVecIn, op, false));
     5547+
     5548+                        // Vector-matrix.
     5549+                        DataType    rowVecType  = getDataTypeFloatVec(numRows);
     5550+                        ShaderInput rowVecIn    (op == OP_DIV ? INPUTTYPE_UNIFORM : INPUTTYPE_DYNAMIC, rowVecType, precision);
     5551+                        string      vecMatName  = string(precName) + "_" + getDataTypeName(rowVecType) + "_" + matTypeName;
     5552+
     5553+                        inGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_vertex").c_str(),     "Vector-matrix case", rowVecIn, matIn, op, true));
     5554+                        inGroup->addChild(new ShaderMatrixCase(m_context, (vecMatName + "_fragment").c_str(),   "Vector-matrix case", rowVecIn, matIn, op, false));
     5555+                    }
     5556+
     5557+                    if (isOperationArithmeticMatrixMatrix(op))
     5558+                    {
     5559+                        // Arithmetic matrix-matrix multiplication.
     5560+                        for (int otherCols = 2; otherCols <= 4; otherCols++)
     5561+                        {
     5562+                            ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, getDataTypeMatrix(otherCols, numCols /* rows */), precision);
     5563+                            inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(otherMatIn.dataType) + "_vertex").c_str(),    "Matrix-matrix case", matIn, otherMatIn, op, true));
     5564+                            inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + getDataTypeName(otherMatIn.dataType) + "_fragment").c_str(),  "Matrix-matrix case", matIn, otherMatIn, op, false));
     5565+                        }
     5566+                    }
     5567+                    else if (isOperationComponentwiseMatrixMatrix(op))
     5568+                    {
     5569+                        // Component-wise.
     5570+                        ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     5571+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_vertex").c_str(),     "Matrix-matrix case", matIn, otherMatIn, op, true));
     5572+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + matTypeName + "_fragment").c_str(),   "Matrix-matrix case", matIn, otherMatIn, op, false));
     5573+                    }
     5574+
     5575+                    if (isOperationVectorVector(op))
     5576+                    {
     5577+                        ShaderInput vec1In(inputType,                                                               getDataTypeFloatVec(numRows), precision);
     5578+                        ShaderInput vec2In((inputType == INPUTTYPE_DYNAMIC) ? (INPUTTYPE_UNIFORM) : (inputType),    getDataTypeFloatVec(numCols), precision);
     5579+
     5580+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),      "Vector-vector case", vec1In, vec2In, op, true));
     5581+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),    "Vector-vector case", vec1In, vec2In, op, false));
     5582+                    }
     5583+
     5584+                    if ((isOperationUnaryAnyMatrix(op)) ||
     5585+                        (isOperationUnarySymmetricMatrix(op) && numCols == numRows))
     5586+                    {
     5587+                        ShaderInput voidInput(INPUTTYPE_LAST, TYPE_LAST, PRECISION_LAST);
     5588+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),      "Matrix case", matIn, voidInput, op, true));
     5589+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),    "Matrix case", matIn, voidInput, op, false));
     5590+                    }
     5591+
     5592+                    if ((isOperationAssignmentAnyMatrix(op)) ||
     5593+                        (isOperationAssignmentSymmetricMatrix(op) && numCols == numRows))
     5594+                    {
     5595+                        ShaderInput otherMatIn(inputType == INPUTTYPE_DYNAMIC ? INPUTTYPE_UNIFORM : inputType, matType, precision);
     5596+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_vertex").c_str(),      "Matrix assignment case", matIn, otherMatIn, op, true));
     5597+                        inGroup->addChild(new ShaderMatrixCase(m_context, (baseName + "float_fragment").c_str(),    "Matrix assignment case", matIn, otherMatIn, op, false));
     5598+                    }
     5599+                }
     5600+            }
     5601+        }
     5602+    }
     5603 }
     5604 
     5605 } // Functional
     5606diff --git a/src/tests/deqp_support/qpTestLog.c b/src/tests/deqp_support/qpTestLog.c
     5607index 7252ae049..e3eaa9b14 100644
     5608--- a/src/tests/deqp_support/qpTestLog.c
     5609+++ b/src/tests/deqp_support/qpTestLog.c
     5610@@ -33,7 +33,7 @@
     5611 #include "deMutex.h"
     5612 
     5613 #if defined(QP_SUPPORT_PNG)
     5614-#      include <png.h>
     5615+#   include <png.h>
     5616 #endif
     5617 
     5618 #include <stdio.h>
     5619@@ -41,8 +41,8 @@
     5620 #include <stdarg.h>
     5621 
     5622 #if (DE_OS == DE_OS_WIN32)
     5623-#      include <windows.h>
     5624-#      include <io.h>
     5625+#   include <windows.h>
     5626+#   include <io.h>
     5627 #endif
     5628 
     5629 #if defined(DE_DEBUG)
     5630@@ -51,70 +51,70 @@
     5631 
     5632 typedef enum ContainerType_e
     5633 {
     5634-       CONTAINERTYPE_SECTION = 0,
     5635-       CONTAINERTYPE_IMAGESET,
     5636-       CONTAINERTYPE_EGLCONFIGSET,
     5637-       CONTAINERTYPE_SHADERPROGRAM,
     5638-       CONTAINERTYPE_SAMPLELIST,
     5639-       CONTAINERTYPE_SAMPLEINFO,
     5640-       CONTAINERTYPE_SAMPLE,
     5641+    CONTAINERTYPE_SECTION = 0,
     5642+    CONTAINERTYPE_IMAGESET,
     5643+    CONTAINERTYPE_EGLCONFIGSET,
     5644+    CONTAINERTYPE_SHADERPROGRAM,
     5645+    CONTAINERTYPE_SAMPLELIST,
     5646+    CONTAINERTYPE_SAMPLEINFO,
     5647+    CONTAINERTYPE_SAMPLE,
     5648 
     5649-       CONTAINERTYPE_LAST
     5650+    CONTAINERTYPE_LAST
     5651 } ContainerType;
     5652 
     5653 DE_INLINE deBool childContainersOk (ContainerType type)
     5654 {
     5655-       return type == CONTAINERTYPE_SECTION || type == CONTAINERTYPE_SAMPLELIST;
     5656+    return type == CONTAINERTYPE_SECTION || type == CONTAINERTYPE_SAMPLELIST;
     5657 }
     5658 
     5659 enum
     5660 {
     5661-       MAX_CONTAINER_STACK_DEPTH               = 32
     5662+    MAX_CONTAINER_STACK_DEPTH       = 32
     5663 };
     5664 
     5665 typedef struct ContainerStack_s
     5666 {
     5667-       int                             numElements;
     5668-       ContainerType   elements[MAX_CONTAINER_STACK_DEPTH];
     5669+    int             numElements;
     5670+    ContainerType   elements[MAX_CONTAINER_STACK_DEPTH];
     5671 } ContainerStack;
     5672 
     5673 DE_INLINE void ContainerStack_reset (ContainerStack* stack)
     5674 {
     5675-       deMemset(stack, 0, sizeof(ContainerStack));
     5676+    deMemset(stack, 0, sizeof(ContainerStack));
     5677 }
     5678 
     5679 DE_INLINE deBool ContainerStack_isEmpty (const ContainerStack* stack)
     5680 {
     5681-       return stack->numElements == 0;
     5682+    return stack->numElements == 0;
     5683 }
     5684 
     5685 DE_INLINE deBool ContainerStack_push (ContainerStack* stack, ContainerType type)
     5686 {
     5687-       if (stack->numElements == MAX_CONTAINER_STACK_DEPTH)
     5688-               return DE_FALSE;
     5689+    if (stack->numElements == MAX_CONTAINER_STACK_DEPTH)
     5690+        return DE_FALSE;
     5691 
     5692-       if (stack->numElements > 0 && !childContainersOk(stack->elements[stack->numElements-1]))
     5693-               return DE_FALSE;
     5694+    if (stack->numElements > 0 && !childContainersOk(stack->elements[stack->numElements-1]))
     5695+        return DE_FALSE;
     5696 
     5697-       stack->elements[stack->numElements]  = type;
     5698-       stack->numElements                                      += 1;
     5699+    stack->elements[stack->numElements]  = type;
     5700+    stack->numElements                  += 1;
     5701 
     5702-       return DE_TRUE;
     5703+    return DE_TRUE;
     5704 }
     5705 
     5706 DE_INLINE ContainerType ContainerStack_pop (ContainerStack* stack)
     5707 {
     5708-       DE_ASSERT(stack->numElements > 0);
     5709-       stack->numElements -= 1;
     5710-       return stack->elements[stack->numElements];
     5711+    DE_ASSERT(stack->numElements > 0);
     5712+    stack->numElements -= 1;
     5713+    return stack->elements[stack->numElements];
     5714 }
     5715 
     5716 DE_INLINE ContainerType ContainerStack_getTop (const ContainerStack* stack)
     5717 {
     5718-       if (stack->numElements > 0)
     5719-               return stack->elements[stack->numElements-1];
     5720-       else
     5721-               return CONTAINERTYPE_LAST;
     5722+    if (stack->numElements > 0)
     5723+        return stack->elements[stack->numElements-1];
     5724+    else
     5725+        return CONTAINERTYPE_LAST;
     5726 }
     5727 
     5728 #endif
     5729@@ -122,26 +122,26 @@ DE_INLINE ContainerType ContainerStack_getTop (const ContainerStack* stack)
     5730 /* qpTestLog instance */
     5731 struct qpTestLog_s
     5732 {
     5733-       deUint32                                flags;                          /*!< Logging flags.                                             */
     5734+    deUint32                flags;              /*!< Logging flags.                     */
     5735 
     5736-       deMutex                                 lock;                           /*!< Lock for mutable state below.              */
     5737+    deMutex                 lock;               /*!< Lock for mutable state below.      */
     5738 
     5739-       /* State protected by lock. */
     5740-       FILE*                                   outputFile;
     5741-       qpXmlWriter*                    writer;
     5742-       deBool                                  isSessionOpen;
     5743-       deBool                                  isCaseOpen;
     5744+    /* State protected by lock. */
     5745+    FILE*                   outputFile;
     5746+    qpXmlWriter*            writer;
     5747+    deBool                  isSessionOpen;
     5748+    deBool                  isCaseOpen;
     5749 
     5750 #if defined(DE_DEBUG)
     5751-       ContainerStack                  containerStack;         /*!< For container usage verification.  */
     5752+    ContainerStack          containerStack;     /*!< For container usage verification.  */
     5753 #endif
     5754 };
     5755 
     5756 /* Maps integer to string. */
     5757 typedef struct qpKeyStringMap_s
     5758 {
     5759-       int             key;
     5760-       char*   string;
     5761+    int     key;
     5762+    char*   string;
     5763 } qpKeyStringMap;
     5764 
     5765 static const char* LOG_FORMAT_VERSION = "0.3.4";
     5766@@ -149,32 +149,32 @@ static const char* LOG_FORMAT_VERSION = "0.3.4";
     5767 /* Mapping enum to above strings... */
     5768 static const qpKeyStringMap s_qpTestTypeMap[] =
     5769 {
     5770-       { QP_TEST_CASE_TYPE_SELF_VALIDATE,              "SelfValidate"  },
     5771-       { QP_TEST_CASE_TYPE_PERFORMANCE,                "Performance"   },
     5772-       { QP_TEST_CASE_TYPE_CAPABILITY,                 "Capability"    },
     5773-       { QP_TEST_CASE_TYPE_ACCURACY,                   "Accuracy"              },
     5774+    { QP_TEST_CASE_TYPE_SELF_VALIDATE,      "SelfValidate"  },
     5775+    { QP_TEST_CASE_TYPE_PERFORMANCE,        "Performance"   },
     5776+    { QP_TEST_CASE_TYPE_CAPABILITY,         "Capability"    },
     5777+    { QP_TEST_CASE_TYPE_ACCURACY,           "Accuracy"      },
     5778 
     5779-       { QP_TEST_CASE_TYPE_LAST,                               DE_NULL                 }
     5780+    { QP_TEST_CASE_TYPE_LAST,               DE_NULL         }
     5781 };
     5782 
     5783 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpTestTypeMap) == QP_TEST_CASE_TYPE_LAST + 1);
     5784 
     5785 static const qpKeyStringMap s_qpTestResultMap[] =
     5786 {
     5787-       { QP_TEST_RESULT_PASS,                                          "Pass"                                  },
     5788-       { QP_TEST_RESULT_FAIL,                                          "Fail"                                  },
     5789-       { QP_TEST_RESULT_QUALITY_WARNING,                       "QualityWarning"                },
     5790-       { QP_TEST_RESULT_COMPATIBILITY_WARNING,         "CompatibilityWarning"  },
     5791-       { QP_TEST_RESULT_PENDING,                                       "Pending"                               },      /* should not be needed here */
     5792-       { QP_TEST_RESULT_NOT_SUPPORTED,                         "NotSupported"                  },
     5793-       { QP_TEST_RESULT_RESOURCE_ERROR,                        "ResourceError"                 },
     5794-       { QP_TEST_RESULT_INTERNAL_ERROR,                        "InternalError"                 },
     5795-       { QP_TEST_RESULT_CRASH,                                         "Crash"                                 },
     5796-       { QP_TEST_RESULT_TIMEOUT,                                       "Timeout"                               },
     5797+    { QP_TEST_RESULT_PASS,                      "Pass"                  },
     5798+    { QP_TEST_RESULT_FAIL,                      "Fail"                  },
     5799+    { QP_TEST_RESULT_QUALITY_WARNING,           "QualityWarning"        },
     5800+    { QP_TEST_RESULT_COMPATIBILITY_WARNING,     "CompatibilityWarning"  },
     5801+    { QP_TEST_RESULT_PENDING,                   "Pending"               },  /* should not be needed here */
     5802+    { QP_TEST_RESULT_NOT_SUPPORTED,             "NotSupported"          },
     5803+    { QP_TEST_RESULT_RESOURCE_ERROR,            "ResourceError"         },
     5804+    { QP_TEST_RESULT_INTERNAL_ERROR,            "InternalError"         },
     5805+    { QP_TEST_RESULT_CRASH,                     "Crash"                 },
     5806+    { QP_TEST_RESULT_TIMEOUT,                   "Timeout"               },
     5807 
     5808-       /* Add new values here if needed, remember to update qpTestResult enumeration. */
     5809+    /* Add new values here if needed, remember to update qpTestResult enumeration. */
     5810 
     5811-       { QP_TEST_RESULT_LAST,                                          DE_NULL                                 }
     5812+    { QP_TEST_RESULT_LAST,                      DE_NULL                 }
     5813 };
     5814 
     5815 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpTestResultMap) == QP_TEST_RESULT_LAST + 1);
     5816@@ -183,13 +183,13 @@ DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpTestResultMap) == QP_TEST_RESULT_LAST +
     5817 
     5818 static const qpKeyStringMap s_qpTagMap[] =
     5819 {
     5820-       { QP_KEY_TAG_NONE,                      DE_NULL                 },
     5821-       { QP_KEY_TAG_PERFORMANCE,       "Performance"   },
     5822-       { QP_KEY_TAG_QUALITY,           "Quality"               },
     5823-       { QP_KEY_TAG_PRECISION,         "Precision"             },
     5824-       { QP_KEY_TAG_TIME,                      "Time"                  },
     5825+    { QP_KEY_TAG_NONE,          DE_NULL         },
     5826+    { QP_KEY_TAG_PERFORMANCE,   "Performance"   },
     5827+    { QP_KEY_TAG_QUALITY,       "Quality"       },
     5828+    { QP_KEY_TAG_PRECISION,     "Precision"     },
     5829+    { QP_KEY_TAG_TIME,          "Time"          },
     5830 
     5831-       { QP_KEY_TAG_LAST,                      DE_NULL                 }
     5832+    { QP_KEY_TAG_LAST,          DE_NULL         }
     5833 };
     5834 
     5835 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpTagMap) == QP_KEY_TAG_LAST + 1);
     5836@@ -198,10 +198,10 @@ DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpTagMap) == QP_KEY_TAG_LAST + 1);
     5837 
     5838 static const qpKeyStringMap s_qpSampleValueTagMap[] =
     5839 {
     5840-       { QP_SAMPLE_VALUE_TAG_PREDICTOR,        "Predictor"     },
     5841-       { QP_SAMPLE_VALUE_TAG_RESPONSE,         "Response"      },
     5842+    { QP_SAMPLE_VALUE_TAG_PREDICTOR,    "Predictor" },
     5843+    { QP_SAMPLE_VALUE_TAG_RESPONSE,     "Response"  },
     5844 
     5845-       { QP_SAMPLE_VALUE_TAG_LAST,                     DE_NULL         }
     5846+    { QP_SAMPLE_VALUE_TAG_LAST,         DE_NULL     }
     5847 };
     5848 
     5849 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpSampleValueTagMap) == QP_SAMPLE_VALUE_TAG_LAST + 1);
     5850@@ -210,12 +210,12 @@ DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpSampleValueTagMap) == QP_SAMPLE_VALUE_TA
     5851 
     5852 static const qpKeyStringMap s_qpImageCompressionModeMap[] =
     5853 {
     5854-       { QP_IMAGE_COMPRESSION_MODE_NONE,       "None"  },
     5855-       { QP_IMAGE_COMPRESSION_MODE_PNG,        "PNG"   },
     5856+    { QP_IMAGE_COMPRESSION_MODE_NONE,   "None"  },
     5857+    { QP_IMAGE_COMPRESSION_MODE_PNG,    "PNG"   },
     5858 
     5859-       { QP_IMAGE_COMPRESSION_MODE_BEST,       DE_NULL },      /* not allowed to be written! */
     5860+    { QP_IMAGE_COMPRESSION_MODE_BEST,   DE_NULL },  /* not allowed to be written! */
     5861 
     5862-       { QP_IMAGE_COMPRESSION_MODE_LAST,       DE_NULL }
     5863+    { QP_IMAGE_COMPRESSION_MODE_LAST,   DE_NULL }
     5864 };
     5865 
     5866 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpImageCompressionModeMap) == QP_IMAGE_COMPRESSION_MODE_LAST + 1);
     5867@@ -224,10 +224,10 @@ DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpImageCompressionModeMap) == QP_IMAGE_COM
     5868 
     5869 static const qpKeyStringMap s_qpImageFormatMap[] =
     5870 {
     5871-       { QP_IMAGE_FORMAT_RGB888,       "RGB888"        },
     5872-       { QP_IMAGE_FORMAT_RGBA8888,     "RGBA8888"      },
     5873+    { QP_IMAGE_FORMAT_RGB888,   "RGB888"    },
     5874+    { QP_IMAGE_FORMAT_RGBA8888, "RGBA8888"  },
     5875 
     5876-       { QP_IMAGE_FORMAT_LAST,         DE_NULL         }
     5877+    { QP_IMAGE_FORMAT_LAST,     DE_NULL     }
     5878 };
     5879 
     5880 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpImageFormatMap) == QP_IMAGE_FORMAT_LAST + 1);
     5881@@ -236,91 +236,91 @@ DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpImageFormatMap) == QP_IMAGE_FORMAT_LAST
     5882 
     5883 static const qpKeyStringMap s_qpShaderTypeMap[] =
     5884 {
     5885-       { QP_SHADER_TYPE_VERTEX,                        "VertexShader"                  },
     5886-       { QP_SHADER_TYPE_FRAGMENT,                      "FragmentShader"                },
     5887-       { QP_SHADER_TYPE_GEOMETRY,                      "GeometryShader"                },
     5888-       { QP_SHADER_TYPE_TESS_CONTROL,          "TessControlShader"             },
     5889-       { QP_SHADER_TYPE_TESS_EVALUATION,       "TessEvaluationShader"  },
     5890-       { QP_SHADER_TYPE_COMPUTE,                       "ComputeShader"                 },
     5891+    { QP_SHADER_TYPE_VERTEX,            "VertexShader"          },
     5892+    { QP_SHADER_TYPE_FRAGMENT,          "FragmentShader"        },
     5893+    { QP_SHADER_TYPE_GEOMETRY,          "GeometryShader"        },
     5894+    { QP_SHADER_TYPE_TESS_CONTROL,      "TessControlShader"     },
     5895+    { QP_SHADER_TYPE_TESS_EVALUATION,   "TessEvaluationShader"  },
     5896+    { QP_SHADER_TYPE_COMPUTE,           "ComputeShader"         },
     5897 
     5898-       { QP_SHADER_TYPE_LAST,                          DE_NULL                                 }
     5899+    { QP_SHADER_TYPE_LAST,              DE_NULL                 }
     5900 };
     5901 
     5902 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_qpShaderTypeMap) == QP_SHADER_TYPE_LAST + 1);
     5903 
     5904 static void qpTestLog_flushFile (qpTestLog* log)
     5905 {
     5906-       DE_ASSERT(log && log->outputFile);
     5907-       fflush(log->outputFile);
     5908+    DE_ASSERT(log && log->outputFile);
     5909+    fflush(log->outputFile);
     5910 #if (DE_OS == DE_OS_WIN32) && (DE_COMPILER == DE_COMPILER_MSC)
     5911-       /* \todo [petri] Is this really necessary? */
     5912-       FlushFileBuffers((HANDLE)_get_osfhandle(_fileno(log->outputFile)));
     5913+    /* \todo [petri] Is this really necessary? */
     5914+    FlushFileBuffers((HANDLE)_get_osfhandle(_fileno(log->outputFile)));
     5915 #endif
     5916 }
     5917 
     5918-#define QP_LOOKUP_STRING(KEYMAP, KEY)  qpLookupString(KEYMAP, DE_LENGTH_OF_ARRAY(KEYMAP), (int)(KEY))
     5919+#define QP_LOOKUP_STRING(KEYMAP, KEY)   qpLookupString(KEYMAP, DE_LENGTH_OF_ARRAY(KEYMAP), (int)(KEY))
     5920 
     5921 static const char* qpLookupString (const qpKeyStringMap* keyMap, int keyMapSize, int key)
     5922 {
     5923-       DE_ASSERT(keyMap);
     5924-       DE_ASSERT(deInBounds32(key, 0, keyMapSize));
     5925-       DE_ASSERT(keyMap[key].key == key);
     5926-       DE_UNREF(keyMapSize); /* for asserting only */
     5927-       return keyMap[key].string;
     5928+    DE_ASSERT(keyMap);
     5929+    DE_ASSERT(deInBounds32(key, 0, keyMapSize));
     5930+    DE_ASSERT(keyMap[key].key == key);
     5931+    DE_UNREF(keyMapSize); /* for asserting only */
     5932+    return keyMap[key].string;
     5933 }
     5934 
     5935 DE_INLINE void int32ToString (int val, char buf[32])
     5936 {
     5937-       deSprintf(&buf[0], 32, "%d", val);
     5938+    deSprintf(&buf[0], 32, "%d", val);
     5939 }
     5940 
     5941 DE_INLINE void int64ToString (deInt64 val, char buf[32])
     5942 {
     5943-       deSprintf(&buf[0], 32, "%lld", (long long int)val);
     5944+    deSprintf(&buf[0], 32, "%lld", (long long int)val);
     5945 }
     5946 
     5947 DE_INLINE void floatToString (float value, char* buf, size_t bufSize)
     5948 {
     5949-       deSprintf(buf, bufSize, "%f", value);
     5950+    deSprintf(buf, bufSize, "%f", value);
     5951 }
     5952 
     5953 DE_INLINE void doubleToString (double value, char* buf, size_t bufSize)
     5954 {
     5955-       deSprintf(buf, bufSize, "%f", value);
     5956+    deSprintf(buf, bufSize, "%f", value);
     5957 }
     5958 
     5959 static deBool beginSession (qpTestLog* log)
     5960 {
     5961-       DE_ASSERT(log && !log->isSessionOpen);
     5962+    DE_ASSERT(log && !log->isSessionOpen);
     5963 
     5964-       /* Write session info. */
     5965-       fprintf(log->outputFile, "#sessionInfo releaseName %s\n", qpGetReleaseName());
     5966-       fprintf(log->outputFile, "#sessionInfo releaseId 0x%08x\n", qpGetReleaseId());
     5967-       fprintf(log->outputFile, "#sessionInfo targetName \"%s\"\n", qpGetTargetName());
     5968+    /* Write session info. */
     5969+    fprintf(log->outputFile, "#sessionInfo releaseName %s\n", qpGetReleaseName());
     5970+    fprintf(log->outputFile, "#sessionInfo releaseId 0x%08x\n", qpGetReleaseId());
     5971+    fprintf(log->outputFile, "#sessionInfo targetName \"%s\"\n", qpGetTargetName());
     5972 
     5973     /* Write out #beginSession. */
     5974-       fprintf(log->outputFile, "#beginSession\n");
     5975-       qpTestLog_flushFile(log);
     5976+    fprintf(log->outputFile, "#beginSession\n");
     5977+    qpTestLog_flushFile(log);
     5978 
     5979-       log->isSessionOpen = DE_TRUE;
     5980+    log->isSessionOpen = DE_TRUE;
     5981 
     5982-       return DE_TRUE;
     5983+    return DE_TRUE;
     5984 }
     5985 
     5986 static deBool endSession (qpTestLog* log)
     5987 {
     5988-       DE_ASSERT(log && log->isSessionOpen);
     5989+    DE_ASSERT(log && log->isSessionOpen);
     5990 
     5991     /* Make sure xml is flushed. */
     5992     qpXmlWriter_flush(log->writer);
     5993 
     5994     /* Write out #endSession. */
     5995-       fprintf(log->outputFile, "\n#endSession\n");
     5996-       qpTestLog_flushFile(log);
     5997+    fprintf(log->outputFile, "\n#endSession\n");
     5998+    qpTestLog_flushFile(log);
     5999 
     6000-       log->isSessionOpen = DE_FALSE;
     6001+    log->isSessionOpen = DE_FALSE;
     6002 
     6003-       return DE_TRUE;
     6004+    return DE_TRUE;
     6005 }
     6006 
     6007 /*--------------------------------------------------------------------*//*!
     6008@@ -330,117 +330,117 @@ static deBool endSession (qpTestLog* log)
     6009  *//*--------------------------------------------------------------------*/
     6010 qpTestLog* qpTestLog_createFileLog (const char* fileName, deUint32 flags)
     6011 {
     6012-       qpTestLog* log = (qpTestLog*)deCalloc(sizeof(qpTestLog));
     6013-       if (!log)
     6014-               return DE_NULL;
     6015+    qpTestLog* log = (qpTestLog*)deCalloc(sizeof(qpTestLog));
     6016+    if (!log)
     6017+        return DE_NULL;
     6018 
     6019-       DE_ASSERT(fileName && fileName[0]); /* must have filename. */
     6020+    DE_ASSERT(fileName && fileName[0]); /* must have filename. */
     6021 
     6022 #if defined(DE_DEBUG)
     6023-       ContainerStack_reset(&log->containerStack);
     6024+    ContainerStack_reset(&log->containerStack);
     6025 #endif
     6026 
     6027-       qpPrintf("Writing test log into %s\n", fileName);
     6028-
     6029-       /* Create output file. */
     6030-       log->outputFile = fopen(fileName, "wb");
     6031-       if (!log->outputFile)
     6032-       {
     6033-               qpPrintf("ERROR: Unable to open test log output file '%s'.\n", fileName);
     6034-               qpTestLog_destroy(log);
     6035-               return DE_NULL;
     6036-       }
     6037-
     6038-       log->flags                      = flags;
     6039-       log->writer                     = qpXmlWriter_createFileWriter(log->outputFile, 0, !(flags & QP_TEST_LOG_NO_FLUSH));
     6040-       log->lock                       = deMutex_create(DE_NULL);
     6041-       log->isSessionOpen      = DE_FALSE;
     6042-       log->isCaseOpen         = DE_FALSE;
     6043-
     6044-       if (!log->writer)
     6045-       {
     6046-               qpPrintf("ERROR: Unable to create output XML writer to file '%s'.\n", fileName);
     6047-               qpTestLog_destroy(log);
     6048-               return DE_NULL;
     6049-       }
     6050-
     6051-       if (!log->lock)
     6052-       {
     6053-               qpPrintf("ERROR: Unable to create mutex.\n");
     6054-               qpTestLog_destroy(log);
     6055-               return DE_NULL;
     6056-       }
     6057-
     6058-       beginSession(log);
     6059-
     6060-       return log;
     6061+    qpPrintf("Writing test log into %s\n", fileName);
     6062+
     6063+    /* Create output file. */
     6064+    log->outputFile = fopen(fileName, "wb");
     6065+    if (!log->outputFile)
     6066+    {
     6067+        qpPrintf("ERROR: Unable to open test log output file '%s'.\n", fileName);
     6068+        qpTestLog_destroy(log);
     6069+        return DE_NULL;
     6070+    }
     6071+
     6072+    log->flags          = flags;
     6073+    log->writer         = qpXmlWriter_createFileWriter(log->outputFile, 0, !(flags & QP_TEST_LOG_NO_FLUSH));
     6074+    log->lock           = deMutex_create(DE_NULL);
     6075+    log->isSessionOpen  = DE_FALSE;
     6076+    log->isCaseOpen     = DE_FALSE;
     6077+
     6078+    if (!log->writer)
     6079+    {
     6080+        qpPrintf("ERROR: Unable to create output XML writer to file '%s'.\n", fileName);
     6081+        qpTestLog_destroy(log);
     6082+        return DE_NULL;
     6083+    }
     6084+
     6085+    if (!log->lock)
     6086+    {
     6087+        qpPrintf("ERROR: Unable to create mutex.\n");
     6088+        qpTestLog_destroy(log);
     6089+        return DE_NULL;
     6090+    }
     6091+
     6092+    beginSession(log);
     6093+
     6094+    return log;
     6095 }
     6096 
     6097 /*--------------------------------------------------------------------*//*!
     6098  * \brief Destroy a logger instance
     6099- * \param a    qpTestLog instance
     6100+ * \param a qpTestLog instance
     6101  *//*--------------------------------------------------------------------*/
     6102 void qpTestLog_destroy (qpTestLog* log)
     6103 {
     6104-       DE_ASSERT(log);
     6105+    DE_ASSERT(log);
     6106 
     6107-       if (log->isSessionOpen)
     6108-               endSession(log);
     6109+    if (log->isSessionOpen)
     6110+        endSession(log);
     6111 
     6112-       if (log->writer)
     6113-               qpXmlWriter_destroy(log->writer);
     6114+    if (log->writer)
     6115+        qpXmlWriter_destroy(log->writer);
     6116 
     6117-       if (log->outputFile)
     6118-               fclose(log->outputFile);
     6119+    if (log->outputFile)
     6120+        fclose(log->outputFile);
     6121 
     6122-       if (log->lock)
     6123-               deMutex_destroy(log->lock);
     6124+    if (log->lock)
     6125+        deMutex_destroy(log->lock);
     6126 
     6127-       deFree(log);
     6128+    deFree(log);
     6129 }
     6130 
     6131 /*--------------------------------------------------------------------*//*!
     6132  * \brief Log start of test case
     6133  * \param log qpTestLog instance
     6134- * \param testCasePath Full test case path (as seen in Candy).
     6135- * \param testCaseType Test case type
     6136+ * \param testCasePath  Full test case path (as seen in Candy).
     6137+ * \param testCaseType  Test case type
     6138  * \return true if ok, false otherwise
     6139  *//*--------------------------------------------------------------------*/
     6140 deBool qpTestLog_startCase (qpTestLog* log, const char* testCasePath, qpTestCaseType testCaseType)
     6141 {
     6142-       const char*             typeStr                         = QP_LOOKUP_STRING(s_qpTestTypeMap, testCaseType);
     6143-       int                             numResultAttribs        = 0;
     6144-       qpXmlAttribute  resultAttribs[8];
     6145+    const char*     typeStr             = QP_LOOKUP_STRING(s_qpTestTypeMap, testCaseType);
     6146+    int             numResultAttribs    = 0;
     6147+    qpXmlAttribute  resultAttribs[8];
     6148 
     6149-       DE_ASSERT(log && testCasePath && (testCasePath[0] != 0));
     6150-       deMutex_lock(log->lock);
     6151+    DE_ASSERT(log && testCasePath && (testCasePath[0] != 0));
     6152+    deMutex_lock(log->lock);
     6153 
     6154-       DE_ASSERT(!log->isCaseOpen);
     6155-       DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
     6156+    DE_ASSERT(!log->isCaseOpen);
     6157+    DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
     6158 
     6159-       /* Flush XML and write out #beginTestCaseResult. */
     6160-       qpXmlWriter_flush(log->writer);
     6161-       fprintf(log->outputFile, "\n#beginTestCaseResult %s\n", testCasePath);
     6162-       if (!(log->flags & QP_TEST_LOG_NO_FLUSH))
     6163-               qpTestLog_flushFile(log);
     6164-
     6165-       log->isCaseOpen = DE_TRUE;
     6166-
     6167-       /* Fill in attributes. */
     6168-       resultAttribs[numResultAttribs++] = qpSetStringAttrib("Version", LOG_FORMAT_VERSION);
     6169-       resultAttribs[numResultAttribs++] = qpSetStringAttrib("CasePath", testCasePath);
     6170-       resultAttribs[numResultAttribs++] = qpSetStringAttrib("CaseType", typeStr);
     6171-
     6172-       if (!qpXmlWriter_startDocument(log->writer) ||
     6173-               !qpXmlWriter_startElement(log->writer, "TestCaseResult", numResultAttribs, resultAttribs))
     6174-       {
     6175-               qpPrintf("qpTestLog_startCase(): Writing XML failed\n");
     6176-               deMutex_unlock(log->lock);
     6177-               return DE_FALSE;
     6178-       }
     6179-
     6180-       deMutex_unlock(log->lock);
     6181-       return DE_TRUE;
     6182+    /* Flush XML and write out #beginTestCaseResult. */
     6183+    qpXmlWriter_flush(log->writer);
     6184+    fprintf(log->outputFile, "\n#beginTestCaseResult %s\n", testCasePath);
     6185+    if (!(log->flags & QP_TEST_LOG_NO_FLUSH))
     6186+        qpTestLog_flushFile(log);
     6187+
     6188+    log->isCaseOpen = DE_TRUE;
     6189+
     6190+    /* Fill in attributes. */
     6191+    resultAttribs[numResultAttribs++] = qpSetStringAttrib("Version", LOG_FORMAT_VERSION);
     6192+    resultAttribs[numResultAttribs++] = qpSetStringAttrib("CasePath", testCasePath);
     6193+    resultAttribs[numResultAttribs++] = qpSetStringAttrib("CaseType", typeStr);
     6194+
     6195+    if (!qpXmlWriter_startDocument(log->writer) ||
     6196+        !qpXmlWriter_startElement(log->writer, "TestCaseResult", numResultAttribs, resultAttribs))
     6197+    {
     6198+        qpPrintf("qpTestLog_startCase(): Writing XML failed\n");
     6199+        deMutex_unlock(log->lock);
     6200+        return DE_FALSE;
     6201+    }
     6202+
     6203+    deMutex_unlock(log->lock);
     6204+    return DE_TRUE;
     6205 }
     6206 
     6207 /*--------------------------------------------------------------------*//*!
     6208@@ -452,600 +452,600 @@ deBool qpTestLog_startCase (qpTestLog* log, const char* testCasePath, qpTestCase
     6209  *//*--------------------------------------------------------------------*/
     6210 deBool qpTestLog_endCase (qpTestLog* log, qpTestResult result, const char* resultDetails)
     6211 {
     6212-       const char*             statusStr               = QP_LOOKUP_STRING(s_qpTestResultMap, result);
     6213-       qpXmlAttribute  statusAttrib    = qpSetStringAttrib("StatusCode", statusStr);
     6214-
     6215-       deMutex_lock(log->lock);
     6216-
     6217-       DE_ASSERT(log->isCaseOpen);
     6218-       DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
     6219-
     6220-       /* <Result StatusCode="Pass">Result details</Result>
     6221-        * </TestCaseResult>
     6222-        */
     6223-       if (!qpXmlWriter_startElement(log->writer, "Result", 1, &statusAttrib) ||
     6224-               (resultDetails && !qpXmlWriter_writeString(log->writer, resultDetails)) ||
     6225-               !qpXmlWriter_endElement(log->writer, "Result") ||
     6226-               !qpXmlWriter_endElement(log->writer, "TestCaseResult") ||
     6227-               !qpXmlWriter_endDocument(log->writer))          /* Close any XML elements still open */
     6228-       {
     6229-               qpPrintf("qpTestLog_endCase(): Writing XML failed\n");
     6230-               deMutex_unlock(log->lock);
     6231-               return DE_FALSE;
     6232-       }
     6233-
     6234-       /* Flush XML and write #endTestCaseResult. */
     6235-       qpXmlWriter_flush(log->writer);
     6236-       fprintf(log->outputFile, "\n#endTestCaseResult\n");
     6237-       if (!(log->flags & QP_TEST_LOG_NO_FLUSH))
     6238-               qpTestLog_flushFile(log);
     6239-
     6240-       log->isCaseOpen = DE_FALSE;
     6241-
     6242-       deMutex_unlock(log->lock);
     6243-       return DE_TRUE;
     6244+    const char*     statusStr       = QP_LOOKUP_STRING(s_qpTestResultMap, result);
     6245+    qpXmlAttribute  statusAttrib    = qpSetStringAttrib("StatusCode", statusStr);
     6246+
     6247+    deMutex_lock(log->lock);
     6248+
     6249+    DE_ASSERT(log->isCaseOpen);
     6250+    DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
     6251+
     6252+    /* <Result StatusCode="Pass">Result details</Result>
     6253+     * </TestCaseResult>
     6254+     */
     6255+    if (!qpXmlWriter_startElement(log->writer, "Result", 1, &statusAttrib) ||
     6256+        (resultDetails && !qpXmlWriter_writeString(log->writer, resultDetails)) ||
     6257+        !qpXmlWriter_endElement(log->writer, "Result") ||
     6258+        !qpXmlWriter_endElement(log->writer, "TestCaseResult") ||
     6259+        !qpXmlWriter_endDocument(log->writer))      /* Close any XML elements still open */
     6260+    {
     6261+        qpPrintf("qpTestLog_endCase(): Writing XML failed\n");
     6262+        deMutex_unlock(log->lock);
     6263+        return DE_FALSE;
     6264+    }
     6265+
     6266+    /* Flush XML and write #endTestCaseResult. */
     6267+    qpXmlWriter_flush(log->writer);
     6268+    fprintf(log->outputFile, "\n#endTestCaseResult\n");
     6269+    if (!(log->flags & QP_TEST_LOG_NO_FLUSH))
     6270+        qpTestLog_flushFile(log);
     6271+
     6272+    log->isCaseOpen = DE_FALSE;
     6273+
     6274+    deMutex_unlock(log->lock);
     6275+    return DE_TRUE;
     6276 }
     6277 
     6278 /*--------------------------------------------------------------------*//*!
     6279  * \brief Abrupt termination of logging.
     6280- * \param log          qpTestLog instance
     6281- * \param result       Result code, only Crash and Timeout are allowed.
     6282+ * \param log       qpTestLog instance
     6283+ * \param result    Result code, only Crash and Timeout are allowed.
     6284  * \return true if ok, false otherwise
     6285  *//*--------------------------------------------------------------------*/
     6286 deBool qpTestLog_terminateCase (qpTestLog* log, qpTestResult result)
     6287 {
     6288-       const char* resultStr = QP_LOOKUP_STRING(s_qpTestResultMap, result);
     6289+    const char* resultStr = QP_LOOKUP_STRING(s_qpTestResultMap, result);
     6290 
     6291-       DE_ASSERT(log);
     6292-       DE_ASSERT(result == QP_TEST_RESULT_CRASH || result == QP_TEST_RESULT_TIMEOUT);
     6293+    DE_ASSERT(log);
     6294+    DE_ASSERT(result == QP_TEST_RESULT_CRASH || result == QP_TEST_RESULT_TIMEOUT);
     6295 
     6296-       deMutex_lock(log->lock);
     6297+    deMutex_lock(log->lock);
     6298 
     6299-       if (!log->isCaseOpen)
     6300-       {
     6301-               deMutex_unlock(log->lock);
     6302-               return DE_FALSE; /* Soft error. This is called from error handler. */
     6303-       }
     6304+    if (!log->isCaseOpen)
     6305+    {
     6306+        deMutex_unlock(log->lock);
     6307+        return DE_FALSE; /* Soft error. This is called from error handler. */
     6308+    }
     6309 
     6310-       /* Flush XML and write #terminateTestCaseResult. */
     6311-       qpXmlWriter_flush(log->writer);
     6312-       fprintf(log->outputFile, "\n#terminateTestCaseResult %s\n", resultStr);
     6313-       qpTestLog_flushFile(log);
     6314+    /* Flush XML and write #terminateTestCaseResult. */
     6315+    qpXmlWriter_flush(log->writer);
     6316+    fprintf(log->outputFile, "\n#terminateTestCaseResult %s\n", resultStr);
     6317+    qpTestLog_flushFile(log);
     6318 
     6319-       log->isCaseOpen = DE_FALSE;
     6320+    log->isCaseOpen = DE_FALSE;
     6321 
     6322 #if defined(DE_DEBUG)
     6323-       ContainerStack_reset(&log->containerStack);
     6324+    ContainerStack_reset(&log->containerStack);
     6325 #endif
     6326 
     6327-       deMutex_unlock(log->lock);
     6328-       return DE_TRUE;
     6329+    deMutex_unlock(log->lock);
     6330+    return DE_TRUE;
     6331 }
     6332 
     6333 static deBool qpTestLog_writeKeyValuePair (qpTestLog* log, const char* elementName, const char* name, const char* description, const char* unit, qpKeyValueTag tag, const char* text)
     6334 {
     6335-       const char*             tagString = QP_LOOKUP_STRING(s_qpTagMap, tag);
     6336-       qpXmlAttribute  attribs[8];
     6337-       int                             numAttribs = 0;
     6338-
     6339-       DE_ASSERT(log && elementName && text);
     6340-       deMutex_lock(log->lock);
     6341-
     6342-       /* Fill in attributes. */
     6343-       if (name)                       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     6344-       if (description)        attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     6345-       if (tagString)          attribs[numAttribs++] = qpSetStringAttrib("Tag", tagString);
     6346-       if (unit)                       attribs[numAttribs++] = qpSetStringAttrib("Unit", unit);
     6347-
     6348-       if (!qpXmlWriter_startElement(log->writer, elementName, numAttribs, attribs) ||
     6349-               !qpXmlWriter_writeString(log->writer, text) ||
     6350-               !qpXmlWriter_endElement(log->writer, elementName))
     6351-       {
     6352-               qpPrintf("qpTestLog_writeKeyValuePair(): Writing XML failed\n");
     6353-               deMutex_unlock(log->lock);
     6354-               return DE_FALSE;
     6355-       }
     6356-
     6357-       deMutex_unlock(log->lock);
     6358-       return DE_TRUE;
     6359+    const char*     tagString = QP_LOOKUP_STRING(s_qpTagMap, tag);
     6360+    qpXmlAttribute  attribs[8];
     6361+    int             numAttribs = 0;
     6362+
     6363+    DE_ASSERT(log && elementName && text);
     6364+    deMutex_lock(log->lock);
     6365+
     6366+    /* Fill in attributes. */
     6367+    if (name)           attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     6368+    if (description)    attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     6369+    if (tagString)      attribs[numAttribs++] = qpSetStringAttrib("Tag", tagString);
     6370+    if (unit)           attribs[numAttribs++] = qpSetStringAttrib("Unit", unit);
     6371+
     6372+    if (!qpXmlWriter_startElement(log->writer, elementName, numAttribs, attribs) ||
     6373+        !qpXmlWriter_writeString(log->writer, text) ||
     6374+        !qpXmlWriter_endElement(log->writer, elementName))
     6375+    {
     6376+        qpPrintf("qpTestLog_writeKeyValuePair(): Writing XML failed\n");
     6377+        deMutex_unlock(log->lock);
     6378+        return DE_FALSE;
     6379+    }
     6380+
     6381+    deMutex_unlock(log->lock);
     6382+    return DE_TRUE;
     6383 }
     6384 
     6385 /*--------------------------------------------------------------------*//*!
     6386  * \brief Write a message to output log
     6387- * \param log          qpTestLog instance
     6388- * \param format       Format string of message
     6389- * \param ...          Parameters for message
     6390+ * \param log       qpTestLog instance
     6391+ * \param format    Format string of message
     6392+ * \param ...       Parameters for message
     6393  * \return true if ok, false otherwise
     6394  *//*--------------------------------------------------------------------*/
     6395 deBool qpTestLog_writeMessage (qpTestLog* log, const char* format, ...)
     6396 {
     6397-       char    buffer[1024];
     6398-       va_list args;
     6399+    char    buffer[1024];
     6400+    va_list args;
     6401 
     6402-       /* \todo [petri] Handle buffer overflows! */
     6403+    /* \todo [petri] Handle buffer overflows! */
     6404 
     6405-       va_start(args, format);
     6406-       buffer[DE_LENGTH_OF_ARRAY(buffer) - 1] = 0;
     6407-       vsnprintf(buffer, sizeof(buffer), format, args);
     6408-       va_end(args);
     6409+    va_start(args, format);
     6410+    buffer[DE_LENGTH_OF_ARRAY(buffer) - 1] = 0;
     6411+    vsnprintf(buffer, sizeof(buffer), format, args);
     6412+    va_end(args);
     6413 
     6414-       /* <Text>text</Text> */
     6415-       return qpTestLog_writeKeyValuePair(log, "Text", DE_NULL, DE_NULL, DE_NULL, QP_KEY_TAG_LAST, buffer);
     6416+    /* <Text>text</Text> */
     6417+    return qpTestLog_writeKeyValuePair(log, "Text", DE_NULL, DE_NULL, DE_NULL, QP_KEY_TAG_LAST, buffer);
     6418 }
     6419 
     6420 /*--------------------------------------------------------------------*//*!
     6421  * \brief Write key-value-pair into log
     6422- * \param log                  qpTestLog instance
     6423- * \param name                 Unique identifier for entry
     6424- * \param description  Human readable description
     6425- * \param tag                  Optional tag
     6426- * \param value                        Value of the key-value-pair
     6427+ * \param log           qpTestLog instance
     6428+ * \param name          Unique identifier for entry
     6429+ * \param description   Human readable description
     6430+ * \param tag           Optional tag
     6431+ * \param value         Value of the key-value-pair
     6432  * \return true if ok, false otherwise
     6433  *//*--------------------------------------------------------------------*/
     6434 deBool qpTestLog_writeText (qpTestLog* log, const char* name, const char* description, qpKeyValueTag tag, const char* text)
     6435 {
     6436-       /* <Text Name="name" Description="description" Tag="tag">text</Text> */
     6437-       return qpTestLog_writeKeyValuePair(log, "Text", name, description, DE_NULL, tag, text);
     6438+    /* <Text Name="name" Description="description" Tag="tag">text</Text> */
     6439+    return qpTestLog_writeKeyValuePair(log, "Text", name, description, DE_NULL, tag, text);
     6440 }
     6441 
     6442 /*--------------------------------------------------------------------*//*!
     6443  * \brief Write key-value-pair into log
     6444- * \param log                  qpTestLog instance
     6445- * \param name                 Unique identifier for entry
     6446- * \param description  Human readable description
     6447- * \param tag                  Optional tag
     6448- * \param value                        Value of the key-value-pair
     6449+ * \param log           qpTestLog instance
     6450+ * \param name          Unique identifier for entry
     6451+ * \param description   Human readable description
     6452+ * \param tag           Optional tag
     6453+ * \param value         Value of the key-value-pair
     6454  * \return true if ok, false otherwise
     6455  *//*--------------------------------------------------------------------*/
     6456 deBool qpTestLog_writeInteger (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, deInt64 value)
     6457 {
     6458-       char tmpString[64];
     6459-       int64ToString(value, tmpString);
     6460+    char tmpString[64];
     6461+    int64ToString(value, tmpString);
     6462 
     6463-       /* <Number Name="name" Description="description" Tag="Performance">15</Number> */
     6464-       return qpTestLog_writeKeyValuePair(log, "Number", name, description, unit, tag, tmpString);
     6465+    /* <Number Name="name" Description="description" Tag="Performance">15</Number> */
     6466+    return qpTestLog_writeKeyValuePair(log, "Number", name, description, unit, tag, tmpString);
     6467 }
     6468 
     6469 /*--------------------------------------------------------------------*//*!
     6470  * \brief Write key-value-pair into log
     6471- * \param log                  qpTestLog instance
     6472- * \param name                 Unique identifier for entry
     6473- * \param description  Human readable description
     6474- * \param tag                  Optional tag
     6475- * \param value                        Value of the key-value-pair
     6476+ * \param log           qpTestLog instance
     6477+ * \param name          Unique identifier for entry
     6478+ * \param description   Human readable description
     6479+ * \param tag           Optional tag
     6480+ * \param value         Value of the key-value-pair
     6481  * \return true if ok, false otherwise
     6482  *//*--------------------------------------------------------------------*/
     6483 deBool qpTestLog_writeFloat (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, float value)
     6484 {
     6485-       char tmpString[64];
     6486-       floatToString(value, tmpString, sizeof(tmpString));
     6487+    char tmpString[64];
     6488+    floatToString(value, tmpString, sizeof(tmpString));
     6489 
     6490-       /* <Number Name="name" Description="description" Tag="Performance">15</Number> */
     6491-       return qpTestLog_writeKeyValuePair(log, "Number", name, description, unit, tag, tmpString);
     6492+    /* <Number Name="name" Description="description" Tag="Performance">15</Number> */
     6493+    return qpTestLog_writeKeyValuePair(log, "Number", name, description, unit, tag, tmpString);
     6494 }
     6495 
     6496 typedef struct Buffer_s
     6497 {
     6498-       size_t          capacity;
     6499-       size_t          size;
     6500-       deUint8*        data;
     6501+    size_t      capacity;
     6502+    size_t      size;
     6503+    deUint8*    data;
     6504 } Buffer;
     6505 
     6506 void Buffer_init (Buffer* buffer)
     6507 {
     6508-       buffer->capacity        = 0;
     6509-       buffer->size            = 0;
     6510-       buffer->data            = DE_NULL;
     6511+    buffer->capacity    = 0;
     6512+    buffer->size        = 0;
     6513+    buffer->data        = DE_NULL;
     6514 }
     6515 
     6516 void Buffer_deinit (Buffer* buffer)
     6517 {
     6518-       deFree(buffer->data);
     6519-       Buffer_init(buffer);
     6520+    deFree(buffer->data);
     6521+    Buffer_init(buffer);
     6522 }
     6523 
     6524 deBool Buffer_resize (Buffer* buffer, size_t newSize)
     6525 {
     6526-       /* Grow buffer if necessary. */
     6527-       if (newSize > buffer->capacity)
     6528-       {
     6529-               size_t          newCapacity     = (size_t)deAlign32(deMax32(2*(int)buffer->capacity, (int)newSize), 512);
     6530-               deUint8*        newData         = (deUint8*)deMalloc(newCapacity);
     6531-               if (!newData)
     6532-                       return DE_FALSE;
     6533-
     6534-               memcpy(newData, buffer->data, buffer->size);
     6535-               deFree(buffer->data);
     6536-               buffer->data            = newData;
     6537-               buffer->capacity        = newCapacity;
     6538-       }
     6539-
     6540-       buffer->size = newSize;
     6541-       return DE_TRUE;
     6542+    /* Grow buffer if necessary. */
     6543+    if (newSize > buffer->capacity)
     6544+    {
     6545+        size_t      newCapacity = (size_t)deAlign32(deMax32(2*(int)buffer->capacity, (int)newSize), 512);
     6546+        deUint8*    newData     = (deUint8*)deMalloc(newCapacity);
     6547+        if (!newData)
     6548+            return DE_FALSE;
     6549+
     6550+        memcpy(newData, buffer->data, buffer->size);
     6551+        deFree(buffer->data);
     6552+        buffer->data        = newData;
     6553+        buffer->capacity    = newCapacity;
     6554+    }
     6555+
     6556+    buffer->size = newSize;
     6557+    return DE_TRUE;
     6558 }
     6559 
     6560 deBool Buffer_append (Buffer* buffer, const deUint8* data, size_t numBytes)
     6561 {
     6562-       size_t offset = buffer->size;
     6563+    size_t offset = buffer->size;
     6564 
     6565-       if (!Buffer_resize(buffer, buffer->size + numBytes))
     6566-               return DE_FALSE;
     6567+    if (!Buffer_resize(buffer, buffer->size + numBytes))
     6568+        return DE_FALSE;
     6569 
     6570-       /* Append bytes. */
     6571-       memcpy(&buffer->data[offset], data, numBytes);
     6572-       return DE_TRUE;
     6573+    /* Append bytes. */
     6574+    memcpy(&buffer->data[offset], data, numBytes);
     6575+    return DE_TRUE;
     6576 }
     6577 
     6578 #if defined(QP_SUPPORT_PNG)
     6579 void pngWriteData (png_structp png, png_bytep dataPtr, png_size_t numBytes)
     6580 {
     6581-       Buffer* buffer = (Buffer*)png_get_io_ptr(png);
     6582-       if (!Buffer_append(buffer, (const deUint8*)dataPtr, numBytes))
     6583-               png_error(png, "unable to resize PNG write buffer!");
     6584+    Buffer* buffer = (Buffer*)png_get_io_ptr(png);
     6585+    if (!Buffer_append(buffer, (const deUint8*)dataPtr, numBytes))
     6586+        png_error(png, "unable to resize PNG write buffer!");
     6587 }
     6588 
     6589 void pngFlushData (png_structp png)
     6590 {
     6591-       DE_UNREF(png);
     6592-       /* nada */
     6593+    DE_UNREF(png);
     6594+    /* nada */
     6595 }
     6596 
     6597 static deBool writeCompressedPNG (png_structp png, png_infop info, png_byte** rowPointers, int width, int height, int colorFormat)
     6598 {
     6599-       if (setjmp(png_jmpbuf(png)) == 0)
     6600-       {
     6601-               /* Write data. */
     6602-               png_set_IHDR(png, info, (png_uint_32)width, (png_uint_32)height,
     6603-                       8,
     6604-                       colorFormat,
     6605-                       PNG_INTERLACE_NONE,
     6606-                       PNG_COMPRESSION_TYPE_BASE,
     6607-                       PNG_FILTER_TYPE_BASE);
     6608-               png_write_info(png, info);
     6609-               png_write_image(png, rowPointers);
     6610-               png_write_end(png, NULL);
     6611-
     6612-               return DE_TRUE;
     6613-       }
     6614-       else
     6615-               return DE_FALSE;
     6616+    if (setjmp(png_jmpbuf(png)) == 0)
     6617+    {
     6618+        /* Write data. */
     6619+        png_set_IHDR(png, info, (png_uint_32)width, (png_uint_32)height,
     6620+            8,
     6621+            colorFormat,
     6622+            PNG_INTERLACE_NONE,
     6623+            PNG_COMPRESSION_TYPE_BASE,
     6624+            PNG_FILTER_TYPE_BASE);
     6625+        png_write_info(png, info);
     6626+        png_write_image(png, rowPointers);
     6627+        png_write_end(png, NULL);
     6628+
     6629+        return DE_TRUE;
     6630+    }
     6631+    else
     6632+        return DE_FALSE;
     6633 }
     6634 
     6635 static deBool compressImagePNG (Buffer* buffer, qpImageFormat imageFormat, int width, int height, int rowStride, const void* data)
     6636 {
     6637-       deBool                  compressOk              = DE_FALSE;
     6638-       png_structp             png                             = DE_NULL;
     6639-       png_infop               info                    = DE_NULL;
     6640-       png_byte**              rowPointers             = DE_NULL;
     6641-       deBool                  hasAlpha                = imageFormat == QP_IMAGE_FORMAT_RGBA8888;
     6642-       int                             ndx;
     6643-
     6644-       /* Handle format. */
     6645-       DE_ASSERT(imageFormat == QP_IMAGE_FORMAT_RGB888 || imageFormat == QP_IMAGE_FORMAT_RGBA8888);
     6646-
     6647-       /* Allocate & set row pointers. */
     6648-       rowPointers = (png_byte**)deMalloc((size_t)height * sizeof(png_byte*));
     6649-       if (!rowPointers)
     6650-               return DE_FALSE;
     6651-
     6652-       for (ndx = 0; ndx < height; ndx++)
     6653-               rowPointers[ndx] = (png_byte*)((const deUint8*)data + ndx*rowStride);
     6654-
     6655-       /* Initialize PNG compressor. */
     6656-       png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
     6657-       info = png ? png_create_info_struct(png) : DE_NULL;
     6658-       if (png && info)
     6659-       {
     6660-               /* Set our own write function. */
     6661-               png_set_write_fn(png, buffer, pngWriteData, pngFlushData);
     6662-
     6663-               compressOk = writeCompressedPNG(png, info, rowPointers, width, height,
     6664-                                                                               hasAlpha ? PNG_COLOR_TYPE_RGBA : PNG_COLOR_TYPE_RGB);
     6665-       }
     6666-
     6667-       /* Cleanup & return. */
     6668-       if (png && info)
     6669-       {
     6670-               png_destroy_info_struct(png, &info);
     6671-               png_destroy_write_struct(&png, DE_NULL);
     6672-       }
     6673-       else if (png)
     6674-               png_destroy_write_struct(&png, &info);
     6675-
     6676-       deFree(rowPointers);
     6677-       return compressOk;
     6678+    deBool          compressOk      = DE_FALSE;
     6679+    png_structp     png             = DE_NULL;
     6680+    png_infop       info            = DE_NULL;
     6681+    png_byte**      rowPointers     = DE_NULL;
     6682+    deBool          hasAlpha        = imageFormat == QP_IMAGE_FORMAT_RGBA8888;
     6683+    int             ndx;
     6684+
     6685+    /* Handle format. */
     6686+    DE_ASSERT(imageFormat == QP_IMAGE_FORMAT_RGB888 || imageFormat == QP_IMAGE_FORMAT_RGBA8888);
     6687+
     6688+    /* Allocate & set row pointers. */
     6689+    rowPointers = (png_byte**)deMalloc((size_t)height * sizeof(png_byte*));
     6690+    if (!rowPointers)
     6691+        return DE_FALSE;
     6692+
     6693+    for (ndx = 0; ndx < height; ndx++)
     6694+        rowPointers[ndx] = (png_byte*)((const deUint8*)data + ndx*rowStride);
     6695+
     6696+    /* Initialize PNG compressor. */
     6697+    png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
     6698+    info = png ? png_create_info_struct(png) : DE_NULL;
     6699+    if (png && info)
     6700+    {
     6701+        /* Set our own write function. */
     6702+        png_set_write_fn(png, buffer, pngWriteData, pngFlushData);
     6703+
     6704+        compressOk = writeCompressedPNG(png, info, rowPointers, width, height,
     6705+                                        hasAlpha ? PNG_COLOR_TYPE_RGBA : PNG_COLOR_TYPE_RGB);
     6706+    }
     6707+
     6708+    /* Cleanup & return. */
     6709+    if (png && info)
     6710+    {
     6711+        png_destroy_info_struct(png, &info);
     6712+        png_destroy_write_struct(&png, DE_NULL);
     6713+    }
     6714+    else if (png)
     6715+        png_destroy_write_struct(&png, &info);
     6716+
     6717+    deFree(rowPointers);
     6718+    return compressOk;
     6719 }
     6720 #endif /* QP_SUPPORT_PNG */
     6721 
     6722 /*--------------------------------------------------------------------*//*!
     6723  * \brief Start image set
     6724- * \param log                  qpTestLog instance
     6725- * \param name                 Unique identifier for the set
     6726- * \param description  Human readable description
     6727+ * \param log           qpTestLog instance
     6728+ * \param name          Unique identifier for the set
     6729+ * \param description   Human readable description
     6730  * \return true if ok, false otherwise
     6731  *//*--------------------------------------------------------------------*/
     6732 deBool qpTestLog_startImageSet (qpTestLog* log, const char* name, const char* description)
     6733 {
     6734-       qpXmlAttribute  attribs[4];
     6735-       int                             numAttribs = 0;
     6736+    qpXmlAttribute  attribs[4];
     6737+    int             numAttribs = 0;
     6738 
     6739-       DE_ASSERT(log && name);
     6740-       deMutex_lock(log->lock);
     6741+    DE_ASSERT(log && name);
     6742+    deMutex_lock(log->lock);
     6743 
     6744-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     6745-       if (description)
     6746-               attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     6747+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     6748+    if (description)
     6749+        attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     6750 
     6751-       /* <ImageSet Name="<name>"> */
     6752-       if (!qpXmlWriter_startElement(log->writer, "ImageSet", numAttribs, attribs))
     6753-       {
     6754-               qpPrintf("qpTestLog_startImageSet(): Writing XML failed\n");
     6755-               deMutex_unlock(log->lock);
     6756-               return DE_FALSE;
     6757-       }
     6758+    /* <ImageSet Name="<name>"> */
     6759+    if (!qpXmlWriter_startElement(log->writer, "ImageSet", numAttribs, attribs))
     6760+    {
     6761+        qpPrintf("qpTestLog_startImageSet(): Writing XML failed\n");
     6762+        deMutex_unlock(log->lock);
     6763+        return DE_FALSE;
     6764+    }
     6765 
     6766-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_IMAGESET));
     6767+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_IMAGESET));
     6768 
     6769-       deMutex_unlock(log->lock);
     6770-       return DE_TRUE;
     6771+    deMutex_unlock(log->lock);
     6772+    return DE_TRUE;
     6773 }
     6774 
     6775 /*--------------------------------------------------------------------*//*!
     6776  * \brief End image set
     6777- * \param log                  qpTestLog instance
     6778+ * \param log           qpTestLog instance
     6779  * \return true if ok, false otherwise
     6780  *//*--------------------------------------------------------------------*/
     6781 deBool qpTestLog_endImageSet (qpTestLog* log)
     6782 {
     6783-       DE_ASSERT(log);
     6784-       deMutex_lock(log->lock);
     6785+    DE_ASSERT(log);
     6786+    deMutex_lock(log->lock);
     6787 
     6788-       /* <ImageSet Name="<name>"> */
     6789-       if (!qpXmlWriter_endElement(log->writer, "ImageSet"))
     6790-       {
     6791-               qpPrintf("qpTestLog_endImageSet(): Writing XML failed\n");
     6792-               deMutex_unlock(log->lock);
     6793-               return DE_FALSE;
     6794-       }
     6795+    /* <ImageSet Name="<name>"> */
     6796+    if (!qpXmlWriter_endElement(log->writer, "ImageSet"))
     6797+    {
     6798+        qpPrintf("qpTestLog_endImageSet(): Writing XML failed\n");
     6799+        deMutex_unlock(log->lock);
     6800+        return DE_FALSE;
     6801+    }
     6802 
     6803-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_IMAGESET);
     6804+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_IMAGESET);
     6805 
     6806-       deMutex_unlock(log->lock);
     6807-       return DE_TRUE;
     6808+    deMutex_unlock(log->lock);
     6809+    return DE_TRUE;
     6810 }
     6811 
     6812 /*--------------------------------------------------------------------*//*!
     6813  * \brief Write base64 encoded raw image data into log
     6814- * \param log                          qpTestLog instance
     6815- * \param name                         Unique name (matching names can be compared across BatchResults).
     6816- * \param description          Textual description (shown in Candy).
     6817- * \param compressionMode      Compression mode
     6818- * \param imageFormat          Color format
     6819- * \param width                                Width in pixels
     6820- * \param height                       Height in pixels
     6821- * \param stride                       Data stride (offset between rows)
     6822- * \param data                         Pointer to pixel data
     6823+ * \param log               qpTestLog instance
     6824+ * \param name              Unique name (matching names can be compared across BatchResults).
     6825+ * \param description       Textual description (shown in Candy).
     6826+ * \param compressionMode   Compression mode
     6827+ * \param imageFormat       Color format
     6828+ * \param width             Width in pixels
     6829+ * \param height            Height in pixels
     6830+ * \param stride            Data stride (offset between rows)
     6831+ * \param data              Pointer to pixel data
     6832  * \return 0 if OK, otherwise <0
     6833  *//*--------------------------------------------------------------------*/
     6834-deBool qpTestLog_writeImage    (
     6835-       qpTestLog*                              log,
     6836-       const char*                             name,
     6837-       const char*                             description,
     6838-       qpImageCompressionMode  compressionMode,
     6839-       qpImageFormat                   imageFormat,
     6840-       int                                             width,
     6841-       int                                             height,
     6842-       int                                             stride,
     6843-       const void*                             data)
     6844-{
     6845-       char                    widthStr[32];
     6846-       char                    heightStr[32];
     6847-       qpXmlAttribute  attribs[8];
     6848-       int                             numAttribs                      = 0;
     6849-       Buffer                  compressedBuffer;
     6850-       const void*             writeDataPtr            = DE_NULL;
     6851-       size_t                  writeDataBytes          = ~(size_t)0;
     6852-
     6853-       DE_ASSERT(log && name);
     6854-       DE_ASSERT(deInRange32(width, 1, 16384));
     6855-       DE_ASSERT(deInRange32(height, 1, 16384));
     6856-       DE_ASSERT(data);
     6857-
     6858-       if (log->flags & QP_TEST_LOG_EXCLUDE_IMAGES)
     6859-               return DE_TRUE; /* Image not logged. */
     6860-
     6861-       Buffer_init(&compressedBuffer);
     6862-
     6863-       /* BEST compression mode defaults to PNG. */
     6864-       if (compressionMode == QP_IMAGE_COMPRESSION_MODE_BEST)
     6865-       {
     6866+deBool qpTestLog_writeImage (
     6867+    qpTestLog*              log,
     6868+    const char*             name,
     6869+    const char*             description,
     6870+    qpImageCompressionMode  compressionMode,
     6871+    qpImageFormat           imageFormat,
     6872+    int                     width,
     6873+    int                     height,
     6874+    int                     stride,
     6875+    const void*             data)
     6876+{
     6877+    char            widthStr[32];
     6878+    char            heightStr[32];
     6879+    qpXmlAttribute  attribs[8];
     6880+    int             numAttribs          = 0;
     6881+    Buffer          compressedBuffer;
     6882+    const void*     writeDataPtr        = DE_NULL;
     6883+    size_t          writeDataBytes      = ~(size_t)0;
     6884+
     6885+    DE_ASSERT(log && name);
     6886+    DE_ASSERT(deInRange32(width, 1, 16384));
     6887+    DE_ASSERT(deInRange32(height, 1, 16384));
     6888+    DE_ASSERT(data);
     6889+
     6890+    if (log->flags & QP_TEST_LOG_EXCLUDE_IMAGES)
     6891+        return DE_TRUE; /* Image not logged. */
     6892+
     6893+    Buffer_init(&compressedBuffer);
     6894+
     6895+    /* BEST compression mode defaults to PNG. */
     6896+    if (compressionMode == QP_IMAGE_COMPRESSION_MODE_BEST)
     6897+    {
     6898 #if defined(QP_SUPPORT_PNG)
     6899-               compressionMode = QP_IMAGE_COMPRESSION_MODE_PNG;
     6900+        compressionMode = QP_IMAGE_COMPRESSION_MODE_PNG;
    5906901 #else
    591 +
    592 +typedef void             *EGLNativeDisplayType;
    593 +typedef khronos_uintptr_t EGLNativePixmapType;
    594 +typedef khronos_uintptr_t EGLNativeWindowType;
    595 +
    596 +#endif /* ANGLE_USE_X11 && !MESA_EGL_NO_X11_HEADERS */
    597 +
    598 +#else
    599  #error "Platform not recognized"
     6902-               compressionMode = QP_IMAGE_COMPRESSION_MODE_NONE;
     6903+        compressionMode = QP_IMAGE_COMPRESSION_MODE_NONE;
    6006904 #endif
    601  
     6905-       }
     6906+    }
     6907 
     6908 #if defined(QP_SUPPORT_PNG)
     6909-       /* Try storing with PNG compression. */
     6910-       if (compressionMode == QP_IMAGE_COMPRESSION_MODE_PNG)
     6911-       {
     6912-               deBool compressOk = compressImagePNG(&compressedBuffer, imageFormat, width, height, stride, data);
     6913-               if (compressOk)
     6914-               {
     6915-                       writeDataPtr    = compressedBuffer.data;
     6916-                       writeDataBytes  = compressedBuffer.size;
     6917-               }
     6918-               else
     6919-               {
     6920-                       /* Fall-back to default compression. */
     6921-                       qpPrintf("WARNING: PNG compression failed -- storing image uncompressed.\n");
     6922-                       compressionMode = QP_IMAGE_COMPRESSION_MODE_NONE;
     6923-               }
     6924-       }
     6925+    /* Try storing with PNG compression. */
     6926+    if (compressionMode == QP_IMAGE_COMPRESSION_MODE_PNG)
     6927+    {
     6928+        deBool compressOk = compressImagePNG(&compressedBuffer, imageFormat, width, height, stride, data);
     6929+        if (compressOk)
     6930+        {
     6931+            writeDataPtr    = compressedBuffer.data;
     6932+            writeDataBytes  = compressedBuffer.size;
     6933+        }
     6934+        else
     6935+        {
     6936+            /* Fall-back to default compression. */
     6937+            qpPrintf("WARNING: PNG compression failed -- storing image uncompressed.\n");
     6938+            compressionMode = QP_IMAGE_COMPRESSION_MODE_NONE;
     6939+        }
     6940+    }
     6941 #endif
     6942 
     6943-       /* Handle image compression. */
     6944-       switch (compressionMode)
     6945-       {
     6946-               case QP_IMAGE_COMPRESSION_MODE_NONE:
     6947-               {
     6948-                       int pixelSize           = imageFormat == QP_IMAGE_FORMAT_RGB888 ? 3 : 4;
     6949-                       int packedStride        = pixelSize*width;
     6950-
     6951-                       if (packedStride == stride)
     6952-                               writeDataPtr = data;
     6953-                       else
     6954-                       {
     6955-                               /* Need to re-pack pixels. */
     6956-                               if (Buffer_resize(&compressedBuffer, (size_t)(packedStride*height)))
     6957-                               {
     6958-                                       int row;
     6959-                                       for (row = 0; row < height; row++)
     6960-                                               memcpy(&compressedBuffer.data[packedStride*row], &((const deUint8*)data)[row*stride], (size_t)(pixelSize*width));
     6961-                               }
     6962-                               else
     6963-                               {
     6964-                                       qpPrintf("ERROR: Failed to pack pixels for writing.\n");
     6965-                                       Buffer_deinit(&compressedBuffer);
     6966-                                       return DE_FALSE;
     6967-                               }
     6968-                       }
     6969-
     6970-                       writeDataBytes = (size_t)(packedStride*height);
     6971-                       break;
     6972-               }
     6973+    /* Handle image compression. */
     6974+    switch (compressionMode)
     6975+    {
     6976+        case QP_IMAGE_COMPRESSION_MODE_NONE:
     6977+        {
     6978+            int pixelSize       = imageFormat == QP_IMAGE_FORMAT_RGB888 ? 3 : 4;
     6979+            int packedStride    = pixelSize*width;
     6980+
     6981+            if (packedStride == stride)
     6982+                writeDataPtr = data;
     6983+            else
     6984+            {
     6985+                /* Need to re-pack pixels. */
     6986+                if (Buffer_resize(&compressedBuffer, (size_t)(packedStride*height)))
     6987+                {
     6988+                    int row;
     6989+                    for (row = 0; row < height; row++)
     6990+                        memcpy(&compressedBuffer.data[packedStride*row], &((const deUint8*)data)[row*stride], (size_t)(pixelSize*width));
     6991+                }
     6992+                else
     6993+                {
     6994+                    qpPrintf("ERROR: Failed to pack pixels for writing.\n");
     6995+                    Buffer_deinit(&compressedBuffer);
     6996+                    return DE_FALSE;
     6997+                }
     6998+            }
     6999+
     7000+            writeDataBytes = (size_t)(packedStride*height);
     7001+            break;
     7002+        }
     7003 
     7004 #if defined(QP_SUPPORT_PNG)
     7005-               case QP_IMAGE_COMPRESSION_MODE_PNG:
     7006-                       DE_ASSERT(writeDataPtr); /* Already handled. */
     7007-                       break;
     7008+        case QP_IMAGE_COMPRESSION_MODE_PNG:
     7009+            DE_ASSERT(writeDataPtr); /* Already handled. */
     7010+            break;
     7011 #endif
     7012 
     7013-               default:
     7014-                       qpPrintf("qpTestLog_writeImage(): Unknown compression mode: %s\n", QP_LOOKUP_STRING(s_qpImageCompressionModeMap, compressionMode));
     7015-                       Buffer_deinit(&compressedBuffer);
     7016-                       return DE_FALSE;
     7017-       }
     7018-
     7019-       /* Fill in attributes. */
     7020-       int32ToString(width, widthStr);
     7021-       int32ToString(height, heightStr);
     7022-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7023-       attribs[numAttribs++] = qpSetStringAttrib("Width", widthStr);
     7024-       attribs[numAttribs++] = qpSetStringAttrib("Height", heightStr);
     7025-       attribs[numAttribs++] = qpSetStringAttrib("Format", QP_LOOKUP_STRING(s_qpImageFormatMap, imageFormat));
     7026-       attribs[numAttribs++] = qpSetStringAttrib("CompressionMode", QP_LOOKUP_STRING(s_qpImageCompressionModeMap, compressionMode));
     7027-       if (description) attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7028-
     7029-       /* \note Log lock is acquired after compression! */
     7030-       deMutex_lock(log->lock);
     7031-
     7032-       /* <Image ID="result" Name="Foobar" Width="640" Height="480" Format="RGB888" CompressionMode="None">base64 data</Image> */
     7033-       if (!qpXmlWriter_startElement(log->writer, "Image", numAttribs, attribs) ||
     7034-               !qpXmlWriter_writeBase64(log->writer, (const deUint8*)writeDataPtr, writeDataBytes) ||
     7035-               !qpXmlWriter_endElement(log->writer, "Image"))
     7036-       {
     7037-               qpPrintf("qpTestLog_writeImage(): Writing XML failed\n");
     7038-               deMutex_unlock(log->lock);
     7039-               Buffer_deinit(&compressedBuffer);
     7040-               return DE_FALSE;
     7041-       }
     7042-
     7043-       deMutex_unlock(log->lock);
     7044-
     7045-       /* Free compressed data if allocated. */
     7046-       Buffer_deinit(&compressedBuffer);
     7047-
     7048-       return DE_TRUE;
     7049+        default:
     7050+            qpPrintf("qpTestLog_writeImage(): Unknown compression mode: %s\n", QP_LOOKUP_STRING(s_qpImageCompressionModeMap, compressionMode));
     7051+            Buffer_deinit(&compressedBuffer);
     7052+            return DE_FALSE;
     7053+    }
     7054+
     7055+    /* Fill in attributes. */
     7056+    int32ToString(width, widthStr);
     7057+    int32ToString(height, heightStr);
     7058+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7059+    attribs[numAttribs++] = qpSetStringAttrib("Width", widthStr);
     7060+    attribs[numAttribs++] = qpSetStringAttrib("Height", heightStr);
     7061+    attribs[numAttribs++] = qpSetStringAttrib("Format", QP_LOOKUP_STRING(s_qpImageFormatMap, imageFormat));
     7062+    attribs[numAttribs++] = qpSetStringAttrib("CompressionMode", QP_LOOKUP_STRING(s_qpImageCompressionModeMap, compressionMode));
     7063+    if (description) attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7064+
     7065+    /* \note Log lock is acquired after compression! */
     7066+    deMutex_lock(log->lock);
     7067+
     7068+    /* <Image ID="result" Name="Foobar" Width="640" Height="480" Format="RGB888" CompressionMode="None">base64 data</Image> */
     7069+    if (!qpXmlWriter_startElement(log->writer, "Image", numAttribs, attribs) ||
     7070+        !qpXmlWriter_writeBase64(log->writer, (const deUint8*)writeDataPtr, writeDataBytes) ||
     7071+        !qpXmlWriter_endElement(log->writer, "Image"))
     7072+    {
     7073+        qpPrintf("qpTestLog_writeImage(): Writing XML failed\n");
     7074+        deMutex_unlock(log->lock);
     7075+        Buffer_deinit(&compressedBuffer);
     7076+        return DE_FALSE;
     7077+    }
     7078+
     7079+    deMutex_unlock(log->lock);
     7080+
     7081+    /* Free compressed data if allocated. */
     7082+    Buffer_deinit(&compressedBuffer);
     7083+
     7084+    return DE_TRUE;
     7085 }
     7086 
     7087 /*--------------------------------------------------------------------*//*!
     7088  * \brief Write a OpenGL ES shader program into the log.
     7089- * \param linkOk                       Shader program link result, false on failure
     7090- * \param linkInfoLog          Implementation provided linkage log
     7091+ * \param linkOk            Shader program link result, false on failure
     7092+ * \param linkInfoLog       Implementation provided linkage log
     7093  *//*--------------------------------------------------------------------*/
     7094 deBool qpTestLog_startShaderProgram (qpTestLog* log, deBool linkOk, const char* linkInfoLog)
     7095 {
     7096-       qpXmlAttribute  programAttribs[4];
     7097-       int                             numProgramAttribs = 0;
     7098+    qpXmlAttribute  programAttribs[4];
     7099+    int             numProgramAttribs = 0;
     7100 
     7101-       DE_ASSERT(log);
     7102-       deMutex_lock(log->lock);
     7103+    DE_ASSERT(log);
     7104+    deMutex_lock(log->lock);
     7105 
     7106-       programAttribs[numProgramAttribs++] = qpSetStringAttrib("LinkStatus", linkOk ? "OK" : "Fail");
     7107+    programAttribs[numProgramAttribs++] = qpSetStringAttrib("LinkStatus", linkOk ? "OK" : "Fail");
     7108 
     7109-       if (!qpXmlWriter_startElement(log->writer, "ShaderProgram", numProgramAttribs, programAttribs) ||
     7110-               !qpXmlWriter_writeStringElement(log->writer, "InfoLog", linkInfoLog))
     7111-       {
     7112-               qpPrintf("qpTestLog_startShaderProgram(): Writing XML failed\n");
     7113-               deMutex_unlock(log->lock);
     7114-               return DE_FALSE;
     7115-       }
     7116+    if (!qpXmlWriter_startElement(log->writer, "ShaderProgram", numProgramAttribs, programAttribs) ||
     7117+        !qpXmlWriter_writeStringElement(log->writer, "InfoLog", linkInfoLog))
     7118+    {
     7119+        qpPrintf("qpTestLog_startShaderProgram(): Writing XML failed\n");
     7120+        deMutex_unlock(log->lock);
     7121+        return DE_FALSE;
     7122+    }
     7123 
     7124-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SHADERPROGRAM));
     7125+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SHADERPROGRAM));
     7126 
     7127-       deMutex_unlock(log->lock);
     7128-       return DE_TRUE;
     7129+    deMutex_unlock(log->lock);
     7130+    return DE_TRUE;
     7131 }
     7132 
     7133 /*--------------------------------------------------------------------*//*!
     7134  * \brief End shader program
     7135- * \param log                  qpTestLog instance
     7136+ * \param log           qpTestLog instance
     7137  * \return true if ok, false otherwise
     7138  *//*--------------------------------------------------------------------*/
     7139 deBool qpTestLog_endShaderProgram (qpTestLog* log)
     7140 {
     7141-       DE_ASSERT(log);
     7142-       deMutex_lock(log->lock);
     7143+    DE_ASSERT(log);
     7144+    deMutex_lock(log->lock);
     7145 
     7146-       /* </ShaderProgram> */
     7147-       if (!qpXmlWriter_endElement(log->writer, "ShaderProgram"))
     7148-       {
     7149-               qpPrintf("qpTestLog_endShaderProgram(): Writing XML failed\n");
     7150-               deMutex_unlock(log->lock);
     7151-               return DE_FALSE;
     7152-       }
     7153+    /* </ShaderProgram> */
     7154+    if (!qpXmlWriter_endElement(log->writer, "ShaderProgram"))
     7155+    {
     7156+        qpPrintf("qpTestLog_endShaderProgram(): Writing XML failed\n");
     7157+        deMutex_unlock(log->lock);
     7158+        return DE_FALSE;
     7159+    }
     7160 
     7161-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7162+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7163 
     7164-       deMutex_unlock(log->lock);
     7165-       return DE_TRUE;
     7166+    deMutex_unlock(log->lock);
     7167+    return DE_TRUE;
     7168 }
     7169 
     7170 /*--------------------------------------------------------------------*//*!
     7171  * \brief Write a OpenGL ES shader into the log.
     7172- * \param type                         Shader type
     7173- * \param source                       Shader source
     7174- * \param compileOk                    Shader compilation result, false on failure
     7175- * \param infoLog                      Implementation provided shader compilation log
     7176+ * \param type              Shader type
     7177+ * \param source            Shader source
     7178+ * \param compileOk         Shader compilation result, false on failure
     7179+ * \param infoLog           Implementation provided shader compilation log
     7180  *//*--------------------------------------------------------------------*/
     7181 deBool qpTestLog_writeShader (qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog)
     7182 {
     7183-       const char*             tagName                         = QP_LOOKUP_STRING(s_qpShaderTypeMap, type);
     7184-       const char*             sourceStr                       = ((log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) == 0 || !compileOk) ? source : "";
     7185-       int                             numShaderAttribs        = 0;
     7186-       qpXmlAttribute  shaderAttribs[4];
     7187+    const char*     tagName             = QP_LOOKUP_STRING(s_qpShaderTypeMap, type);
     7188+    const char*     sourceStr           = ((log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) == 0 || !compileOk) ? source : "";
     7189+    int             numShaderAttribs    = 0;
     7190+    qpXmlAttribute  shaderAttribs[4];
     7191 
     7192-       deMutex_lock(log->lock);
     7193+    deMutex_lock(log->lock);
     7194 
     7195-       DE_ASSERT(source);
     7196-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7197+    DE_ASSERT(source);
     7198+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7199 
     7200-       shaderAttribs[numShaderAttribs++]       = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail");
     7201+    shaderAttribs[numShaderAttribs++]   = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail");
     7202 
     7203-       if (!qpXmlWriter_startElement(log->writer, tagName, numShaderAttribs, shaderAttribs) ||
     7204-               !qpXmlWriter_writeStringElement(log->writer, "ShaderSource", sourceStr) ||
     7205-               !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) ||
     7206-               !qpXmlWriter_endElement(log->writer, tagName))
     7207-       {
     7208-               qpPrintf("qpTestLog_writeShader(): Writing XML failed\n");
     7209-               deMutex_unlock(log->lock);
     7210-               return DE_FALSE;
     7211-       }
     7212+    if (!qpXmlWriter_startElement(log->writer, tagName, numShaderAttribs, shaderAttribs) ||
     7213+        !qpXmlWriter_writeStringElement(log->writer, "ShaderSource", sourceStr) ||
     7214+        !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) ||
     7215+        !qpXmlWriter_endElement(log->writer, tagName))
     7216+    {
     7217+        qpPrintf("qpTestLog_writeShader(): Writing XML failed\n");
     7218+        deMutex_unlock(log->lock);
     7219+        return DE_FALSE;
     7220+    }
     7221 
     7222-       deMutex_unlock(log->lock);
     7223-       return DE_TRUE;
     7224+    deMutex_unlock(log->lock);
     7225+    return DE_TRUE;
     7226 }
     7227 
     7228 /*--------------------------------------------------------------------*//*!
     7229@@ -1053,28 +1053,28 @@ deBool qpTestLog_writeShader (qpTestLog* log, qpShaderType type, const char* sou
     7230  *//*--------------------------------------------------------------------*/
     7231 deBool qpTestLog_startEglConfigSet (qpTestLog* log, const char* name, const char* description)
     7232 {
     7233-       qpXmlAttribute  attribs[4];
     7234-       int                             numAttribs = 0;
     7235+    qpXmlAttribute  attribs[4];
     7236+    int             numAttribs = 0;
     7237 
     7238-       DE_ASSERT(log && name);
     7239-       deMutex_lock(log->lock);
     7240+    DE_ASSERT(log && name);
     7241+    deMutex_lock(log->lock);
     7242 
     7243-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7244-       if (description)
     7245-               attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7246+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7247+    if (description)
     7248+        attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7249 
     7250-       /* <EglConfigSet Name="<name>"> */
     7251-       if (!qpXmlWriter_startElement(log->writer, "EglConfigSet", numAttribs, attribs))
     7252-       {
     7253-               qpPrintf("qpTestLog_startEglImageSet(): Writing XML failed\n");
     7254-               deMutex_unlock(log->lock);
     7255-               return DE_FALSE;
     7256-       }
     7257+    /* <EglConfigSet Name="<name>"> */
     7258+    if (!qpXmlWriter_startElement(log->writer, "EglConfigSet", numAttribs, attribs))
     7259+    {
     7260+        qpPrintf("qpTestLog_startEglImageSet(): Writing XML failed\n");
     7261+        deMutex_unlock(log->lock);
     7262+        return DE_FALSE;
     7263+    }
     7264 
     7265-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_EGLCONFIGSET));
     7266+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_EGLCONFIGSET));
     7267 
     7268-       deMutex_unlock(log->lock);
     7269-       return DE_TRUE;
     7270+    deMutex_unlock(log->lock);
     7271+    return DE_TRUE;
     7272 }
     7273 
     7274 /*--------------------------------------------------------------------*//*!
     7275@@ -1082,21 +1082,21 @@ deBool qpTestLog_startEglConfigSet (qpTestLog* log, const char* name, const char
     7276  *//*--------------------------------------------------------------------*/
     7277 deBool qpTestLog_endEglConfigSet (qpTestLog* log)
     7278 {
     7279-       DE_ASSERT(log);
     7280-       deMutex_lock(log->lock);
     7281+    DE_ASSERT(log);
     7282+    deMutex_lock(log->lock);
     7283 
     7284-       /* <EglConfigSet Name="<name>"> */
     7285-       if (!qpXmlWriter_endElement(log->writer, "EglConfigSet"))
     7286-       {
     7287-               qpPrintf("qpTestLog_endEglImageSet(): Writing XML failed\n");
     7288-               deMutex_unlock(log->lock);
     7289-               return DE_FALSE;
     7290-       }
     7291+    /* <EglConfigSet Name="<name>"> */
     7292+    if (!qpXmlWriter_endElement(log->writer, "EglConfigSet"))
     7293+    {
     7294+        qpPrintf("qpTestLog_endEglImageSet(): Writing XML failed\n");
     7295+        deMutex_unlock(log->lock);
     7296+        return DE_FALSE;
     7297+    }
     7298 
     7299-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_EGLCONFIGSET);
     7300+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_EGLCONFIGSET);
     7301 
     7302-       deMutex_unlock(log->lock);
     7303-       return DE_TRUE;
     7304+    deMutex_unlock(log->lock);
     7305+    return DE_TRUE;
     7306 }
     7307 
     7308 /*--------------------------------------------------------------------*//*!
     7309@@ -1105,111 +1105,111 @@ deBool qpTestLog_endEglConfigSet (qpTestLog* log)
     7310  *//*--------------------------------------------------------------------*/
     7311 deBool qpTestLog_writeEglConfig (qpTestLog* log, const qpEglConfigInfo* config)
     7312 {
     7313-       qpXmlAttribute  attribs[64];
     7314-       int                             numAttribs = 0;
     7315-
     7316-       DE_ASSERT(log && config);
     7317-       deMutex_lock(log->lock);
     7318-
     7319-       attribs[numAttribs++] = qpSetIntAttrib          ("BufferSize", config->bufferSize);
     7320-       attribs[numAttribs++] = qpSetIntAttrib          ("RedSize", config->redSize);
     7321-       attribs[numAttribs++] = qpSetIntAttrib          ("GreenSize", config->greenSize);
     7322-       attribs[numAttribs++] = qpSetIntAttrib          ("BlueSize", config->blueSize);
     7323-       attribs[numAttribs++] = qpSetIntAttrib          ("LuminanceSize", config->luminanceSize);
     7324-       attribs[numAttribs++] = qpSetIntAttrib          ("AlphaSize", config->alphaSize);
     7325-       attribs[numAttribs++] = qpSetIntAttrib          ("AlphaMaskSize", config->alphaMaskSize);
     7326-       attribs[numAttribs++] = qpSetBoolAttrib         ("BindToTextureRGB", config->bindToTextureRGB);
     7327-       attribs[numAttribs++] = qpSetBoolAttrib         ("BindToTextureRGBA", config->bindToTextureRGBA);
     7328-       attribs[numAttribs++] = qpSetStringAttrib       ("ColorBufferType", config->colorBufferType);
     7329-       attribs[numAttribs++] = qpSetStringAttrib       ("ConfigCaveat", config->configCaveat);
     7330-       attribs[numAttribs++] = qpSetIntAttrib          ("ConfigID", config->configID);
     7331-       attribs[numAttribs++] = qpSetStringAttrib       ("Conformant", config->conformant);
     7332-       attribs[numAttribs++] = qpSetIntAttrib          ("DepthSize", config->depthSize);
     7333-       attribs[numAttribs++] = qpSetIntAttrib          ("Level", config->level);
     7334-       attribs[numAttribs++] = qpSetIntAttrib          ("MaxPBufferWidth", config->maxPBufferWidth);
     7335-       attribs[numAttribs++] = qpSetIntAttrib          ("MaxPBufferHeight", config->maxPBufferHeight);
     7336-       attribs[numAttribs++] = qpSetIntAttrib          ("MaxPBufferPixels", config->maxPBufferPixels);
     7337-       attribs[numAttribs++] = qpSetIntAttrib          ("MaxSwapInterval", config->maxSwapInterval);
     7338-       attribs[numAttribs++] = qpSetIntAttrib          ("MinSwapInterval", config->minSwapInterval);
     7339-       attribs[numAttribs++] = qpSetBoolAttrib         ("NativeRenderable", config->nativeRenderable);
     7340-       attribs[numAttribs++] = qpSetStringAttrib       ("RenderableType", config->renderableType);
     7341-       attribs[numAttribs++] = qpSetIntAttrib          ("SampleBuffers", config->sampleBuffers);
     7342-       attribs[numAttribs++] = qpSetIntAttrib          ("Samples", config->samples);
     7343-       attribs[numAttribs++] = qpSetIntAttrib          ("StencilSize", config->stencilSize);
     7344-       attribs[numAttribs++] = qpSetStringAttrib       ("SurfaceTypes", config->surfaceTypes);
     7345-       attribs[numAttribs++] = qpSetStringAttrib       ("TransparentType", config->transparentType);
     7346-       attribs[numAttribs++] = qpSetIntAttrib          ("TransparentRedValue", config->transparentRedValue);
     7347-       attribs[numAttribs++] = qpSetIntAttrib          ("TransparentGreenValue", config->transparentGreenValue);
     7348-       attribs[numAttribs++] = qpSetIntAttrib          ("TransparentBlueValue", config->transparentBlueValue);
     7349-       DE_ASSERT(numAttribs <= DE_LENGTH_OF_ARRAY(attribs));
     7350-
     7351-       if (!qpXmlWriter_startElement(log->writer, "EglConfig", numAttribs, attribs) ||
     7352-               !qpXmlWriter_endElement(log->writer, "EglConfig"))
     7353-       {
     7354-               qpPrintf("qpTestLog_writeEglConfig(): Writing XML failed\n");
     7355-               deMutex_unlock(log->lock);
     7356-               return DE_FALSE;
     7357-       }
     7358-
     7359-       deMutex_unlock(log->lock);
     7360-       return DE_TRUE;
     7361+    qpXmlAttribute  attribs[64];
     7362+    int             numAttribs = 0;
     7363+
     7364+    DE_ASSERT(log && config);
     7365+    deMutex_lock(log->lock);
     7366+
     7367+    attribs[numAttribs++] = qpSetIntAttrib      ("BufferSize", config->bufferSize);
     7368+    attribs[numAttribs++] = qpSetIntAttrib      ("RedSize", config->redSize);
     7369+    attribs[numAttribs++] = qpSetIntAttrib      ("GreenSize", config->greenSize);
     7370+    attribs[numAttribs++] = qpSetIntAttrib      ("BlueSize", config->blueSize);
     7371+    attribs[numAttribs++] = qpSetIntAttrib      ("LuminanceSize", config->luminanceSize);
     7372+    attribs[numAttribs++] = qpSetIntAttrib      ("AlphaSize", config->alphaSize);
     7373+    attribs[numAttribs++] = qpSetIntAttrib      ("AlphaMaskSize", config->alphaMaskSize);
     7374+    attribs[numAttribs++] = qpSetBoolAttrib     ("BindToTextureRGB", config->bindToTextureRGB);
     7375+    attribs[numAttribs++] = qpSetBoolAttrib     ("BindToTextureRGBA", config->bindToTextureRGBA);
     7376+    attribs[numAttribs++] = qpSetStringAttrib   ("ColorBufferType", config->colorBufferType);
     7377+    attribs[numAttribs++] = qpSetStringAttrib   ("ConfigCaveat", config->configCaveat);
     7378+    attribs[numAttribs++] = qpSetIntAttrib      ("ConfigID", config->configID);
     7379+    attribs[numAttribs++] = qpSetStringAttrib   ("Conformant", config->conformant);
     7380+    attribs[numAttribs++] = qpSetIntAttrib      ("DepthSize", config->depthSize);
     7381+    attribs[numAttribs++] = qpSetIntAttrib      ("Level", config->level);
     7382+    attribs[numAttribs++] = qpSetIntAttrib      ("MaxPBufferWidth", config->maxPBufferWidth);
     7383+    attribs[numAttribs++] = qpSetIntAttrib      ("MaxPBufferHeight", config->maxPBufferHeight);
     7384+    attribs[numAttribs++] = qpSetIntAttrib      ("MaxPBufferPixels", config->maxPBufferPixels);
     7385+    attribs[numAttribs++] = qpSetIntAttrib      ("MaxSwapInterval", config->maxSwapInterval);
     7386+    attribs[numAttribs++] = qpSetIntAttrib      ("MinSwapInterval", config->minSwapInterval);
     7387+    attribs[numAttribs++] = qpSetBoolAttrib     ("NativeRenderable", config->nativeRenderable);
     7388+    attribs[numAttribs++] = qpSetStringAttrib   ("RenderableType", config->renderableType);
     7389+    attribs[numAttribs++] = qpSetIntAttrib      ("SampleBuffers", config->sampleBuffers);
     7390+    attribs[numAttribs++] = qpSetIntAttrib      ("Samples", config->samples);
     7391+    attribs[numAttribs++] = qpSetIntAttrib      ("StencilSize", config->stencilSize);
     7392+    attribs[numAttribs++] = qpSetStringAttrib   ("SurfaceTypes", config->surfaceTypes);
     7393+    attribs[numAttribs++] = qpSetStringAttrib   ("TransparentType", config->transparentType);
     7394+    attribs[numAttribs++] = qpSetIntAttrib      ("TransparentRedValue", config->transparentRedValue);
     7395+    attribs[numAttribs++] = qpSetIntAttrib      ("TransparentGreenValue", config->transparentGreenValue);
     7396+    attribs[numAttribs++] = qpSetIntAttrib      ("TransparentBlueValue", config->transparentBlueValue);
     7397+    DE_ASSERT(numAttribs <= DE_LENGTH_OF_ARRAY(attribs));
     7398+
     7399+    if (!qpXmlWriter_startElement(log->writer, "EglConfig", numAttribs, attribs) ||
     7400+        !qpXmlWriter_endElement(log->writer, "EglConfig"))
     7401+    {
     7402+        qpPrintf("qpTestLog_writeEglConfig(): Writing XML failed\n");
     7403+        deMutex_unlock(log->lock);
     7404+        return DE_FALSE;
     7405+    }
     7406+
     7407+    deMutex_unlock(log->lock);
     7408+    return DE_TRUE;
     7409 }
     7410 
     7411 /*--------------------------------------------------------------------*//*!
     7412  * \brief Start section in log.
     7413- * \param log                  qpTestLog instance
     7414- * \param name                 Section name
     7415- * \param description  Human readable description
     7416+ * \param log           qpTestLog instance
     7417+ * \param name          Section name
     7418+ * \param description   Human readable description
     7419  * \return true if ok, false otherwise
     7420  *//*--------------------------------------------------------------------*/
     7421 deBool qpTestLog_startSection (qpTestLog* log, const char* name, const char* description)
     7422 {
     7423-       qpXmlAttribute  attribs[2];
     7424-       int                             numAttribs = 0;
     7425+    qpXmlAttribute  attribs[2];
     7426+    int             numAttribs = 0;
     7427 
     7428-       DE_ASSERT(log && name);
     7429-       deMutex_lock(log->lock);
     7430+    DE_ASSERT(log && name);
     7431+    deMutex_lock(log->lock);
     7432 
     7433-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7434-       if (description)
     7435-               attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7436+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7437+    if (description)
     7438+        attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7439 
     7440-       /* <Section Name="<name>" Description="<description>"> */
     7441-       if (!qpXmlWriter_startElement(log->writer, "Section", numAttribs, attribs))
     7442-       {
     7443-               qpPrintf("qpTestLog_startSection(): Writing XML failed\n");
     7444-               deMutex_unlock(log->lock);
     7445-               return DE_FALSE;
     7446-       }
     7447+    /* <Section Name="<name>" Description="<description>"> */
     7448+    if (!qpXmlWriter_startElement(log->writer, "Section", numAttribs, attribs))
     7449+    {
     7450+        qpPrintf("qpTestLog_startSection(): Writing XML failed\n");
     7451+        deMutex_unlock(log->lock);
     7452+        return DE_FALSE;
     7453+    }
     7454 
     7455-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SECTION));
     7456+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SECTION));
     7457 
     7458-       deMutex_unlock(log->lock);
     7459-       return DE_TRUE;
     7460+    deMutex_unlock(log->lock);
     7461+    return DE_TRUE;
     7462 }
     7463 
     7464 /*--------------------------------------------------------------------*//*!
     7465  * \brief End section in log.
     7466- * \param log                  qpTestLog instance
     7467+ * \param log           qpTestLog instance
     7468  * \return true if ok, false otherwise
     7469  *//*--------------------------------------------------------------------*/
     7470 deBool qpTestLog_endSection (qpTestLog* log)
     7471 {
     7472-       DE_ASSERT(log);
     7473-       deMutex_lock(log->lock);
     7474+    DE_ASSERT(log);
     7475+    deMutex_lock(log->lock);
     7476 
     7477-       /* </Section> */
     7478-       if (!qpXmlWriter_endElement(log->writer, "Section"))
     7479-       {
     7480-               qpPrintf("qpTestLog_endSection(): Writing XML failed\n");
     7481-               deMutex_unlock(log->lock);
     7482-               return DE_FALSE;
     7483-       }
     7484+    /* </Section> */
     7485+    if (!qpXmlWriter_endElement(log->writer, "Section"))
     7486+    {
     7487+        qpPrintf("qpTestLog_endSection(): Writing XML failed\n");
     7488+        deMutex_unlock(log->lock);
     7489+        return DE_FALSE;
     7490+    }
     7491 
     7492-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SECTION);
     7493+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SECTION);
     7494 
     7495-       deMutex_unlock(log->lock);
     7496-       return DE_TRUE;
     7497+    deMutex_unlock(log->lock);
     7498+    return DE_TRUE;
     7499 }
     7500 
     7501 /*--------------------------------------------------------------------*//*!
     7502@@ -1217,20 +1217,20 @@ deBool qpTestLog_endSection (qpTestLog* log)
     7503  *//*--------------------------------------------------------------------*/
     7504 deBool qpTestLog_writeKernelSource (qpTestLog* log, const char* source)
     7505 {
     7506-       const char*             sourceStr       = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source;
     7507+    const char*     sourceStr   = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source;
     7508 
     7509-       DE_ASSERT(log);
     7510-       deMutex_lock(log->lock);
     7511+    DE_ASSERT(log);
     7512+    deMutex_lock(log->lock);
     7513 
     7514-       if (!qpXmlWriter_writeStringElement(log->writer, "KernelSource", sourceStr))
     7515-       {
     7516-               qpPrintf("qpTestLog_writeKernelSource(): Writing XML failed\n");
     7517-               deMutex_unlock(log->lock);
     7518-               return DE_FALSE;
     7519-       }
     7520+    if (!qpXmlWriter_writeStringElement(log->writer, "KernelSource", sourceStr))
     7521+    {
     7522+        qpPrintf("qpTestLog_writeKernelSource(): Writing XML failed\n");
     7523+        deMutex_unlock(log->lock);
     7524+        return DE_FALSE;
     7525+    }
     7526 
     7527-       deMutex_unlock(log->lock);
     7528-       return DE_TRUE;
     7529+    deMutex_unlock(log->lock);
     7530+    return DE_TRUE;
     7531 }
     7532 
     7533 /*--------------------------------------------------------------------*//*!
     7534@@ -1238,21 +1238,21 @@ deBool qpTestLog_writeKernelSource (qpTestLog* log, const char* source)
     7535  *//*--------------------------------------------------------------------*/
     7536 deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source)
     7537 {
     7538-       const char* const       sourceStr       = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source;
     7539+    const char* const   sourceStr   = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source;
     7540 
     7541-       deMutex_lock(log->lock);
     7542+    deMutex_lock(log->lock);
     7543 
     7544-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7545+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
     7546 
     7547-       if (!qpXmlWriter_writeStringElement(log->writer, "SpirVAssemblySource", sourceStr))
     7548-       {
     7549-               qpPrintf("qpTestLog_writeSpirVAssemblySource(): Writing XML failed\n");
     7550-               deMutex_unlock(log->lock);
     7551-               return DE_FALSE;
     7552-       }
     7553+    if (!qpXmlWriter_writeStringElement(log->writer, "SpirVAssemblySource", sourceStr))
     7554+    {
     7555+        qpPrintf("qpTestLog_writeSpirVAssemblySource(): Writing XML failed\n");
     7556+        deMutex_unlock(log->lock);
     7557+        return DE_FALSE;
     7558+    }
     7559 
     7560-       deMutex_unlock(log->lock);
     7561-       return DE_TRUE;
     7562+    deMutex_unlock(log->lock);
     7563+    return DE_TRUE;
     7564 }
     7565 
     7566 /*--------------------------------------------------------------------*//*!
     7567@@ -1260,222 +1260,222 @@ deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source)
     7568  *//*--------------------------------------------------------------------*/
     7569 deBool qpTestLog_writeCompileInfo (qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog)
     7570 {
     7571-       int                             numAttribs = 0;
     7572-       qpXmlAttribute  attribs[3];
     7573+    int             numAttribs = 0;
     7574+    qpXmlAttribute  attribs[3];
     7575 
     7576-       DE_ASSERT(log && name && description && infoLog);
     7577-       deMutex_lock(log->lock);
     7578+    DE_ASSERT(log && name && description && infoLog);
     7579+    deMutex_lock(log->lock);
     7580 
     7581-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7582-       attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7583-       attribs[numAttribs++] = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail");
     7584+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7585+    attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7586+    attribs[numAttribs++] = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail");
     7587 
     7588-       if (!qpXmlWriter_startElement(log->writer, "CompileInfo", numAttribs, attribs) ||
     7589-               !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) ||
     7590-               !qpXmlWriter_endElement(log->writer, "CompileInfo"))
     7591-       {
     7592-               qpPrintf("qpTestLog_writeCompileInfo(): Writing XML failed\n");
     7593-               deMutex_unlock(log->lock);
     7594-               return DE_FALSE;
     7595-       }
     7596+    if (!qpXmlWriter_startElement(log->writer, "CompileInfo", numAttribs, attribs) ||
     7597+        !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) ||
     7598+        !qpXmlWriter_endElement(log->writer, "CompileInfo"))
     7599+    {
     7600+        qpPrintf("qpTestLog_writeCompileInfo(): Writing XML failed\n");
     7601+        deMutex_unlock(log->lock);
     7602+        return DE_FALSE;
     7603+    }
     7604 
     7605-       deMutex_unlock(log->lock);
     7606-       return DE_TRUE;
     7607+    deMutex_unlock(log->lock);
     7608+    return DE_TRUE;
     7609 }
     7610 
     7611 deBool qpTestLog_startSampleList (qpTestLog* log, const char* name, const char* description)
     7612 {
     7613-       int                             numAttribs = 0;
     7614-       qpXmlAttribute  attribs[2];
     7615+    int             numAttribs = 0;
     7616+    qpXmlAttribute  attribs[2];
     7617 
     7618-       DE_ASSERT(log && name && description);
     7619-       deMutex_lock(log->lock);
     7620+    DE_ASSERT(log && name && description);
     7621+    deMutex_lock(log->lock);
     7622 
     7623-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7624-       attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7625+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7626+    attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7627 
     7628-       if (!qpXmlWriter_startElement(log->writer, "SampleList", numAttribs, attribs))
     7629-       {
     7630-               qpPrintf("qpTestLog_startSampleList(): Writing XML failed\n");
     7631-               deMutex_unlock(log->lock);
     7632-               return DE_FALSE;
     7633-       }
     7634+    if (!qpXmlWriter_startElement(log->writer, "SampleList", numAttribs, attribs))
     7635+    {
     7636+        qpPrintf("qpTestLog_startSampleList(): Writing XML failed\n");
     7637+        deMutex_unlock(log->lock);
     7638+        return DE_FALSE;
     7639+    }
     7640 
     7641-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLELIST));
     7642+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLELIST));
     7643 
     7644-       deMutex_unlock(log->lock);
     7645-       return DE_TRUE;
     7646+    deMutex_unlock(log->lock);
     7647+    return DE_TRUE;
     7648 }
     7649 
     7650 deBool qpTestLog_startSampleInfo (qpTestLog* log)
     7651 {
     7652-       DE_ASSERT(log);
     7653-       deMutex_lock(log->lock);
     7654+    DE_ASSERT(log);
     7655+    deMutex_lock(log->lock);
     7656 
     7657-       if (!qpXmlWriter_startElement(log->writer, "SampleInfo", 0, DE_NULL))
     7658-       {
     7659-               qpPrintf("qpTestLog_startSampleInfo(): Writing XML failed\n");
     7660-               deMutex_unlock(log->lock);
     7661-               return DE_FALSE;
     7662-       }
     7663+    if (!qpXmlWriter_startElement(log->writer, "SampleInfo", 0, DE_NULL))
     7664+    {
     7665+        qpPrintf("qpTestLog_startSampleInfo(): Writing XML failed\n");
     7666+        deMutex_unlock(log->lock);
     7667+        return DE_FALSE;
     7668+    }
     7669 
     7670-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLEINFO));
     7671+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLEINFO));
     7672 
     7673-       deMutex_unlock(log->lock);
     7674-       return DE_TRUE;
     7675+    deMutex_unlock(log->lock);
     7676+    return DE_TRUE;
     7677 }
     7678 
     7679 deBool qpTestLog_writeValueInfo (qpTestLog* log, const char* name, const char* description, const char* unit, qpSampleValueTag tag)
     7680 {
     7681-       const char*             tagName         = QP_LOOKUP_STRING(s_qpSampleValueTagMap, tag);
     7682-       int                             numAttribs      = 0;
     7683-       qpXmlAttribute  attribs[4];
     7684+    const char*     tagName     = QP_LOOKUP_STRING(s_qpSampleValueTagMap, tag);
     7685+    int             numAttribs  = 0;
     7686+    qpXmlAttribute  attribs[4];
     7687 
     7688-       DE_ASSERT(log && name && description && tagName);
     7689-       deMutex_lock(log->lock);
     7690+    DE_ASSERT(log && name && description && tagName);
     7691+    deMutex_lock(log->lock);
     7692 
     7693-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLEINFO);
     7694+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLEINFO);
     7695 
     7696-       attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7697-       attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7698-       attribs[numAttribs++] = qpSetStringAttrib("Tag", tagName);
     7699+    attribs[numAttribs++] = qpSetStringAttrib("Name", name);
     7700+    attribs[numAttribs++] = qpSetStringAttrib("Description", description);
     7701+    attribs[numAttribs++] = qpSetStringAttrib("Tag", tagName);
     7702 
     7703-       if (unit)
     7704-               attribs[numAttribs++] = qpSetStringAttrib("Unit", unit);
     7705+    if (unit)
     7706+        attribs[numAttribs++] = qpSetStringAttrib("Unit", unit);
     7707 
     7708-       if (!qpXmlWriter_startElement(log->writer, "ValueInfo", numAttribs, attribs) ||
     7709-               !qpXmlWriter_endElement(log->writer, "ValueInfo"))
     7710-       {
     7711-               qpPrintf("qpTestLog_writeValueInfo(): Writing XML failed\n");
     7712-               deMutex_unlock(log->lock);
     7713-               return DE_FALSE;
     7714-       }
     7715+    if (!qpXmlWriter_startElement(log->writer, "ValueInfo", numAttribs, attribs) ||
     7716+        !qpXmlWriter_endElement(log->writer, "ValueInfo"))
     7717+    {
     7718+        qpPrintf("qpTestLog_writeValueInfo(): Writing XML failed\n");
     7719+        deMutex_unlock(log->lock);
     7720+        return DE_FALSE;
     7721+    }
     7722 
     7723-       deMutex_unlock(log->lock);
     7724-       return DE_TRUE;
     7725+    deMutex_unlock(log->lock);
     7726+    return DE_TRUE;
     7727 }
     7728 
     7729 deBool qpTestLog_endSampleInfo (qpTestLog* log)
     7730 {
     7731-       DE_ASSERT(log);
     7732-       deMutex_lock(log->lock);
     7733+    DE_ASSERT(log);
     7734+    deMutex_lock(log->lock);
     7735 
     7736-       if (!qpXmlWriter_endElement(log->writer, "SampleInfo"))
     7737-       {
     7738-               qpPrintf("qpTestLog_endSampleInfo(): Writing XML failed\n");
     7739-               deMutex_unlock(log->lock);
     7740-               return DE_FALSE;
     7741-       }
     7742+    if (!qpXmlWriter_endElement(log->writer, "SampleInfo"))
     7743+    {
     7744+        qpPrintf("qpTestLog_endSampleInfo(): Writing XML failed\n");
     7745+        deMutex_unlock(log->lock);
     7746+        return DE_FALSE;
     7747+    }
     7748 
     7749-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLEINFO);
     7750+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLEINFO);
     7751 
     7752-       deMutex_unlock(log->lock);
     7753-       return DE_TRUE;
     7754+    deMutex_unlock(log->lock);
     7755+    return DE_TRUE;
     7756 }
     7757 
     7758 deBool qpTestLog_startSample (qpTestLog* log)
     7759 {
     7760-       DE_ASSERT(log);
     7761-       deMutex_lock(log->lock);
     7762+    DE_ASSERT(log);
     7763+    deMutex_lock(log->lock);
     7764 
     7765-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLELIST);
     7766+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLELIST);
     7767 
     7768-       if (!qpXmlWriter_startElement(log->writer, "Sample", 0, DE_NULL))
     7769-       {
     7770-               qpPrintf("qpTestLog_startSample(): Writing XML failed\n");
     7771-               deMutex_unlock(log->lock);
     7772-               return DE_FALSE;
     7773-       }
     7774+    if (!qpXmlWriter_startElement(log->writer, "Sample", 0, DE_NULL))
     7775+    {
     7776+        qpPrintf("qpTestLog_startSample(): Writing XML failed\n");
     7777+        deMutex_unlock(log->lock);
     7778+        return DE_FALSE;
     7779+    }
     7780 
     7781-       DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLE));
     7782+    DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SAMPLE));
     7783 
     7784-       deMutex_unlock(log->lock);
     7785-       return DE_TRUE;
     7786+    deMutex_unlock(log->lock);
     7787+    return DE_TRUE;
     7788 }
     7789 
     7790 deBool qpTestLog_writeValueFloat (qpTestLog* log, double value)
     7791 {
     7792-       char tmpString[512];
     7793-       doubleToString(value, tmpString, (int)sizeof(tmpString));
     7794+    char tmpString[512];
     7795+    doubleToString(value, tmpString, (int)sizeof(tmpString));
     7796 
     7797-       deMutex_lock(log->lock);
     7798+    deMutex_lock(log->lock);
     7799 
     7800-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7801+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7802 
     7803-       if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0]))
     7804-       {
     7805-               qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n");
     7806-               deMutex_unlock(log->lock);
     7807-               return DE_FALSE;
     7808-       }
     7809+    if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0]))
     7810+    {
     7811+        qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n");
     7812+        deMutex_unlock(log->lock);
     7813+        return DE_FALSE;
     7814+    }
     7815 
     7816-       deMutex_unlock(log->lock);
     7817-       return DE_TRUE;
     7818+    deMutex_unlock(log->lock);
     7819+    return DE_TRUE;
     7820 }
     7821 
     7822 deBool qpTestLog_writeValueInteger (qpTestLog* log, deInt64 value)
     7823 {
     7824-       char tmpString[64];
     7825-       int64ToString(value, tmpString);
     7826+    char tmpString[64];
     7827+    int64ToString(value, tmpString);
     7828 
     7829-       deMutex_lock(log->lock);
     7830+    deMutex_lock(log->lock);
     7831 
     7832-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7833+    DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7834 
     7835-       if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0]))
     7836-       {
     7837-               qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n");
     7838-               deMutex_unlock(log->lock);
     7839-               return DE_FALSE;
     7840-       }
     7841+    if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0]))
     7842+    {
     7843+        qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n");
     7844+        deMutex_unlock(log->lock);
     7845+        return DE_FALSE;
     7846+    }
     7847 
     7848-       deMutex_unlock(log->lock);
     7849-       return DE_TRUE;
     7850+    deMutex_unlock(log->lock);
     7851+    return DE_TRUE;
     7852 }
     7853 
     7854 deBool qpTestLog_endSample (qpTestLog* log)
     7855 {
     7856-       DE_ASSERT(log);
     7857-       deMutex_lock(log->lock);
     7858+    DE_ASSERT(log);
     7859+    deMutex_lock(log->lock);
     7860 
     7861-       if (!qpXmlWriter_endElement(log->writer, "Sample"))
     7862-       {
     7863-               qpPrintf("qpTestLog_endSample(): Writing XML failed\n");
     7864-               deMutex_unlock(log->lock);
     7865-               return DE_FALSE;
     7866-       }
     7867+    if (!qpXmlWriter_endElement(log->writer, "Sample"))
     7868+    {
     7869+        qpPrintf("qpTestLog_endSample(): Writing XML failed\n");
     7870+        deMutex_unlock(log->lock);
     7871+        return DE_FALSE;
     7872+    }
     7873 
     7874-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7875+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLE);
     7876 
     7877-       deMutex_unlock(log->lock);
     7878-       return DE_TRUE;
     7879+    deMutex_unlock(log->lock);
     7880+    return DE_TRUE;
     7881 }
     7882 
     7883 deBool qpTestLog_endSampleList (qpTestLog* log)
     7884 {
     7885-       DE_ASSERT(log);
     7886-       deMutex_lock(log->lock);
     7887+    DE_ASSERT(log);
     7888+    deMutex_lock(log->lock);
     7889 
     7890-       if (!qpXmlWriter_endElement(log->writer, "SampleList"))
     7891-       {
     7892-               qpPrintf("qpTestLog_endSampleList(): Writing XML failed\n");
     7893-               deMutex_unlock(log->lock);
     7894-               return DE_FALSE;
     7895-       }
     7896+    if (!qpXmlWriter_endElement(log->writer, "SampleList"))
     7897+    {
     7898+        qpPrintf("qpTestLog_endSampleList(): Writing XML failed\n");
     7899+        deMutex_unlock(log->lock);
     7900+        return DE_FALSE;
     7901+    }
     7902 
     7903-       DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLELIST);
     7904+    DE_ASSERT(ContainerStack_pop(&log->containerStack) == CONTAINERTYPE_SAMPLELIST);
     7905 
     7906-       deMutex_unlock(log->lock);
     7907-       return DE_TRUE;
     7908+    deMutex_unlock(log->lock);
     7909+    return DE_TRUE;
     7910 }
     7911 
     7912 deUint32 qpTestLog_getLogFlags (const qpTestLog* log)
     7913 {
     7914-       DE_ASSERT(log);
     7915-       return log->flags;
     7916+    DE_ASSERT(log);
     7917+    return log->flags;
     7918 }
     7919 
     7920 const char* qpGetTestResultName (qpTestResult result)
     7921 {
     7922-       return QP_LOOKUP_STRING(s_qpTestResultMap, result);
     7923+    return QP_LOOKUP_STRING(s_qpTestResultMap, result);
     7924 }
     7925diff --git a/src/tests/perf_tests/MultiviewPerf.cpp b/src/tests/perf_tests/MultiviewPerf.cpp
     7926index 8c106b493..c3d99d23d 100644
     7927--- a/src/tests/perf_tests/MultiviewPerf.cpp
     7928+++ b/src/tests/perf_tests/MultiviewPerf.cpp
     7929@@ -273,7 +273,7 @@ void MultiviewCPUBoundBenchmark::initializeBenchmark()
     7930         "{\n"
     7931         "   vec4 v = vPosition;\n"
     7932         "   v.xy += uOffset;\n"
     7933-        "      gl_Position = v;\n"
     7934+        "   gl_Position = v;\n"
     7935         "}\n";
     7936 
     7937     const std::string &fs =
     7938@@ -371,7 +371,7 @@ void MultiviewGPUBoundBenchmark::initializeBenchmark()
     7939         "   frag_Col3 = vert_Col3;\n"
     7940         "   frag_Col4 = vert_Col4;\n"
     7941         "   frag_Col5 = vert_Col5;\n"
     7942-        "      gl_Position = vPosition;\n"
     7943+        "   gl_Position = vPosition;\n"
     7944         "}\n";
     7945 
     7946     const std::string &fs =
     7947diff --git a/src/tests/third_party/rapidjson/include/rapidjson/prettywriter.h b/src/tests/third_party/rapidjson/include/rapidjson/prettywriter.h
     7948index ce2dac5a1..1d7c70f02 100644
     7949--- a/src/tests/third_party/rapidjson/include/rapidjson/prettywriter.h
     7950+++ b/src/tests/third_party/rapidjson/include/rapidjson/prettywriter.h
     7951@@ -89,7 +89,7 @@ public:
     7952     }
     7953 
     7954     bool Key(const Ch* str, SizeType length, bool copy = false) { return String(str, length, copy); }
     7955-       
     7956+   
     7957     bool EndObject(SizeType memberCount = 0) {
     7958         (void)memberCount;
     7959         RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
     7960diff --git a/src/tests/third_party/rapidjson/include/rapidjson/reader.h b/src/tests/third_party/rapidjson/include/rapidjson/reader.h
     7961index 08425eb9e..bc5cdcf2d 100644
     7962--- a/src/tests/third_party/rapidjson/include/rapidjson/reader.h
     7963+++ b/src/tests/third_party/rapidjson/include/rapidjson/reader.h
     7964@@ -261,23 +261,23 @@ void SkipWhitespace(InputStream& is) {
     7965 #ifdef RAPIDJSON_SSE42
     7966 //! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once.
     7967 inline const char *SkipWhitespace_SIMD(const char* p) {
     7968-       // Fast return for single non-whitespace
     7969-       if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     7970-               ++p;
     7971-       else
     7972-               return p;
     7973-
     7974-       // 16-byte align to the next boundary
     7975-       const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & ~15);
     7976-       while (p != nextAligned)
     7977-               if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     7978-                       ++p;
     7979-               else
     7980-                       return p;
     7981+    // Fast return for single non-whitespace
     7982+    if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     7983+        ++p;
     7984+    else
     7985+        return p;
     7986+
     7987+    // 16-byte align to the next boundary
     7988+    const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & ~15);
     7989+    while (p != nextAligned)
     7990+        if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     7991+            ++p;
     7992+        else
     7993+            return p;
     7994 
     7995     // The rest of string using SIMD
     7996-       static const char whitespace[16] = " \n\r\t";
     7997-       const __m128i w = _mm_loadu_si128((const __m128i *)&whitespace[0]);
     7998+    static const char whitespace[16] = " \n\r\t";
     7999+    const __m128i w = _mm_loadu_si128((const __m128i *)&whitespace[0]);
     8000 
     8001     for (;; p += 16) {
     8002         const __m128i s = _mm_load_si128((const __m128i *)p);
     8003@@ -298,31 +298,31 @@ inline const char *SkipWhitespace_SIMD(const char* p) {
     8004 
     8005 //! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once.
     8006 inline const char *SkipWhitespace_SIMD(const char* p) {
     8007-       // Fast return for single non-whitespace
     8008-       if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     8009-               ++p;
     8010-       else
     8011-               return p;
     8012+    // Fast return for single non-whitespace
     8013+    if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     8014+        ++p;
     8015+    else
     8016+        return p;
     8017 
     8018     // 16-byte align to the next boundary
     8019-       const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & ~15);
     8020-       while (p != nextAligned)
     8021-               if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     8022-                       ++p;
     8023-               else
     8024-                       return p;
     8025+    const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & ~15);
     8026+    while (p != nextAligned)
     8027+        if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
     8028+            ++p;
     8029+        else
     8030+            return p;
     8031 
     8032     // The rest of string
     8033-       static const char whitespaces[4][17] = {
     8034-               "                ",
     8035-               "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
     8036-               "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r",
     8037-               "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"};
     8038-
     8039-               const __m128i w0 = _mm_loadu_si128((const __m128i *)&whitespaces[0][0]);
     8040-               const __m128i w1 = _mm_loadu_si128((const __m128i *)&whitespaces[1][0]);
     8041-               const __m128i w2 = _mm_loadu_si128((const __m128i *)&whitespaces[2][0]);
     8042-               const __m128i w3 = _mm_loadu_si128((const __m128i *)&whitespaces[3][0]);
     8043+    static const char whitespaces[4][17] = {
     8044+        "                ",
     8045+        "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
     8046+        "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r",
     8047+        "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"};
     8048+
     8049+        const __m128i w0 = _mm_loadu_si128((const __m128i *)&whitespaces[0][0]);
     8050+        const __m128i w1 = _mm_loadu_si128((const __m128i *)&whitespaces[1][0]);
     8051+        const __m128i w2 = _mm_loadu_si128((const __m128i *)&whitespaces[2][0]);
     8052+        const __m128i w3 = _mm_loadu_si128((const __m128i *)&whitespaces[3][0]);
     8053 
     8054     for (;; p += 16) {
     8055         const __m128i s = _mm_load_si128((const __m128i *)p);
     8056diff --git a/src/tests/third_party/rapidjson/include/rapidjson/writer.h b/src/tests/third_party/rapidjson/include/rapidjson/writer.h
     8057index 6daa78330..98931fe31 100644
     8058--- a/src/tests/third_party/rapidjson/include/rapidjson/writer.h
     8059+++ b/src/tests/third_party/rapidjson/include/rapidjson/writer.h
     8060@@ -134,7 +134,7 @@ public:
     8061     }
     8062 
     8063     bool Key(const Ch* str, SizeType length, bool copy = false) { return String(str, length, copy); }
     8064-       
     8065+   
     8066     bool EndObject(SizeType memberCount = 0) {
     8067         (void)memberCount;
     8068         RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
Note: See TracChangeset for help on using the changeset viewer.