void ComputePipeline::recordComputeCommands()

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