-/* FIXME optimize away spi update when it's not needed */
-static void r600_spi_block_init(struct r600_pipe_context *rctx, struct r600_pipe_state *rstate)
-{
- int i;
- rstate->nregs = 0;
- rstate->id = R600_PIPE_STATE_SPI;
- for (i = 0; i < 32; i++) {
- r600_pipe_state_add_reg(rstate, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, 0, 0xFFFFFFFF, NULL, 0);
- }
-}
-
-static void r600_spi_update(struct r600_pipe_context *rctx)
-{
- struct r600_pipe_shader *shader = rctx->ps_shader;
- struct r600_pipe_state *rstate = &rctx->spi;
- struct r600_shader *rshader = &shader->shader;
- unsigned i, tmp, sid;
-
- if (rctx->spi.id == 0)
- r600_spi_block_init(rctx, &rctx->spi);
-
- rstate->nregs = 0;
- for (i = 0; i < rshader->ninput; i++) {
-
- sid = rshader->input[i].spi_sid;
-
- if (!sid && (rctx->chip_class >= EVERGREEN))
- continue;
-
- tmp = S_028644_SEMANTIC(sid);
-
- if (rshader->input[i].name == TGSI_SEMANTIC_COLOR ||
- rshader->input[i].name == TGSI_SEMANTIC_BCOLOR ||
- rshader->input[i].name == TGSI_SEMANTIC_POSITION) {
- tmp |= S_028644_FLAT_SHADE(rctx->flatshade);
- }
-
- if (rshader->input[i].name == TGSI_SEMANTIC_GENERIC &&
- rctx->sprite_coord_enable & (1 << rshader->input[i].sid)) {
- tmp |= S_028644_PT_SPRITE_TEX(1);
- }
-
- if (rctx->chip_class < EVERGREEN) {
- if (rshader->input[i].centroid)
- tmp |= S_028644_SEL_CENTROID(1);
-
- if (rshader->input[i].interpolate == TGSI_INTERPOLATE_LINEAR)
- tmp |= S_028644_SEL_LINEAR(1);
- }
-
- r600_pipe_state_mod_reg(rstate, tmp);
- }
-
- rctx->spi_dirty = false;
- r600_context_pipe_state_set(&rctx->ctx, rstate);
-}
-