summaryrefslogtreecommitdiff
path: root/src/amd/vulkan/radv_nir_to_llvm.c
diff options
context:
space:
mode:
authorRhys Perry <pendingchaos02@gmail.com>2023-01-02 18:05:14 +0000
committerMarge Bot <emma+marge@anholt.net>2023-01-03 15:32:56 +0000
commit1825ad134b172447d42b8db69674db0de87c3afb (patch)
tree0848828acd73961ed85b137cf3c99777758ad254 /src/amd/vulkan/radv_nir_to_llvm.c
parentc68530bedb00966fd8e7df982c623f5dc329e016 (diff)
radeonsi,radv/llvm: fix amdgpu-color/depth-export with epilogs
The main shader wouldn't use ac_build_export(), and the discard exit would have no export. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Fixes: 1174ab6d56e ("ac/llvm: use amdgpu-color-export/amdgpu-depth-export") Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7991 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20482>
Diffstat (limited to 'src/amd/vulkan/radv_nir_to_llvm.c')
-rw-r--r--src/amd/vulkan/radv_nir_to_llvm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index 15e80e91191..543bc132730 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -1243,9 +1243,16 @@ ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
float_mode = AC_FLOAT_MODE_DENORM_FLUSH_TO_ZERO;
}
+ bool exports_mrtz = false;
+ bool exports_color_null = false;
+ if (shaders[0]->info.stage == MESA_SHADER_FRAGMENT) {
+ exports_mrtz = info->ps.writes_z || info->ps.writes_stencil || info->ps.writes_sample_mask;
+ exports_color_null = !exports_mrtz || (shaders[0]->info.outputs_written & (0xffu << FRAG_RESULT_DATA0));
+ }
+
ac_llvm_context_init(&ctx.ac, ac_llvm, options->gfx_level, options->family,
options->has_3d_cube_border_color_mipmap,
- float_mode, info->wave_size, info->ballot_bit_size);
+ float_mode, info->wave_size, info->ballot_bit_size, exports_color_null, exports_mrtz);
ctx.context = ctx.ac.context;
ctx.max_workgroup_size = info->workgroup_size;