for(SharedBlock &b: blocks)
delete b.block;
+ blocks.clear();
programs.clear();
last_buffer_block = 0;
{
if(tied_program)
{
- const Program::UniformInfo &info = tied_program->get_uniform_info(tag);
+ const ReflectData::UniformInfo &info = tied_program->get_uniform_info(tag);
if(is_image(info.type))
throw invalid_operation("ProgramData::uniform");
}
vector<ProgramData::ProgramBlock>::iterator ProgramData::get_program(const Program &prog) const
{
- Program::LayoutHash prog_hash = prog.get_uniform_layout_hash();
+ ReflectData::LayoutHash prog_hash = prog.get_uniform_layout_hash();
auto i = lower_bound_member(programs, prog_hash, &ProgramBlock::prog_hash);
if(i!=programs.end() && i->prog_hash==prog_hash)
return i;
- const vector<Program::UniformBlockInfo> &block_infos = prog.get_uniform_blocks();
+ const vector<ReflectData::UniformBlockInfo> &block_infos = prog.get_uniform_blocks();
unsigned index = i-programs.begin();
programs.insert(i, 1+block_infos.size(), ProgramBlock(prog_hash));
/* Block indices may change if new shared blocks need to be inserted. Store
the hashes so they can be matched up later. */
- vector<Program::LayoutHash> block_hashes;
+ vector<ReflectData::LayoutHash> block_hashes;
block_hashes.reserve(programs.size());
for(const ProgramBlock &b: programs)
block_hashes.push_back(b.block_index>=0 ? blocks[b.block_index].block_hash : 0);
for(unsigned j=0; j<block_infos.size(); ++j)
{
- const Program::UniformBlockInfo &info = block_infos[j];
+ const ReflectData::UniformBlockInfo &info = block_infos[j];
block_hashes[index+1+j] = info.layout_hash;
programs[index+1+j].bind_point = info.bind_point;
return programs.begin()+index;
}
-void ProgramData::update_block_uniform_indices(SharedBlock &block, const Program::UniformBlockInfo &info) const
+void ProgramData::update_block_uniform_indices(SharedBlock &block, const ReflectData::UniformBlockInfo &info) const
{
- UInt8 *indices = block.indices.values;
+ uint8_t *indices = block.indices.values;
if(info.uniforms.size()>16)
{
if(block.indices.type_flag==0xFD)
{
- block.indices.dynamic.values = new UInt8[info.uniforms.size()];
+ block.indices.dynamic.values = new uint8_t[info.uniforms.size()];
block.indices.type_flag = 0xFE;
}
indices = block.indices.dynamic.values;
}
}
-void ProgramData::update_block(SharedBlock &block, const Program::UniformBlockInfo &info) const
+void ProgramData::update_block(SharedBlock &block, const ReflectData::UniformBlockInfo &info) const
{
- const UInt8 *indices = block.get_uniform_indices();
+ const uint8_t *indices = block.get_uniform_indices();
for(unsigned i=0; i<info.uniforms.size(); ++i)
{
if(is_image(info.uniforms[i]->type))
dirty = 0;
}
- const vector<Program::UniformBlockInfo> &block_infos = prog.get_uniform_blocks();
+ const vector<ReflectData::UniformBlockInfo> &block_infos = prog.get_uniform_blocks();
if(prog_begin->masks.dirty==ALL_ONES)
{
Refresh uniform indices within the program's blocks. */
prog_begin->masks.used = 0;
auto j = prog_begin+1;
- for(const Program::UniformBlockInfo &b: block_infos)
+ for(const ReflectData::UniformBlockInfo &b: block_infos)
{
SharedBlock &shared = blocks[j->block_index];
if(shared.dirty==ALL_ONES)
// Update the contents of all dirty blocks.
bool buffered_blocks_updated = false;
auto j = prog_begin+1;
- for(const Program::UniformBlockInfo &b: block_infos)
+ for(const ReflectData::UniformBlockInfo &b: block_infos)
{
SharedBlock &shared = blocks[j->block_index];
if(shared.dirty)
void ProgramData::apply(const Program &prog, PipelineState &state) const
{
auto prog_begin = prepare_program(prog);
- Program::LayoutHash prog_hash = prog_begin->prog_hash;
+ ReflectData::LayoutHash prog_hash = prog_begin->prog_hash;
for(auto i=prog_begin+1; (i!=programs.end() && i->prog_hash==prog_hash); ++i)
if(i->block)
{
}
-ProgramData::SharedBlock::SharedBlock(Program::LayoutHash h):
+ProgramData::SharedBlock::SharedBlock(ReflectData::LayoutHash h):
block_hash(h),
used(0),
dirty(0),
indices.type_flag = 0xFD;
}
-const UInt8 *ProgramData::SharedBlock::get_uniform_indices() const
+const uint8_t *ProgramData::SharedBlock::get_uniform_indices() const
{
return (indices.type_flag==0xFE ? indices.dynamic.values : indices.values);
}
-ProgramData::ProgramBlock::ProgramBlock(Program::LayoutHash h):
+ProgramData::ProgramBlock::ProgramBlock(ReflectData::LayoutHash h):
prog_hash(h),
bind_point(-1),
block_index(-1)