Mesa (main): i915g: Use the non-vbuf code path by default to fix index overflows.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Sep 27 18:49:20 UTC 2021
Module: Mesa
Branch: main
Commit: 7371efdb3abef6f80ee2b898e3d50ae0349a508d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7371efdb3abef6f80ee2b898e3d50ae0349a508d
Author: Emma Anholt <emma at anholt.net>
Date: Sat Sep 25 15:42:06 2021 -0700
i915g: Use the non-vbuf code path by default to fix index overflows.
We were assertion failing on some large draws due to indices >16bits,
despite asking draw to limit the max indices. I haven't managed to track
it down, so flip us back to the older, non-index drawing path that doesn't
hit this bug until it can get fixed. Leave an I915_DEBUG=vbuf flag around
so we can look into this later.
This is a pretty big performance hit for vertex shaders. Using glmark2 -b
build:use-vbo=true:
i915g-vbuf: 211 fps
i915g-nonvbuf: 185 fps
i915c: 41 fps
Given how massively better i915g still is than i915c (llvmpipe VS instead
of the classic swrast interpreter), I think it's still worth it to get
i915g correct before we fix this perf regression.
Fixes: #4971
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13052>
---
.../drivers/i915/ci/deqp-i915-g33-fails.txt | 15 -----------
.../drivers/i915/ci/piglit-i915-g33-fails.txt | 31 ----------------------
src/gallium/drivers/i915/ci/traces-i915.yml | 8 +++---
src/gallium/drivers/i915/i915_context.c | 5 ++--
src/gallium/drivers/i915/i915_debug.c | 1 +
src/gallium/drivers/i915/i915_debug.h | 1 +
6 files changed, 8 insertions(+), 53 deletions(-)
diff --git a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
index 895701ef8ac..f21887e6786 100644
--- a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
+++ b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
@@ -1,18 +1,3 @@
-# https://gitlab.freedesktop.org/mesa/mesa/-/issues/4971
-# "../src/gallium/drivers/i915/i915_prim_vbuf.c:628: i915_vbuf_render_draw_elements: Assertion `0' failed."
-dEQP-GLES2.functional.buffer.write.random.0,Crash
-dEQP-GLES2.functional.buffer.write.random.1,Crash
-dEQP-GLES2.functional.buffer.write.random.2,Crash
-dEQP-GLES2.functional.buffer.write.random.3,Crash
-dEQP-GLES2.functional.buffer.write.random.4,Crash
-dEQP-GLES2.functional.buffer.write.random.5,Crash
-dEQP-GLES2.functional.buffer.write.random.8,Crash
-dEQP-GLES2.functional.buffer.write.random.9,Crash
-dEQP-GLES2.functional.buffer.write.recreate_store.random_1,Crash
-dEQP-GLES2.functional.buffer.write.recreate_store.random_2,Crash
-dEQP-GLES2.functional.buffer.write.recreate_store.random_3,Crash
-dEQP-GLES2.functional.buffer.write.recreate_store.random_4,Crash
-
# Lines with the center outside the viewport clipped out when they shouldn't be?
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner,Fail
diff --git a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
index 11b1be0cdc2..b223028b13a 100644
--- a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
+++ b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
@@ -43,9 +43,6 @@ spec@!opengl 1.0 at gl-1.0-bitmap-heart-dance,Fail
# "MESA: error: Empty fragment shader"
spec@!opengl 1.0 at gl-1.0-drawbuffer-modes,Fail
-# "../src/gallium/drivers/i915/i915_prim_vbuf.c:470: draw_arrays_fallback: Assertion `0' failed."
-spec@!opengl 1.0 at gl-1.0-long-line-loop,Crash
-
# "Probe color at (74,4)
# Expected: 1.000000 1.000000 1.000000
# Observed: 0.000000 0.000000 0.000000
@@ -60,35 +57,11 @@ spec@!opengl 1.0 at gl-1.0-long-line-loop,Crash
# Failure with Scissor Test set to fail mode."
spec@!opengl 1.0 at gl-1.0-no-op-paths,Fail
-# "../src/gallium/drivers/i915/i915_prim_vbuf.c:470: draw_arrays_fallback: Assertion `0' failed."
-spec@!opengl 1.0 at gl-1.0-ortho-pos,Crash
-
spec@!opengl 1.0 at gl-1.0-scissor-offscreen,Fail
spec@!opengl 1.0 at gl-1.0-swapbuffers-behavior,Fail
-spec@!opengl 1.1 at clipflat,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_TRIANGLE_FAN)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_TRIANGLE_FAN)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_TRIANGLE_FAN)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_TRIANGLE_FAN)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_TRIANGLE_FAN)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_TRIANGLE_FAN)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
-spec@!opengl 1.1 at clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail
spec@!opengl 1.1 at depthstencil-default_fb-clear,Fail
spec@!opengl 1.1 at getteximage-formats,Fail
-spec@!opengl 1.1 at gl-1.1-drawarrays-vertex-count 100000 varray gl_quad_strip,Crash
-spec@!opengl 1.1 at gl-1.1-drawarrays-vertex-count 100000 vbo gl_quad_strip,Crash
spec@!opengl 1.1 at gl-1.2-texture-base-level,Fail
spec@!opengl 1.1 at line-flat-clip-color,Fail
spec@!opengl 1.1 at linestipple,Fail
@@ -97,9 +70,6 @@ spec@!opengl 1.1 at linestipple@Factor 3x,Fail
spec@!opengl 1.1 at linestipple@Line loop,Fail
spec@!opengl 1.1 at linestipple@Line strip,Fail
-# longprim: ../src/gallium/drivers/i915/i915_prim_vbuf.c:470: draw_arrays_fallback: Assertion `0' failed.
-spec@!opengl 1.1 at longprim,Crash
-
# "../src/compiler/nir/nir_lower_int_to_float.c:102: lower_alu_instr: Assertion `nir_alu_type_get_base_type(info->output_type) != nir_type_int && nir_alu_type_get_base_type(info->output_type) != nir_type_uint' failed."
spec@!opengl 1.1 at point-line-no-cull,Crash
@@ -310,7 +280,6 @@ spec at arb_occlusion_query@occlusion_query_conform,Fail
spec at arb_occlusion_query@occlusion_query_meta_fragments,Fail
spec at arb_occlusion_query@occlusion_query_meta_no_fragments,Fail
spec at arb_occlusion_query@occlusion_query_meta_save,Fail
-spec at arb_occlusion_query@occlusion_query_order,Crash
spec at arb_pixel_buffer_object@cubemap npot pbo,Fail
spec at arb_pixel_buffer_object@fbo-pbo-readpixels-small,Fail
diff --git a/src/gallium/drivers/i915/ci/traces-i915.yml b/src/gallium/drivers/i915/ci/traces-i915.yml
index f8ee679d474..85b8c4b4b3e 100644
--- a/src/gallium/drivers/i915/ci/traces-i915.yml
+++ b/src/gallium/drivers/i915/ci/traces-i915.yml
@@ -8,7 +8,7 @@ traces:
- path: glxgears/glxgears-2.trace
expectations:
- device: i915-g33
- checksum: 83b1a41392bec71f7aeea6f1170cc23d
+ checksum: ee8dcdb3b9eaef2b32a2914b89373419
- path: gputest/plot3d.trace
expectations:
- device: i915-g33
@@ -41,7 +41,7 @@ traces:
- path: humus/Portals.trace
expectations:
- device: i915-g33
- checksum: 4cb0eb98c89c4d7ff962a25cc7931d8c
+ checksum: f782469019417923831d5d53dbe6a507
# The shadow raytracing shader fails to compile
#- path: humus/RaytracedShadows.trace
# expectations:
@@ -55,9 +55,9 @@ traces:
- path: neverball/neverball.trace
expectations:
- device: i915-g33
- checksum: bb7f4ddd30c36418a94ad8f02fc6bd09
+ checksum: f925aa92da47ebc757285f826113f4db
- path: valve/counterstrike-v2.trace
# Tree foliage rendering is extra aliased.
expectations:
- device: i915-g33
- checksum: 837c0aabe5d6bf75a071a3fa45cf448f
+ checksum: d17298ad3bb44b43b6c17e017f7c1e6a
diff --git a/src/gallium/drivers/i915/i915_context.c b/src/gallium/drivers/i915/i915_context.c
index 1bbe2246fd7..71e9f5defa0 100644
--- a/src/gallium/drivers/i915/i915_context.c
+++ b/src/gallium/drivers/i915/i915_context.c
@@ -27,6 +27,7 @@
#include "i915_context.h"
#include "i915_batch.h"
+#include "i915_debug.h"
#include "i915_query.h"
#include "i915_resource.h"
#include "i915_screen.h"
@@ -42,8 +43,6 @@
#include "util/u_prim.h"
#include "util/u_upload_mgr.h"
-DEBUG_GET_ONCE_BOOL_OPTION(i915_no_vbuf, "I915_NO_VBUF", false)
-
/*
* Draw functions
*/
@@ -216,7 +215,7 @@ i915_create_context(struct pipe_screen *screen, void *priv, unsigned flags)
*/
i915->draw = draw_create(&i915->base);
assert(i915->draw);
- if (!debug_get_option_i915_no_vbuf()) {
+ if (i915_debug & DBG_VBUF) {
draw_set_rasterize_stage(i915->draw, i915_draw_vbuf_stage(i915));
} else {
draw_set_rasterize_stage(i915->draw, i915_draw_render_stage(i915));
diff --git a/src/gallium/drivers/i915/i915_debug.c b/src/gallium/drivers/i915/i915_debug.c
index fb258f0c857..e64c9b62453 100644
--- a/src/gallium/drivers/i915/i915_debug.c
+++ b/src/gallium/drivers/i915/i915_debug.c
@@ -43,6 +43,7 @@ static const struct debug_named_value i915_debug_options[] = {
{"texture", DBG_TEXTURE, "Texture information"},
{"constants", DBG_CONSTANTS, "Constant buffers"},
{"fs", DBG_FS, "Dump fragment shaders"},
+ {"vbuf", DBG_VBUF, "Use the WIP vbuf code path"},
DEBUG_NAMED_VALUE_END};
unsigned i915_debug = 0;
diff --git a/src/gallium/drivers/i915/i915_debug.h b/src/gallium/drivers/i915/i915_debug.h
index 8195832aed7..56db7cc88be 100644
--- a/src/gallium/drivers/i915/i915_debug.h
+++ b/src/gallium/drivers/i915/i915_debug.h
@@ -45,6 +45,7 @@ struct i915_winsys_batchbuffer;
#define DBG_TEXTURE 0x10
#define DBG_CONSTANTS 0x20
#define DBG_FS 0x40
+#define DBG_VBUF 0x80
extern unsigned i915_debug;
More information about the mesa-commit
mailing list