stream->scaler_sharpener_update = *update->scaler_sharpener_update;
if (update->sharpening_required)
stream->sharpening_required = *update->sharpening_required;
+
+ if (update->drr_trigger_mode) {
+ stream->drr_trigger_mode = *update->drr_trigger_mode;
+ }
}
static void backup_planes_and_stream_state(
}
}
+ if (stream->drr_trigger_mode == DRR_TRIGGER_ON_FLIP_AND_CURSOR) {
+ /* apply manual trigger */
+ int i;
+
+ for (i = 0; i < dc->res_pool->pipe_count; i++) {
+ struct pipe_ctx *pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
+
+ /* trigger event on first pipe with current stream */
+ if (stream == pipe_ctx->stream) {
+ pipe_ctx->stream_res.tg->funcs->program_manual_trigger(pipe_ctx->stream_res.tg);
+ break;
+ }
+ }
+ }
+
return true;
}
int dm_max_decrease_from_nominal;
};
+enum dc_drr_trigger_mode {
+ DRR_TRIGGER_ON_FLIP = 0,
+ DRR_TRIGGER_ON_FLIP_AND_CURSOR,
+};
+
struct dc_stream_state {
// sink is deprecated, new code should not reference
// this pointer
bool scaler_sharpener_update;
bool sharpening_required;
+ enum dc_drr_trigger_mode drr_trigger_mode;
+
struct dc_update_scratch_space *update_scratch;
};
bool *hw_cursor_req;
bool *scaler_sharpener_update;
bool *sharpening_required;
+
+ enum dc_drr_trigger_mode *drr_trigger_mode;
};
bool dc_is_stream_unchanged(