util: simplify util_pstipple_create_fragment_shader() params
Pass and return tgsi_token buffers instead of pipe_shader_state. And update softpipe driver (the only user of this function). Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
parent
e3ecb8206a
commit
ccd1ea9d52
|
@ -398,23 +398,19 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
|
|||
/**
|
||||
* Given a fragment shader, return a new fragment shader which
|
||||
* samples a stipple texture and executes KILL.
|
||||
* \param samplerUnitOut returns the index of the sampler unit which
|
||||
* will be used to sample the stipple texture
|
||||
*/
|
||||
struct pipe_shader_state *
|
||||
util_pstipple_create_fragment_shader(struct pipe_context *pipe,
|
||||
struct pipe_shader_state *fs,
|
||||
struct tgsi_token *
|
||||
util_pstipple_create_fragment_shader(const struct tgsi_token *tokens,
|
||||
unsigned *samplerUnitOut)
|
||||
{
|
||||
struct pipe_shader_state *new_fs;
|
||||
struct pstip_transform_context transform;
|
||||
const uint newLen = tgsi_num_tokens(fs->tokens) + NUM_NEW_TOKENS;
|
||||
const uint newLen = tgsi_num_tokens(tokens) + NUM_NEW_TOKENS;
|
||||
struct tgsi_token *new_tokens;
|
||||
|
||||
new_fs = MALLOC(sizeof(*new_fs));
|
||||
if (!new_fs)
|
||||
return NULL;
|
||||
|
||||
new_fs->tokens = tgsi_alloc_tokens(newLen);
|
||||
if (!new_fs->tokens) {
|
||||
FREE(new_fs);
|
||||
new_tokens = tgsi_alloc_tokens(newLen);
|
||||
if (!new_tokens) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -430,14 +426,12 @@ util_pstipple_create_fragment_shader(struct pipe_context *pipe,
|
|||
transform.base.transform_declaration = pstip_transform_decl;
|
||||
transform.base.transform_immediate = pstip_transform_immed;
|
||||
|
||||
tgsi_scan_shader(fs->tokens, &transform.info);
|
||||
tgsi_scan_shader(tokens, &transform.info);
|
||||
|
||||
transform.coordOrigin =
|
||||
transform.info.properties[TGSI_PROPERTY_FS_COORD_ORIGIN];
|
||||
|
||||
tgsi_transform_shader(fs->tokens,
|
||||
(struct tgsi_token *) new_fs->tokens,
|
||||
newLen, &transform.base);
|
||||
tgsi_transform_shader(tokens, new_tokens, newLen, &transform.base);
|
||||
|
||||
#if 0 /* DEBUG */
|
||||
tgsi_dump(fs->tokens, 0);
|
||||
|
@ -447,6 +441,6 @@ util_pstipple_create_fragment_shader(struct pipe_context *pipe,
|
|||
assert(transform.freeSampler < PIPE_MAX_SAMPLERS);
|
||||
*samplerUnitOut = transform.freeSampler;
|
||||
|
||||
return new_fs;
|
||||
return new_tokens;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,9 +47,8 @@ util_pstipple_create_sampler_view(struct pipe_context *pipe,
|
|||
extern void *
|
||||
util_pstipple_create_sampler(struct pipe_context *pipe);
|
||||
|
||||
extern struct pipe_shader_state *
|
||||
util_pstipple_create_fragment_shader(struct pipe_context *pipe,
|
||||
struct pipe_shader_state *fs,
|
||||
struct tgsi_token *
|
||||
util_pstipple_create_fragment_shader(const struct tgsi_token *tokens,
|
||||
unsigned *samplerUnitOut);
|
||||
|
||||
|
||||
|
|
|
@ -51,25 +51,27 @@ create_fs_variant(struct softpipe_context *softpipe,
|
|||
const struct sp_fragment_shader_variant_key *key)
|
||||
{
|
||||
struct sp_fragment_shader_variant *var;
|
||||
struct pipe_shader_state *stipple_fs = NULL, *curfs = &fs->shader;
|
||||
unsigned unit = 0;
|
||||
|
||||
#if DO_PSTIPPLE_IN_HELPER_MODULE
|
||||
if (key->polygon_stipple) {
|
||||
/* get new shader that implements polygon stippling */
|
||||
stipple_fs = util_pstipple_create_fragment_shader(&softpipe->pipe,
|
||||
curfs, &unit);
|
||||
curfs = stipple_fs;
|
||||
}
|
||||
#endif
|
||||
struct pipe_shader_state *curfs = &fs->shader;
|
||||
|
||||
/* codegen, create variant object */
|
||||
var = softpipe_create_fs_variant_exec(softpipe);
|
||||
|
||||
if (var) {
|
||||
var->key = *key;
|
||||
var->tokens = tgsi_dup_tokens(curfs->tokens);
|
||||
var->stipple_sampler_unit = unit;
|
||||
|
||||
#if DO_PSTIPPLE_IN_HELPER_MODULE
|
||||
if (key->polygon_stipple) {
|
||||
/* get new shader that implements polygon stippling */
|
||||
var->tokens =
|
||||
util_pstipple_create_fragment_shader(curfs->tokens,
|
||||
&var->stipple_sampler_unit);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
var->tokens = tgsi_dup_tokens(curfs->tokens);
|
||||
var->stipple_sampler_unit = 0;
|
||||
}
|
||||
|
||||
tgsi_scan_shader(var->tokens, &var->info);
|
||||
|
||||
|
@ -90,11 +92,6 @@ create_fs_variant(struct softpipe_context *softpipe,
|
|||
fs->variants = var;
|
||||
}
|
||||
|
||||
if (stipple_fs) {
|
||||
FREE((void *) stipple_fs->tokens);
|
||||
FREE(stipple_fs);
|
||||
}
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue