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:
@@ -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 )
|
||||
|
||||
@@ -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 * );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user