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

Reply via email to