diff options
author | Samuel Pitoiset <[email protected]> | 2019-07-10 13:03:49 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2019-07-10 15:17:08 +0200 |
commit | bd86ded02712c90071fbfb71f71b4135be6b668c (patch) | |
tree | c057ee7deec8ce84614cf318bb0f54e245e8fd40 | |
parent | 53d64753e16063c97286e82c6eeb8e46a88f63d1 (diff) |
radv: set the LayerId output usage mask if FS needs it
When the stage preceding FS doesn't export it the fragment shader
might read it, even if it's 0.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_shader_info.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index 2756d99e769..946f7aa5f23 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -576,4 +576,21 @@ radv_nir_shader_info_pass(const struct nir_shader *nir, nir->info.stage == MESA_SHADER_TESS_EVAL || nir->info.stage == MESA_SHADER_GEOMETRY) gather_xfb_info(nir, info); + + /* Make sure to export the LayerID if the fragment shader needs it. */ + if (options->key.vs_common_out.export_layer_id) { + switch (nir->info.stage) { + case MESA_SHADER_VERTEX: + info->vs.output_usage_mask[VARYING_SLOT_LAYER] |= 0x1; + break; + case MESA_SHADER_TESS_EVAL: + info->tes.output_usage_mask[VARYING_SLOT_LAYER] |= 0x1; + break; + case MESA_SHADER_GEOMETRY: + info->gs.output_usage_mask[VARYING_SLOT_LAYER] |= 0x1; + break; + default: + break; + } + } } |