llvmpipe: enable ARB_sample_shading
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4122>
diff --git a/.gitlab-ci/piglit/glslparser.txt b/.gitlab-ci/piglit/glslparser.txt
index de2eeda..e670ce9 100644
--- a/.gitlab-ci/piglit/glslparser.txt
+++ b/.gitlab-ci/piglit/glslparser.txt
@@ -1136,18 +1136,22 @@
spec/arb_gpu_shader_int64/compiler/built-in-functions/sign-int64_t.frag: skip
spec/arb_gpu_shader_int64/compiler/built-in-functions/sign-int64_t.geom: skip
spec/arb_gpu_shader_int64/compiler/built-in-functions/sign-int64_t.vert: skip
-spec/arb_sample_shading/compiler/gl_numsamples.frag: skip
-spec/arb_sample_shading/compiler/gl_sampleid.frag: skip
-spec/arb_sample_shading/compiler/gl_samplemask.frag: skip
-spec/arb_sample_shading/compiler/gl_sampleposition.frag: skip
-spec/arb_sample_shading/preprocessor/enabled-compat.frag: skip
-spec/arb_sample_shading/preprocessor/enabled-compat.vert: skip
-spec/arb_sample_shading/preprocessor/enabled-core.comp: skip
-spec/arb_sample_shading/preprocessor/enabled-core.frag: skip
-spec/arb_sample_shading/preprocessor/enabled-core.geom: skip
-spec/arb_sample_shading/preprocessor/enabled-core.tesc: skip
-spec/arb_sample_shading/preprocessor/enabled-core.tese: skip
-spec/arb_sample_shading/preprocessor/enabled-core.vert: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-compat.frag: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-compat.vert: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.comp: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.frag: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.geom: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.tesc: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.tese: skip
+spec/arb_sample_shading/preprocessor/disabled-defined-core.vert: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-compat.frag: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-compat.vert: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.comp: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.frag: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.geom: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.tesc: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.tese: skip
+spec/arb_sample_shading/preprocessor/disabled-undefined-core.vert: skip
spec/arb_separate_shader_objects/preprocessor/disabled-defined-compat.frag: skip
spec/arb_separate_shader_objects/preprocessor/disabled-defined-compat.vert: skip
spec/arb_separate_shader_objects/preprocessor/disabled-defined-core.comp: skip
@@ -4880,10 +4884,10 @@
summary:
name: results
---- --------
- pass: 9904
+ pass: 9900
fail: 2
crash: 0
- skip: 4877
+ skip: 4881
timeout: 0
warn: 0
incomplete: 0
diff --git a/.gitlab-ci/piglit/quick_gl.txt b/.gitlab-ci/piglit/quick_gl.txt
index b493665..74e0483 100644
--- a/.gitlab-ci/piglit/quick_gl.txt
+++ b/.gitlab-ci/piglit/quick_gl.txt
@@ -429,8 +429,20 @@
spec/arb_compute_variable_group_size/errors: skip
spec/arb_compute_variable_group_size/local-size: skip
spec/arb_compute_variable_group_size/minmax: skip
-spec/arb_copy_image/arb_copy_image-formats --samples=2: skip
-spec/arb_copy_image/arb_copy_image-formats --samples=4: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth32f_stencil8/destination: gl_depth32f_stencil8: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth_component/destination: gl_depth_component: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth_component16/destination: gl_depth_component16: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth_component24/destination: gl_depth_component24: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth_component32/destination: gl_depth_component32: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_depth_stencil/destination: gl_depth_stencil: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=2/source: gl_stencil_index8/destination: gl_stencil_index8: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth32f_stencil8/destination: gl_depth32f_stencil8: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth_component/destination: gl_depth_component: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth_component16/destination: gl_depth_component16: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth_component24/destination: gl_depth_component24: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth_component32/destination: gl_depth_component32: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_depth_stencil/destination: gl_depth_stencil: skip
+spec/arb_copy_image/arb_copy_image-formats --samples=4/source: gl_stencil_index8/destination: gl_stencil_index8: skip
spec/arb_copy_image/arb_copy_image-formats --samples=8: skip
spec/arb_depth_buffer_float/depthstencil-render-miplevels 1024 d=z32f_s8_s=z24_s8: skip
spec/arb_depth_buffer_float/depthstencil-render-miplevels 1024 d=z32f_s=z24_s8: skip
@@ -460,10 +472,8 @@
spec/arb_enhanced_layouts/gs-stream-location-aliasing: fail
spec/arb_fragment_program/fp-indirections: skip
spec/arb_fragment_shader_interlock/arb_fragment_shader_interlock-image-load-store: skip
-spec/arb_framebuffer_no_attachments/arb_framebuffer_no_attachments-atomic/per-sample: skip
spec/arb_framebuffer_no_attachments/arb_framebuffer_no_attachments-params/dsa: skip
spec/arb_framebuffer_no_attachments/arb_framebuffer_no_attachments-query/ms2: skip
-spec/arb_framebuffer_no_attachments/arb_framebuffer_no_attachments-roundup-samples: skip
spec/arb_framebuffer_object/fbo-blit-scaled-linear: fail
spec/arb_geometry_shader4/arb_geometry_shader4-ignore-adjacent-vertices gl_line_strip_adjacency: skip
spec/arb_geometry_shader4/arb_geometry_shader4-ignore-adjacent-vertices gl_lines_adjacency: skip
@@ -504,65 +514,86 @@
spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-sync_cpu_read_after_cache_test-gl_unsigned_int: fail
spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-sync_cpu_read_after_cache_test-gl_unsigned_int64_arb: fail
spec/arb_sample_locations/test: skip
-spec/arb_sample_shading/arb_sample_shading-api: skip
-spec/arb_sample_shading/arb_sample_shading-builtin-gl-sample-mask-mrt-alpha: skip
-spec/arb_sample_shading/arb_sample_shading-builtin-gl-sample-mask-mrt-alpha-to-coverage-combinations: skip
-spec/arb_sample_shading/builtin-gl-num-samples 0: skip
+spec/arb_sample_shading/arb_sample_shading-builtin-gl-sample-mask-mrt-alpha-to-coverage-combinations: fail
spec/arb_sample_shading/builtin-gl-num-samples 16: skip
-spec/arb_sample_shading/builtin-gl-num-samples 2: skip
spec/arb_sample_shading/builtin-gl-num-samples 32: skip
-spec/arb_sample_shading/builtin-gl-num-samples 4: skip
spec/arb_sample_shading/builtin-gl-num-samples 6: skip
spec/arb_sample_shading/builtin-gl-num-samples 8: skip
-spec/arb_sample_shading/builtin-gl-sample-id 0: skip
spec/arb_sample_shading/builtin-gl-sample-id 16: skip
-spec/arb_sample_shading/builtin-gl-sample-id 2: skip
spec/arb_sample_shading/builtin-gl-sample-id 32: skip
-spec/arb_sample_shading/builtin-gl-sample-id 4: skip
spec/arb_sample_shading/builtin-gl-sample-id 6: skip
spec/arb_sample_shading/builtin-gl-sample-id 8: skip
-spec/arb_sample_shading/builtin-gl-sample-mask 0: skip
+spec/arb_sample_shading/builtin-gl-sample-mask 0: fail
spec/arb_sample_shading/builtin-gl-sample-mask 16: skip
-spec/arb_sample_shading/builtin-gl-sample-mask 2: skip
spec/arb_sample_shading/builtin-gl-sample-mask 32: skip
-spec/arb_sample_shading/builtin-gl-sample-mask 4: skip
spec/arb_sample_shading/builtin-gl-sample-mask 6: skip
spec/arb_sample_shading/builtin-gl-sample-mask 8: skip
-spec/arb_sample_shading/builtin-gl-sample-mask-simple 0: skip
+spec/arb_sample_shading/builtin-gl-sample-mask-simple 0: fail
spec/arb_sample_shading/builtin-gl-sample-mask-simple 16: skip
-spec/arb_sample_shading/builtin-gl-sample-mask-simple 2: skip
spec/arb_sample_shading/builtin-gl-sample-mask-simple 32: skip
-spec/arb_sample_shading/builtin-gl-sample-mask-simple 4: skip
spec/arb_sample_shading/builtin-gl-sample-mask-simple 6: skip
spec/arb_sample_shading/builtin-gl-sample-mask-simple 8: skip
-spec/arb_sample_shading/builtin-gl-sample-position 0: skip
spec/arb_sample_shading/builtin-gl-sample-position 16: skip
-spec/arb_sample_shading/builtin-gl-sample-position 2: skip
spec/arb_sample_shading/builtin-gl-sample-position 32: skip
-spec/arb_sample_shading/builtin-gl-sample-position 4: skip
spec/arb_sample_shading/builtin-gl-sample-position 6: skip
spec/arb_sample_shading/builtin-gl-sample-position 8: skip
spec/arb_sample_shading/ignore-centroid-qualifier 16: skip
-spec/arb_sample_shading/ignore-centroid-qualifier 2: skip
spec/arb_sample_shading/ignore-centroid-qualifier 32: skip
-spec/arb_sample_shading/ignore-centroid-qualifier 4: skip
spec/arb_sample_shading/ignore-centroid-qualifier 6: skip
spec/arb_sample_shading/ignore-centroid-qualifier 8: skip
spec/arb_sample_shading/interpolate-at-sample-position 16: skip
-spec/arb_sample_shading/interpolate-at-sample-position 2: skip
spec/arb_sample_shading/interpolate-at-sample-position 32: skip
-spec/arb_sample_shading/interpolate-at-sample-position 4: skip
spec/arb_sample_shading/interpolate-at-sample-position 6: skip
spec/arb_sample_shading/interpolate-at-sample-position 8: skip
spec/arb_sample_shading/samplemask 0 all: skip
spec/arb_sample_shading/samplemask 16: skip
spec/arb_sample_shading/samplemask 16 all: skip
-spec/arb_sample_shading/samplemask 2: skip
-spec/arb_sample_shading/samplemask 2 all: skip
+spec/arb_sample_shading/samplemask 2 all/0.250000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2 all/0.250000 partition: skip
+spec/arb_sample_shading/samplemask 2 all/0.500000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2 all/0.500000 partition: skip
+spec/arb_sample_shading/samplemask 2 all/1.000000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2 all/1.000000 partition: skip
+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: skip
+spec/arb_sample_shading/samplemask 2 all/sample mask_in_one: fail
+spec/arb_sample_shading/samplemask 2 all/sample partition: skip
+spec/arb_sample_shading/samplemask 2/0.250000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2/0.250000 partition: skip
+spec/arb_sample_shading/samplemask 2/0.500000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2/0.500000 partition: skip
+spec/arb_sample_shading/samplemask 2/1.000000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 2/1.000000 partition: skip
+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: skip
+spec/arb_sample_shading/samplemask 2/sample mask_in_one: fail
+spec/arb_sample_shading/samplemask 2/sample partition: skip
spec/arb_sample_shading/samplemask 32: skip
spec/arb_sample_shading/samplemask 32 all: skip
-spec/arb_sample_shading/samplemask 4: skip
-spec/arb_sample_shading/samplemask 4 all: skip
+spec/arb_sample_shading/samplemask 4 all/0.250000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4 all/0.250000 partition: skip
+spec/arb_sample_shading/samplemask 4 all/0.500000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4 all/0.500000 partition: skip
+spec/arb_sample_shading/samplemask 4 all/1.000000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4 all/1.000000 partition: skip
+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: skip
+spec/arb_sample_shading/samplemask 4 all/sample mask_in_one: fail
+spec/arb_sample_shading/samplemask 4 all/sample partition: skip
+spec/arb_sample_shading/samplemask 4/0.250000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4/0.250000 partition: skip
+spec/arb_sample_shading/samplemask 4/0.500000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4/0.500000 partition: skip
+spec/arb_sample_shading/samplemask 4/1.000000 mask_in_one: fail
+spec/arb_sample_shading/samplemask 4/1.000000 partition: skip
+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: skip
+spec/arb_sample_shading/samplemask 4/sample mask_in_one: fail
+spec/arb_sample_shading/samplemask 4/sample partition: skip
spec/arb_sample_shading/samplemask 6: skip
spec/arb_sample_shading/samplemask 6 all: skip
spec/arb_sample_shading/samplemask 8: skip
@@ -1683,10 +1714,10 @@
summary:
name: results
---- --------
- pass: 20103
- fail: 197
+ pass: 20701
+ fail: 224
crash: 0
- skip: 1461
+ skip: 1465
timeout: 0
warn: 6
incomplete: 0
@@ -1695,4 +1726,4 @@
changes: 0
fixes: 0
regressions: 0
- total: 21785
+ total: 22414
diff --git a/docs/features.txt b/docs/features.txt
index 5893e8a..1a764e8 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -129,7 +129,7 @@
- Interpolation functions DONE (softpipe)
- New overload resolution rules DONE (softpipe)
GL_ARB_gpu_shader_fp64 DONE (i965/gen7+, llvmpipe, softpipe, swr)
- GL_ARB_sample_shading DONE (freedreno/a6xx, i965/gen6+, nv50)
+ GL_ARB_sample_shading DONE (freedreno/a6xx, i965/gen6+, nv50, llvmpipe)
GL_ARB_shader_subroutine DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr)
GL_ARB_tessellation_shader DONE (i965/gen7+, llvmpipe, swr)
GL_ARB_texture_buffer_object_rgb32 DONE (freedreno, i965/gen6+, llvmpipe, softpipe, swr)
diff --git a/src/gallium/drivers/llvmpipe/lp_context.h b/src/gallium/drivers/llvmpipe/lp_context.h
index 825fde9..6c53921 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.h
+++ b/src/gallium/drivers/llvmpipe/lp_context.h
@@ -75,6 +75,7 @@
/** Other rendering state */
unsigned sample_mask;
+ unsigned min_samples;
struct pipe_blend_color blend_color;
struct pipe_stencil_ref stencil_ref;
struct pipe_clip_state clip;
diff --git a/src/gallium/drivers/llvmpipe/lp_scene.c b/src/gallium/drivers/llvmpipe/lp_scene.c
index ddb8af1..59eed41 100644
--- a/src/gallium/drivers/llvmpipe/lp_scene.c
+++ b/src/gallium/drivers/llvmpipe/lp_scene.c
@@ -106,8 +106,8 @@
{
unsigned x, y;
- for (y = 0; y < TILES_Y; y++) {
- for (x = 0; x < TILES_X; x++) {
+ for (y = 0; y < scene->tiles_y; y++) {
+ for (x = 0; x < scene->tiles_x; x++) {
const struct cmd_bin *bin = lp_scene_get_bin(scene, x, y);
if (bin->head) {
return FALSE;
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index 25f4b0f..a980700 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -259,7 +259,6 @@
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
return 4;
case PIPE_CAP_TEXTURE_GATHER_SM5:
- case PIPE_CAP_SAMPLE_SHADING:
case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
return 0;
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
@@ -400,6 +399,7 @@
case PIPE_CAP_TGSI_VOTE:
case PIPE_CAP_LOAD_CONSTBUF:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
+ case PIPE_CAP_SAMPLE_SHADING:
case PIPE_CAP_PACKED_UNIFORMS: {
struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
return !lscreen->use_tgsi;
diff --git a/src/gallium/drivers/llvmpipe/lp_state_blend.c b/src/gallium/drivers/llvmpipe/lp_state_blend.c
index 10e5930..ddf2c20 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_blend.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_blend.c
@@ -186,6 +186,19 @@
}
}
+static void
+llvmpipe_set_min_samples(struct pipe_context *pipe,
+ unsigned min_samples)
+{
+ struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
+
+ if (min_samples != llvmpipe->min_samples) {
+ llvmpipe->min_samples = min_samples;
+
+ llvmpipe->dirty |= LP_NEW_FS;
+ }
+}
+
void
llvmpipe_init_blend_funcs(struct llvmpipe_context *llvmpipe)
{
@@ -201,6 +214,7 @@
llvmpipe->pipe.set_stencil_ref = llvmpipe_set_stencil_ref;
llvmpipe->pipe.set_sample_mask = llvmpipe_set_sample_mask;
+ llvmpipe->pipe.set_min_samples = llvmpipe_set_min_samples;
llvmpipe->dirty |= LP_NEW_SAMPLE_MASK;
llvmpipe->sample_mask = ~0;
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 2ce9726..f4959fb 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -3723,7 +3723,7 @@
key->min_samples = 1;
if (key->multisample) {
key->coverage_samples = util_framebuffer_get_num_samples(&lp->framebuffer);
- key->min_samples = 1;
+ key->min_samples = lp->min_samples == 1 ? 1 : key->coverage_samples;
}
key->nr_cbufs = lp->framebuffer.nr_cbufs;