build_info
{
- standard CXX "c++14";
+ standard CXX "c++17";
};
generate "RES"
if(len>3 && !strcmp(name+len-3, "[0]"))
name[len-3] = 0;
- rd.uniforms.emplace_back();
- ReflectData::UniformInfo &info = rd.uniforms.back();
+ ReflectData::UniformInfo &info = rd.uniforms.emplace_back();
info.tag = info.name = name;
info.array_size = size;
info.type = from_gl_type(type);
query_uniform_blocks(uniforms_by_index);
}
- rd.blocks.emplace_back();
- ReflectData::BlockInfo &default_block = rd.blocks.back();
+ ReflectData::BlockInfo &default_block = rd.blocks.emplace_back();
for(ReflectData::UniformInfo &u: rd.uniforms)
if(!u.block)
rd.blocks.reserve(count+1);
for(unsigned i=0; i<count; ++i)
{
- rd.blocks.emplace_back();
- ReflectData::BlockInfo &info = rd.blocks.back();
+ ReflectData::BlockInfo &info = rd.blocks.emplace_back();
char name[128];
int len;
if(len>3 && !strcmp(name+len-3, "[0]"))
name[len-3] = 0;
- rd.attributes.emplace_back();
- ReflectData::AttributeInfo &info = rd.attributes.back();
+ ReflectData::AttributeInfo &info = rd.attributes.emplace_back();
info.name = name;
info.location = glGetAttribLocation(id, name);
info.array_size = size;
rd.blocks.reserve(rd.blocks.size()+count);
for(unsigned i=0; i<count; ++i)
{
- rd.blocks.emplace_back();
- ReflectData::BlockInfo &info = rd.blocks.back();
+ ReflectData::BlockInfo &info = rd.blocks.emplace_back();
char name[128];
int len;
unsigned MemoryAllocator::split_block(unsigned index, size_t head_size)
{
- blocks.emplace_back();
+ Block &tail = blocks.emplace_back();
Block &block = blocks[index];
- Block &tail = blocks.back();
unsigned tail_index = blocks.size()-1;
tail.region = block.region;
for(const ReflectData::BlockInfo &b: rd.blocks)
if(b.bind_point>=0 && static_cast<unsigned>(b.bind_point>>20)==j)
{
- bindings.emplace_back();
- VkDescriptorSetLayoutBinding &binding = bindings.back();
+ VkDescriptorSetLayoutBinding &binding = bindings.emplace_back();
binding.binding = b.bind_point&0xFFFFF;
if(b.is_storage())
binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
for(const ReflectData::UniformInfo &u: rd.uniforms)
if(u.binding>=0 && static_cast<unsigned>(u.binding>>20)==j && is_image(u.type))
{
- bindings.emplace_back();
- VkDescriptorSetLayoutBinding &binding = bindings.back();
+ VkDescriptorSetLayoutBinding &binding = bindings.emplace_back();
binding.binding = u.binding&0xFFFFF;
if(u.is_storage_image())
binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
if(parts.size()>=parts.capacity())
throw invalid_operation("StructureBuilder::add");
- parts.emplace_back();
- Part &part = parts.back();
+ Part &part = parts.emplace_back();
part.offset = storage.size()+align-1;
part.offset -= part.offset%align;
if(b.pending_write==b.was_written)
continue;
- buffer_barriers.emplace_back(VkBufferMemoryBarrier{ });
- VkBufferMemoryBarrier &barrier = buffer_barriers.back();
+ VkBufferMemoryBarrier &barrier = buffer_barriers.emplace_back(VkBufferMemoryBarrier{ });
barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
barrier.srcAccessMask = (b.was_written ? VK_ACCESS_MEMORY_WRITE_BIT : 0);
if(i.level==-2 || i.pending_layout==i.current_layout)
continue;
- image_barriers.emplace_back(VkImageMemoryBarrier{ });
- VkImageMemoryBarrier &barrier = image_barriers.back();
+ VkImageMemoryBarrier &barrier = image_barriers.emplace_back(VkImageMemoryBarrier{ });
barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
barrier.srcAccessMask = (is_write_layout(i.current_layout) ? VK_ACCESS_MEMORY_WRITE_BIT : 0);
for(unsigned i=0; i<n_images; ++i)
{
const SwapChainTexture &image = swap_chain->get_image(i);
- framebuffers.emplace_back((COLOR_ATTACHMENT, image.get_format()));
- framebuffers.back().attach(COLOR_ATTACHMENT, swap_chain->get_image(i));
+ Framebuffer &fb = framebuffers.emplace_back((COLOR_ATTACHMENT, image.get_format()));
+ fb.attach(COLOR_ATTACHMENT, swap_chain->get_image(i));
}
current_target = &framebuffers.front();
entry_points.reserve(reflection.entry_points.size());
for(auto &kvp: reflection.entry_points)
{
- entry_points.emplace_back(move(kvp.second));
- EntryPoint &entry = entry_points.back();
+ EntryPoint &entry = entry_points.emplace_back(move(kvp.second));
for(const Variable *&v: entry.globals)
{
auto i = var_indices.find(v);
{
if((v.storage==SpirVModule::UNIFORM || v.storage==SpirVModule::PUSH_CONSTANT || v.storage==SpirVModule::STORAGE_BUFFER) && v.struct_type)
{
- reflect_data.blocks.emplace_back();
- ReflectData::BlockInfo &info = reflect_data.blocks.back();
+ ReflectData::BlockInfo &info = reflect_data.blocks.emplace_back();
info.tag = info.name = v.struct_type->name;
if(v.storage!=SpirVModule::STORAGE_BUFFER)
info.data_size = v.struct_type->size;
reflect_data.n_descriptor_sets = max(reflect_data.n_descriptor_sets, v.descriptor_set+1);
}
- block_uniform_names.emplace_back();
+ vector<string> &names = block_uniform_names.emplace_back();
if(!info.is_storage())
{
string prefix;
if(!v.name.empty())
prefix = v.struct_type->name+".";
- collect_block_uniforms(*v.struct_type, prefix, 0, block_uniform_names.back());
+ collect_block_uniforms(*v.struct_type, prefix, 0, names);
}
}
else if(v.storage==SpirVModule::UNIFORM_CONSTANT && (v.location>=0 || v.binding>=0))
{
block_uniform_names[0].push_back(v.name);
- reflect_data.uniforms.emplace_back();
- ReflectData::UniformInfo &info = reflect_data.uniforms.back();
+ ReflectData::UniformInfo &info = reflect_data.uniforms.emplace_back();
info.tag = info.name = v.name;
info.location = v.location;
if(v.binding>=0)
}
else
{
- uniform_names.emplace_back(prefix+m.name);
- const string &name = uniform_names.back();
- reflect_data.uniforms.emplace_back();
- ReflectData::UniformInfo &info = reflect_data.uniforms.back();
+ const string &name = uniform_names.emplace_back(prefix+m.name);
+ ReflectData::UniformInfo &info = reflect_data.uniforms.emplace_back();
info.name = name;
info.tag = name;
info.offset = offset;
for(const SpirVModule::Variable *v: e.globals)
if(v->storage==SpirVModule::INPUT)
{
- reflect_data.attributes.emplace_back();
- ReflectData::AttributeInfo &info = reflect_data.attributes.back();
+ ReflectData::AttributeInfo &info = reflect_data.attributes.emplace_back();
info.name = v->name;
info.location = v->location;
info.array_size = v->array_size;
unsigned n_views = (type==TETRAHEDRON ? 4 : 1);
- lights.emplace_back();
- ShadowedLight &sl = lights.back();
+ ShadowedLight &sl = lights.emplace_back();
sl.light = &light;
sl.index = index;
sl.region = region;
if(targets_overlap(i->first, assign.target))
i->second->blocked = true;
- expressions.emplace_back();
- ExpressionInfo &info = expressions.back();
+ ExpressionInfo &info = expressions.emplace_back();
info.target = assign.target;
// Self-referencing assignments can't be inlined without additional work.
if(!assign.self_referencing)
analyze and non-trivial expressions could be expensive to inline. */
if((current_block->parent || (constant && r_trivial)) && var.interface.empty())
{
- expressions.emplace_back();
- ExpressionInfo &info = expressions.back();
+ ExpressionInfo &info = expressions.emplace_back();
info.target = &var;
/* Assume variables declared in an iteration initialization statement
will have their values change throughout the iteration. */
void UnusedVariableRemover::record_assignment(const Assignment::Target &target, Node &node)
{
- assignments.emplace_back();
- AssignmentInfo &assign_info = assignments.back();
+ AssignmentInfo &assign_info = assignments.emplace_back();
assign_info.node = &node;
assign_info.target = target;
assign_info.in_loop = in_loop;
void InstanceArrayBase::add_block(size_t count)
{
- storage.emplace_back();
- Block &block = storage.back();
+ Block &block = storage.emplace_back();
block.begin = new char[count*instance_size];
block.end = block.begin+count*instance_size;
throw invalid_operation("Renderer::begin");
++frame_number;
- state_stack.emplace_back();
- current_state = &state_stack.back();
+ current_state = &state_stack.emplace_back();
RendererBackend::begin();
break;
}
- stack.emplace_back();
- BoundResource<T> &bound_res = stack.back();
+ BoundResource<T> &bound_res = stack.emplace_back();
bound_res.tag = tag;
bound_res.resource = res;
count = stack.size();
Sequence::Step &Sequence::add_step(Tag tag, Renderable &r)
{
- steps.emplace_back(tag, &r);
- return steps.back();
+ return steps.emplace_back(tag, &r);
}
void Sequence::add_postprocessor(PostProcessor &pp)