[Mesa-dev] [PATCH 05/21] mesa: Move DepthMode to texture object

Brian Paul brianp at vmware.com
Mon Jun 11 08:06:00 PDT 2012


One comment below.

On 06/11/2012 12:59 AM, Pauli Nieminen wrote:
> GL_DEPTH_TEXTURE_MODE isn't meant to be part of sampler state based on
> compatibility profile specifications.
>
> OpenGL specification 4.1 compatibility 20100725 3.9.2:
> "... The values accepted in the pname parameter
> are TEXTURE_WRAP_S, TEXTURE_WRAP_T, TEXTURE_WRAP_R, TEXTURE_MIN_-
> FILTER, TEXTURE_MAG_FILTER, TEXTURE_BORDER_COLOR, TEXTURE_MIN_-
> LOD, TEXTURE_MAX_LOD, TEXTURE_LOD_BIAS, TEXTURE_COMPARE_MODE, and
> TEXTURE_COMPARE_FUNC. Texture state listed in table 6.25 but not listed here and
> in the sampler state in table 6.26 is not part of the sampler state, and remains in the
> texture object."
>
> Same can be found from 3.3 compatibility specification.
>
> That makes me think that moving DepthMode from sampler state makes sense
> to avoid bugs if DepthMode happens to be used with sampler objects.
>
> Signed-off-by: Pauli Nieminen<pauli.nieminen at linux.intel.com>
> ---
>   src/mesa/drivers/dri/i915/i915_texstate.c         |    2 +-
>   src/mesa/drivers/dri/i965/brw_wm.c                |    2 +-
>   src/mesa/drivers/dri/i965/brw_wm_surface_state.c  |    2 +-
>   src/mesa/drivers/dri/i965/gen7_wm_surface_state.c |    2 +-
>   src/mesa/main/attrib.c                            |    2 +-
>   src/mesa/main/mtypes.h                            |    6 +++---
>   src/mesa/main/samplerobj.c                        |    2 --
>   src/mesa/main/texobj.c                            |    4 ++--
>   src/mesa/main/texparam.c                          |    8 ++++----
>   src/mesa/main/texstate.c                          |    2 +-
>   src/mesa/state_tracker/st_atom_texture.c          |    4 ++--
>   src/mesa/swrast/s_texfilter.c                     |    4 ++--
>   12 files changed, 19 insertions(+), 21 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c
> index fd63a69..590d5fa 100644
> --- a/src/mesa/drivers/dri/i915/i915_texstate.c
> +++ b/src/mesa/drivers/dri/i915/i915_texstate.c
> @@ -168,7 +168,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
>      i915->state.tex_offset[unit] = 0; /* Always the origin of the miptree */
>
>      format = translate_texture_format(firstImage->TexFormat,
> -				     sampler->DepthMode);
> +				     tObj->DepthMode);
>      pitch = intelObj->mt->region->pitch * intelObj->mt->cpp;
>
>      state[I915_TEXREG_MS3] =
> diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
> index 63c74ad..ff70d2b 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm.c
> @@ -352,7 +352,7 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
>   	  * overrides because shadow comparison always returns the result of
>   	  * the comparison in all channels anyway.
>   	  */
> -	 switch (sampler->DepthMode) {
> +	 switch (unit->_Current->DepthMode) {
>   	 case GL_ALPHA:
>   	    swizzles[0] = SWIZZLE_ZERO;
>   	    swizzles[1] = SWIZZLE_ZERO;
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index 4718337..2506cf0 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -724,7 +724,7 @@ brw_update_texture_surface( struct gl_context *ctx, GLuint unit )
>   	      BRW_SURFACE_CUBEFACE_ENABLES |
>   	      (translate_tex_format(mt->format,
>   				    firstImage->InternalFormat,
> -				    sampler->DepthMode,
> +				    tObj->DepthMode,
>   				    sampler->sRGBDecode)<<
>   	BRW_SURFACE_FORMAT_SHIFT));
>
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> index d34bf53..1e7fd2e 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> @@ -251,7 +251,7 @@ gen7_update_texture_surface(struct gl_context *ctx, GLuint unit)
>      surf->ss0.surface_type = translate_tex_target(tObj->Target);
>      surf->ss0.surface_format = translate_tex_format(mt->format,
>                                                      firstImage->InternalFormat,
> -                                                   sampler->DepthMode,
> +                                                   tObj->DepthMode,
>                                                      sampler->sRGBDecode);
>      if (tObj->Target == GL_TEXTURE_CUBE_MAP) {
>         surf->ss0.cube_pos_x = 1;
> diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
> index 318d576..8bc7c34 100644
> --- a/src/mesa/main/attrib.c
> +++ b/src/mesa/main/attrib.c
> @@ -806,7 +806,7 @@ pop_texture_group(struct gl_context *ctx, struct texture_state *texstate)
>                                   samp->CompareFunc);
>            }
>            if (ctx->Extensions.ARB_depth_texture)
> -            _mesa_TexParameteri(target, GL_DEPTH_TEXTURE_MODE, samp->DepthMode);
> +            _mesa_TexParameteri(target, GL_DEPTH_TEXTURE_MODE, obj->DepthMode);
>         }
>
>         /* remove saved references to the texture objects */
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index ea40ffc..a08a214 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1293,9 +1293,6 @@ struct gl_sampler_object
>      GLfloat CompareFailValue;    /**<  GL_ARB_shadow_ambient */
>      GLenum sRGBDecode;           /**<  GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
>      GLboolean CubeMapSeamless;   /**<  GL_AMD_seamless_cubemap_per_texture */
> -
> -   /* deprecated sampler state */
> -   GLenum DepthMode;		/**<  GL_ARB_depth_texture */
>   };
>
>
> @@ -1312,6 +1309,9 @@ struct gl_texture_object
>
>      struct gl_sampler_object Sampler;
>
> +   /* deprecated sampler state */
> +   GLenum DepthMode;		/**<  GL_ARB_depth_texture */
> +

