entry_names_size += e.name.size()+1;
StructureBuilder sb(creation_info, 5);
- VkPipelineShaderStageCreateInfo *&stage_infos = sb.add<VkPipelineShaderStageCreateInfo>(n_stages);
- char *&name_table = sb.add<char>(entry_names_size);
- VkSpecializationInfo *&spec_info = sb.add<VkSpecializationInfo>();
- VkSpecializationMapEntry *&spec_map = sb.add<VkSpecializationMapEntry>(spec_values.size());
- int *&spec_data = sb.add<int>(spec_values.size());
+ VkPipelineShaderStageCreateInfo *const &stage_infos = sb.add<VkPipelineShaderStageCreateInfo>(n_stages);
+ char *const &name_table = sb.add<char>(entry_names_size);
+ VkSpecializationInfo *const &spec_info = sb.add<VkSpecializationInfo>();
+ VkSpecializationMapEntry *const &spec_map = sb.add<VkSpecializationMapEntry>(spec_values.size());
+ int *const &spec_data = sb.add<int>(spec_values.size());
unsigned i = 0;
for(const SpirVModule::Constant &c: mod.get_spec_constants())
bindings.emplace_back();
VkDescriptorSetLayoutBinding &binding = bindings.back();
binding.binding = u.binding&0xFFFFF;
- binding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
+ if(is_sampled_image(u.type))
+ binding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
+ else
+ binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
binding.descriptorCount = 1;
binding.stageFlags = stage_flags;
binding.pImmutableSamplers = 0;
#endif
}
+bool VulkanProgram::is_compute() const
+{
+ return stage_flags&VK_SHADER_STAGE_COMPUTE_BIT;
+}
+
void VulkanProgram::set_debug_name(const string &name)
{
#ifdef DEBUG