diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-07-22 16:12:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-22 16:12:54 +0200 |
commit | f54fd5ac100f4430b4fa4cc5d926e7a38c54291f (patch) | |
tree | 0a2eb9fb1f2ba26f5bf21a168cad3c35a7361130 | |
parent | 72d449b53e67878297957624b22819bb0de3af8e (diff) | |
parent | 19d3e17f01bac2814b08b634b19ef53e9bce6d18 (diff) |
Merge pull request #38835 from madmiraal/fix-38829
Fix may be used unitialized warnings in _render_pass_create() and _draw_list_insert_clear_region().
-rw-r--r-- | drivers/vulkan/rendering_device_vulkan.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp index 794bcee3e6..cb26d3ce92 100644 --- a/drivers/vulkan/rendering_device_vulkan.cpp +++ b/drivers/vulkan/rendering_device_vulkan.cpp @@ -2992,16 +2992,21 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF Vector<VkAttachmentReference> resolve_references; for (int i = 0; i < p_format.size(); i++) { - VkAttachmentDescription description; + ERR_FAIL_INDEX_V(p_format[i].format, DATA_FORMAT_MAX, VK_NULL_HANDLE); + ERR_FAIL_INDEX_V(p_format[i].samples, TEXTURE_SAMPLES_MAX, VK_NULL_HANDLE); + ERR_FAIL_COND_V_MSG(!(p_format[i].usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)), + VK_NULL_HANDLE, "Texture format for index (" + itos(i) + ") requires an attachment (depth, stencil or resolve) bit set."); + VkAttachmentDescription description; description.flags = 0; - ERR_FAIL_INDEX_V(p_format[i].format, DATA_FORMAT_MAX, VK_NULL_HANDLE); description.format = vulkan_formats[p_format[i].format]; - ERR_FAIL_INDEX_V(p_format[i].samples, TEXTURE_SAMPLES_MAX, VK_NULL_HANDLE); description.samples = rasterization_sample_count[p_format[i].samples]; - //anything below does not really matter, as vulkan just ignores it when creating a pipeline - ERR_FAIL_COND_V_MSG(!(p_format[i].usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)), VK_NULL_HANDLE, - "Texture format for index (" + itos(i) + ") requires an attachment (depth, stencil or resolve) bit set."); + description.loadOp = VK_ATTACHMENT_LOAD_OP_MAX_ENUM; // Invalid value. + description.storeOp = VK_ATTACHMENT_STORE_OP_MAX_ENUM; // Invalid value. + description.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_MAX_ENUM; // Invalid value. + description.stencilStoreOp = VK_ATTACHMENT_STORE_OP_MAX_ENUM; // Invalid value. + description.initialLayout = VK_IMAGE_LAYOUT_MAX_ENUM; // Invalid value. + description.finalLayout = VK_IMAGE_LAYOUT_MAX_ENUM; // Invalid value. bool is_depth_stencil = p_format[i].usage_flags & TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; bool is_sampled = p_format[i].usage_flags & TEXTURE_USAGE_SAMPLING_BIT; @@ -3115,6 +3120,15 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF } } + // Ensure VkAttachmentDescription has been initialized properly. + ERR_CONTINUE_MSG(description.loadOp == VK_ATTACHMENT_LOAD_OP_MAX_ENUM || + description.storeOp == VK_ATTACHMENT_STORE_OP_MAX_ENUM || + description.stencilLoadOp == VK_ATTACHMENT_LOAD_OP_MAX_ENUM || + description.stencilStoreOp == VK_ATTACHMENT_STORE_OP_MAX_ENUM || + description.initialLayout == VK_IMAGE_LAYOUT_MAX_ENUM || + description.finalLayout == VK_IMAGE_LAYOUT_MAX_ENUM, + "Bug: VkAttachmentDescription not initialized properly."); + attachments.push_back(description); VkAttachmentReference reference; @@ -5645,6 +5659,10 @@ void RenderingDeviceVulkan::_draw_list_insert_clear_region(DrawList *draw_list, for (int i = 0; i < framebuffer->texture_ids.size(); i++) { Texture *texture = texture_owner.getornull(framebuffer->texture_ids[i]); VkClearAttachment clear_at; + clear_at.aspectMask = VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM; // Invalid value. + clear_at.colorAttachment = uint32_t(-1); // Invalid value. + clear_at.clearValue.depthStencil.stencil = uint32_t(-1); // Invalid value. + if (p_clear_color && texture->usage_flags & TEXTURE_USAGE_COLOR_ATTACHMENT_BIT) { ERR_FAIL_INDEX(color_index, p_clear_colors.size()); //a bug Color clear_color = p_clear_colors[color_index]; @@ -5665,6 +5683,13 @@ void RenderingDeviceVulkan::_draw_list_insert_clear_region(DrawList *draw_list, } else { ERR_CONTINUE(true); } + + // Ensure VkClearAttachment has been initialized properly. + ERR_CONTINUE_MSG(clear_at.aspectMask == VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM || + clear_at.colorAttachment == uint32_t(-1) || + clear_at.clearValue.depthStencil.stencil == uint32_t(-1), + "Bug: VkClearAttachment not initialized properly."); + clear_attachments.push_back(clear_at); } |