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