in RenderScriptMigrationSample/app/src/main/cpp/ComputePipeline.cpp [218:236]
void ComputePipeline::recordComputeCommands(VkCommandBuffer cmd, const void* pushConstantData,
const Image& inputImage, const Image& outputImage,
const Buffer* uniformBuffer) {
// Update descriptor sets with input and output images
updateDescriptorSets(inputImage, outputImage, uniformBuffer);
// Record compute pipeline
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, mPipeline.handle());
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, mPipelineLayout.handle(), 0, 1,
&mDescriptorSet, 0, nullptr);
if (pushConstantData != nullptr && mPushConstantSize > 0) {
vkCmdPushConstants(cmd, mPipelineLayout.handle(), VK_SHADER_STAGE_COMPUTE_BIT, 0,
mPushConstantSize, pushConstantData);
}
const auto workGroupSize = mContext->getWorkGroupSize();
const uint32_t groupCountX = ceilOfDiv(outputImage.width(), workGroupSize);
const uint32_t groupCountY = ceilOfDiv(outputImage.height(), workGroupSize);
vkCmdDispatch(cmd, groupCountX, groupCountY, 1);
}