Can you try the attached patch? Thanks, Marek
On Sat, Aug 19, 2017 at 4:01 PM, Gert Wollny <gw.foss...@gmail.com> wrote: > Am Samstag, den 19.08.2017, 12:13 +0200 schrieb Gert Wollny: >> >> I did this and unfortunately it crashes with 744c3e2254 applied. >> Specifically, in >> >> src/gallium/drivers/r600/evergreen_state.c2302: >> evergreen_emit_vertex_fetch_shader >> >> de-referencing shader fails because state->cso is NULL. >> > > Some additional information: > > backtrace: > > #0 evergreen_emit_vertex_fetch_shader (rctx=0x61e500, a=0x61f530) at > evergreen_state.c:2302 > #1 0x00007ffff3bd9601 in r600_emit_atom (atom=0x61f530, rctx=0x61e500) > at r600_pipe.h:567 > #2 r600_draw_vbo (ctx=0x61e500, info=0x7fffffffd080) at > r600_state_common.c:1831 > #3 0x00007ffff3d4e4c5 in util_draw_arrays_instanced > (mode=PIPE_PRIM_MAX, start=0, count=3, start_instance=0, > instance_count=1, pipe=0x61e500) at > ../../../../src/gallium/auxiliary/util/u_draw.h:106 > #4 r600_draw_rectangle (blitter=<optimized out>, x1=<optimized out>, > y1=<optimized out>, x2=<optimized out>, y2=<optimized out>, > depth=<optimized out>, num_instances=1, type=UTIL_BLITTER_ATTRIB_NONE, > attrib=0x7fffffffd150) at r600_pipe_common.c:279 > #5 0x00007ffff39bcda2 in util_blitter_clear_custom (blitter=0x622bf0, > width=300, height=300, num_layers=1, clear_buffers=clear_buffers@entry= > 1, color=color@entry=0x7762fc, depth=depth@entry=1, stencil=0, > custom_dsa=0x0, custom_blend=0x0) at util/u_blitter.c:1445 > #6 0x00007ffff39bcef0 in util_blitter_clear (blitter=<optimized out>, > width=<optimized out>, height=<optimized out>, num_layers=<optimized > out>, clear_buffers=clear_buffers@entry=1, color=color@entry=0x7762fc, > depth=depth@entry=1, stencil=0) at util/u_blitter.c:1461 > #7 0x00007ffff3ba4385 in r600_clear (ctx=0x61e500, buffers=<optimized > out>, color=0x7762fc, depth=<optimized out>, stencil=0) at > r600_blit.c:460 > #8 0x00007ffff36f3d3b in st_Clear (ctx=0x774740, mask=18) at > state_tracker/st_cb_clear.c:483 > #9 0x000000000040251e in draw () at glxgears.c:254 > #10 0x0000000000401d2e in draw_gears () at glxgears.c:316 > #11 draw_frame (win=81788930, dpy=0x606010) at glxgears.c:341 > #12 event_loop (win=81788930, dpy=0x606010) at glxgears.c:703 > #13 main (argc=<optimized out>, argv=<optimized out>) at glxgears.c:798 > > I can only assume that the handling of UTIL_BLITTER_ATTRIB_NONE should > be different. > > Best, > Gert > >
From 62a1dfd4bdfab6f9cf8407e0bc9c99a9ec473c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.ol...@amd.com> Date: Sat, 19 Aug 2017 18:33:02 +0200 Subject: [PATCH] r600g: don't set up and don't call the fetch shader if there are no VS inputs --- src/gallium/drivers/r600/evergreen_state.c | 3 +++ src/gallium/drivers/r600/r600_shader.c | 2 +- src/gallium/drivers/r600/r600_state.c | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index b044201..a9b503f 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -2297,6 +2297,9 @@ static void evergreen_emit_vertex_fetch_shader(struct r600_context *rctx, struct struct r600_cso_state *state = (struct r600_cso_state*)a; struct r600_fetch_shader *shader = (struct r600_fetch_shader*)state->cso; + if (!shader) + return; + radeon_set_context_reg(cs, R_0288A4_SQ_PGM_START_FS, (shader->buffer->gpu_address + shader->offset) >> 8); radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 2eb8187..8c5e6ff 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -3031,7 +3031,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx, ctx.file_offset[i] = 0; } - if (ctx.type == PIPE_SHADER_VERTEX) { + if (ctx.type == PIPE_SHADER_VERTEX && ctx.info.num_inputs) { ctx.file_offset[TGSI_FILE_INPUT] = 1; r600_bytecode_add_cfinst(ctx.bc, CF_OP_CALL_FS); } diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index c311490..c21e8da 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -1897,6 +1897,9 @@ static void r600_emit_vertex_fetch_shader(struct r600_context *rctx, struct r600 struct r600_cso_state *state = (struct r600_cso_state*)a; struct r600_fetch_shader *shader = (struct r600_fetch_shader*)state->cso; + if (!shader) + return; + radeon_set_context_reg(cs, R_028894_SQ_PGM_START_FS, shader->offset >> 8); radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); radeon_emit(cs, radeon_add_to_buffer_list(&rctx->b, &rctx->b.gfx, shader->buffer, -- 2.7.4
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev