/* fixup dirty shader state in case some "unrelated" (from the state- * tracker's perspective) state change causes us to switch to a * different variant. */ static void fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key) { struct fd3_context *fd3_ctx = fd3_context(ctx); struct ir3_shader_key *last_key = &fd3_ctx->last_key; if (!ir3_shader_key_equal(last_key, key)) { ctx->dirty |= FD_DIRTY_PROG; if (last_key->has_per_samp || key->has_per_samp) { if ((last_key->vsaturate_s != key->vsaturate_s) || (last_key->vsaturate_t != key->vsaturate_t) || (last_key->vsaturate_r != key->vsaturate_r) || (last_key->vinteger_s != key->vinteger_s)) ctx->prog.dirty |= FD_SHADER_DIRTY_VP; if ((last_key->fsaturate_s != key->fsaturate_s) || (last_key->fsaturate_t != key->fsaturate_t) || (last_key->fsaturate_r != key->fsaturate_r) || (last_key->finteger_s != key->finteger_s)) ctx->prog.dirty |= FD_SHADER_DIRTY_FP; } if (last_key->color_two_side != key->color_two_side) ctx->prog.dirty |= FD_SHADER_DIRTY_FP; if (last_key->half_precision != key->half_precision) ctx->prog.dirty |= FD_SHADER_DIRTY_FP; fd3_ctx->last_key = *key; } }
/* fixup dirty shader state in case some "unrelated" (from the state- * tracker's perspective) state change causes us to switch to a * different variant. */ static void fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key) { struct fd6_context *fd6_ctx = fd6_context(ctx); struct ir3_shader_key *last_key = &fd6_ctx->last_key; if (!ir3_shader_key_equal(last_key, key)) { if (ir3_shader_key_changes_fs(last_key, key)) { ctx->dirty_shader[PIPE_SHADER_FRAGMENT] |= FD_DIRTY_SHADER_PROG; ctx->dirty |= FD_DIRTY_PROG; } if (ir3_shader_key_changes_vs(last_key, key)) { ctx->dirty_shader[PIPE_SHADER_VERTEX] |= FD_DIRTY_SHADER_PROG; ctx->dirty |= FD_DIRTY_PROG; } fd6_ctx->last_key = *key; } }
/* fixup dirty shader state in case some "unrelated" (from the state- * tracker's perspective) state change causes us to switch to a * different variant. */ static void fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key) { struct fd4_context *fd4_ctx = fd4_context(ctx); struct ir3_shader_key *last_key = &fd4_ctx->last_key; if (!ir3_shader_key_equal(last_key, key)) { if (last_key->has_per_samp || key->has_per_samp) { if ((last_key->vsaturate_s != key->vsaturate_s) || (last_key->vsaturate_t != key->vsaturate_t) || (last_key->vsaturate_r != key->vsaturate_r) || (last_key->vastc_srgb != key->vastc_srgb)) ctx->dirty |= FD_SHADER_DIRTY_VP; if ((last_key->fsaturate_s != key->fsaturate_s) || (last_key->fsaturate_t != key->fsaturate_t) || (last_key->fsaturate_r != key->fsaturate_r) || (last_key->fastc_srgb != key->fastc_srgb)) ctx->dirty |= FD_SHADER_DIRTY_FP; } if (last_key->vclamp_color != key->vclamp_color) ctx->dirty |= FD_SHADER_DIRTY_VP; if (last_key->fclamp_color != key->fclamp_color) ctx->dirty |= FD_SHADER_DIRTY_FP; if (last_key->color_two_side != key->color_two_side) ctx->dirty |= FD_SHADER_DIRTY_FP; if (last_key->half_precision != key->half_precision) ctx->dirty |= FD_SHADER_DIRTY_FP; if (last_key->rasterflat != key->rasterflat) ctx->dirty |= FD_SHADER_DIRTY_FP; fd4_ctx->last_key = *key; } }