radeonsi: add assertions to validate interpolation flags
authorMarek Olšák <marek.olsak@amd.com>
Tue, 4 Oct 2016 17:53:53 +0000 (19:53 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 5 Oct 2016 19:03:23 +0000 (21:03 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index 96626252d5e63df3dc4be61ad303e7ffdcbef572..f6bd12915cdcf3a20a72ab826fa774fefc493efd 100644 (file)
@@ -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)