1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2011  VMware, Inc.  All Rights Reserved.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"),
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions:
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software.
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file samplerobj.c
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \brief Functions for the GL_ARB_sampler_objects extension.
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \author Brian Paul
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/context.h"
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/dispatch.h"
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/enums.h"
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/hash.h"
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mfeatures.h"
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/samplerobj.h"
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct gl_sampler_object *
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name)
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (name == 0)
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return (struct gl_sampler_object *)
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_HashLookup(ctx->Shared->SamplerObjects, name);
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Handle reference counting.
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_reference_sampler_object_(struct gl_context *ctx,
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct gl_sampler_object **ptr,
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct gl_sampler_object *samp)
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(*ptr != samp); /* The inline wrapper should prevent no-op calls */
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (*ptr) {
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* Unreference the old sampler */
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLboolean deleteFlag = GL_FALSE;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct gl_sampler_object *oldSamp = *ptr;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /*_glthread_LOCK_MUTEX(oldSamp->Mutex);*/
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ASSERT(oldSamp->RefCount > 0);
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      oldSamp->RefCount--;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      printf("SamplerObj %p %d DECR to %d\n",
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org             (void *) oldSamp, oldSamp->Name, oldSamp->RefCount);
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      deleteFlag = (oldSamp->RefCount == 0);
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /*_glthread_UNLOCK_MUTEX(oldSamp->Mutex);*/
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (deleteFlag) {
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 ASSERT(ctx->Driver.DeleteSamplerObject);
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         ctx->Driver.DeleteSamplerObject(ctx, oldSamp);
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *ptr = NULL;
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT(!*ptr);
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp) {
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* reference new sampler */
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /*_glthread_LOCK_MUTEX(samp->Mutex);*/
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (samp->RefCount == 0) {
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         /* this sampler's being deleted (look just above) */
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         /* Not sure this can every really happen.  Warn if it does. */
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_problem(NULL, "referencing deleted sampler object");
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *ptr = NULL;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      else {
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         samp->RefCount++;
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         printf("SamplerObj %p %d INCR to %d\n",
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                (void *) samp, samp->Name, samp->RefCount);
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *ptr = samp;
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /*_glthread_UNLOCK_MUTEX(samp->Mutex);*/
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Initialize the fields of the given sampler object.
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->Name = name;
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->RefCount = 1;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->WrapS = GL_REPEAT;
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->WrapT = GL_REPEAT;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->WrapR = GL_REPEAT;
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->MagFilter = GL_LINEAR;
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->BorderColor.f[0] = 0.0;
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->BorderColor.f[1] = 0.0;
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->BorderColor.f[2] = 0.0;
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->BorderColor.f[3] = 0.0;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->MinLod = -1000.0F;
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->MaxLod = 1000.0F;
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->LodBias = 0.0F;
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->MaxAnisotropy = 1.0F;
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->CompareMode = GL_NONE;
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->CompareFunc = GL_LEQUAL;
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->sRGBDecode = GL_DECODE_EXT;
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj->CubeMapSeamless = GL_FALSE;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fallback for ctx->Driver.NewSamplerObject();
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_sampler_object *
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_new_sampler_object(struct gl_context *ctx, GLuint name)
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj = CALLOC_STRUCT(gl_sampler_object);
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (sampObj) {
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_init_sampler_object(sampObj, name);
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return sampObj;
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fallback for ctx->Driver.DeleteSamplerObject();
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_delete_sampler_object(struct gl_context *ctx,
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct gl_sampler_object *sampObj)
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FREE(sampObj);
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GenSamplers(GLsizei count, GLuint *samplers)
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint first;
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLint i;
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (MESA_VERBOSE & VERBOSE_API)
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_debug(ctx, "glGenSamplers(%d)\n", count);
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (count < 0) {
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glGenSamplers");
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!samplers)
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   first = _mesa_HashFindFreeKeyBlock(ctx->Shared->SamplerObjects, count);
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* Insert the ID and pointer to new sampler object into hash table */
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0; i < count; i++) {
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct gl_sampler_object *sampObj =
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         ctx->Driver.NewSamplerObject(ctx, first + i);
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_HashInsert(ctx->Shared->SamplerObjects, first + i, sampObj);
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samplers[i] = first + i;
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_DeleteSamplers(GLsizei count, const GLuint *samplers)
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLsizei i;
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FLUSH_VERTICES(ctx, 0);
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (count < 0) {
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteSamplers(count)");
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _glthread_LOCK_MUTEX(ctx->Shared->Mutex);
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0; i < count; i++) {
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (samplers[i]) {
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct gl_sampler_object *sampObj =
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_lookup_samplerobj(ctx, samplers[i]);
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (sampObj) {
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            /* The ID is immediately freed for re-use */
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_HashRemove(ctx->Shared->SamplerObjects, samplers[i]);
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            /* But the object exists until its reference count goes to zero */
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_reference_sampler_object(ctx, &sampObj, NULL);
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean GLAPIENTRY
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_IsSampler(GLuint sampler)
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (sampler == 0)
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return sampObj != NULL;
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_BindSampler(GLuint unit, GLuint sampler)
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (unit >= ctx->Const.MaxCombinedTextureImageUnits) {
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glBindSampler(unit %u)", unit);
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (sampler == 0) {
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* Use the default sampler object, the one contained in the texture
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * object.
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      sampObj = NULL;
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else {
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* user-defined sampler object */
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      sampObj = _mesa_lookup_samplerobj(ctx, sampler);
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!sampObj) {
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindSampler(sampler)");
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return;
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Texture.Unit[unit].Sampler != sampObj) {
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      FLUSH_VERTICES(ctx, _NEW_TEXTURE);
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* bind new sampler */
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_reference_sampler_object(ctx, &ctx->Texture.Unit[unit].Sampler,
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  sampObj);
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Check if a coordinate wrap mode is legal.
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_TRUE if legal, GL_FALSE otherwise
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvalidate_texture_wrap_mode(struct gl_context *ctx, GLenum wrap)
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct gl_extensions * const e = &ctx->Extensions;
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (wrap) {
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_CLAMP:
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_CLAMP_TO_EDGE:
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_REPEAT:
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_MIRRORED_REPEAT:
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_CLAMP_TO_BORDER:
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return e->ARB_texture_border_clamp;
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_MIRROR_CLAMP_EXT:
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp;
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_MIRROR_CLAMP_TO_EDGE_EXT:
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp;
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_MIRROR_CLAMP_TO_BORDER_EXT:
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return e->EXT_texture_mirror_clamp;
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is called just prior to changing any sampler object state.
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline void
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgflush(struct gl_context *ctx)
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FLUSH_VERTICES(ctx, _NEW_TEXTURE);
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INVALID_PARAM 0x100
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INVALID_PNAME 0x101
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INVALID_VALUE 0x102
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_wrap_s(struct gl_context *ctx, struct gl_sampler_object *samp,
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   GLint param)
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->WrapS == param)
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (validate_texture_wrap_mode(ctx, param)) {
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->WrapS = param;
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return INVALID_PARAM;
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_wrap_t(struct gl_context *ctx, struct gl_sampler_object *samp,
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   GLint param)
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->WrapT == param)
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (validate_texture_wrap_mode(ctx, param)) {
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->WrapT = param;
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return INVALID_PARAM;
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_wrap_r(struct gl_context *ctx, struct gl_sampler_object *samp,
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   GLint param)
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->WrapR == param)
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (validate_texture_wrap_mode(ctx, param)) {
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->WrapR = param;
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return INVALID_PARAM;
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       GLint param)
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->MinFilter == param)
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (param) {
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NEAREST:
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LINEAR:
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NEAREST_MIPMAP_NEAREST:
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LINEAR_MIPMAP_NEAREST:
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NEAREST_MIPMAP_LINEAR:
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LINEAR_MIPMAP_LINEAR:
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->MinFilter = param;
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PARAM;
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_mag_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       GLint param)
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->MagFilter == param)
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (param) {
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NEAREST:
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LINEAR:
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->MagFilter = param;
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PARAM;
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_lod_bias(struct gl_context *ctx, struct gl_sampler_object *samp,
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     GLfloat param)
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->LodBias == param)
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->LodBias = param;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_border_colorf(struct gl_context *ctx,
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct gl_sampler_object *samp,
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          const GLfloat params[4])
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.f[RCOMP] = params[0];
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.f[GCOMP] = params[1];
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.f[BCOMP] = params[2];
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.f[ACOMP] = params[3];
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_border_colori(struct gl_context *ctx,
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct gl_sampler_object *samp,
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          const GLint params[4])
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.i[RCOMP] = params[0];
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.i[GCOMP] = params[1];
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.i[BCOMP] = params[2];
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.i[ACOMP] = params[3];
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_border_colorui(struct gl_context *ctx,
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           struct gl_sampler_object *samp,
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           const GLuint params[4])
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.ui[RCOMP] = params[0];
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.ui[GCOMP] = params[1];
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.ui[BCOMP] = params[2];
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->BorderColor.ui[ACOMP] = params[3];
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    GLfloat param)
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->MinLod == param)
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->MinLod = param;
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    GLfloat param)
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->MaxLod == param)
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->MaxLod = param;
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_compare_mode(struct gl_context *ctx,
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         struct gl_sampler_object *samp, GLint param)
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ctx->Extensions.ARB_shadow)
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PNAME;
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->CompareMode == param)
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (param == GL_NONE ||
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       param == GL_COMPARE_R_TO_TEXTURE_ARB) {
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->CompareMode = param;
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return INVALID_PARAM;
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_compare_func(struct gl_context *ctx,
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         struct gl_sampler_object *samp, GLint param)
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ctx->Extensions.ARB_shadow)
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PNAME;
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->CompareFunc == param)
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (param) {
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LEQUAL:
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_GEQUAL:
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      flush(ctx);
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      samp->CompareFunc = param;
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_EQUAL:
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NOTEQUAL:
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_LESS:
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_GREATER:
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_ALWAYS:
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_NEVER:
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (ctx->Extensions.EXT_shadow_funcs) {
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         flush(ctx);
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         samp->CompareFunc = param;
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return GL_TRUE;
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* fall-through */
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PARAM;
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_max_anisotropy(struct gl_context *ctx,
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           struct gl_sampler_object *samp, GLfloat param)
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ctx->Extensions.EXT_texture_filter_anisotropic)
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PNAME;
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->MaxAnisotropy == param)
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (param < 1.0)
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_VALUE;
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* clamp to max, that's what NVIDIA does */
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->MaxAnisotropy = MIN2(param, ctx->Const.MaxTextureMaxAnisotropy);
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_cube_map_seamless(struct gl_context *ctx,
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct gl_sampler_object *samp, GLboolean param)
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PNAME;
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->CubeMapSeamless == param)
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (param != GL_TRUE && param != GL_FALSE)
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_VALUE;
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->CubeMapSeamless = param;
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_sampler_srgb_decode(struct gl_context *ctx,
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct gl_sampler_object *samp, GLenum param)
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ctx->Extensions.EXT_texture_sRGB_decode)
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_PNAME;
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (samp->sRGBDecode == param)
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_FALSE;
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (param != GL_DECODE_EXT && param != GL_SKIP_DECODE_EXT)
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return INVALID_VALUE;
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   flush(ctx);
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   samp->sRGBDecode = param;
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_TRUE;
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteri(sampler %u)",
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, param);
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, param);
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, param);
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, param);
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, param);
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) param);
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) param);
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) param);
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, param);
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, param);
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) param);
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, param);
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, param);
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* fall-through */
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteri(pname=%s)\n",
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteri(param=%d)\n",
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  param);
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteri(param=%d)\n",
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  param);
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterf(sampler %u)",
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, (GLint) param);
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, (GLint) param);
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, (GLint) param);
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, (GLint) param);
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, (GLint) param);
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, param);
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, param);
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, param);
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, (GLint) param);
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, (GLint) param);
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, param);
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, (GLboolean) param);
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) param);
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* fall-through */
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(pname=%s)\n",
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(param=%f)\n",
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  param);
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterf(param=%f)\n",
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  param);
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params)
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteriv(sampler %u)",
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, params[0]);
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, params[0]);
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, params[0]);
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, params[0]);
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLfloat c[4];
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         c[0] = INT_TO_FLOAT(params[0]);
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         c[1] = INT_TO_FLOAT(params[1]);
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         c[2] = INT_TO_FLOAT(params[2]);
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         c[3] = INT_TO_FLOAT(params[3]);
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         res = set_sampler_border_colorf(ctx, sampObj, c);
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(pname=%s)\n",
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(param=%d)\n",
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteriv(param=%d)\n",
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params)
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterfv(sampler %u)",
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, (GLint) params[0]);
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, (GLint) params[0]);
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, (GLint) params[0]);
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, (GLint) params[0]);
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, (GLint) params[0]);
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, params[0]);
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, params[0]);
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, params[0]);
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, (GLint) params[0]);
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, (GLint) params[0]);
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, params[0]);
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, (GLboolean) params[0]);
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) params[0]);
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_border_colorf(ctx, sampObj, params);
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterfv(pname=%s)\n",
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterfv(param=%f)\n",
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterfv(param=%f)\n",
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params)
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIiv(sampler %u)",
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, params[0]);
978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, params[0]);
996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, params[0]);
1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) params[0]);
1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_border_colori(ctx, sampObj, params);
1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIiv(pname=%s)\n",
1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIiv(param=%d)\n",
1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIiv(param=%d)\n",
1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params)
1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint res;
1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(sampler %u)",
1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_filter(ctx, sampObj, params[0]);
1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_compare_func(ctx, sampObj, params[0]);
1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_cube_map_seamless(ctx, sampObj, params[0]);
1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) params[0]);
1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = set_sampler_border_colorui(ctx, sampObj, params);
1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      res = INVALID_PNAME;
1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (res) {
1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_FALSE:
1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no change */
1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TRUE:
1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* state change - we do nothing special at this time */
1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PNAME:
1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(pname=%s)\n",
1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname));
1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_PARAM:
1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(param=%u)\n",
1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case INVALID_VALUE:
1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(param=%u)\n",
1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  params[0]);
1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ;
1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glGetSamplerParameteriv(sampler %u)",
1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapS;
1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapT;
1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapR;
1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MinFilter;
1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MagFilter;
1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MinLod;
1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MaxLod;
1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->LodBias;
1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareMode;
1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareFunc;
1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MaxAnisotropy;
1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = FLOAT_TO_INT(sampObj->BorderColor.f[0]);
1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = FLOAT_TO_INT(sampObj->BorderColor.f[1]);
1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = FLOAT_TO_INT(sampObj->BorderColor.f[2]);
1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = FLOAT_TO_INT(sampObj->BorderColor.f[3]);
1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CubeMapSeamless;
1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.EXT_texture_sRGB_decode)
1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLenum) sampObj->sRGBDecode;
1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto invalid_pname;
1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return;
1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_pname:
1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameteriv(pname=%s)",
1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               _mesa_lookup_enum_by_nr(pname));
1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE, "glGetSamplerParameterfv(sampler %u)",
1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->WrapS;
1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->WrapT;
1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->WrapR;
1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->MinFilter;
1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->MagFilter;
1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MinLod;
1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MaxLod;
1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->LodBias;
1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->CompareMode;
1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->CompareFunc;
1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MaxAnisotropy;
1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = sampObj->BorderColor.f[0];
1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = sampObj->BorderColor.f[1];
1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = sampObj->BorderColor.f[2];
1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = sampObj->BorderColor.f[3];
1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->CubeMapSeamless;
1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.EXT_texture_sRGB_decode)
1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLfloat) sampObj->sRGBDecode;
1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto invalid_pname;
1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return;
1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_pname:
1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterfv(pname=%s)",
1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               _mesa_lookup_enum_by_nr(pname));
1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE,
1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  "glGetSamplerParameterIiv(sampler %u)",
1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapS;
1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapT;
1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapR;
1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MinFilter;
1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MagFilter;
1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MinLod;
1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MaxLod;
1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->LodBias;
1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareMode;
1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareFunc;
1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLint) sampObj->MaxAnisotropy;
1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = sampObj->BorderColor.i[0];
1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = sampObj->BorderColor.i[1];
1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = sampObj->BorderColor.i[2];
1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = sampObj->BorderColor.i[3];
1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CubeMapSeamless;
1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.EXT_texture_sRGB_decode)
1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLenum) sampObj->sRGBDecode;
1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto invalid_pname;
1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return;
1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_pname:
1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterIiv(pname=%s)",
1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               _mesa_lookup_enum_by_nr(pname));
1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_sampler_object *sampObj;
1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!sampObj) {
1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_VALUE,
1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  "glGetSamplerParameterIuiv(sampler %u)",
1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  sampler);
1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_S:
1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapS;
1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_T:
1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapT;
1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_WRAP_R:
1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->WrapR;
1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_FILTER:
1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MinFilter;
1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAG_FILTER:
1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->MagFilter;
1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MIN_LOD:
1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLuint) sampObj->MinLod;
1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_LOD:
1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLuint) sampObj->MaxLod;
1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_LOD_BIAS:
1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLuint) sampObj->LodBias;
1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_MODE:
1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareMode;
1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_COMPARE_FUNC:
1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.ARB_shadow)
1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CompareFunc;
1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLuint) sampObj->MaxAnisotropy;
1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_BORDER_COLOR:
1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = sampObj->BorderColor.ui[0];
1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = sampObj->BorderColor.ui[1];
1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = sampObj->BorderColor.ui[2];
1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = sampObj->BorderColor.ui[3];
1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = sampObj->CubeMapSeamless;
1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_SRGB_DECODE_EXT:
1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!ctx->Extensions.EXT_texture_sRGB_decode)
1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         goto invalid_pname;
1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *params = (GLenum) sampObj->sRGBDecode;
1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto invalid_pname;
1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return;
1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_pname:
1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterIuiv(pname=%s)",
1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               _mesa_lookup_enum_by_nr(pname));
1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_init_sampler_object_functions(struct dd_function_table *driver)
1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   driver->NewSamplerObject = _mesa_new_sampler_object;
1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   driver->DeleteSamplerObject = _mesa_delete_sampler_object;
1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_init_sampler_object_dispatch(struct _glapi_table *disp)
1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GenSamplers(disp, _mesa_GenSamplers);
1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_DeleteSamplers(disp, _mesa_DeleteSamplers);
1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_IsSampler(disp, _mesa_IsSampler);
1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_BindSampler(disp, _mesa_BindSampler);
1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameteri(disp, _mesa_SamplerParameteri);
1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameterf(disp, _mesa_SamplerParameterf);
1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameteriv(disp, _mesa_SamplerParameteriv);
1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameterfv(disp, _mesa_SamplerParameterfv);
1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameterIiv(disp, _mesa_SamplerParameterIiv);
1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_SamplerParameterIuiv(disp, _mesa_SamplerParameterIuiv);
1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetSamplerParameteriv(disp, _mesa_GetSamplerParameteriv);
1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetSamplerParameterfv(disp, _mesa_GetSamplerParameterfv);
1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetSamplerParameterIiv(disp, _mesa_GetSamplerParameterIiv);
1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetSamplerParameterIuiv(disp, _mesa_GetSamplerParameterIuiv);
1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1464