From 700bf5d323fc9842e1ff2797d1ceed6daefee3fb Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 9 Aug 2023 15:18:59 -0400 Subject: [PATCH] llvmpipe: fix early depth + alpha2coverage + occlusion query interaction in this scenario, sample counting must happen before a2c, as a2c may eliminate coverage if alpha is zero, leading to a sample count of zero dEQP-VK.fragment_operations.early_fragment.sample_count_early_fragment_tests_depth_alpha_to_coverage_samples_4_maintenance5 cc: mesa-stable Reviewed-by: Dave Airlie Part-of: (cherry picked from commit ce09458917f434c1fdc4b4c73007ee6fe07bcdd7) --- .pick_status.json | 2 +- src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt | 6 ------ src/gallium/drivers/llvmpipe/lp_state_fs.c | 8 +++++++- src/gallium/drivers/virgl/ci/virpipe-gl-fails.txt | 2 -- src/gallium/drivers/zink/ci/zink-lvp-fails.txt | 2 -- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5ad13696451..70d5a8729c5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -463,7 +463,7 @@ "description": "llvmpipe: fix early depth + alpha2coverage + occlusion query interaction", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt b/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt index 105f4302083..091ac587720 100644 --- a/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt +++ b/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt @@ -76,12 +76,6 @@ spec@arb_post_depth_coverage@arb_post_depth_coverage-multisampling,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex@'vs_input2[1][0]' on GL_PROGRAM_INPUT,Fail -# Query result -# Expected: 1536 -# Observed: 768 -spec@arb_shader_image_load_store@early-z,Fail -spec@arb_shader_image_load_store@early-z@occlusion query test/early-z pass,Fail - spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-load,Crash spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-store,Crash diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index af64469e16c..062d55632d5 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -940,6 +940,12 @@ generate_fs_loop(struct gallivm_state *gallivm, lp_build_pointer_set(builder, z_fb_store, sample_loop_state.counter, z_fb); lp_build_pointer_set(builder, s_fb_store, sample_loop_state.counter, s_fb); } + if (key->occlusion_count && !(depth_mode & EARLY_DEPTH_TEST_INFERRED)) { + LLVMValueRef counter = lp_jit_thread_data_vis_counter(gallivm, thread_data_type, thread_data_ptr); + lp_build_name(counter, "counter"); + lp_build_occlusion_count(gallivm, type, + key->multisample ? s_mask : lp_build_mask_value(&mask), counter); + } } if (key->multisample) { @@ -1345,7 +1351,7 @@ generate_fs_loop(struct gallivm_state *gallivm, z_value, s_value); } - if (key->occlusion_count) { + if (key->occlusion_count && (!(depth_mode & EARLY_DEPTH_TEST) || (depth_mode & EARLY_DEPTH_TEST_INFERRED))) { LLVMValueRef counter = lp_jit_thread_data_vis_counter(gallivm, thread_data_type, thread_data_ptr); lp_build_name(counter, "counter"); diff --git a/src/gallium/drivers/virgl/ci/virpipe-gl-fails.txt b/src/gallium/drivers/virgl/ci/virpipe-gl-fails.txt index d3d44afd2a8..8a53c547e62 100644 --- a/src/gallium/drivers/virgl/ci/virpipe-gl-fails.txt +++ b/src/gallium/drivers/virgl/ci/virpipe-gl-fails.txt @@ -291,8 +291,6 @@ spec@arb_program_interface_query@arb_program_interface_query-getprogramresourcei spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex@'vs_input2[1][0]' on GL_PROGRAM_INPUT,Fail spec@arb_sample_shading@builtin-gl-sample-position 2,Fail -spec@arb_shader_image_load_store@early-z,Fail -spec@arb_shader_image_load_store@early-z@occlusion query test/early-z pass,Fail spec@arb_shader_image_load_store@layer,Fail spec@arb_shader_image_load_store@layer@image2DMS/layered binding test,Fail diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index 6ec432b423a..6ed3b0d9a50 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -152,8 +152,6 @@ spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail spec@!opengl 3.0@clearbuffer-depth-cs-probe,Fail spec@arb_post_depth_coverage@arb_post_depth_coverage-multisampling,Fail -spec@arb_shader_image_load_store@early-z,Fail -spec@arb_shader_image_load_store@early-z@occlusion query test/early-z pass,Fail spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-load,Crash spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-store,Crash