Mesa (staging/21.2): aux/draw: use nir_to_tgsi for draw shader in llvm path
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Aug 6 18:17:50 UTC 2021
Module: Mesa
Branch: staging/21.2
Commit: 3fd0ced5413f94b40d34cf5a4835fbc6f24dee98
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3fd0ced5413f94b40d34cf5a4835fbc6f24dee98
Author: Neha Bhende <bhenden at vmware.com>
Date: Wed Jul 14 17:25:48 2021 -0700
aux/draw: use nir_to_tgsi for draw shader in llvm path
Some drivers doesn't support PIPE_SHADER_CAP_INTEGERS.
This leads to using load_ubo_vec4 which throws llvmpipe off the guard since
it doesn't expect load_ubo_vec4 in shader. Use nir_to_tgsi utility in
such a case.
This fixes crash seen with conform's mustpass.c, select.c and feedback.c.
Also, few gl-select related piglit tests exhibit same crash. Found in vmware's
internal testing
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
v2: incorporated Emma's comments. Added check for PIPE_SHADER_CAP_INTEGERS and
remove PIPE_SHADER_IR_TGSI check
v3: As per Emma's comment, removed expected crashes for i915 piglit
v4: update expetcted passes
(cherry picked from commit b5e782f5f43185076acbbea1e42000fd1fb48aa0)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12200>
---
src/gallium/auxiliary/draw/draw_vs.c | 16 ++++++++++++++--
src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt | 12 ------------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_vs.c b/src/gallium/auxiliary/draw/draw_vs.c
index e8dbc11bca6..20ecc2f1696 100644
--- a/src/gallium/auxiliary/draw/draw_vs.c
+++ b/src/gallium/auxiliary/draw/draw_vs.c
@@ -35,6 +35,8 @@
#include "util/u_memory.h"
#include "pipe/p_shader_tokens.h"
+#include "pipe/p_context.h"
+#include "pipe/p_screen.h"
#include "draw_private.h"
#include "draw_context.h"
@@ -46,6 +48,8 @@
#include "tgsi/tgsi_dump.h"
#include "tgsi/tgsi_exec.h"
+#include "nir/nir_to_tgsi.h"
+
DEBUG_GET_ONCE_BOOL_OPTION(gallium_dump_vs, "GALLIUM_DUMP_VS", FALSE)
@@ -54,6 +58,7 @@ draw_create_vertex_shader(struct draw_context *draw,
const struct pipe_shader_state *shader)
{
struct draw_vertex_shader *vs = NULL;
+ struct pipe_shader_state state = *shader;
if (draw->dump_vs) {
tgsi_dump(shader->tokens, 0);
@@ -61,12 +66,19 @@ draw_create_vertex_shader(struct draw_context *draw,
#ifdef DRAW_LLVM_AVAILABLE
if (draw->pt.middle.llvm) {
- vs = draw_create_vs_llvm(draw, shader);
+ struct pipe_screen *screen = draw->pipe->screen;
+ if (shader->type == PIPE_SHADER_IR_NIR &&
+ (!screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
+ PIPE_SHADER_CAP_INTEGERS))) {
+ state.type = PIPE_SHADER_IR_TGSI;
+ state.tokens = nir_to_tgsi(shader->ir.nir, screen);
+ }
+ vs = draw_create_vs_llvm(draw, &state);
}
#endif
if (!vs) {
- vs = draw_create_vs_exec( draw, shader );
+ vs = draw_create_vs_exec( draw, &state );
}
if (vs)
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 50d0e79b086..c33825b7fac 100644
--- a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
+++ b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
@@ -20,16 +20,9 @@ spec@!opengl 1.0 at gl-1.0-drawbuffer-modes,Fail
spec@!opengl 1.0 at gl-1.0-long-line-loop,Crash
spec@!opengl 1.0 at gl-1.0-no-op-paths,Fail
spec@!opengl 1.0 at gl-1.0-ortho-pos,Crash
-spec@!opengl 1.0 at gl-1.0-rendermode-feedback,Crash
spec@!opengl 1.0 at gl-1.0-scissor-offscreen,Fail
spec@!opengl 1.0 at gl-1.0-swapbuffers-behavior,Fail
-# mesa/st draw path doesn't do nir-to-tgsi, so gallivm NIR fails
-# to handle our vector-y, non-native-integers shaders. We could extend
-# gallivm NIR to handle it, or disentangle per-stage native integers on the
-# frontend.
-spec@!opengl 1.0 at rasterpos,Crash
-
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
@@ -54,11 +47,6 @@ spec@!opengl 1.1 at getteximage-formats,Crash
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 gl_select - alpha-test enabled,Crash
-spec@!opengl 1.1 at gl_select - depth-test enabled,Crash
-spec@!opengl 1.1 at gl_select - no test function,Crash
-spec@!opengl 1.1 at gl_select - scissor-test enabled,Crash
-spec@!opengl 1.1 at gl_select - stencil-test enabled,Crash
spec@!opengl 1.1 at line-flat-clip-color,Fail
spec@!opengl 1.1 at linestipple,Fail
spec@!opengl 1.1 at linestipple@Factor 2x,Fail
More information about the mesa-commit
mailing list