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