Let's remove the "deprecated sampler state" comment.


>      GLfloat Priority;		/**<  in [0,1] */
>      GLint BaseLevel;		/**<  min mipmap level, OpenGL 1.2 */
>      GLint MaxLevel;		/**<  max mipmap level, OpenGL 1.2 */
> diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
> index 5d1b2ad..8c54c9a 100644
> --- a/src/mesa/main/samplerobj.c
> +++ b/src/mesa/main/samplerobj.c
> @@ -133,10 +133,8 @@ _mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
>      sampObj->CompareFailValue = 0.0;
>      sampObj->sRGBDecode = GL_DECODE_EXT;
>      sampObj->CubeMapSeamless = GL_FALSE;
> -   sampObj->DepthMode = 0;
>   }
>
> -
>   /**
>    * Fallback for ctx->Driver.NewSamplerObject();
>    */
> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
> index 46eed15..f70da4f 100644
> --- a/src/mesa/main/texobj.c
> +++ b/src/mesa/main/texobj.c
> @@ -145,7 +145,7 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
>      obj->Sampler.CompareMode = GL_NONE;         /* ARB_shadow */
>      obj->Sampler.CompareFunc = GL_LEQUAL;       /* ARB_shadow */
>      obj->Sampler.CompareFailValue = 0.0F;       /* ARB_shadow_ambient */
> -   obj->Sampler.DepthMode = GL_LUMINANCE;      /* ARB_depth_texture */
> +   obj->DepthMode = GL_LUMINANCE;
>      obj->Sampler.CubeMapSeamless = GL_FALSE;
>      obj->Swizzle[0] = GL_RED;
>      obj->Swizzle[1] = GL_GREEN;
> @@ -259,7 +259,7 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
>      dest->Sampler.CompareFunc = src->Sampler.CompareFunc;
>      dest->Sampler.CompareFailValue = src->Sampler.CompareFailValue;
>      dest->Sampler.CubeMapSeamless = src->Sampler.CubeMapSeamless;
> -   dest->Sampler.DepthMode = src->Sampler.DepthMode;
> +   dest->DepthMode = src->DepthMode;
>      dest->Sampler.sRGBDecode = src->Sampler.sRGBDecode;
>      dest->_MaxLevel = src->_MaxLevel;
>      dest->_MaxLambda = src->_MaxLambda;
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index 9abc503..a7625e4 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -383,14 +383,14 @@ set_tex_parameteri(struct gl_context *ctx,
>
>      case GL_DEPTH_TEXTURE_MODE_ARB:
>         if (ctx->Extensions.ARB_depth_texture) {
> -         if (texObj->Sampler.DepthMode == params[0])
> +         if (texObj->DepthMode == params[0])
>               return GL_FALSE;
>            if (params[0] == GL_LUMINANCE ||
>                params[0] == GL_INTENSITY ||
>                params[0] == GL_ALPHA ||
>                (ctx->Extensions.ARB_texture_rg&&  params[0] == GL_RED)) {
>               flush(ctx);
> -            texObj->Sampler.DepthMode = params[0];
> +            texObj->DepthMode = params[0];
>               return GL_TRUE;
>            }
>            goto invalid_param;
> @@ -1157,7 +1157,7 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
>         case GL_DEPTH_TEXTURE_MODE_ARB:
>            if (!ctx->Extensions.ARB_depth_texture)
>               goto invalid_pname;
> -         *params = (GLfloat) obj->Sampler.DepthMode;
> +         *params = (GLfloat) obj->DepthMode;
>            break;
>         case GL_TEXTURE_LOD_BIAS:
>            *params = obj->Sampler.LodBias;
> @@ -1303,7 +1303,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
>         case GL_DEPTH_TEXTURE_MODE_ARB:
>            if (!ctx->Extensions.ARB_depth_texture)
>               goto invalid_pname;
> -         *params = (GLint) obj->Sampler.DepthMode;
> +         *params = (GLint) obj->DepthMode;
>            break;
>         case GL_TEXTURE_LOD_BIAS:
>            *params = (GLint) obj->Sampler.LodBias;
> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
> index 8ca9092..fa1fef2 100644
> --- a/src/mesa/main/texstate.c
> +++ b/src/mesa/main/texstate.c
> @@ -407,7 +407,7 @@ update_tex_combine(struct gl_context *ctx, struct gl_texture_unit *texUnit)
>         GLenum format = texObj->Image[0][texObj->BaseLevel]->_BaseFormat;
>
>         if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL_EXT) {
> -         format = texObj->Sampler.DepthMode;
> +         format = texObj->DepthMode;
>         }
>         calculate_derived_texenv(&texUnit->_EnvMode, texUnit->EnvMode, format);
>         texUnit->_CurrentCombine =&  texUnit->_EnvMode;
> diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
> index f27a320..fefa598 100644
> --- a/src/mesa/state_tracker/st_atom_texture.c
> +++ b/src/mesa/state_tracker/st_atom_texture.c
> @@ -147,7 +147,7 @@ st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
>      struct pipe_sampler_view templ;
>      GLuint swizzle = apply_depthmode(stObj->pt->format,
>                                       stObj->base._Swizzle,
> -                                    samp->DepthMode);
> +                                    stObj->base.DepthMode);
>
>      u_sampler_view_default_template(&templ,
>                                      stObj->pt,
> @@ -240,7 +240,7 @@ update_single_texture(struct st_context *st,
>      if (stObj->sampler_view) {
>         if (check_sampler_swizzle(stObj->sampler_view,
>   				stObj->base._Swizzle,
> -				samp->DepthMode) ||
> +				stObj->base.DepthMode) ||
>   	  (st_view_format != stObj->sampler_view->format) ||
>   	  stObj->base.BaseLevel != stObj->sampler_view->u.tex.first_level) {
>   	 pipe_sampler_view_reference(&stObj->sampler_view, NULL);
> diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c
> index 412316f..103b442 100644
> --- a/src/mesa/swrast/s_texfilter.c
> +++ b/src/mesa/swrast/s_texfilter.c
> @@ -3468,7 +3468,7 @@ sample_depth_texture( struct gl_context *ctx,
>
>            result = shadow_compare(function, depthRef, depthSample, ambient);
>
> -         switch (tObj->Sampler.DepthMode) {
> +         switch (tObj->DepthMode) {
>            case GL_LUMINANCE:
>               ASSIGN_4V(texel[i], result, result, result, 1.0F);
>               break;
> @@ -3563,7 +3563,7 @@ sample_depth_texture( struct gl_context *ctx,
>                                     depth00, depth01, depth10, depth11,
>                                     ambient, wi, wj);
>
> -         switch (tObj->Sampler.DepthMode) {
> +         switch (tObj->DepthMode) {
>            case GL_LUMINANCE:
>               ASSIGN_4V(texel[i], result, result, result, 1.0F);
>               break;

Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list