bool ComputePipeline::createDescriptorSet()

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;
}