draw/aaline: stronger guard against no free samplers (v2)
Line anti-aliasing will fail when there is no free sampler available. Make the corresponding guard more robust in preparation of raising PIPE_MAX_SAMPLERS to 32. The literal 1 is a (signed) int, and shifting into the sign bit is undefined in C, so change occurences of 1 to 1u. v2: add an assert for bitfield size and use 1u << idx Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com> (v1) Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> (v1) Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v1)
This commit is contained in:
parent
040f5cb09e
commit
cc39879989
|
@ -163,7 +163,7 @@ aa_transform_decl(struct tgsi_transform_context *ctx,
|
|||
uint i;
|
||||
for (i = decl->Range.First;
|
||||
i <= decl->Range.Last; i++) {
|
||||
aactx->samplersUsed |= 1 << i;
|
||||
aactx->samplersUsed |= 1u << i;
|
||||
}
|
||||
}
|
||||
else if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
|
||||
|
@ -208,9 +208,11 @@ aa_transform_prolog(struct tgsi_transform_context *ctx)
|
|||
struct aa_transform_context *aactx = (struct aa_transform_context *) ctx;
|
||||
uint i;
|
||||
|
||||
STATIC_ASSERT(sizeof(aactx->samplersUsed) * 8 >= PIPE_MAX_SAMPLERS);
|
||||
|
||||
/* find free sampler */
|
||||
aactx->freeSampler = free_bit(aactx->samplersUsed);
|
||||
if (aactx->freeSampler >= PIPE_MAX_SAMPLERS)
|
||||
if (aactx->freeSampler < 0 || aactx->freeSampler >= PIPE_MAX_SAMPLERS)
|
||||
aactx->freeSampler = PIPE_MAX_SAMPLERS - 1;
|
||||
|
||||
/* find two free temp regs */
|
||||
|
|
Loading…
Reference in New Issue