From: Marek Olšák Date: Tue, 4 Oct 2016 17:53:53 +0000 (+0200) Subject: radeonsi: add assertions to validate interpolation flags X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=300a8221e92b91c1c759cdd331052a53506d6e93;p=mesa.git radeonsi: add assertions to validate interpolation flags Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 96626252d5e..f6bd12915cd 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -693,6 +693,40 @@ static void si_shader_ps(struct si_shader *shader) G_0286CC_LINEAR_CENTER_ENA(input_ena) || G_0286CC_LINEAR_CENTROID_ENA(input_ena) || G_0286CC_LINE_STIPPLE_TEX_ENA(input_ena)); + /* POS_W_FLOAT_ENA requires one of the perspective weights. */ + assert(!G_0286CC_POS_W_FLOAT_ENA(input_ena) || + G_0286CC_PERSP_SAMPLE_ENA(input_ena) || + G_0286CC_PERSP_CENTER_ENA(input_ena) || + G_0286CC_PERSP_CENTROID_ENA(input_ena) || + G_0286CC_PERSP_PULL_MODEL_ENA(input_ena)); + + /* Validate interpolation optimization flags (read as implications). */ + assert(!shader->key.ps.prolog.bc_optimize_for_persp || + (G_0286CC_PERSP_CENTER_ENA(input_ena) && + G_0286CC_PERSP_CENTROID_ENA(input_ena))); + assert(!shader->key.ps.prolog.bc_optimize_for_linear || + (G_0286CC_LINEAR_CENTER_ENA(input_ena) && + G_0286CC_LINEAR_CENTROID_ENA(input_ena))); + assert(!shader->key.ps.prolog.force_persp_center_interp || + (!G_0286CC_PERSP_SAMPLE_ENA(input_ena) && + !G_0286CC_PERSP_CENTROID_ENA(input_ena))); + assert(!shader->key.ps.prolog.force_linear_center_interp || + (!G_0286CC_LINEAR_SAMPLE_ENA(input_ena) && + !G_0286CC_LINEAR_CENTROID_ENA(input_ena))); + assert(!shader->key.ps.prolog.force_persp_sample_interp || + (!G_0286CC_PERSP_CENTER_ENA(input_ena) && + !G_0286CC_PERSP_CENTROID_ENA(input_ena))); + assert(!shader->key.ps.prolog.force_linear_sample_interp || + (!G_0286CC_LINEAR_CENTER_ENA(input_ena) && + !G_0286CC_LINEAR_CENTROID_ENA(input_ena))); + + /* Validate cases when the optimizations are off (read as implications). */ + assert(shader->key.ps.prolog.bc_optimize_for_persp || + !G_0286CC_PERSP_CENTER_ENA(input_ena) || + !G_0286CC_PERSP_CENTROID_ENA(input_ena)); + assert(shader->key.ps.prolog.bc_optimize_for_linear || + !G_0286CC_LINEAR_CENTER_ENA(input_ena) || + !G_0286CC_LINEAR_CENTROID_ENA(input_ena)); pm4 = si_get_shader_pm4_state(shader); if (!pm4)