r200: remove unneeded #include "util/simple_list.h"
[mesa.git] / src / mesa / drivers / dri / r200 / r200_tex.c
index fe7c977ac4e6c13038305d9a654c50de0bc76a35..0ddb686a43a8e44d8dfdb1caf0bed792f1c2d3ea 100644 (file)
@@ -28,19 +28,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 /*
  * Authors:
- *   Keith Whitwell <keith@tungstengraphics.com>
+ *   Keith Whitwell <keithw@vmware.com>
  */
 
 #include "main/glheader.h"
 #include "main/imports.h"
-#include "main/colormac.h"
 #include "main/context.h"
 #include "main/enums.h"
 #include "main/image.h"
-#include "main/mfeatures.h"
-#include "main/simple_list.h"
 #include "main/teximage.h"
 #include "main/texobj.h"
+#include "main/samplerobj.h"
 
 #include "radeon_mipmap_tree.h"
 #include "r200_context.h"
@@ -68,9 +66,9 @@ static void r200SetTexWrap( radeonTexObjPtr t, GLenum swrap, GLenum twrap, GLenu
    radeon_print(RADEON_TEXTURE, RADEON_TRACE,
                "%s(tex %p) sw %s, tw %s, rw %s\n",
                __func__, t,
-               _mesa_lookup_enum_by_nr(swrap),
-               _mesa_lookup_enum_by_nr(twrap),
-               _mesa_lookup_enum_by_nr(rwrap));
+               _mesa_enum_to_string(swrap),
+               _mesa_enum_to_string(twrap),
+               _mesa_enum_to_string(rwrap));
 
    t->pp_txfilter &= ~(R200_CLAMP_S_MASK | R200_CLAMP_T_MASK | R200_BORDER_MODE_D3D);
 
@@ -104,7 +102,7 @@ static void r200SetTexWrap( radeonTexObjPtr t, GLenum swrap, GLenum twrap, GLenu
       is_clamp_to_border = GL_TRUE;
       break;
    default:
-      _mesa_problem(NULL, "bad S wrap mode in %s", __FUNCTION__);
+      _mesa_problem(NULL, "bad S wrap mode in %s", __func__);
    }
 
    if (tObj->Target != GL_TEXTURE_1D) {
@@ -138,7 +136,7 @@ static void r200SetTexWrap( radeonTexObjPtr t, GLenum swrap, GLenum twrap, GLenu
          is_clamp_to_border = GL_TRUE;
          break;
       default:
-         _mesa_problem(NULL, "bad T wrap mode in %s", __FUNCTION__);
+         _mesa_problem(NULL, "bad T wrap mode in %s", __func__);
       }
    }
 
