本文整理汇总了C++中Hasher::get方法的典型用法代码示例。如果您正苦于以下问题:C++ Hasher::get方法的具体用法?C++ Hasher::get怎么用?C++ Hasher::get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Hasher
的用法示例。
在下文中一共展示了Hasher::get方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: hash
std::size_t FunctionTypeData::hash() const {
Hasher hasher;
hasher.add(attributes());
hasher.add(returnType());
hasher.add(parameterTypes());
return hasher.get();
}
示例2: hash
size_t hash() const {
Hasher hasher;
hasher.add(kind());
switch (kind()) {
case NULLVAL:
break;
case BOOLEAN:
hasher.add(boolValue());
break;
case INTEGER:
hasher.add(integerValue());
break;
case FLOATINGPOINT:
hasher.add(floatValue());
break;
case CHARACTER:
hasher.add(characterValue());
break;
case STRING:
hasher.add(stringValue());
break;
}
return hasher.get();
}
示例3:
ImageView &TransientAllocator::request_attachment(unsigned width, unsigned height, VkFormat format, unsigned index)
{
Hasher h;
h.u32(width);
h.u32(height);
h.u32(format);
h.u32(index);
auto hash = h.get();
auto *node = transients.request(hash);
if (node)
return node->handle->get_view();
auto image_info = ImageCreateInfo::transient_render_target(width, height, format);
node = transients.emplace(hash, device->create_image(image_info, nullptr));
return node->handle->get_view();
}
示例4: flush_graphics_pipeline
void CommandBuffer::flush_graphics_pipeline()
{
Hasher h;
active_vbos = 0;
auto &layout = current_layout->get_resource_layout();
for_each_bit(layout.attribute_mask, [&](uint32_t bit) {
h.u32(bit);
active_vbos |= 1u << attribs[bit].binding;
h.u32(attribs[bit].binding);
h.u32(attribs[bit].format);
h.u32(attribs[bit].offset);
});
for_each_bit(active_vbos, [&](uint32_t bit) {
h.u32(vbo_input_rates[bit]);
h.u32(vbo_strides[bit]);
});
h.u64(render_pass->get_cookie());
h.u64(current_program->get_cookie());
h.data(static_state.words, sizeof(static_state.words));
if (static_state.state.blend_enable)
{
const auto needs_blend_constant = [](VkBlendFactor factor) {
return factor == VK_BLEND_FACTOR_CONSTANT_COLOR || factor == VK_BLEND_FACTOR_CONSTANT_ALPHA;
};
bool b0 = needs_blend_constant(static_cast<VkBlendFactor>(static_state.state.src_color_blend));
bool b1 = needs_blend_constant(static_cast<VkBlendFactor>(static_state.state.src_alpha_blend));
bool b2 = needs_blend_constant(static_cast<VkBlendFactor>(static_state.state.dst_color_blend));
bool b3 = needs_blend_constant(static_cast<VkBlendFactor>(static_state.state.dst_alpha_blend));
if (b0 || b1 || b2 || b3)
h.data(reinterpret_cast<uint32_t *>(potential_static_state.blend_constants),
sizeof(potential_static_state.blend_constants));
}
auto hash = h.get();
current_pipeline = current_program->get_graphics_pipeline(hash);
if (current_pipeline == VK_NULL_HANDLE)
current_pipeline = build_graphics_pipeline(hash);
}
示例5: hash
size_t Predicate::hash() const {
Hasher hasher;
hasher.add(kind());
switch (kind()) {
case TRUE:
case FALSE:
case SELFCONST:
{
break;
}
case AND:
{
hasher.add(andLeft());
hasher.add(andRight());
break;
}
case OR:
{
hasher.add(orLeft());
hasher.add(orRight());
break;
}
case SATISFIES:
{
hasher.add(satisfiesType());
hasher.add(satisfiesRequirement());
break;
}
case VARIABLE:
{
hasher.add(variableTemplateVar());
break;
}
}
return hasher.get();
}
示例6: hash
size_t Value::hash() const {
Hasher hasher;
hasher.add(kind());
hasher.add(type());
switch (kind()) {
case Value::SELF:
break;
case Value::THIS:
break;
case Value::CONSTANT:
hasher.add(constant());
break;
case Value::ALIAS:
hasher.add(&(alias()));
hasher.add(aliasTemplateArguments().size());
for (const auto& argument: aliasTemplateArguments()) {
hasher.add(argument);
}
break;
case Value::PREDICATE:
hasher.add(predicate());
break;
case Value::LOCALVAR:
hasher.add(&(localVar()));
break;
case Value::REINTERPRET:
hasher.add(reinterpretOperand());
break;
case Value::DEREF_REFERENCE:
hasher.add(derefOperand());
break;
case Value::TERNARY:
hasher.add(ternaryCondition());
hasher.add(ternaryIfTrue());
hasher.add(ternaryIfFalse());
break;
case Value::CAST:
hasher.add(castTargetType());
hasher.add(castOperand());
break;
case Value::POLYCAST:
hasher.add(polyCastTargetType());
hasher.add(polyCastOperand());
break;
case Value::INTERNALCONSTRUCT:
hasher.add(internalConstructParameters().size());
for (const auto& param: internalConstructParameters()) {
hasher.add(param);
}
break;
case Value::MEMBERACCESS:
hasher.add(memberAccessObject());
hasher.add(&(memberAccessVar()));
break;
case Value::BIND_REFERENCE:
hasher.add(bindReferenceOperand());
break;
case Value::TYPEREF:
hasher.add(typeRefType());
break;
case Value::TEMPLATEVARREF:
hasher.add(templateVar());
break;
case Value::CALL:
hasher.add(callValue());
hasher.add(callParameters().size());
for (const auto& param: callParameters()) {
hasher.add(param);
}
break;
case Value::FUNCTIONREF:
hasher.add(functionRefParentType());
hasher.add(&(functionRefFunction()));
hasher.add(functionRefTemplateArguments().size());
for (const auto& arg: functionRefTemplateArguments()) {
hasher.add(arg);
}
break;
case Value::TEMPLATEFUNCTIONREF:
hasher.add(templateFunctionRefParentType());
hasher.add(templateFunctionRefName());
hasher.add(templateFunctionRefFunctionType());
break;
case Value::METHODOBJECT:
hasher.add(methodObject());
hasher.add(methodOwner());
break;
case Value::INTERFACEMETHODOBJECT:
hasher.add(interfaceMethodObject());
hasher.add(interfaceMethodOwner());
break;
case Value::STATICINTERFACEMETHODOBJECT:
hasher.add(staticInterfaceMethodObject());
hasher.add(staticInterfaceMethodOwner());
break;
case Value::CAPABILITYTEST:
hasher.add(capabilityTestCheckType());
hasher.add(capabilityTestCapabilityType());
break;
//.........这里部分代码省略.........
示例7: flush_descriptor_set
void CommandBuffer::flush_descriptor_set(uint32_t set)
{
auto &layout = current_layout->get_resource_layout();
auto &set_layout = layout.sets[set];
uint32_t num_dynamic_offsets = 0;
uint32_t dynamic_offsets[VULKAN_NUM_BINDINGS];
Hasher h;
// UBOs
for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
h.u32(bindings[set][binding].buffer.range);
VK_ASSERT(bindings[set][binding].buffer.buffer != VK_NULL_HANDLE);
dynamic_offsets[num_dynamic_offsets++] = bindings[set][binding].buffer.offset;
});
// SSBOs
for_each_bit(set_layout.storage_buffer_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
h.u32(bindings[set][binding].buffer.offset);
h.u32(bindings[set][binding].buffer.range);
VK_ASSERT(bindings[set][binding].buffer.buffer != VK_NULL_HANDLE);
});
// Sampled buffers
for_each_bit(set_layout.sampled_buffer_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
VK_ASSERT(bindings[set][binding].buffer_view != VK_NULL_HANDLE);
});
// Sampled images
for_each_bit(set_layout.sampled_image_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
h.u64(secondary_cookies[set][binding]);
h.u32(bindings[set][binding].image.imageLayout);
VK_ASSERT(bindings[set][binding].image.imageView != VK_NULL_HANDLE);
VK_ASSERT(bindings[set][binding].image.sampler != VK_NULL_HANDLE);
});
// Storage images
for_each_bit(set_layout.storage_image_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
h.u32(bindings[set][binding].image.imageLayout);
VK_ASSERT(bindings[set][binding].image.imageView != VK_NULL_HANDLE);
});
// Input attachments
for_each_bit(set_layout.input_attachment_mask, [&](uint32_t binding) {
h.u64(cookies[set][binding]);
h.u32(bindings[set][binding].image.imageLayout);
VK_ASSERT(bindings[set][binding].image.imageView != VK_NULL_HANDLE);
});
Hash hash = h.get();
auto allocated = current_layout->get_allocator(set)->find(hash);
// The descriptor set was not successfully cached, rebuild.
if (!allocated.second)
{
uint32_t write_count = 0;
uint32_t buffer_info_count = 0;
VkWriteDescriptorSet writes[VULKAN_NUM_BINDINGS];
VkDescriptorBufferInfo buffer_info[VULKAN_NUM_BINDINGS];
for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) {
auto &write = writes[write_count++];
write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write.pNext = nullptr;
write.descriptorCount = 1;
write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
write.dstArrayElement = 0;
write.dstBinding = binding;
write.dstSet = allocated.first;
// Offsets are applied dynamically.
auto &buffer = buffer_info[buffer_info_count++];
buffer = bindings[set][binding].buffer;
buffer.offset = 0;
write.pBufferInfo = &buffer;
});
for_each_bit(set_layout.storage_buffer_mask, [&](uint32_t binding) {
auto &write = writes[write_count++];
write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write.pNext = nullptr;
write.descriptorCount = 1;
write.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
write.dstArrayElement = 0;
write.dstBinding = binding;
write.dstSet = allocated.first;
write.pBufferInfo = &bindings[set][binding].buffer;
});
for_each_bit(set_layout.sampled_buffer_mask, [&](uint32_t binding) {
auto &write = writes[write_count++];
write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write.pNext = nullptr;
write.descriptorCount = 1;
write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
//.........这里部分代码省略.........