void HLSLBlockEncoder::getBlockLayoutInfo(GLenum typeIn, unsigned int arraySize, bool isRowMajorMatrix, int *arrayStrideOut, int *matrixStrideOut) { GLenum type = (mTransposeMatrices ? gl::TransposeMatrixType(typeIn) : typeIn); // We assume we are only dealing with 4 byte components (no doubles or half-words currently) ASSERT(gl::VariableComponentSize(gl::VariableComponentType(type)) == BytesPerComponent); int matrixStride = 0; int arrayStride = 0; // if variables are not to be packed, or we're about to // pack a matrix or array, skip to the start of the next // register if (!isPacked() || gl::IsMatrixType(type) || arraySize > 0) { nextRegister(); } if (gl::IsMatrixType(type)) { matrixStride = ComponentsPerRegister; if (arraySize > 0) { const int numRegisters = gl::MatrixRegisterCount(type, isRowMajorMatrix); arrayStride = ComponentsPerRegister * numRegisters; } } else if (arraySize > 0) { arrayStride = ComponentsPerRegister; } else if (isPacked()) { int numComponents = gl::VariableComponentCount(type); if ((numComponents + (mCurrentOffset % ComponentsPerRegister)) > ComponentsPerRegister) { nextRegister(); } } *matrixStrideOut = matrixStride; *arrayStrideOut = arrayStride; }
void Std140BlockEncoder::exitAggregateType() { nextRegister(); }
void HLSLBlockEncoder::enterAggregateType() { nextRegister(); }