diff options
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_pm4.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state.c | 12 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/gallium/drivers/radeonsi/radeonsi_pm4.c b/src/gallium/drivers/radeonsi/radeonsi_pm4.c index 3c53ce2e172..8268f914808 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_pm4.c +++ b/src/gallium/drivers/radeonsi/radeonsi_pm4.c @@ -109,6 +109,13 @@ void si_pm4_sh_data_add(struct si_pm4_state *state, uint32_t dw) void si_pm4_sh_data_end(struct si_pm4_state *state, unsigned reg) { unsigned offs = state->last_pm4 + 1; + + /* Bail if no data was added */ + if (state->ndw == offs) { + state->ndw--; + return; + } + si_pm4_cmd_end(state, false); si_pm4_cmd_begin(state, PKT3_SET_SH_REG_OFFSET); diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 11acb7310af..9a9a2506088 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1971,16 +1971,18 @@ static void si_set_ps_sampler_view(struct pipe_context *ctx, unsigned count, si_pm4_sh_data_begin(pm4); for (i = 0; i < count; i++) { - struct r600_resource_texture *tex = (void *)resource[i]->base.texture; - pipe_sampler_view_reference( (struct pipe_sampler_view **)&rctx->ps_samplers.views[i], views[i]); - si_pm4_add_bo(pm4, &tex->resource, RADEON_USAGE_READ); + if (views[i]) { + struct r600_resource_texture *tex = (void *)resource[i]->base.texture; + + si_pm4_add_bo(pm4, &tex->resource, RADEON_USAGE_READ); - for (j = 0; j < Elements(resource[i]->state); ++j) { - si_pm4_sh_data_add(pm4, resource[i]->state[j]); + for (j = 0; j < Elements(resource[i]->state); ++j) { + si_pm4_sh_data_add(pm4, resource[i]->state[j]); + } } } |