[Piglit] [PATCH 2/3] gl-1.0-blend-func: add --quick option

Brian Paul brianp at vmware.com
Thu Jan 18 04:37:13 UTC 2018


On 01/17/2018 04:55 PM, Roland Scheidegger wrote:
> That should help llvmpipe quite a bit...
> Albeit 1% doesn't sound like it would give a lot of coverage, maybe a
> bit more (5% or so) would still cut down the time significantly while
> having less risk of missing failures?

Hmm, it looks like llvmpipe isn't just slow at running the test- it's an 
infinite loop!

If I let the test run until it gets stuck, the stack trace is:

(gdb) where
#0  0x00007ffff2ba0b3c in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#1  0x00007ffff2bc392b in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#2  0x00007ffff2befe8b in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#3  0x00007ffff2bf4d20 in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#4  0x00007ffff2bf7245 in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#5  0x00007ffff2c0141c in 
llvm::X86TargetLowering::LowerOperation(llvm::SDValue, 
llvm::SelectionDAG&) const () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#6  0x00007ffff1c42c43 in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#7  0x00007ffff1c478f4 in llvm::SelectionDAG::LegalizeOp(llvm::SDNode*, 
llvm::SmallSetVector<llvm::SDNode*, 16u>&) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#8  0x00007ffff1c09b91 in 
llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults&, 
llvm::CodeGenOpt::Level) () from /usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#9  0x00007ffff1d27657 in llvm::SelectionDAGISel::CodeGenAndEmitDAG() () 
from /usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#10 0x00007ffff1d2ada0 in 
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) () 
from /usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#11 0x00007ffff1d2c67a in 
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) () 
from /usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#12 0x00007ffff2b7e204 in ?? () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#13 0x00007ffff195e2a2 in 
llvm::FPPassManager::runOnFunction(llvm::Function&) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#14 0x00007ffff195e63b in 
llvm::FPPassManager::runOnModule(llvm::Module&) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#15 0x00007ffff195deef in 
llvm::legacy::PassManagerImpl::run(llvm::Module&) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#16 0x00007ffff241f562 in llvm::MCJIT::emitObject(llvm::Module*) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#17 0x00007ffff241fa09 in 
llvm::MCJIT::generateCodeForModule(llvm::Module*) () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#18 0x00007ffff241c85c in llvm::MCJIT::finalizeObject() () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#19 0x00007ffff23ffba7 in LLVMGetPointerToGlobal () from 
/usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
#20 0x00007ffff6a740aa in gallivm_jit_function (gallivm=0xb9d190, 
func=0xb4d708) at 
../../../../src/gallium/auxiliary/gallivm/lp_bld_init.c:690
#21 0x00007ffff6af16be in generate_variant (lp=0x656510, 
shader=0x898440, key=0x7fffffffd9f0) at 
../../../../../src/gallium/drivers/llvmpipe/lp_state_fs.c:2879
#22 0x00007ffff6af2e03 in llvmpipe_update_fs (lp=0x656510) at 
../../../../../src/gallium/drivers/llvmpipe/lp_state_fs.c:3434
#23 0x00007ffff6ae78cf in llvmpipe_update_derived (llvmpipe=0x656510) at 
../../../../../src/gallium/drivers/llvmpipe/lp_state_derived.c:210
#24 0x00007ffff6abf980 in llvmpipe_draw_vbo (pipe=0x656510, 
info=0x7fffffffdd10) at 
../../../../../src/gallium/drivers/llvmpipe/lp_draw_arrays.c:70
#25 0x00007ffff696a6af in cso_draw_vbo (cso=0x83e070, 
info=0x7fffffffdd10) at 
../../../../src/gallium/auxiliary/cso_cache/cso_context.c:1693
#26 0x00007ffff6724054 in st_draw_vbo (ctx=0x7fd9c0, 
prims=0x7fffffffdde0, nr_prims=1, ib=0x0, index_bounds_valid=1 '\001', 
min_index=0, max_index=3, tfb_vertcount=0x0, stream=0, indirect=0x0) at 
../../../src/mesa/state_tracker/st_draw.c:227
#27 0x00007ffff66c43d4 in vbo_draw_arrays (ctx=0x7fd9c0, mode=5, 
start=0, count=4, numInstances=1, baseInstance=0, drawID=0) at 
../../../src/mesa/vbo/vbo_exec_array.c:486
#28 0x00007ffff66c4be4 in vbo_exec_DrawArrays (mode=5, start=0, count=4) 
at ../../../src/mesa/vbo/vbo_exec_array.c:641
#29 0x00007ffff7b0da78 in piglit_draw_rect_from_arrays 
(verts=0x7fffffffdf00, tex=0x7fffffffdee0, use_patches=false, 
instance_count=1) at /home/brianp/pig/tests/util/piglit-util-gl.c:719
#30 0x00007ffff7b0e22e in piglit_draw_rect_tex (x=0, y=0, w=32, h=32, 
tx=0, ty=0, tw=1, th=1) at /home/brianp/pig/tests/util/piglit-util-gl.c:916
#31 0x0000000000403213 in run_factor_set (src_factor_rgb=776, 
src_factor_a=771, dst_factor_rgb=769, dst_factor_a=32769, op_rgb=32774, 
op_a=32774, constant_color=0x403c30 <constant_color>) at 
/home/brianp/pig/tests/spec/gl-1.0/blend.c:592
#32 0x0000000000403617 in proc_factors (sf=8, sfa=5, df=3, dfa=8, op=0, 
opa=0) at /home/brianp/pig/tests/spec/gl-1.0/blend.c:682
#33 0x000000000040386e in run_all_factor_sets () at 
/home/brianp/pig/tests/spec/gl-1.0/blend.c:798
#34 0x0000000000403930 in piglit_display () at 
/home/brianp/pig/tests/spec/gl-1.0/blend.c:822
#35 0x00007ffff7b3566c in process_next_event (x11_fw=0x62ebd0) at 
/home/brianp/pig/tests/util/piglit-framework-gl/piglit_x11_framework.c:137
#36 0x00007ffff7b3572c in enter_event_loop (winsys_fw=0x62ebd0) at 
/home/brianp/pig/tests/util/piglit-framework-gl/piglit_x11_framework.c:153
#37 0x00007ffff7b34cbd in run_test (gl_fw=0x62ebd0, argc=2, 
argv=0x7fffffffe3a8) at 
/home/brianp/pig/tests/util/piglit-framework-gl/piglit_winsys_framework.c:88
#38 0x00007ffff7b18f96 in piglit_gl_test_run (argc=2, 
argv=0x7fffffffe3a8, config=0x7fffffffe260) at 
/home/brianp/pig/tests/util/piglit-framework-gl.c:229
#39 0x00000000004016a6 in main (argc=2, argv=0x7fffffffe3a8) at 
/home/brianp/pig/tests/spec/gl-1.0/blend.c:87

