summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2016-07-07 16:03:57 -0700
committerNanley Chery <nanley.g.chery@intel.com>2016-07-15 14:54:12 -0700
commitfa714ad88e1392909e767a622c6fd1ea4febccbf (patch)
treecb55494dab3d404b1eb0d77f8a9735b0b32e0edd
parent99333e8453d6442b9855270711883e401b3e4f90 (diff)
Conform to Vulkan Specification 1.0.20
I used the Vulkan Validation layers to determine the areas of non-conformance. Changes: * Provide required fields: - VkFramebufferCreateInfo::renderPass - VkSubmitInfo::sType - VkDeviceQueueCreateInfo::sType - VkDeviceQueueCreateInfo::pQueuePriorities * Assign the right bit to VkDescriptorPoolCreateInfo::flags for the freeing which occurs during cleanup. * Use the correct VkDescriptorPoolCreateInfo::poolSizeCount value. This fixes a bug in DescriptorPool creation in which DescriptorTypes after STORAGE_TEXEL_BUFFER were not being added to the pool. * Set VkGraphicsPipelineCreateInfo::pDynamicState to NULL if VkPipelineDynamicStateCreateInfo::dynamicStateCount is zero Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
-rw-r--r--src/framework/test/t_phase_setup.c63
-rw-r--r--src/qonos/qonos.c1
-rw-r--r--src/qonos/qonos_pipeline.c14
-rw-r--r--src/util/cru_vk_image.c1
4 files changed, 71 insertions, 8 deletions
diff --git a/src/framework/test/t_phase_setup.c b/src/framework/test/t_phase_setup.c
index a46b169..b3cd046 100644
--- a/src/framework/test/t_phase_setup.c
+++ b/src/framework/test/t_phase_setup.c
@@ -207,6 +207,30 @@ t_setup_framebuffer(void)
attachments[n_attachments++] = t->vk.color_image_view;
+ VkRenderPass color_pass = qoCreateRenderPass(t_device,
+ .attachmentCount = 1,
+ .pAttachments = (VkAttachmentDescription[]) {
+ {
+ QO_ATTACHMENT_DESCRIPTION_DEFAULTS,
+ .format = VK_FORMAT_R8G8B8A8_UNORM,
+ },
+ },
+ .subpassCount = 1,
+ .pSubpasses = (VkSubpassDescription[]) {
+ {
+ QO_SUBPASS_DESCRIPTION_DEFAULTS,
+ .colorAttachmentCount = 1,
+ .pColorAttachments = (VkAttachmentReference[]) {
+ {
+ .attachment = 0,
+ .layout = VK_IMAGE_LAYOUT_GENERAL,
+ },
+ },
+ }
+ });
+
+ VkRenderPass pass = color_pass;
+
if (t->def->depthstencil_format != VK_FORMAT_UNDEFINED) {
t->vk.ds_image = qoCreateImage(t->vk.device,
.format = t->def->depthstencil_format,
@@ -258,9 +282,42 @@ t_setup_framebuffer(void)
});
attachments[n_attachments++] = t->vk.depthstencil_image_view;
+
+ VkRenderPass color_depth_pass = qoCreateRenderPass(t_device,
+ .attachmentCount = 2,
+ .pAttachments = (VkAttachmentDescription[]) {
+ {
+ QO_ATTACHMENT_DESCRIPTION_DEFAULTS,
+ .format = VK_FORMAT_R8G8B8A8_UNORM,
+ },
+ {
+ QO_ATTACHMENT_DESCRIPTION_DEFAULTS,
+ .format = t->def->depthstencil_format,
+ },
+ },
+ .subpassCount = 1,
+ .pSubpasses = (VkSubpassDescription[]) {
+ {
+ QO_SUBPASS_DESCRIPTION_DEFAULTS,
+ .colorAttachmentCount = 1,
+ .pColorAttachments = (VkAttachmentReference[]) {
+ {
+ .attachment = 0,
+ .layout = VK_IMAGE_LAYOUT_GENERAL,
+ },
+ },
+ .pDepthStencilAttachment = &(VkAttachmentReference) {
+ .attachment = 1,
+ .layout = VK_IMAGE_LAYOUT_GENERAL,
+ },
+ },
+ });
+
+ pass = color_depth_pass;
}
t->vk.framebuffer = qoCreateFramebuffer(t->vk.device,
+ .renderPass = pass,
.width = t->ref.width,
.height = t->ref.height,
.layers = 1,
@@ -283,9 +340,9 @@ t_setup_descriptor_pool(void)
const VkDescriptorPoolCreateInfo create_info = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
.pNext = NULL,
- .flags = 0,
+ .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,
.maxSets = 1,
- .poolSizeCount = 5,
+ .poolSizeCount = VK_DESCRIPTOR_TYPE_RANGE_SIZE,
.pPoolSizes = pool_sizes
};
@@ -320,8 +377,10 @@ t_setup_vulkan(void)
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.queueCreateInfoCount = 1,
.pQueueCreateInfos = &(VkDeviceQueueCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
.queueFamilyIndex = 0,
.queueCount = 1,
+ .pQueuePriorities = (float[]) {1.0f},
},
}, NULL, &t->vk.device);
diff --git a/src/qonos/qonos.c b/src/qonos/qonos.c
index 6d28f75..82a64e8 100644
--- a/src/qonos/qonos.c
+++ b/src/qonos/qonos.c
@@ -101,6 +101,7 @@ qoQueueSubmit(VkQueue queue, uint32_t cmdBufferCount,
result = vkQueueSubmit(queue, 1,
&(VkSubmitInfo) {
+ .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
.commandBufferCount = cmdBufferCount,
.pCommandBuffers = commandBuffers,
}, fence);
diff --git a/src/qonos/qonos_pipeline.c b/src/qonos/qonos_pipeline.c
index 498eec8..c95a937 100644
--- a/src/qonos/qonos_pipeline.c
+++ b/src/qonos/qonos_pipeline.c
@@ -130,12 +130,14 @@ qoCreateGraphicsPipeline(VkDevice device,
dynamic_states[count++] = s;
}
- dy_info = (VkPipelineDynamicStateCreateInfo) {
- .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
- .dynamicStateCount = count,
- .pDynamicStates = dynamic_states,
- };
- pipeline_info.pDynamicState = &dy_info;
+ if (count > 0) {
+ dy_info = (VkPipelineDynamicStateCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
+ .dynamicStateCount = count,
+ .pDynamicStates = dynamic_states,
+ };
+ pipeline_info.pDynamicState = &dy_info;
+ }
}
// Look for vertex or fragment shaders in the chain
diff --git a/src/util/cru_vk_image.c b/src/util/cru_vk_image.c
index e2ff334..308095a 100644
--- a/src/util/cru_vk_image.c
+++ b/src/util/cru_vk_image.c
@@ -199,6 +199,7 @@ copy(cru_vk_image_t *self, enum copy_direction dir)
r = vkQueueSubmit(self->vk_queue, 1,
&(VkSubmitInfo) {
+ .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
.commandBufferCount = 1,
.pCommandBuffers = &cmd,
}, fence);