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 <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24589>
(cherry picked from commit ce09458917)
This commit is contained in:
Mike Blumenkrantz 2023-08-09 15:18:59 -04:00 committed by Eric Engestrom
parent 0be3be7c6b
commit 700bf5d323
5 changed files with 8 additions and 12 deletions

View file

@ -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
},

View file

@ -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

View file

@ -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");

View file

@ -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

View file

@ -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