summaryrefslogtreecommitdiffstatsci
path: root/src/vkvg_device_internal.c
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-04-17 16:43:47 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-04-17 16:43:47 +0200
commit182b31b310ff9f27fd62257426da377515d7ad9c (patch)
treeb5295d40d27e85d74c7c2d2cbe940180faa1f834 /src/vkvg_device_internal.c
parent1afbf1702e3ed4a15d505b67ddbe5b4ceb9dcc49 (diff)
test with a compute queue for gradientgradComputeTest
Diffstat (limited to 'src/vkvg_device_internal.c')
-rw-r--r--src/vkvg_device_internal.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c
index d34e6cc..85dde3c 100644
--- a/src/vkvg_device_internal.c
+++ b/src/vkvg_device_internal.c
@@ -104,6 +104,38 @@ void _setupRenderPass(VkvgDevice dev)
VK_CHECK_RESULT(vkCreateRenderPass(dev->vkDev, &renderPassInfo, NULL, &dev->renderPass));
}
+void _init_gradient_pipeline(VkvgDevice dev)
+{
+ VkDescriptorSetLayoutBinding dsLayoutBinding = { .binding = 0,
+ .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+ .descriptorCount = 1,
+ .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT };
+ VkDescriptorSetLayoutCreateInfo dsLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+ .bindingCount = 1,
+ .pBindings = &dsLayoutBinding };
+ VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->gradientPipeline.descriptorSetLayout));
+
+ VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+ .setLayoutCount = 1,
+ .pSetLayouts = &dev->gradientPipeline.descriptorSetLayout };
+ VK_CHECK_RESULT(vkCreatePipelineLayout(dev->vkDev, &pipelineLayoutCreateInfo, NULL, &dev->gradientPipeline.pipelineLayout));
+
+ VkShaderModule mod;
+ VkShaderModuleCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
+ .pCode = gradient0_comp_spv,
+ .codeSize = gradient0_comp_spv_len };
+ VK_CHECK_RESULT(vkCreateShaderModule(dev->vkDev, &createInfo, NULL, &mod));
+ VkPipelineShaderStageCreateInfo shaderStageCreateInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ .stage = VK_SHADER_STAGE_COMPUTE_BIT,
+ .module = mod,
+ .pName = "main" };
+ VkComputePipelineCreateInfo pipelineCreateInfo = { .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
+ .stage = shaderStageCreateInfo,
+ .layout = dev->gradientPipeline.pipelineLayout };
+ VK_CHECK_RESULT(vkCreateComputePipelines(dev->vkDev, VK_NULL_HANDLE, 1, &pipelineCreateInfo, NULL, &dev->gradientPipeline.pipeline));
+ vkDestroyShaderModule(dev->vkDev, mod, NULL);
+}
+
void _setupPipelines(VkvgDevice dev)
{
VkGraphicsPipelineCreateInfo pipelineCreateInfo = { .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,