anv: fix alphaToCoverage when there is no color attachment
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Tue, 30 Apr 2019 06:38:16 +0000 (08:38 +0200)
committerIago Toral Quiroga <itoral@igalia.com>
Tue, 7 May 2019 07:35:47 +0000 (09:35 +0200)
commitbc66cebc0df0a7858264c7a6da96f60cdc5c8292
tree9b5216c6fca6e9652ad1becc2f293e1590ff3c35
parentc866500525c9717e31c39074d3e3a4db3d51ec69
anv: fix alphaToCoverage when there is no color attachment

There are tests in CTS for alpha to coverage without a color attachment
that are failing. This happens because we remove the shader color
outputs when we don't have a valid color attachment for them, but when
alpha to coverage is enabled we still want to preserve the the output
at location 0 since we need the alpha component. In that case we will
also need to create a null render target for RT 0.

v2:
  - We already create a null rt when we don't have any, so reuse that
    for this case (Jason)
  - Simplify the code a bit (Iago)

v3:
  - Take alpha to coverage from the key and don't tie this to depth-only
    rendering only, we want the same behavior if we have multiple render
    targets but the one at location 0 is not used. (Jason).
  - Rewrite commit message (Iago)

v4:
  - Make sure we take into account the array length of the shader outputs,
    which we were no handling correctly either and make sure we also
    create null render targets for any invalid array entries too.

v5:
  - Simplify removal of unused outputs by using rt_used[] so we don't have
    to special case alpha to coverage there too.

Fixes the following CTS tests:
dEQP-VK.pipeline.multisample.alpha_to_coverage_no_color_attachment.*

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_pipeline.c