bool ComputePipeline::updateDescriptorSets()

in RenderScriptMigrationSample/app/src/main/cpp/ComputePipeline.cpp [114:160]


bool ComputePipeline::updateDescriptorSets(const Image& inputImage, const Image& outputImage,
                                           const Buffer* uniformBuffer) {
    const auto inputImageInfo = inputImage.getDescriptor();
    const auto outputImageInfo = outputImage.getDescriptor();
    std::vector<VkWriteDescriptorSet> writeDescriptorSet = {
            {
                    .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
                    .dstSet = mDescriptorSet,
                    .dstBinding = 0,
                    .dstArrayElement = 0,
                    .descriptorCount = 1,
                    .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
                    .pImageInfo = &inputImageInfo,
                    .pBufferInfo = nullptr,
                    .pTexelBufferView = nullptr,
            },
            {
                    .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
                    .dstSet = mDescriptorSet,
                    .dstBinding = 1,
                    .dstArrayElement = 0,
                    .descriptorCount = 1,
                    .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
                    .pImageInfo = &outputImageInfo,
                    .pBufferInfo = nullptr,
                    .pTexelBufferView = nullptr,
            },
    };
    VkDescriptorBufferInfo uboInfo{};
    if (uniformBuffer != nullptr) {
        uboInfo = uniformBuffer->getDescriptor();
        writeDescriptorSet.push_back({
                .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
                .dstSet = mDescriptorSet,
                .dstBinding = 2,
                .dstArrayElement = 0,
                .descriptorCount = 1,
                .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
                .pImageInfo = nullptr,
                .pBufferInfo = &uboInfo,
                .pTexelBufferView = nullptr,
        });
    }
    vkUpdateDescriptorSets(mContext->device(), static_cast<uint32_t>(writeDescriptorSet.size()),
                           writeDescriptorSet.data(), 0, nullptr);
    return true;
}