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