]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/program.cpp
Record texture bindings from SPIR-V modules
[libs/gl.git] / source / core / program.cpp
index 0d8e6bd1e2ae09bfbe509c8b07e9bfd42d145219..9b5400a38122073af034eb05a17cdef434ad5820 100644 (file)
@@ -400,6 +400,9 @@ void Program::query_uniforms()
                        i->location = glGetUniformLocation(id, i->name.c_str());
                        i->block = &default_block;
                        default_block.uniforms.push_back(&*i);
+
+                       if(is_image(i->type) && i->location>=0)
+                               glGetUniformiv(id, i->location, &i->binding);
                }
 
        default_block.layout_hash = compute_layout_hash(default_block.uniforms);
@@ -534,6 +537,7 @@ void Program::collect_uniforms()
                        info.name = i->name;
                        info.tag = i->name;
                        info.location = i->location;
+                       info.binding = i->binding;
                        info.array_size = i->array_size;
                        info.type = i->type;
                }
@@ -681,6 +685,12 @@ int Program::get_uniform_location(Tag tag) const
        return i!=uniforms.end() && i->tag==tag && i->block->bind_point<0 ? i->location : -1;
 }
 
+int Program::get_uniform_binding(Tag tag) const
+{
+       vector<UniformInfo>::const_iterator i = lower_bound_member(uniforms, tag, &UniformInfo::tag);
+       return i!=uniforms.end() && i->tag==tag ? i->binding : -1;
+}
+
 const Program::AttributeInfo &Program::get_attribute_info(const string &name) const
 {
        vector<AttributeInfo>::const_iterator i = lower_bound_member(attributes, name, &AttributeInfo::name);
@@ -724,7 +734,8 @@ Program::UniformInfo::UniformInfo():
        array_size(0),
        array_stride(0),
        matrix_stride(0),
-       type(VOID)
+       type(VOID),
+       binding(-1)
 { }