@@ -174,7 +172,7 @@ static void r200SetTexWrap( radeonTexObjPtr t, GLenum swrap, GLenum twrap, GLenu
       is_clamp_to_border = GL_TRUE;
       break;
    default:
-      _mesa_problem(NULL, "bad R wrap mode in %s", __FUNCTION__);
+      _mesa_problem(NULL, "bad R wrap mode in %s", __func__);
    }
 
    if ( is_clamp_to_border ) {
@@ -225,8 +223,8 @@ static void r200SetTexFilter( radeonTexObjPtr t, GLenum minf, GLenum magf )
    radeon_print(RADEON_TEXTURE, RADEON_TRACE,
        "%s(tex %p) minf %s, maxf %s, anisotropy %d.\n",
        __func__, t,
-       _mesa_lookup_enum_by_nr(minf),
-       _mesa_lookup_enum_by_nr(magf),
+       _mesa_enum_to_string(minf),
+       _mesa_enum_to_string(magf),
        anisotropy);
 
    if ( anisotropy == R200_MAX_ANISO_1_TO_1 ) {
@@ -302,11 +300,11 @@ static void r200TexEnv( struct gl_context *ctx, GLenum target,
    struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
 
    radeon_print(RADEON_TEXTURE | RADEON_STATE, RADEON_VERBOSE, "%s( %s )\n",
-              __FUNCTION__, _mesa_lookup_enum_by_nr( pname ) );
+              __func__, _mesa_enum_to_string( pname ) );
 
    /* This is incorrect: Need to maintain this data for each of
     * GL_TEXTURE_{123}D, GL_TEXTURE_RECTANGLE_NV, etc, and switch
-    * between them according to _ReallyEnabled.
+    * between them according to _Current->Target.
     */
    switch ( pname ) {
    case GL_TEXTURE_ENV_COLOR: {
@@ -360,42 +358,40 @@ static void r200TexEnv( struct gl_context *ctx, GLenum target,
    }
 }
 
+void r200TexUpdateParameters(struct gl_context *ctx, GLuint unit)
+{
+   struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
+   radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current);
+
+   r200SetTexMaxAnisotropy(t , samp->MaxAnisotropy);
+   r200SetTexFilter(t, samp->MinFilter, samp->MagFilter);
+   r200SetTexWrap(t, samp->WrapS, samp->WrapT, samp->WrapR);
+   r200SetTexBorderColor(t, samp->BorderColor.f);
+}
 
 /**
  * Changes variables and flags for a state update, which will happen at the
  * next UpdateTextureState
  */
-
-static void r200TexParameter( struct gl_context *ctx, GLenum target,
-                               struct gl_texture_object *texObj,
-                               GLenum pname, const GLfloat *params )
+static void r200TexParameter(struct gl_context *ctx,
+                             struct gl_texture_object *texObj,
+                             GLenum pname)
 {
    radeonTexObj* t = radeon_tex_obj(texObj);
 
    radeon_print(RADEON_TEXTURE | RADEON_STATE, RADEON_VERBOSE,
-               "%s(%p, tex %p)  target %s, pname %s\n",
-               __FUNCTION__, ctx, texObj,
-               _mesa_lookup_enum_by_nr( target ),
-              _mesa_lookup_enum_by_nr( pname ) );
+               "%s(%p, tex %p)  pname %s\n",
+               __func__, ctx, texObj,
+              _mesa_enum_to_string( pname ) );
 
    switch ( pname ) {
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-      r200SetTexMaxAnisotropy( t, texObj->Sampler.MaxAnisotropy );
-      r200SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
-      break;
-
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
    case GL_TEXTURE_WRAP_R:
-      r200SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT, texObj->Sampler.WrapR );
-      break;
-
    case GL_TEXTURE_BORDER_COLOR:
-      r200SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
-      break;
-
    case GL_TEXTURE_BASE_LEVEL:
    case GL_TEXTURE_MAX_LEVEL:
    case GL_TEXTURE_MIN_LOD:
@@ -415,14 +411,14 @@ static void r200DeleteTexture(struct gl_context * ctx, struct gl_texture_object
    radeonTexObj* t = radeon_tex_obj(texObj);
 
    radeon_print(RADEON_TEXTURE | RADEON_STATE, RADEON_NORMAL,
-           "%s( %p (target = %s) )\n", __FUNCTION__,
+           "%s( %p (target = %s) )\n", __func__,
           (void *)texObj,
-          _mesa_lookup_enum_by_nr(texObj->Target));
+          _mesa_enum_to_string(texObj->Target));
 
    if (rmesa) {
       int i;
       radeon_firevertices(&rmesa->radeon);
-      for ( i = 0 ; i < rmesa->radeon.glCtx->Const.MaxTextureUnits ; i++ ) {
+      for ( i = 0 ; i < rmesa->radeon.glCtx.Const.MaxTextureUnits ; i++ ) {
         if ( t == rmesa->state.texture.unit[i].texobj ) {
            rmesa->state.texture.unit[i].texobj = NULL;
            rmesa->hw.tex[i].dirty = GL_FALSE;
@@ -474,10 +470,10 @@ static struct gl_texture_object *r200NewTextureObject(struct gl_context * ctx,
 
    radeon_print(RADEON_STATE | RADEON_TEXTURE, RADEON_NORMAL,
            "%s(%p) target %s, new texture %p.\n",
-          __FUNCTION__, ctx,
-          _mesa_lookup_enum_by_nr(target), t);
+          __func__, ctx,
+          _mesa_enum_to_string(target), t);
 
-   _mesa_initialize_texture_object(&t->base, name, target);
+   _mesa_initialize_texture_object(ctx, &t->base, name, target);
    t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
 
    /* Initialize hardware state */
@@ -489,6 +485,16 @@ static struct gl_texture_object *r200NewTextureObject(struct gl_context * ctx,
    return &t->base;
 }
 
+static struct gl_sampler_object *
+r200NewSamplerObject(struct gl_context *ctx, GLuint name)
+{
+   r200ContextPtr rmesa = R200_CONTEXT(ctx);
+   struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name);
+   if (samp)
+      samp->MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+   return samp;
+}
+
 
 
 void r200InitTextureFuncs( radeonContextPtr radeon, struct dd_function_table *functions )
@@ -506,4 +512,5 @@ void r200InitTextureFuncs( radeonContextPtr radeon, struct dd_function_table *fu
    functions->TexEnv                   = r200TexEnv;
    functions->TexParameter             = r200TexParameter;
    functions->TexGen                   = r200TexGen;
+   functions->NewSamplerObject         = r200NewSamplerObject;
 }