spec/arb_sample_shading/samplemask 16 all: skip
spec/arb_sample_shading/samplemask 2 all/0.250000 mask_in_one: fail
spec/arb_sample_shading/samplemask 2 all/0.500000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 2 all/0.500000 partition: fail
spec/arb_sample_shading/samplemask 2 all/1.000000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 2 all/1.000000 partition: fail
spec/arb_sample_shading/samplemask 2 all/noms fix: fail
spec/arb_sample_shading/samplemask 2 all/noms mask_in_one: fail
spec/arb_sample_shading/samplemask 2 all/noms partition: fail
spec/arb_sample_shading/samplemask 2 all/sample mask_in_one: fail
-spec/arb_sample_shading/samplemask 2 all/sample partition: fail
spec/arb_sample_shading/samplemask 2/0.250000 mask_in_one: fail
spec/arb_sample_shading/samplemask 2/0.500000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 2/0.500000 partition: fail
spec/arb_sample_shading/samplemask 2/1.000000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 2/1.000000 partition: fail
spec/arb_sample_shading/samplemask 2/noms fix: fail
spec/arb_sample_shading/samplemask 2/noms mask_in_one: fail
spec/arb_sample_shading/samplemask 2/noms partition: fail
spec/arb_sample_shading/samplemask 2/sample mask_in_one: fail
-spec/arb_sample_shading/samplemask 2/sample partition: fail
spec/arb_sample_shading/samplemask 32: skip
spec/arb_sample_shading/samplemask 32 all: skip
spec/arb_sample_shading/samplemask 4 all/0.250000 mask_in_one: fail
spec/arb_sample_shading/samplemask 4 all/0.500000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 4 all/0.500000 partition: fail
spec/arb_sample_shading/samplemask 4 all/1.000000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 4 all/1.000000 partition: fail
spec/arb_sample_shading/samplemask 4 all/noms fix: fail
spec/arb_sample_shading/samplemask 4 all/noms mask_in_one: fail
spec/arb_sample_shading/samplemask 4 all/noms partition: fail
spec/arb_sample_shading/samplemask 4 all/sample mask_in_one: fail
-spec/arb_sample_shading/samplemask 4 all/sample partition: fail
spec/arb_sample_shading/samplemask 4/0.250000 mask_in_one: fail
spec/arb_sample_shading/samplemask 4/0.500000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 4/0.500000 partition: fail
spec/arb_sample_shading/samplemask 4/1.000000 mask_in_one: fail
-spec/arb_sample_shading/samplemask 4/1.000000 partition: fail
spec/arb_sample_shading/samplemask 4/noms fix: fail
spec/arb_sample_shading/samplemask 4/noms mask_in_one: fail
spec/arb_sample_shading/samplemask 4/noms partition: fail
spec/arb_sample_shading/samplemask 4/sample mask_in_one: fail
-spec/arb_sample_shading/samplemask 4/sample partition: fail
spec/arb_sample_shading/samplemask 6: skip
spec/arb_sample_shading/samplemask 6 all: skip
spec/arb_sample_shading/samplemask 8: skip
summary:
name: results
---- --------
- pass: 21841
- fail: 214
+ pass: 21853
+ fail: 202
crash: 0
skip: 1445
timeout: 0
GL_ARB_fragment_shader_interlock DONE (i965)
GL_ARB_gpu_shader_int64 DONE (i965/gen8+, nvc0, radeonsi, softpipe, llvmpipe)
GL_ARB_parallel_shader_compile DONE (all drivers)
- GL_ARB_post_depth_coverage DONE (i965, nvc0, radeonsi)
+ GL_ARB_post_depth_coverage DONE (i965, nvc0, radeonsi, llvmpipe)
GL_ARB_robustness_isolation not started
GL_ARB_sample_locations DONE (nvc0)
GL_ARB_seamless_cubemap_per_texture DONE (etnaviv/SEAMLESS_CUBE_MAP, freedreno, i965, nvc0, r600, radeonsi, softpipe, swr, virgl)
shader->info.base.num_instructions < 8) && 0;
const boolean dual_source_blend = key->blend.rt[0].blend_enable &&
util_blend_state_is_dual(&key->blend, 0);
+ const bool post_depth_coverage = shader->info.base.properties[TGSI_PROPERTY_FS_POST_DEPTH_COVERAGE];
unsigned attrib;
unsigned chan;
unsigned cbuf;
LLVMValueRef s_mask_or = lp_build_alloca(gallivm, lp_build_int_vec_type(gallivm, type), "cov_mask_early_depth");
LLVMBuildStore(builder, LLVMConstNull(lp_build_int_vec_type(gallivm, type)), s_mask_or);
+ /* Create storage for post depth sample mask */
+ LLVMValueRef post_depth_sample_mask_in = NULL;
+ if (post_depth_coverage)
+ post_depth_sample_mask_in = lp_build_alloca(gallivm, int_vec_type, "post_depth_sample_mask_in");
+
LLVMValueRef s_mask = NULL, s_mask_ptr = NULL;
LLVMValueRef z_sample_value_store = NULL, s_sample_value_store = NULL;
LLVMValueRef z_fb_store = NULL, s_fb_store = NULL;
tmp_s_mask_or = LLVMBuildOr(builder, tmp_s_mask_or, s_mask, "");
LLVMBuildStore(builder, tmp_s_mask_or, s_mask_or);
+ if (post_depth_coverage) {
+ LLVMValueRef mask_bit_idx = LLVMBuildShl(builder, lp_build_const_int32(gallivm, 1), sample_loop_state.counter, "");
+ LLVMValueRef post_depth_mask_in = LLVMBuildLoad(builder, post_depth_sample_mask_in, "");
+ mask_bit_idx = LLVMBuildAnd(builder, s_mask, lp_build_broadcast(gallivm, int_vec_type, mask_bit_idx), "");
+ post_depth_mask_in = LLVMBuildOr(builder, post_depth_mask_in, mask_bit_idx, "");
+ LLVMBuildStore(builder, post_depth_mask_in, post_depth_sample_mask_in);
+ }
+
LLVMBuildStore(builder, s_mask, s_mask_ptr);
lp_build_for_loop_end(&sample_loop_state);
lp_build_interp_soa_update_pos_dyn(interp, gallivm, loop_state.counter, NULL);
lp_build_mask_update(&mask, tmp_s_mask_or);
}
+ } else {
+ if (post_depth_coverage) {
+ LLVMValueRef post_depth_mask_in = LLVMBuildAnd(builder, lp_build_mask_value(&mask), lp_build_const_int_vec(gallivm, type, 1), "");
+ LLVMBuildStore(builder, post_depth_mask_in, post_depth_sample_mask_in);
+ }
}
LLVMValueRef out_sample_mask_storage = NULL;
LLVMBuildStore(builder, LLVMConstNull(int_vec_type), out_sample_mask_storage);
}
+ if (post_depth_coverage) {
+ system_values.sample_mask_in = LLVMBuildLoad(builder, post_depth_sample_mask_in, "");
+ }
+ else
+ system_values.sample_mask_in = sample_mask_in;
if (key->multisample && key->min_samples > 1) {
lp_build_for_loop_begin(&sample_loop_state, gallivm,
lp_build_const_int32(gallivm, 0),
lp_build_mask_force(&mask, s_mask);
lp_build_interp_soa_update_pos_dyn(interp, gallivm, loop_state.counter, sample_loop_state.counter);
system_values.sample_id = sample_loop_state.counter;
- } else
+ system_values.sample_mask_in = LLVMBuildAnd(builder, system_values.sample_mask_in,
+ lp_build_broadcast(gallivm, int_vec_type,
+ LLVMBuildShl(builder, lp_build_const_int32(gallivm, 1), sample_loop_state.counter, "")), "");
+ } else {
system_values.sample_id = lp_build_const_int32(gallivm, 0);
- system_values.sample_mask_in = sample_mask_in;
+ }
system_values.sample_pos = sample_pos_array;
lp_build_interp_soa_update_inputs_dyn(interp, gallivm, loop_state.counter, mask_store, sample_loop_state.counter);