st/mesa: add tessellation shader states
additional fixes by Marek
This commit is contained in:
@@ -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 */
|
||||
};
|
||||
|
Reference in New Issue
Block a user