diff options
author | Nanley Chery <nanley.g.chery@intel.com> | 2016-07-07 16:03:57 -0700 |
---|---|---|
committer | Nanley Chery <nanley.g.chery@intel.com> | 2016-07-15 14:54:12 -0700 |
commit | fa714ad88e1392909e767a622c6fd1ea4febccbf (patch) | |
tree | cb55494dab3d404b1eb0d77f8a9735b0b32e0edd | |
parent | 99333e8453d6442b9855270711883e401b3e4f90 (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.c | 63 | ||||
-rw-r--r-- | src/qonos/qonos.c | 1 | ||||
-rw-r--r-- | src/qonos/qonos_pipeline.c | 14 | ||||
-rw-r--r-- | src/util/cru_vk_image.c | 1 |
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); |