[Mesa-dev] [PATCH] anv: gen7/75: enable multisampling (v2)
Jason Ekstrand
jason at jlekstrand.net
Fri Aug 5 23:38:23 UTC 2016
On Fri, Aug 5, 2016 at 4:29 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
>
>
> 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.
>
You need the vulkan-cts-1.0-dev branch
>
>
>> 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
>>
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160805/b2037c85/attachment.html>
More information about the mesa-dev
mailing list