[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