diff --git a/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt b/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt index 25cc8ea5109..bea5cf9eae5 100644 --- a/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt +++ b/src/gallium/drivers/llvmpipe/ci/llvmpipe-fails.txt @@ -52,7 +52,6 @@ spec@!opengl 2.0@vertex-program-two-side enabled back back2@vs and fs,Fail spec@!opengl 3.0@clearbuffer-depth-cs-probe,Fail spec@!opengl 3.2@layered-rendering@clear-color-mismatched-layer-count,Fail spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3,Fail -spec@arb_pipeline_statistics_query@arb_pipeline_statistics_query-frag,Fail spec@arb_post_depth_coverage@arb_post_depth_coverage-multisampling,Fail spec@arb_program_interface_query@arb_program_interface_query-getprogramresourceindex,Fail diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c index 4de16e9b657..934274d41e8 100644 --- a/src/gallium/drivers/llvmpipe/lp_query.c +++ b/src/gallium/drivers/llvmpipe/lp_query.c @@ -200,12 +200,7 @@ llvmpipe_get_query_result(struct pipe_context *pipe, for (unsigned i = 0; i < num_threads; i++) { sum += pq->end[i]; } - /* The FS/PS operates on a block of pixels at a time. The counter is - * incremented per block so we multiply by pixels per block here. - * This will not be a pixel-exact result. - */ - pq->stats.ps_invocations = - sum * LP_RASTER_BLOCK_SIZE * LP_RASTER_BLOCK_SIZE; + pq->stats.ps_invocations = sum; result->pipeline_statistics = pq->stats; } break; @@ -334,7 +329,6 @@ llvmpipe_get_query_result_resource(struct pipe_context *pipe, for (unsigned i = 0; i < num_threads; i++) { value += pq->end[i]; } - value *= LP_RASTER_BLOCK_SIZE * LP_RASTER_BLOCK_SIZE; break; case PIPE_STAT_QUERY_HS_INVOCATIONS: value = pq->stats.hs_invocations; diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 6b739606527..9013a7ff115 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -1067,6 +1067,19 @@ generate_fs_loop(struct gallivm_state *gallivm, /* Build the actual shader */ lp_build_nir_soa(gallivm, nir, ¶ms, outputs); + /* + * Must not count ps invocations if there's a null shader. + * (It would be ok to count with null shader if there's d/s tests, + * but only if there's d/s buffers too, which is different + * to implicit rasterization disable which must not depend + * on the d/s buffers.) + * Could disable if there's no stats query, but maybe not worth it. + */ + if (shader->info.base.num_instructions > 1) { + LLVMValueRef invocs = lp_jit_thread_data_ps_invocations(gallivm, thread_data_type, thread_data_ptr); + lp_build_occlusion_count(gallivm, type, lp_build_mask_value(&mask), invocs); + } + /* Alpha test */ if (key->alpha.enabled) { int color0 = find_output_by_frag_result(nir, FRAG_RESULT_DATA0); @@ -3264,27 +3277,6 @@ generate_fragment(struct llvmpipe_context *lp, assert(builder); LLVMPositionBuilderAtEnd(builder, block); - /* - * Must not count ps invocations if there's a null shader. - * (It would be ok to count with null shader if there's d/s tests, - * but only if there's d/s buffers too, which is different - * to implicit rasterization disable which must not depend - * on the d/s buffers.) - * Could use popcount on mask, but pixel accuracy is not required. - * Could disable if there's no stats query, but maybe not worth it. - */ - if (shader->info.base.num_instructions > 1) { - LLVMValueRef invocs, val; - LLVMTypeRef invocs_type = LLVMInt64TypeInContext(gallivm->context); - invocs = lp_jit_thread_data_ps_invocations(gallivm, variant->jit_thread_data_type, thread_data_ptr); - val = LLVMBuildLoad2(builder, invocs_type, invocs, ""); - val = LLVMBuildAdd(builder, val, - LLVMConstInt(LLVMInt64TypeInContext(gallivm->context), - 1, 0), - "invoc_count"); - LLVMBuildStore(builder, val, invocs); - } - /* code generated texture sampling */ struct lp_build_sampler_soa *sampler = lp_llvm_sampler_soa_create(lp_fs_variant_key_samplers(key), diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index b8bf7ecaad1..c21d74deaf2 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -46,7 +46,6 @@ spec@!opengl 2.1@pbo,Fail spec@!opengl 2.1@pbo@test_polygon_stip,Fail spec@!opengl 2.1@polygon-stipple-fs,Fail spec@arb_gpu_shader_fp64@execution@arb_gpu_shader_fp64-tf-separate,Fail -spec@arb_pipeline_statistics_query@arb_pipeline_statistics_query-frag,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,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