mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
v3d: configure polygon mode when enabled
The hardware do not support setting different polygon modes for front and back faces at the same time. In this case, unless we are culling one of the faces, we show a warning to the user. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28675>
This commit is contained in:
parent
6cc119522e
commit
b3e65c77c4
3 changed files with 57 additions and 29 deletions
|
|
@ -15,7 +15,6 @@ shaders@point-vertex-id gl_vertexid gl_instanceid,Fail
|
|||
shaders@point-vertex-id gl_vertexid,Fail
|
||||
spec@!opengl 1.0@depth-clear-precision-check,Fail
|
||||
spec@!opengl 1.0@gl-1.0-edgeflag,Fail
|
||||
spec@!opengl 1.0@gl-1.0-edgeflag-const,Fail
|
||||
spec@!opengl 1.0@gl-1.0-edgeflag-quads,Fail
|
||||
spec@!opengl 1.0@gl-1.0-no-op-paths,Fail
|
||||
spec@!opengl 1.0@gl-1.0-user-clip-all-planes,Fail
|
||||
|
|
@ -28,33 +27,6 @@ spec@!opengl 1.1@linestipple@Line loop,Fail
|
|||
spec@!opengl 1.1@linestipple@Line strip,Fail
|
||||
spec@!opengl 1.1@linestipple@Restarting lines within a single Begin-End block,Fail
|
||||
spec@!opengl 1.1@point-line-no-cull,Fail
|
||||
spec@!opengl 1.1@polygon-mode,Fail
|
||||
spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@teximage-colors gl_alpha16@Exact upload-download of GL_ALPHA16,Fail
|
||||
spec@!opengl 1.1@texwrap formats bordercolor,Fail
|
||||
spec@!opengl 1.1@texwrap formats bordercolor-swizzled,Fail
|
||||
|
|
@ -433,6 +405,41 @@ spec@nv_read_depth@read_depth_gles3,Fail
|
|||
spec@oes_point_sprite@arb_point_sprite-checkerboard_gles1,Fail
|
||||
spec@oes_shader_io_blocks@compiler@layout-location-aliasing.vert,Fail
|
||||
|
||||
# There are two problems here. On one side, hardware do not support
|
||||
# different polygon mode for front and back faces. By default we
|
||||
# choose the mode set for front face, unless we are culling it; in
|
||||
# this case we choose the mode set for back face. The other problem is
|
||||
# that we do not support rendering quads, so Gallium decomposes them
|
||||
# in triangles. This has the drawback that when setting polygon mode
|
||||
# as lines, we are rendering an extra edge.
|
||||
spec@!opengl 1.1@polygon-mode,Fail
|
||||
spec@!opengl 1.1@polygon-mode-facing,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 1: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 2: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 3: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on bottom edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on left edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 4: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 5: Expected white pixel on top edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected blue pixel in center,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on right edge,Fail
|
||||
spec@!opengl 1.1@polygon-mode-offset@config 6: Expected white pixel on top edge,Fail
|
||||
|
||||
# V3D does not support PIPE_FORMAT_{R16,R16G16,R16G16B16A16}_UNORM for
|
||||
# rendering
|
||||
spec@!opengl 3.0@required-texture-attachment-formats,Fail
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ traces:
|
|||
|
||||
gputest/plot3d-v2.trace:
|
||||
broadcom-rpi4:
|
||||
checksum: f8a9a5cd78646c89efe0df320755a3b2
|
||||
checksum: 1ef33ad22679107a256501c79bfd9e7c
|
||||
|
||||
gputest/tessmark-v2.trace:
|
||||
broadcom-rpi4:
|
||||
|
|
|
|||
|
|
@ -358,6 +358,27 @@ v3dX(emit_state)(struct pipe_context *pctx)
|
|||
V3D_LINE_RASTERIZATION_PERP_END_CAPS :
|
||||
V3D_LINE_RASTERIZATION_DIAMOND_EXIT;
|
||||
|
||||
if (config.enable_forward_facing_primitive &&
|
||||
config.enable_reverse_facing_primitive &&
|
||||
v3d->rasterizer->base.fill_front != v3d->rasterizer->base.fill_back) {
|
||||
mesa_logw_once("Setting a different polygon mode for "
|
||||
"front and back faces is not supported");
|
||||
}
|
||||
|
||||
if (config.enable_forward_facing_primitive) {
|
||||
if (v3d->rasterizer->base.fill_front != PIPE_POLYGON_MODE_FILL) {
|
||||
config.direct3d_wireframe_triangles_mode = true;
|
||||
config.direct3d_point_fill_mode =
|
||||
v3d->rasterizer->base.fill_front == PIPE_POLYGON_MODE_POINT;
|
||||
}
|
||||
} else {
|
||||
if (v3d->rasterizer->base.fill_back != PIPE_POLYGON_MODE_FILL) {
|
||||
config.direct3d_wireframe_triangles_mode = true;
|
||||
config.direct3d_point_fill_mode =
|
||||
v3d->rasterizer->base.fill_back == PIPE_POLYGON_MODE_POINT;
|
||||
}
|
||||
}
|
||||
|
||||
#if V3D_VERSION >= 71
|
||||
/* The following follows the logic implemented in v3dv
|
||||
* plus the definition of depth_clip_near/far and
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue