diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index 021c88f7b93..56a9d143e32 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -294,8 +294,9 @@ struct v3d_key { struct { unsigned compare_mode:1; unsigned compare_func:3; - unsigned wrap_s:3; - unsigned wrap_t:3; + bool clamp_s:1; + bool clamp_t:1; + bool clamp_r:1; }; struct { uint16_t msaa_width, msaa_height; diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 99b31841b37..d9201e68dc5 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -553,6 +553,13 @@ v3d_lower_nir(struct v3d_compile *c) for (int i = 0; i < ARRAY_SIZE(c->key->tex); i++) { for (int j = 0; j < 4; j++) tex_options.swizzles[i][j] = c->key->tex[i].swizzle[j]; + + if (c->key->tex[i].clamp_s) + tex_options.saturate_s |= 1 << i; + if (c->key->tex[i].clamp_t) + tex_options.saturate_t |= 1 << i; + if (c->key->tex[i].clamp_r) + tex_options.saturate_r |= 1 << i; } NIR_PASS_V(c->s, nir_lower_tex, &tex_options); diff --git a/src/gallium/drivers/vc5/vc5_program.c b/src/gallium/drivers/vc5/vc5_program.c index 8e9af1ad8ab..37173ae58d5 100644 --- a/src/gallium/drivers/vc5/vc5_program.c +++ b/src/gallium/drivers/vc5/vc5_program.c @@ -304,8 +304,12 @@ vc5_setup_shared_key(struct vc5_context *vc5, struct v3d_key *key, } else if (sampler){ key->tex[i].compare_mode = sampler_state->compare_mode; key->tex[i].compare_func = sampler_state->compare_func; - key->tex[i].wrap_s = sampler_state->wrap_s; - key->tex[i].wrap_t = sampler_state->wrap_t; + key->tex[i].clamp_s = + sampler_state->wrap_s == PIPE_TEX_WRAP_CLAMP; + key->tex[i].clamp_t = + sampler_state->wrap_t == PIPE_TEX_WRAP_CLAMP; + key->tex[i].clamp_r = + sampler_state->wrap_r == PIPE_TEX_WRAP_CLAMP; } }