st/mesa: add tessellation shader states

additional fixes by Marek
This commit is contained in:
Ilia Mirkin
2014-07-11 22:11:21 -04:00
committed by Marek Olšák
parent df4ee8ef36
commit ba9fb96f86
9 changed files with 459 additions and 1 deletions

View File

@@ -210,3 +210,75 @@ const struct st_tracked_state st_update_gp = {
},
update_gp /* update */
};
static void
update_tcp( struct st_context *st )
{
struct st_tessctrl_program *sttcp;
struct st_tcp_variant_key key;
if (!st->ctx->TessCtrlProgram._Current) {
cso_set_tessctrl_shader_handle(st->cso_context, NULL);
return;
}
sttcp = st_tessctrl_program(st->ctx->TessCtrlProgram._Current);
assert(sttcp->Base.Base.Target == GL_TESS_CONTROL_PROGRAM_NV);
memset(&key, 0, sizeof(key));
key.st = st;
st->tcp_variant = st_get_tcp_variant(st, sttcp, &key);
st_reference_tesscprog(st, &st->tcp, sttcp);
cso_set_tessctrl_shader_handle(st->cso_context,
st->tcp_variant->driver_shader);
}
const struct st_tracked_state st_update_tcp = {
"st_update_tcp", /* name */
{ /* dirty */
0, /* mesa */
ST_NEW_TESSCTRL_PROGRAM /* st */
},
update_tcp /* update */
};
static void
update_tep( struct st_context *st )
{
struct st_tesseval_program *sttep;
struct st_tep_variant_key key;
if (!st->ctx->TessEvalProgram._Current) {
cso_set_tesseval_shader_handle(st->cso_context, NULL);
return;
}
sttep = st_tesseval_program(st->ctx->TessEvalProgram._Current);
assert(sttep->Base.Base.Target == GL_TESS_EVALUATION_PROGRAM_NV);
memset(&key, 0, sizeof(key));
key.st = st;
st->tep_variant = st_get_tep_variant(st, sttep, &key);
st_reference_tesseprog(st, &st->tep, sttep);
cso_set_tesseval_shader_handle(st->cso_context,
st->tep_variant->driver_shader);
}
const struct st_tracked_state st_update_tep = {
"st_update_tep", /* name */
{ /* dirty */
0, /* mesa */
ST_NEW_TESSEVAL_PROGRAM /* st */
},
update_tep /* update */
};