According to bspec, MIPCnt(was set to intelObj->_MaxLevel) was used for min/mag filter mode determination. For a normal case with no mipmap like this:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); hardware would always choose mag filter(GL_LINEAR) here since MIPCnt was set to 0 zero, then would make LOD be zero. Then according the formula: MagMode = (LOD - Base <= 0) Thus hardware choose Mag filter. This would fix all oglc filtercubemin subcase fail Signed-off-by: Yuanhan Liu <yuanhan....@linux.intel.com> --- src/mesa/drivers/dri/intel/intel_tex_validate.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_tex_validate.c b/src/mesa/drivers/dri/intel/intel_tex_validate.c index e2b8699..c06a043 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_validate.c +++ b/src/mesa/drivers/dri/intel/intel_tex_validate.c @@ -21,8 +21,14 @@ intel_update_max_level(struct intel_texture_object *intelObj, { struct gl_texture_object *tObj = &intelObj->base; - if (sampler->MinFilter == GL_NEAREST || - sampler->MinFilter == GL_LINEAR) { + /* + * According to Bspec vol5c 1.2.1.5 LOD Computation Pseudocode, + * the MIPCnt(here intelObj->_MaxLevel) was used for min/mag + * determination. + */ + if ((sampler->MinFilter == sampler->MagFilter) && + (sampler->MinFilter == GL_NEAREST || + sampler->MinFilter == GL_LINEAR)) { intelObj->_MaxLevel = tObj->BaseLevel; } else { intelObj->_MaxLevel = tObj->_MaxLevel; -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev