File tree Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -2136,12 +2136,17 @@ void GLShader::PostProcessUniforms() {
21362136 auto iterNext = FindUniformForOffset ( uniformQueue, std140Size );
21372137 if ( iterNext == uniformQueue.end () ) {
21382138 // add 1 unit of padding
2139+ ASSERT ( !( *iterNext )->_components ); // array WriteToBuffer impls don't handle padding correctly
21392140 ++std140Size;
21402141 ++_materialSystemUniforms.back ()->_std430Size ;
21412142 } else {
2142- ASSERT_EQ ( 0 , ( *iterNext )->_components ); // array handling not implemented
21432143 ( *iterNext )->_std430Size = ( *iterNext )->_std430BaseSize ;
2144- std140Size += ( *iterNext )->_std430Size ;
2144+ if ( ( *iterNext )->_components ) {
2145+ ASSERT_GE ( ( *iterNext )->_std430Alignment , 4 ); // aligment less than 4 not compatible with std130
2146+ std140Size += ( *iterNext )->_std430Size * ( *iterNext )->_components ;
2147+ } else {
2148+ std140Size += ( *iterNext )->_std430Size ;
2149+ }
21452150 align = std::max ( align, ( *iterNext )->_std430Alignment );
21462151 _materialSystemUniforms.push_back ( *iterNext );
21472152 uniformQueue.erase ( iterNext );
Original file line number Diff line number Diff line change @@ -122,4 +122,21 @@ TEST(MaterialUniformPackingTest, Vec3Handling)
122122 EXPECT_EQ (uniforms[3 ]->_std430Size, 4u );
123123}
124124
125+ TEST (MaterialUniformPackingTest, Array)
126+ {
127+ class Shader1 : public MaterialUniformPackingTestShaderBase ,
128+ public u_Frustum // vec4[6]
129+ {
130+ public:
131+ Shader1 () : u_Frustum(this ) {}
132+ };
133+
134+ Shader1 shader1;
135+ std::vector<GLUniform*> uniforms = shader1.GetUniforms ();
136+ EXPECT_EQ (shader1.GetSTD140Size (), 24u );
137+ ASSERT_EQ (uniforms.size (), 1 );
138+ EXPECT_EQ (uniforms[0 ], Get<u_Frustum>(shader1));
139+ EXPECT_EQ (uniforms[0 ]->_std430Size , 4u );
140+ }
141+
125142} // namespace
You can’t perform that action at this time.
0 commit comments