summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2013-12-04 13:54:50 +0100
committerMarek Olšák <marek.olsak@amd.com>2013-12-12 18:48:04 +0100
commit7fa8fb7382285797c34ef498da7a3a4cf3a85ebe (patch)
treef8ce6a932fcb13f01054cb344f04e9f963436080
parent0eb528abf21a172ef7a8aef7c1733b1101eba2b7 (diff)
radeonsi: fix binding the dummy pixel shader
This fixes valgrind errors in glxinfo. Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
-rw-r--r--src/gallium/drivers/radeonsi/radeonsi_pipe.h2
-rw-r--r--src/gallium/drivers/radeonsi/si_state.c23
-rw-r--r--src/gallium/drivers/radeonsi/si_state_draw.c10
3 files changed, 11 insertions, 24 deletions
diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.h b/src/gallium/drivers/radeonsi/radeonsi_pipe.h
index e84088f11db..56145bc4111 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_pipe.h
+++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.h
@@ -166,7 +166,7 @@ struct r600_context {
/* With rasterizer discard, there doesn't have to be a pixel shader.
* In that case, we bind this one: */
- struct si_pipe_shader *dummy_pixel_shader;
+ void *dummy_pixel_shader;
struct r600_atom cache_flush;
struct pipe_constant_buffer null_const_buf; /* used for set_constant_buffer(NULL) on CIK */
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 165475c6fd5..d99cfe88bc4 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2335,15 +2335,12 @@ static void si_bind_vs_shader(struct pipe_context *ctx, void *state)
if (rctx->vs_shader == sel)
return;
- rctx->vs_shader = sel;
-
- if (sel && sel->current) {
- si_pm4_bind_state(rctx, vs, sel->current->pm4);
- rctx->b.streamout.stride_in_dw = sel->so.stride;
- } else {
- si_pm4_bind_state(rctx, vs, rctx->dummy_pixel_shader->pm4);
- }
+ if (!sel || !sel->current)
+ return;
+ rctx->vs_shader = sel;
+ si_pm4_bind_state(rctx, vs, sel->current->pm4);
+ rctx->b.streamout.stride_in_dw = sel->so.stride;
rctx->b.flags |= R600_CONTEXT_INV_SHADER_CACHE;
}
@@ -2355,13 +2352,11 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state)
if (rctx->ps_shader == sel)
return;
- rctx->ps_shader = sel;
-
- if (sel && sel->current)
- si_pm4_bind_state(rctx, ps, sel->current->pm4);
- else
- si_pm4_bind_state(rctx, ps, rctx->dummy_pixel_shader->pm4);
+ if (!sel || !sel->current)
+ sel = rctx->dummy_pixel_shader;
+ rctx->ps_shader = sel;
+ si_pm4_bind_state(rctx, ps, sel->current->pm4);
rctx->b.flags |= R600_CONTEXT_INV_SHADER_CACHE;
}
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 952fab9d457..620ec7c1a80 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -470,17 +470,9 @@ static void si_update_derived_state(struct r600_context *rctx)
si_pipe_shader_ps(ctx, rctx->ps_shader->current);
ps_dirty = 0;
}
- if (!rctx->ps_shader->current->bo) {
- if (!rctx->dummy_pixel_shader->pm4)
- si_pipe_shader_ps(ctx, rctx->dummy_pixel_shader);
- else
- si_pm4_bind_state(rctx, vs, rctx->dummy_pixel_shader->pm4);
-
- ps_dirty = 0;
- }
if (rctx->ps_shader->current->cb0_is_integer != rctx->fb_cb0_is_integer) {
si_pipe_shader_ps(ctx, rctx->ps_shader->current);
- ps_dirty = 1;
+ ps_dirty = 0;
}
if (ps_dirty) {