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() {
2136
2136
auto iterNext = FindUniformForOffset ( uniformQueue, std140Size );
2137
2137
if ( iterNext == uniformQueue.end () ) {
2138
2138
// add 1 unit of padding
2139
+ ASSERT ( !( *iterNext )->_components ); // array WriteToBuffer impls don't handle padding correctly
2139
2140
++std140Size;
2140
2141
++_materialSystemUniforms.back ()->_std430Size ;
2141
2142
} else {
2142
- ASSERT_EQ ( 0 , ( *iterNext )->_components ); // array handling not implemented
2143
2143
( *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
+ }
2145
2150
align = std::max ( align, ( *iterNext )->_std430Alignment );
2146
2151
_materialSystemUniforms.push_back ( *iterNext );
2147
2152
uniformQueue.erase ( iterNext );
Original file line number Diff line number Diff line change @@ -122,4 +122,21 @@ TEST(MaterialUniformPackingTest, Vec3Handling)
122
122
EXPECT_EQ (uniforms[3 ]->_std430Size, 4u );
123
123
}
124
124
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
+
125
142
} // namespace
You can’t perform that action at this time.
0 commit comments