void GLAPIENTRY _mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params) { struct gl_sampler_object *sampObj; GLuint res; GET_CURRENT_CONTEXT(ctx); sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states: * * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * * In desktop GL, an GL_INVALID_VALUE is returned instead. */ _mesa_error(ctx, (_mesa_is_gles(ctx) ? GL_INVALID_OPERATION : GL_INVALID_VALUE), "glSamplerParameteriv(sampler %u)", sampler); return; } switch (pname) { case GL_TEXTURE_WRAP_S: res = set_sampler_wrap_s(ctx, sampObj, params[0]); break; case GL_TEXTURE_WRAP_T: res = set_sampler_wrap_t(ctx, sampObj, params[0]); break; case GL_TEXTURE_WRAP_R: res = set_sampler_wrap_r(ctx, sampObj, params[0]); break; case GL_TEXTURE_MIN_FILTER: res = set_sampler_min_filter(ctx, sampObj, params[0]); break; case GL_TEXTURE_MAG_FILTER: res = set_sampler_mag_filter(ctx, sampObj, params[0]); break; case GL_TEXTURE_MIN_LOD: res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_MAX_LOD: res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_LOD_BIAS: res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_COMPARE_MODE: res = set_sampler_compare_mode(ctx, sampObj, params[0]); break; case GL_TEXTURE_COMPARE_FUNC: res = set_sampler_compare_func(ctx, sampObj, params[0]); break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_CUBE_MAP_SEAMLESS: res = set_sampler_cube_map_seamless(ctx, sampObj, params[0]); break; case GL_TEXTURE_SRGB_DECODE_EXT: res = set_sampler_srgb_decode(ctx, sampObj, params[0]); break; case GL_TEXTURE_BORDER_COLOR: { GLfloat c[4]; c[0] = INT_TO_FLOAT(params[0]); c[1] = INT_TO_FLOAT(params[1]); c[2] = INT_TO_FLOAT(params[2]); c[3] = INT_TO_FLOAT(params[3]); res = set_sampler_border_colorf(ctx, sampObj, c); } break; default: res = INVALID_PNAME; } switch (res) { case GL_FALSE: /* no change */ break; case GL_TRUE: /* state change - we do nothing special at this time */ break; case INVALID_PNAME: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(pname=%s)\n", _mesa_enum_to_string(pname)); break; case INVALID_PARAM: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(param=%d)\n", params[0]); break; case INVALID_VALUE: _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteriv(param=%d)\n", params[0]); break; default: ; } }
void GLAPIENTRY _mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) { struct gl_sampler_object *sampObj; GLuint res; GET_CURRENT_CONTEXT(ctx); sampObj = sampler_parameter_error_check(ctx, sampler, false, "glSamplerParameterf"); if (!sampObj) return; switch (pname) { case GL_TEXTURE_WRAP_S: res = set_sampler_wrap_s(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_WRAP_T: res = set_sampler_wrap_t(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_WRAP_R: res = set_sampler_wrap_r(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_MIN_FILTER: res = set_sampler_min_filter(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_MAG_FILTER: res = set_sampler_mag_filter(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_MIN_LOD: res = set_sampler_min_lod(ctx, sampObj, param); break; case GL_TEXTURE_MAX_LOD: res = set_sampler_max_lod(ctx, sampObj, param); break; case GL_TEXTURE_LOD_BIAS: res = set_sampler_lod_bias(ctx, sampObj, param); break; case GL_TEXTURE_COMPARE_MODE: res = set_sampler_compare_mode(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_COMPARE_FUNC: res = set_sampler_compare_func(ctx, sampObj, (GLint) param); break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: res = set_sampler_max_anisotropy(ctx, sampObj, param); break; case GL_TEXTURE_CUBE_MAP_SEAMLESS: res = set_sampler_cube_map_seamless(ctx, sampObj, (GLboolean) param); break; case GL_TEXTURE_SRGB_DECODE_EXT: res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) param); break; case GL_TEXTURE_BORDER_COLOR: /* fall-through */ default: res = INVALID_PNAME; } switch (res) { case GL_FALSE: /* no change */ break; case GL_TRUE: /* state change - we do nothing special at this time */ break; case INVALID_PNAME: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(pname=%s)\n", _mesa_enum_to_string(pname)); break; case INVALID_PARAM: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(param=%f)\n", param); break; case INVALID_VALUE: _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterf(param=%f)\n", param); break; default: ; } }
void GLAPIENTRY _mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params) { struct gl_sampler_object *sampObj; GLuint res; GET_CURRENT_CONTEXT(ctx); sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(sampler %u)", sampler); return; } switch (pname) { case GL_TEXTURE_WRAP_S: res = set_sampler_wrap_s(ctx, sampObj, params[0]); break; case GL_TEXTURE_WRAP_T: res = set_sampler_wrap_t(ctx, sampObj, params[0]); break; case GL_TEXTURE_WRAP_R: res = set_sampler_wrap_r(ctx, sampObj, params[0]); break; case GL_TEXTURE_MIN_FILTER: res = set_sampler_min_filter(ctx, sampObj, params[0]); break; case GL_TEXTURE_MAG_FILTER: res = set_sampler_mag_filter(ctx, sampObj, params[0]); break; case GL_TEXTURE_MIN_LOD: res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_MAX_LOD: res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_LOD_BIAS: res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_COMPARE_MODE: res = set_sampler_compare_mode(ctx, sampObj, params[0]); break; case GL_TEXTURE_COMPARE_FUNC: res = set_sampler_compare_func(ctx, sampObj, params[0]); break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]); break; case GL_TEXTURE_CUBE_MAP_SEAMLESS: res = set_sampler_cube_map_seamless(ctx, sampObj, params[0]); break; case GL_TEXTURE_SRGB_DECODE_EXT: res = set_sampler_srgb_decode(ctx, sampObj, (GLenum) params[0]); break; case GL_TEXTURE_BORDER_COLOR: res = set_sampler_border_colorui(ctx, sampObj, params); break; default: res = INVALID_PNAME; } switch (res) { case GL_FALSE: /* no change */ break; case GL_TRUE: /* state change - we do nothing special at this time */ break; case INVALID_PNAME: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(pname=%s)\n", _mesa_enum_to_string(pname)); break; case INVALID_PARAM: _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(param=%u)\n", params[0]); break; case INVALID_VALUE: _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(param=%u)\n", params[0]); break; default: ; } }