mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2025-02-20 18:23:48 +00:00
llvmpipe: fix multisample lines again
This does a little bit better than what we did in 2c0a078fdb4 ("llvmpipe: fix multisample lines."), where parts of the diamond-exit rule stuff was bypassed. But we should actually bypass *all* of the diamond-exit rule stuff here instead. The reason is that multisampled lines have a completely differently specified set of rasterization rules, as per the OpenGL 4.6 core spec, section 14.5.4 ("Line Multisample Rasterization"). So let's give multisampled lines their own geometry-generation codepath instead. This fixes the following dEQP tests: - dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines - dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11183>
This commit is contained in:
parent
9fa53d1f50
commit
cef08f0557
@ -47,9 +47,7 @@ dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
||||
|
@ -298,7 +298,7 @@ try_setup_line( struct lp_setup_context *setup,
|
||||
int nr_planes = 4;
|
||||
unsigned viewport_index = 0;
|
||||
unsigned layer = 0;
|
||||
float pixel_offset = setup->multisample ? 0.0 : setup->pixel_offset;
|
||||
float pixel_offset = setup->pixel_offset;
|
||||
/* linewidth should be interpreted as integer */
|
||||
int fixed_width = util_iround(width) * FIXED_ONE;
|
||||
|
||||
@ -357,10 +357,24 @@ try_setup_line( struct lp_setup_context *setup,
|
||||
info.v2 = v2;
|
||||
|
||||
|
||||
/* X-MAJOR LINE */
|
||||
if (fabsf(dx) >= fabsf(dy)) {
|
||||
if (setup->multisample) {
|
||||
float scale = (setup->line_width * 0.5f) / sqrtf(area);
|
||||
int tx = subpixel_snap(-dy * scale);
|
||||
int ty = subpixel_snap(+dx * scale);
|
||||
|
||||
x[0] = subpixel_snap(v1[0][0]) - tx;
|
||||
x[1] = subpixel_snap(v2[0][0]) - tx;
|
||||
x[2] = subpixel_snap(v2[0][0]) + tx;
|
||||
x[3] = subpixel_snap(v1[0][0]) + tx;
|
||||
|
||||
y[0] = subpixel_snap(v1[0][1]) - ty;
|
||||
y[1] = subpixel_snap(v2[0][1]) - ty;
|
||||
y[2] = subpixel_snap(v2[0][1]) + ty;
|
||||
y[3] = subpixel_snap(v1[0][1]) + ty;
|
||||
} else if (fabsf(dx) >= fabsf(dy)) {
|
||||
float dydx = dy / dx;
|
||||
|
||||
/* X-MAJOR LINE */
|
||||
x1diff = v1[0][0] - floorf(v1[0][0]) - 0.5f;
|
||||
y1diff = v1[0][1] - floorf(v1[0][1]) - 0.5f;
|
||||
x2diff = v2[0][0] - floorf(v2[0][0]) - 0.5f;
|
||||
|
@ -38,9 +38,7 @@ dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
||||
|
@ -37,9 +37,7 @@ dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_render_with_units,Fail
|
||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
|
||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide,Fail
|
||||
|
Loading…
x
Reference in New Issue
Block a user