broadcom/vc5: Shift the min/max lod fields by the BASE_LEVEL.
The lod clamping is what limits you between base and last level, and the base level field is just there to help decide where the min/mag change happens. Fixes tex-miplevel-selection GL2:texture()
This commit is contained in:
parent
521e1d0275
commit
eeb9e80272
|
@ -130,9 +130,21 @@ emit_one_texture(struct vc5_context *vc5, struct vc5_texture_stateobj *stage_tex
|
||||||
.border_color_blue = swizzled_border_color(psampler, sview, 2),
|
.border_color_blue = swizzled_border_color(psampler, sview, 2),
|
||||||
.border_color_alpha = swizzled_border_color(psampler, sview, 3),
|
.border_color_alpha = swizzled_border_color(psampler, sview, 3),
|
||||||
|
|
||||||
/* XXX: Disable min/maxlod for txf */
|
/* In the normal texturing path, the LOD gets clamped between
|
||||||
.max_level_of_detail = MIN2(MIN2(psampler->max_lod,
|
* min/max, and the base_level field (set in the sampler view
|
||||||
VC5_MAX_MIP_LEVELS),
|
* from first_level) only decides where the min/mag switch
|
||||||
|
* happens, so we need to use the LOD clamps to keep us
|
||||||
|
* between min and max.
|
||||||
|
*
|
||||||
|
* For txf, the LOD clamp is still used, despite GL not
|
||||||
|
* wanting that. We will need to have a separate
|
||||||
|
* TEXTURE_SHADER_STATE that ignores psview->min/max_lod to
|
||||||
|
* support txf properly.
|
||||||
|
*/
|
||||||
|
.min_level_of_detail = (psview->u.tex.first_level +
|
||||||
|
MAX2(psampler->min_lod, 0)),
|
||||||
|
.max_level_of_detail = MIN2(psview->u.tex.first_level +
|
||||||
|
psampler->max_lod,
|
||||||
psview->u.tex.last_level),
|
psview->u.tex.last_level),
|
||||||
|
|
||||||
.texture_base_pointer = cl_address(rsc->bo,
|
.texture_base_pointer = cl_address(rsc->bo,
|
||||||
|
|
|
@ -524,7 +524,6 @@ vc5_create_sampler_state(struct pipe_context *pctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
v3dx_pack(&so->texture_shader_state, TEXTURE_SHADER_STATE, tex) {
|
v3dx_pack(&so->texture_shader_state, TEXTURE_SHADER_STATE, tex) {
|
||||||
tex.min_level_of_detail = MAX2(cso->min_lod, 0.0);
|
|
||||||
tex.depth_compare_function = cso->compare_func;
|
tex.depth_compare_function = cso->compare_func;
|
||||||
tex.fixed_bias = cso->lod_bias;
|
tex.fixed_bias = cso->lod_bias;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue