llvmpipe: use preferred attribute interpolation for wide lines
When rasterizing legacy-lines, OpenGL defines the width as being an extrusion along the minor axis, repeating varyings. While the spec *does* allow for an alternative method that matches our current results, the OpenGL ES CTS doesn't allow these results even if OpenGL ES has the same wording of an alternative method. This is technically speaking a bug in the OpenGL ES CTS, but it seems like nobody else is using the alternative formulation, at least not while passing the OpenGL ES CTS. On top of this, the OpenGL specification explicitly lists the extrusion results as the preferred method. So it seems like a good idea for us to do this the way the OpenGL specification prefers regardless; it's going to give less surprising results to applications, and it's helping us pass some tests. This math to set these up would "trivially" be: dx = (dx * dx + dy * dy) / dx dy = 0 and: dy = (dx * dx + dy * dy) / dy dx = 0 ...but since we've already calculated dxdy, we can reformulate this to save a division. This fixes the following dEQP test-cases: - dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide - dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide - dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide - dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide - dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide - dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide - dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide - dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide - dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide - dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide - dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide - dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide - dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide - dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11315>
This commit is contained in:
parent
2201f5a58c
commit
eb60d8c7b9
|
@ -11,12 +11,6 @@ dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.v
|
||||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
||||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
||||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
||||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag,Fail
|
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag,Fail
|
||||||
|
@ -32,14 +26,6 @@ dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.default_framebuffer_bbox_equal,Fail
|
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.default_framebuffer_bbox_equal,Fail
|
||||||
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.default_framebuffer_bbox_larger,Fail
|
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.default_framebuffer_bbox_larger,Fail
|
||||||
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.fbo_bbox_equal,Fail
|
dEQP-GLES31.functional.primitive_bounding_box.wide_points.global_state.vertex_tessellation_fragment.fbo_bbox_equal,Fail
|
||||||
|
|
|
@ -426,6 +426,10 @@ try_setup_line( struct lp_setup_context *setup,
|
||||||
will_draw_start = sign(-x1diff) != sign(dx);
|
will_draw_start = sign(-x1diff) != sign(dx);
|
||||||
will_draw_end = (sign(x2diff) == sign(-dx)) || x2diff==0;
|
will_draw_end = (sign(x2diff) == sign(-dx)) || x2diff==0;
|
||||||
|
|
||||||
|
/* interpolate using the preferred wide-lines formula */
|
||||||
|
info.dx *= 1 + dydx * dydx;
|
||||||
|
info.dy = 0;
|
||||||
|
|
||||||
if (dx < 0) {
|
if (dx < 0) {
|
||||||
/* if v2 is to the right of v1, swap pointers */
|
/* if v2 is to the right of v1, swap pointers */
|
||||||
const float (*temp)[4] = v1;
|
const float (*temp)[4] = v1;
|
||||||
|
@ -523,6 +527,10 @@ try_setup_line( struct lp_setup_context *setup,
|
||||||
will_draw_start = sign(y1diff) == sign(dy);
|
will_draw_start = sign(y1diff) == sign(dy);
|
||||||
will_draw_end = (sign(-y2diff) == sign(dy)) || y2diff==0;
|
will_draw_end = (sign(-y2diff) == sign(dy)) || y2diff==0;
|
||||||
|
|
||||||
|
/* interpolate using the preferred wide-lines formula */
|
||||||
|
info.dx = 0;
|
||||||
|
info.dy *= 1 + dxdy * dxdy;
|
||||||
|
|
||||||
if (dy > 0) {
|
if (dy > 0) {
|
||||||
/* if v2 is on top of v1, swap pointers */
|
/* if v2 is on top of v1, swap pointers */
|
||||||
const float (*temp)[4] = v1;
|
const float (*temp)[4] = v1;
|
||||||
|
|
|
@ -4,12 +4,6 @@ dEQP-GLES2.functional.clipping.point.wide_point_clip,Fail
|
||||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center,Fail
|
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center,Fail
|
||||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner,Fail
|
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner,Fail
|
||||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
||||||
dEQP-GLES3.functional.clipping.point.wide_point_clip,Fail
|
dEQP-GLES3.functional.clipping.point.wide_point_clip,Fail
|
||||||
|
@ -28,14 +22,6 @@ dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4,Fail
|
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4,Fail
|
||||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8,Fail
|
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8,Fail
|
||||||
dEQP-GLES31.functional.image_load_store.buffer.image_size.writeonly_12,Fail
|
dEQP-GLES31.functional.image_load_store.buffer.image_size.writeonly_12,Fail
|
||||||
|
|
|
@ -4,12 +4,6 @@ dEQP-GLES2.functional.clipping.point.wide_point_clip,Fail
|
||||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center,Fail
|
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center,Fail
|
||||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner,Fail
|
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner,Fail
|
||||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
||||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
||||||
dEQP-GLES3.functional.clipping.point.wide_point_clip,Fail
|
dEQP-GLES3.functional.clipping.point.wide_point_clip,Fail
|
||||||
|
@ -28,14 +22,6 @@ dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4,Fail
|
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4,Fail
|
||||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9,Fail
|
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9,Fail
|
||||||
dEQP-GLES31.functional.image_load_store.buffer.image_size.readonly_12,Fail
|
dEQP-GLES31.functional.image_load_store.buffer.image_size.readonly_12,Fail
|
||||||
|
|
|
@ -179,7 +179,7 @@ traces:
|
||||||
- path: gputest/plot3d.trace
|
- path: gputest/plot3d.trace
|
||||||
expectations:
|
expectations:
|
||||||
- device: gl-virgl
|
- device: gl-virgl
|
||||||
checksum: 0ebf993380210d9e5138f1057ddaa7ab
|
checksum: f3c0187ab2197c57e699135b7f42b8cc
|
||||||
# Crash
|
# Crash
|
||||||
# - path: gputest/tessmark.trace
|
# - path: gputest/tessmark.trace
|
||||||
# expectations:
|
# expectations:
|
||||||
|
@ -192,7 +192,7 @@ traces:
|
||||||
- path: humus/CelShading.trace
|
- path: humus/CelShading.trace
|
||||||
expectations:
|
expectations:
|
||||||
- device: gl-virgl
|
- device: gl-virgl
|
||||||
checksum: 7d56b6ec4a1cf30406bceb9fe3e4d5c8
|
checksum: 0611c1680155a831f69a57554484c914
|
||||||
- path: humus/DynamicBranching3.trace
|
- path: humus/DynamicBranching3.trace
|
||||||
expectations:
|
expectations:
|
||||||
# speckling present on the ground that isn't there on other drivers.
|
# speckling present on the ground that isn't there on other drivers.
|
||||||
|
|
|
@ -23,14 +23,6 @@ dEQP-GLES3.functional.multisample.fbo_4_samples.proportionality_sample_coverage,
|
||||||
dEQP-GLES3.functional.multisample.fbo_4_samples.sample_coverage_invert,Fail
|
dEQP-GLES3.functional.multisample.fbo_4_samples.sample_coverage_invert,Fail
|
||||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage,Fail
|
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage,Fail
|
||||||
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert,Fail
|
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert,Fail
|
||||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
KHR-GL32.transform_feedback.capture_geometry_separate_test,Fail
|
KHR-GL32.transform_feedback.capture_geometry_separate_test,Fail
|
||||||
KHR-GL32.transform_feedback.capture_vertex_interleaved_test,Fail
|
KHR-GL32.transform_feedback.capture_vertex_interleaved_test,Fail
|
||||||
KHR-GL32.transform_feedback.capture_vertex_separate_test,Fail
|
KHR-GL32.transform_feedback.capture_vertex_separate_test,Fail
|
||||||
|
@ -42,12 +34,6 @@ KHR-GL32.transform_feedback.query_vertex_interleaved_test,Fail
|
||||||
KHR-GL32.transform_feedback.query_vertex_separate_test,Fail
|
KHR-GL32.transform_feedback.query_vertex_separate_test,Fail
|
||||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail
|
||||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner,Fail
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide,Fail
|
|
||||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide,Fail
|
|
||||||
KHR-GL32.packed_pixels.pbo_rectangle.r16i,Fail
|
KHR-GL32.packed_pixels.pbo_rectangle.r16i,Fail
|
||||||
KHR-GL32.packed_pixels.pbo_rectangle.r16ui,Fail
|
KHR-GL32.packed_pixels.pbo_rectangle.r16ui,Fail
|
||||||
KHR-GL32.packed_pixels.pbo_rectangle.r32i,Fail
|
KHR-GL32.packed_pixels.pbo_rectangle.r32i,Fail
|
||||||
|
|
Loading…
Reference in New Issue