/* 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 */
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;
}
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;
}
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) {