diff --git a/src/amd/common/ac_nir_cull.c b/src/amd/common/ac_nir_cull.c index a5adf2a4614bf66fe6a24923435db75d94df79b6..26e1f6515f46107611ce906f8b946736a172e0bd 100644 --- a/src/amd/common/ac_nir_cull.c +++ b/src/amd/common/ac_nir_cull.c @@ -75,7 +75,14 @@ cull_face(nir_builder *b, nir_ssa_def *pos[3][4], const position_w_info *w_info) nir_ssa_def *cull_front = nir_build_load_cull_front_face_enabled_amd(b); nir_ssa_def *cull_back = nir_build_load_cull_back_face_enabled_amd(b); - return nir_inot(b, nir_bcsel(b, front_facing, cull_front, cull_back)); + nir_ssa_def *face_culled = nir_bcsel(b, front_facing, cull_front, cull_back); + + /* Don't reject NaN and +/-infinity, these are tricky. + * Just trust fixed-function HW to handle these cases correctly. + */ + face_culled = nir_iand(b, face_culled, nir_fisfinite(b, det)); + + return nir_inot(b, face_culled); } static nir_ssa_def *