[Mesa-dev] [PATCH] anv: gen7/75: enable multisampling (v2)

Anuj Phogat anuj.phogat at gmail.com
Fri Aug 5 23:29:44 UTC 2016


On Fri, Aug 5, 2016 at 3:57 PM, Lionel Landwerlin <llandwerlin at gmail.com>
wrote:

> Fixes the following failures :
>
> dEQP-VK.api.copy_and_blit.resolve_image.whole_4_bit
> dEQP-VK.api.copy_and_blit.resolve_image.whole_8_bit
> dEQP-VK.api.copy_and_blit.resolve_image.partial_4_bit
> dEQP-VK.api.copy_and_blit.resolve_image.partial_8_bit
> dEQP-VK.api.copy_and_blit.resolve_image.with_regions_4_bit
> dEQP-VK.api.copy_and_blit.resolve_image.with_regions_8_bit
>

​I couldn't find these test in ​
vulkan-cts-1.0
​ at ​https://github.com/KhronosGroup/Vulkan-CTS.git
​I'm using commit ​
​f13b15d
​.​ You should remove them from commit message if they are no longer
part of CTS.


> Tested on IVB/HSW
>
> v2: Check pMultisampleState is not NULL
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Cc: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>  src/intel/vulkan/gen7_pipeline.c | 24 +++++++++++++++++-------
>  1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/src/intel/vulkan/gen7_pipeline.c
> b/src/intel/vulkan/gen7_pipeline.c
> index c2a38ac..f4ad1bc 100644
> --- a/src/intel/vulkan/gen7_pipeline.c
> +++ b/src/intel/vulkan/gen7_pipeline.c
> @@ -37,8 +37,14 @@
>  static void
>  gen7_emit_rs_state(struct anv_pipeline *pipeline,
>                     const VkPipelineRasterizationStateCreateInfo *rs_info,
> +                   const VkPipelineMultisampleStateCreateInfo *ms_info,
>
​We just need samples in this function, so just pass samples as parameter.
You can drop your first patch in that case.
​


>                     const struct anv_graphics_pipeline_create_info *extra)
>  {
> +   uint32_t samples = 1;
> +
> +   if (ms_info)
> +      samples = ms_info->rasterizationSamples;
> +
>     struct GENX(3DSTATE_SF) sf = {
>        GENX(3DSTATE_SF_header),
>
> @@ -56,7 +62,7 @@ gen7_emit_rs_state(struct anv_pipeline *pipeline,
>        /* uint32_t
>  LineEndCapAntialiasingRegionWidth; */
>        .ScissorRectangleEnable                   =  !(extra &&
> extra->use_rectlist),
>
> -      /* uint32_t
>  MultisampleRasterizationMode; */
> +      .MultisampleRasterizationMode             = samples > 1 ?
> MSDISPMODE_PERPIXEL : MSDISPMODE_PERSAMPLE,
>
​This should match​
 MultisampleRasterizationMode
​ not MultisampleDispatchMode in WM_STATE.
​

>        /* bool                                         LastPixelEnable; */
>
>        .TriangleStripListProvokingVertexSelect   = 0,
> @@ -108,7 +114,8 @@ genX(graphics_pipeline_create)(
>     emit_vertex_input(pipeline, pCreateInfo->pVertexInputState, extra);
>
>     assert(pCreateInfo->pRasterizationState);
> -   gen7_emit_rs_state(pipeline, pCreateInfo->pRasterizationState, extra);
> +   gen7_emit_rs_state(pipeline, pCreateInfo->pRasterizationState,
> +                      pCreateInfo->pMultisampleState, extra);
>
>     emit_ds_state(pipeline, pCreateInfo->pDepthStencilState, pass,
> subpass);
>
> @@ -121,11 +128,8 @@ genX(graphics_pipeline_create)(
>                       pCreateInfo->pRasterizationState, extra);
>     emit_3dstate_streamout(pipeline, pCreateInfo->pRasterizationState);
>
> -   if (pCreateInfo->pMultisampleState &&
> -       pCreateInfo->pMultisampleState->rasterizationSamples > 1)
> -      anv_finishme("VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_C
> REATE_INFO");
>
​We should keep this finishme until we fix all the multisample cts tests.​


> -
> -   uint32_t samples = 1;
> +   uint32_t samples = pCreateInfo->pMultisampleState ?
> +                      pCreateInfo->pMultisampleState->rasterizationSamples
> : 1;
>     uint32_t log2_samples = __builtin_ffs(samples) - 1;
>
>     anv_batch_emit(&pipeline->batch, GENX(3DSTATE_MULTISAMPLE), ms) {
> @@ -233,6 +237,7 @@ genX(graphics_pipeline_create)(
>           wm.LineAntialiasingRegionWidth         = 1; /* 1.0 pixels */
>           wm.EarlyDepthStencilControl            = EDSC_NORMAL;
>           wm.PointRasterizationRule              = RASTRULE_UPPER_RIGHT;
> +         wm.MultisampleDispatchMode             = MSDISPMODE_PERSAMPLE;
>
​Dispatch mode doesn't matter when there is no fragment shader. Drop this
change.​


>        }
>
>        /* Even if no fragments are ever dispatched, the hardware hangs if
> we
> @@ -312,6 +317,11 @@ genX(graphics_pipeline_create)(
>           }
>
>           wm.BarycentricInterpolationMode        =
> wm_prog_data->barycentric_interp_modes;
> +
> +         wm.MultisampleRasterizationMode        = samples > 1 ?
> +                                                  MSRASTMODE_ON_PATTERN :
> MSRASTMODE_OFF_PIXEL;
> +         wm.MultisampleDispatchMode             =
> wm_prog_data->persample_dispatch ?
> +                                                  MSDISPMODE_PERSAMPLE :
> MSDISPMODE_PERPIXEL;
>        }
>     }
>
> --
> 2.8.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160805/64d0734e/attachment-0001.html>


More information about the mesa-dev mailing list