X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi915%2Fi915_texstate.c;h=43c802b2c088e8d7ab9d7598a656cf7596247097;hb=e6ec425d6eeac95f466174267b2c18c0bffca3f0;hp=9e6d3b1d25f312023fc74455524e94eb34e97286;hpb=02ebad900db4ef1ac42cbfb41b433919a4c857a2;p=mesa.git diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c index 9e6d3b1d25f..43c802b2c08 100644 --- a/src/mesa/drivers/dri/i915/i915_texstate.c +++ b/src/mesa/drivers/dri/i915/i915_texstate.c @@ -56,6 +56,7 @@ translate_texture_format(gl_format mesa_format, GLenum DepthMode) return MAPSURF_16BIT | MT_16BIT_ARGB1555; case MESA_FORMAT_ARGB4444: return MAPSURF_16BIT | MT_16BIT_ARGB4444; + case MESA_FORMAT_SARGB8: case MESA_FORMAT_ARGB8888: return MAPSURF_32BIT | MT_32BIT_ARGB8888; case MESA_FORMAT_XRGB8888: @@ -78,10 +79,14 @@ translate_texture_format(gl_format mesa_format, GLenum DepthMode) return (MAPSURF_16BIT | MT_16BIT_L16); case MESA_FORMAT_RGBA_DXT1: case MESA_FORMAT_RGB_DXT1: + case MESA_FORMAT_SRGB_DXT1: + case MESA_FORMAT_SRGBA_DXT1: return (MAPSURF_COMPRESSED | MT_COMPRESS_DXT1); case MESA_FORMAT_RGBA_DXT3: + case MESA_FORMAT_SRGBA_DXT3: return (MAPSURF_COMPRESSED | MT_COMPRESS_DXT2_3); case MESA_FORMAT_RGBA_DXT5: + case MESA_FORMAT_SRGBA_DXT5: return (MAPSURF_COMPRESSED | MT_COMPRESS_DXT4_5); case MESA_FORMAT_S8_Z24: case MESA_FORMAT_X8_Z24: @@ -141,12 +146,12 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3) struct intel_texture_object *intelObj = intel_texture_object(tObj); struct gl_texture_image *firstImage; struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit); - GLuint *state = i915->state.Tex[unit], format, pitch; + GLuint *state = i915->state.Tex[unit], format; GLint lodbias, aniso = 0; GLubyte border[4]; GLfloat maxlod; - memset(state, 0, sizeof(state)); + memset(state, 0, sizeof(*state)); /*We need to refcount these. */ @@ -168,8 +173,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3) i915->state.tex_offset[unit] = intelObj->mt->offset; format = translate_texture_format(firstImage->TexFormat, - sampler->DepthMode); - pitch = intelObj->mt->region->pitch * intelObj->mt->cpp; + tObj->DepthMode); state[I915_TEXREG_MS3] = (((firstImage->Height - 1) << MS3_HEIGHT_SHIFT) | @@ -187,7 +191,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3) */ maxlod = MIN2(sampler->MaxLod, tObj->_MaxLevel - tObj->BaseLevel); state[I915_TEXREG_MS4] = - ((((pitch / 4) - 1) << MS4_PITCH_SHIFT) | + ((((intelObj->mt->region->pitch / 4) - 1) << MS4_PITCH_SHIFT) | MS4_CUBE_FACE_ENA_MASK | (U_FIXED(CLAMP(maxlod, 0.0, 11.0), 2) << MS4_MAX_LOD_SHIFT) | ((firstImage->Depth - 1) << MS4_VOLUME_DEPTH_SHIFT)); @@ -355,6 +359,12 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3) } + if (sampler->sRGBDecode == GL_DECODE_EXT && + (_mesa_get_srgb_format_linear(firstImage->TexFormat) != + firstImage->TexFormat)) { + state[I915_TEXREG_SS2] |= SS2_REVERSE_GAMMA_ENABLE; + } + /* convert border color from float to ubyte */ CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->BorderColor.f[0]); CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->BorderColor.f[1]);