test_number = 15740 at this point.

srcRGB = GL_SRC_ALPHA_SATURATE
srcA = GL_ONE_MINUS_SRC_ALPHA
dstRGB =  GL_ONE_MINUS_SRC_COLOR
dstA = GL_CONSTANT_COLOR
opRGB = GL_FUNC_ADD
opA = GL_FUNC_ADD


I'll have to test a newer version of LLVM tomorrow.  Have you run 
gl-1.0-blend-func yourself, Roland?

-Brian


> Either way,
> for 1-2/3
> Reviewed-by: Roland Scheidegger <sroland at vmware.com>
> 
> Am 17.01.2018 um 23:54 schrieb Brian Paul:
>> The test normally runs about 27,000 tests and takes quite a long time
>> with some drivers. With the --quick option, only 1% of the tests are run.
>>
>> And update tests/quick.py to run the test with --quick.
>> ---
>>   tests/quick.py            |  7 +++++++
>>   tests/spec/gl-1.0/blend.c | 23 ++++++++++++++++++-----
>>   2 files changed, 25 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/quick.py b/tests/quick.py
>> index 53774e4..73c4678 100644
>> --- a/tests/quick.py
>> +++ b/tests/quick.py
>> @@ -68,6 +68,13 @@ with profile.test_list.group_manager(
>>       with profile.test_list.allow_reassignment:
>>           g(['ext_texture_env_combine-combine', '--quick'], 'texture-env-combine')
>>   
>> +# Set the --quick flag on the gl-1.0 blending test
>> +with profile.test_list.group_manager(
>> +        PiglitGLTest,
>> +        grouptools.join('spec', '!opengl 1.0')) as g:
>> +    with profile.test_list.allow_reassignment:
>> +        g(['gl-1.0-blend-func', '--quick'], 'gl-1.0-blend-func')
>> +
>>   # Limit texture size to 512x512 for some texture_multisample tests.
>>   # The default (max supported size) can be pretty slow.
>>   with profile.test_list.group_manager(
>> diff --git a/tests/spec/gl-1.0/blend.c b/tests/spec/gl-1.0/blend.c
>> index 769339f..192b271 100644
>> --- a/tests/spec/gl-1.0/blend.c
>> +++ b/tests/spec/gl-1.0/blend.c
>> @@ -64,6 +64,8 @@
>>   
>>   #define HUGE_STEP 1000
>>   
>> +static int test_stride = 1;
>> +
>>   /*
>>    * We will check each pair of blend factors
>>    * for each pixel in a square image of this
>> @@ -187,6 +189,13 @@ piglit_init(int argc, char **argv)
>>   	const char* blend_rgb_tol = getenv("PIGLIT_BLEND_RGB_TOLERANCE");
>>   	const char* blend_alpha_tol = getenv("PIGLIT_BLEND_ALPHA_TOLERANCE");
>>   
>> +	if (argc > 1 && strcmp(argv[1], "--quick") == 0) {
>> +		/* By default we run 27552 tests which is time consuming.
>> +		 * With --quick we run only 1% of the tests.
>> +		 */
>> +		test_stride = 100;
>> +	}
>> +
>>   	/*
>>   	 * Hack: Make driver tests on incorrect hardware feasible
>>   	 * We want to be able to perform meaningful tests
>> @@ -687,6 +696,7 @@ run_all_factor_sets(void)
>>   	bool pass = true;
>>   	int gl_version = piglit_get_gl_version();
>>   	int counter = 0; /* Number of tests we have done. */
>> +	int test_number = 0;
>>   	int step;
>>   	int op, opa;
>>   	int sf, sfa, df, dfa;
>> @@ -784,11 +794,14 @@ run_all_factor_sets(void)
>>   						for (dfa = 0; dfa <
>>   						     num_dst_factors_sep;
>>   						     dfa += step) {
>> -							pass &= proc_factors(
>> -								sf, sfa,
>> -								df, dfa,
>> -								op, opa);
>> -							counter++;
>> +							if (test_number % test_stride == 0) {
>> +								pass &= proc_factors(
>> +									sf, sfa,
>> +									df, dfa,
>> +									op, opa);
>> +								counter++;
>> +							}
>> +							test_number++;
>>   						}
>>   					}
>>   				}
>>
> 



More information about the Piglit mailing list