const BlockMemberInfo memberInfo(static_cast<int>(mCurrentOffset * BytesPerComponent),\r
static_cast<int>(arrayStride * BytesPerComponent),\r
static_cast<int>(matrixStride * BytesPerComponent),\r
- isRowMajor);\r
+ (matrixStride > 0) && isRowMajor);\r
\r
advanceOffset(type, type.getArraySize(), isRowMajor, arrayStride, matrixStride);\r
\r
declareVarying(symbol, -1);\r
}\r
}\r
+\r
+ TInterfaceBlock* block = symbol->getType().getInterfaceBlock();\r
+ // OpenGL ES 3.0.4 spec, section 2.12.6 Uniform Variables:\r
+ // "All members of a named uniform block declared with a shared or std140 layout qualifier\r
+ // are considered active, even if they are not referenced in any shader in the program.\r
+ // The uniform block itself is also considered active, even if no member of the block is referenced."\r
+ if(block && ((block->blockStorage() == EbsShared) || (block->blockStorage() == EbsStd140)))\r
+ {\r
+ uniformRegister(symbol);\r
+ }\r
}\r
\r
bool OutputASM::visitBinary(Visit visit, TIntermBinary *node)\r
{\r
return registerSize(*((*(type.getStruct()->fields().begin()))->type()), 0);\r
}\r
+ else if(type.isInterfaceBlock())\r
+ {\r
+ return registerSize(*((*(type.getInterfaceBlock()->fields().begin()))->type()), 0);\r
+ }\r
\r
return type.registerSize();\r
}\r