X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;h=acdb20e88a5488063c3778a598af10f411b1b541;hp=0b07da8e501e2a959d826dd4441347353223f27c;hb=0e61ac01ae99391c6b1301a9bf8de62fe651dac3;hpb=e0d9f85a9e4554f2bbf4354aa37ad6ae46aef718 diff --git a/source/core/program.cpp b/source/core/program.cpp index 0b07da8e..acdb20e8 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -55,6 +55,7 @@ void Program::collect_uniforms(const SpirVModule &mod) reflect_data.uniform_blocks.push_back(ReflectData::UniformBlockInfo()); vector > block_uniform_names(1); + unsigned n_descriptor_sets = 0; for(const SpirVModule::Variable &v: mod.get_variables()) { if((v.storage==SpirVModule::UNIFORM || v.storage==SpirVModule::PUSH_CONSTANT) && v.struct_type) @@ -66,8 +67,11 @@ void Program::collect_uniforms(const SpirVModule &mod) info.bind_point = ReflectData::PUSH_CONSTANT; else { - info.bind_point = v.binding; - info.descriptor_set = v.descriptor_set; + if(v.binding>=0) + info.bind_point = v.binding | (v.descriptor_set<<20); + else + info.bind_point = ReflectData::DEFAULT_BLOCK; + n_descriptor_sets = max(n_descriptor_sets, v.descriptor_set+1); } info.data_size = v.struct_type->size; @@ -85,8 +89,9 @@ void Program::collect_uniforms(const SpirVModule &mod) info.name = v.name; info.tag = v.name; info.location = v.location; - info.binding = v.binding; - info.descriptor_set = v.descriptor_set; + if(v.binding>=0) + info.binding = v.binding | (v.descriptor_set<<20); + n_descriptor_sets = max(n_descriptor_sets, v.descriptor_set+1); info.array_size = max(v.array_size, 1U); info.type = v.type; } @@ -114,6 +119,7 @@ void Program::collect_uniforms(const SpirVModule &mod) block.update_layout_hash(); } + reflect_data.n_descriptor_sets = n_descriptor_sets; reflect_data.update_layout_hash(); }