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  ); //  these would need extra padding in a std130 array
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