anv/genX: Solve the vkCreateGraphicsPipelines crash
authorXu,Randy <randy.xu@intel.com>
Sat, 18 Mar 2017 11:20:17 +0000 (19:20 +0800)
committerTapani Pälli <tapani.palli@intel.com>
Mon, 20 Mar 2017 06:31:18 +0000 (08:31 +0200)
The crash is due to NULL pColorBlendState, which is legal if the
pipeline has rasterization disabled or if the subpass of the render pass
the pipeline is created against does not use any color attachments.

Test: Sample subpasses from LunarG can run without crash

Signed-off-by: Xu,Randy <randy.xu@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Cc: "17.0 13.0" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/genX_pipeline.c

index cfc7c06fa4cbaac5175f48f130651ad4081f2acc..85a9e4fd290bb73558389d757386f4125e5b48a2 100644 (file)
@@ -902,7 +902,7 @@ emit_cb_state(struct anv_pipeline *pipeline,
       /* We can have at most 8 attachments */
       assert(i < 8);
 
-      if (binding->index >= info->attachmentCount)
+      if (info == NULL || binding->index >= info->attachmentCount)
          continue;
 
       assert(binding->binding == 0);
@@ -1423,7 +1423,7 @@ emit_3dstate_ps(struct anv_pipeline *pipeline,
     * source blend factors.
     */
    bool dual_src_blend = false;
-   if (wm_prog_data->dual_src_blend) {
+   if (wm_prog_data->dual_src_blend && blend) {
       for (uint32_t i = 0; i < blend->attachmentCount; i++) {
          const VkPipelineColorBlendAttachmentState *bstate =
             &blend->pAttachments[i];