in RenderScriptMigrationSample/app/src/main/cpp/ComputePipeline.cpp [69:112]
bool ComputePipeline::createDescriptorSet(bool useUniformBuffer) {
// Create descriptor set layout
std::vector<VkDescriptorSetLayoutBinding> descriptorsetLayoutBinding = {
{
.binding = 0, // input image
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
.descriptorCount = 1,
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
},
{
.binding = 1, // output image
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
.descriptorCount = 1,
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
},
};
if (useUniformBuffer) {
descriptorsetLayoutBinding.push_back({
.binding = 2, // parameters
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
.descriptorCount = 1,
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
});
}
const VkDescriptorSetLayoutCreateInfo descriptorsetLayoutDesc = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
.bindingCount = static_cast<uint32_t>(descriptorsetLayoutBinding.size()),
.pBindings = descriptorsetLayoutBinding.data(),
};
CALL_VK(vkCreateDescriptorSetLayout, mContext->device(), &descriptorsetLayoutDesc, nullptr,
mDescriptorSetLayout.pHandle());
// Allocate descriptor set
const VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
.descriptorPool = mContext->descriptorPool(),
.descriptorSetCount = 1,
.pSetLayouts = mDescriptorSetLayout.pHandle(),
};
CALL_VK(vkAllocateDescriptorSets, mContext->device(), &descriptorSetAllocateInfo,
&mDescriptorSet);
return true;
}