diff --git a/src/microsoft/vulkan/dzn_pipeline.cpp b/src/microsoft/vulkan/dzn_pipeline.cpp index 97d941e4e26..276ef05ef4c 100644 --- a/src/microsoft/vulkan/dzn_pipeline.cpp +++ b/src/microsoft/vulkan/dzn_pipeline.cpp @@ -352,7 +352,7 @@ dzn_graphics_pipeline_translate_rast(dzn_graphics_pipeline *pipeline, const VkPipelineRasterizationStateCreateInfo *in_rast = in->pRasterizationState; const VkPipelineViewportStateCreateInfo *in_vp = - in->pViewportState; + in_rast->rasterizerDiscardEnable ? NULL : in->pViewportState; if (in_vp) { pipeline->vp.count = in_vp->viewportCount; @@ -387,8 +387,10 @@ dzn_graphics_pipeline_translate_ms(dzn_graphics_pipeline *pipeline, D3D12_GRAPHICS_PIPELINE_STATE_DESC *out, const VkGraphicsPipelineCreateInfo *in) { + const VkPipelineRasterizationStateCreateInfo *in_rast = + in->pRasterizationState; const VkPipelineMultisampleStateCreateInfo *in_ms = - in->pMultisampleState; + in_rast->rasterizerDiscardEnable ? NULL : in->pMultisampleState; /* TODO: sampleShadingEnable, minSampleShading, * alphaToOneEnable @@ -532,8 +534,10 @@ dzn_graphics_pipeline_translate_zsa(dzn_graphics_pipeline *pipeline, D3D12_GRAPHICS_PIPELINE_STATE_DESC *out, const VkGraphicsPipelineCreateInfo *in) { + const VkPipelineRasterizationStateCreateInfo *in_rast = + in->pRasterizationState; const VkPipelineDepthStencilStateCreateInfo *in_zsa = - in->pDepthStencilState; + in_rast->rasterizerDiscardEnable ? NULL : in->pDepthStencilState; if (!in_zsa) return; @@ -649,10 +653,12 @@ dzn_graphics_pipeline_translate_blend(dzn_graphics_pipeline *pipeline, D3D12_GRAPHICS_PIPELINE_STATE_DESC *out, const VkGraphicsPipelineCreateInfo *in) { + const VkPipelineRasterizationStateCreateInfo *in_rast = + in->pRasterizationState; const VkPipelineColorBlendStateCreateInfo *in_blend = - in->pColorBlendState; + in_rast->rasterizerDiscardEnable ? NULL : in->pColorBlendState; const VkPipelineMultisampleStateCreateInfo *in_ms = - in->pMultisampleState; + in_rast->rasterizerDiscardEnable ? NULL : in->pMultisampleState; if (!in_blend || !in_ms) return; @@ -776,6 +782,11 @@ dzn_graphics_pipeline_create(dzn_device *device, .Flags = D3D12_PIPELINE_STATE_FLAG_NONE, }; + const VkPipelineViewportStateCreateInfo *vp_info = + pCreateInfo->pRasterizationState->rasterizerDiscardEnable ? + NULL : pCreateInfo->pViewportState; + + ret = dzn_graphics_pipeline_translate_vi(pipeline, pAllocator, &desc, pCreateInfo, &inputs); if (ret != VK_SUCCESS) goto out; @@ -861,10 +872,7 @@ dzn_graphics_pipeline_create(dzn_device *device, !(stage_mask & VK_SHADER_STAGE_GEOMETRY_BIT))) { if (pipeline->vp.dynamic) { yz_flip_mode = DXIL_SPIRV_YZ_FLIP_CONDITIONAL; - } else if (pCreateInfo->pViewportState) { - const VkPipelineViewportStateCreateInfo *vp_info = - pCreateInfo->pViewportState; - + } else if (vp_info) { for (uint32_t i = 0; vp_info->pViewports && i < vp_info->viewportCount; i++) { if (vp_info->pViewports[i].height > 0) y_flip_mask |= BITFIELD_BIT(i);