mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
r600g: truncate point sampled texture coordinates
By default the hardware rounds texcoords. However, for point sampled textures, the expected behavior is to truncate. When we have point sampled textures, set the truncate bit in the sampler. Should fix: https://bugs.freedesktop.org/show_bug.cgi?id=25871 Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
This commit is contained in:
parent
6c324777a6
commit
1dc204d145
2 changed files with 14 additions and 1 deletions
|
|
@ -305,11 +305,16 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
|
|||
{
|
||||
struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
|
||||
union util_color uc;
|
||||
uint32_t coord_trunc = 0;
|
||||
|
||||
if (rstate == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((state->mag_img_filter == PIPE_TEX_FILTER_NEAREST) ||
|
||||
(state->min_img_filter == PIPE_TEX_FILTER_NEAREST))
|
||||
coord_trunc = 1;
|
||||
|
||||
rstate->id = R600_PIPE_STATE_SAMPLER;
|
||||
util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
|
||||
r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
|
||||
|
|
@ -328,6 +333,7 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
|
|||
0xFFFFFFFF, NULL);
|
||||
r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
|
||||
S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 8)) |
|
||||
S_03C008_MC_COORD_TRUNCATE(coord_trunc) |
|
||||
S_03C008_TYPE(1),
|
||||
0xFFFFFFFF, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -358,11 +358,16 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,
|
|||
{
|
||||
struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
|
||||
union util_color uc;
|
||||
uint32_t coord_trunc = 0;
|
||||
|
||||
if (rstate == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((state->mag_img_filter == PIPE_TEX_FILTER_NEAREST) ||
|
||||
(state->min_img_filter == PIPE_TEX_FILTER_NEAREST))
|
||||
coord_trunc = 1;
|
||||
|
||||
rstate->id = R600_PIPE_STATE_SAMPLER;
|
||||
util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
|
||||
r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
|
||||
|
|
@ -379,7 +384,9 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,
|
|||
S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |
|
||||
S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)) |
|
||||
S_03C004_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)), 0xFFFFFFFF, NULL);
|
||||
r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0, S_03C008_TYPE(1), 0xFFFFFFFF, NULL);
|
||||
r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
|
||||
S_03C008_MC_COORD_TRUNCATE(coord_trunc) |
|
||||
S_03C008_TYPE(1), 0xFFFFFFFF, NULL);
|
||||
if (uc.ui) {
|
||||
r600_pipe_state_add_reg(rstate, R_00A400_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL);
|
||||
r600_pipe_state_add_reg(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue