X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcore%2Fprogram.cpp;h=476a9c7d6aba319c9e42cb3fd345a0a889d014aa;hb=df9119a9bf2d348a513c515ed92953353da97b54;hp=1a7ac17b3e99325d33918cebff6593b4c257a989;hpb=afb4e0ab972776eb17e97ca8f3be02c64e77cf46;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index 1a7ac17b..476a9c7d 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -32,26 +32,15 @@ void Program::add_stages(const Module &mod, const map &spec_values) throw invalid_argument("Program::add_stages"); } - finalize(mod); + finalize(mod, transient); - if(mod.get_format()==Module::GLSL) - { - query_uniforms(); - query_attributes(); - apply_bindings(transient); - } - else if(mod.get_format()==Module::SPIR_V) + if(mod.get_format()==Module::SPIR_V) { collect_uniforms(static_cast(mod), transient.spec_values); collect_attributes(static_cast(mod)); } - for(ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks) - if(!b.data_size && !b.uniforms.empty()) - { - const ReflectData::UniformInfo &uni = *b.uniforms.back(); - b.data_size = uni.location*16+uni.array_size*get_type_size(uni.type); - } + finalize_uniforms(); for(const ReflectData::UniformInfo &u: reflect_data.uniforms) require_type(u.type); @@ -90,7 +79,7 @@ void Program::collect_uniforms(const SpirVModule &mod, const map info.tag = v.name; info.location = v.location; info.binding = v.binding; - info.array_size = v.array_size; + info.array_size = max(v.array_size, 1U); info.type = v.type; } } @@ -147,7 +136,7 @@ void Program::collect_block_uniforms(const SpirVModule::Structure &strct, const info.name = name; info.tag = name; info.offset = offset; - info.array_size = m.array_size; + info.array_size = max(m.array_size, 1U); info.array_stride = m.array_stride; info.matrix_stride = m.matrix_stride; info.type = m.type;