ureg: add a mechanism to get the built tokens rather than a full shader

Previously ureg would always call the driver's create-shader function.  This
allows the caller the opportunity to hold onto the tokens if it needs to
reuse them, eg. to create an internal draw shader.
This commit is contained in:
Keith Whitwell 2009-09-12 14:18:50 -07:00
parent c23894295b
commit 11f41f54cf
2 changed files with 30 additions and 0 deletions

View file

@ -978,6 +978,25 @@ void *ureg_create_shader( struct ureg_program *ureg,
}
const struct tgsi_token *ureg_get_tokens( struct ureg_program *ureg,
unsigned *nr_tokens )
{
const struct tgsi_token *tokens;
ureg_finalize(ureg);
tokens = &ureg->domain[DOMAIN_DECL].tokens[0].token;
if (nr_tokens)
*nr_tokens = ureg->domain[DOMAIN_DECL].size;
ureg->domain[DOMAIN_DECL].tokens = 0;
ureg->domain[DOMAIN_DECL].size = 0;
ureg->domain[DOMAIN_DECL].order = 0;
ureg->domain[DOMAIN_DECL].count = 0;
return tokens;
}
struct ureg_program *ureg_create( unsigned processor )

View file

@ -82,10 +82,21 @@ ureg_create( unsigned processor );
const struct tgsi_token *
ureg_finalize( struct ureg_program * );
/* Create and return a shader:
*/
void *
ureg_create_shader( struct ureg_program *,
struct pipe_context *pipe );
/* Alternately, return the built token stream and hand ownership of
* that memory to the caller:
*/
const struct tgsi_token *
ureg_get_tokens( struct ureg_program *ureg,
unsigned *nr_tokens );
void
ureg_destroy( struct ureg_program * );