+static void
+st_unbind_program(struct st_context *st, struct st_program *p)
+{
+ /* Unbind the shader in cso_context and re-bind in st/mesa. */
+ switch (p->Base.info.stage) {
+ case MESA_SHADER_VERTEX:
+ cso_set_vertex_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_VS_STATE;
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ cso_set_tessctrl_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_TCS_STATE;
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ cso_set_tesseval_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_TES_STATE;
+ break;
+ case MESA_SHADER_GEOMETRY:
+ cso_set_geometry_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_GS_STATE;
+ break;
+ case MESA_SHADER_FRAGMENT:
+ cso_set_fragment_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_FS_STATE;
+ break;
+ case MESA_SHADER_COMPUTE:
+ cso_set_compute_shader_handle(st->cso_context, NULL);
+ st->dirty |= ST_NEW_CS_STATE;
+ break;
+ default:
+ unreachable("invalid shader type");
+ }
+}