mesa: add _mesa_(get)texenvi(f)v_indexed helpers

They are exactly like _mesa_GetTexEnvfv/_mesa_GetTexEnviv except they take
a GLuint texunit parameter instead of relying of ctx->Texture.CurrentUnit.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Pierre-Eric Pelloux-Prayer
2019-08-01 12:05:52 +02:00
committed by Marek Olšák
parent 0e595326c4
commit 04b8e50bb8
+50 -27
View File
@@ -391,24 +391,23 @@ set_combiner_scale(struct gl_context *ctx,
}
void GLAPIENTRY
_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
static void
_mesa_texenvfv_indexed( struct gl_context* ctx, GLuint texunit, GLenum target,
GLenum pname, const GLfloat *param )
{
const GLint iparam0 = (GLint) param[0];
GLuint maxUnit;
GET_CURRENT_CONTEXT(ctx);
maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV)
? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits;
if (ctx->Texture.CurrentUnit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glTexEnvfv(current unit)");
if (texunit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glTexEnvfv(texunit=%d)", texunit);
return;
}
if (target == GL_TEXTURE_ENV) {
struct gl_fixedfunc_texture_unit *texUnit =
_mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit);
_mesa_get_fixedfunc_tex_unit(ctx, texunit);
/* The GL spec says that we should report an error if the unit is greater
* than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only
@@ -465,7 +464,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
}
else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
struct gl_texture_unit *texUnit =
_mesa_get_current_tex_unit(ctx);
_mesa_get_tex_unit(ctx, texunit);
if (pname == GL_TEXTURE_LOD_BIAS_EXT) {
if (texUnit->LodBias == param[0])
@@ -490,13 +489,13 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
* but that's what the spec calls for.
*/
if (iparam0 == GL_TRUE) {
if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit))
if (ctx->Point.CoordReplace & (1u << texunit))
return;
ctx->Point.CoordReplace |= (1u << ctx->Texture.CurrentUnit);
ctx->Point.CoordReplace |= (1u << texunit);
} else if (iparam0 == GL_FALSE) {
if (~(ctx->Point.CoordReplace) & (1u << ctx->Texture.CurrentUnit))
if (~(ctx->Point.CoordReplace) & (1u << texunit))
return;
ctx->Point.CoordReplace &= ~(1u << ctx->Texture.CurrentUnit);
ctx->Point.CoordReplace &= ~(1u << texunit);
} else {
_mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", iparam0);
return;
@@ -528,6 +527,14 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
}
void GLAPIENTRY
_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
{
GET_CURRENT_CONTEXT(ctx);
_mesa_texenvfv_indexed(ctx, ctx->Texture.CurrentUnit, target, pname, param);
}
void GLAPIENTRY
_mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param )
{
@@ -654,23 +661,22 @@ get_texenvi(struct gl_context *ctx,
}
void GLAPIENTRY
_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
static void
_mesa_gettexenvfv_indexed( GLuint texunit, GLenum target, GLenum pname, GLfloat *params )
{
GLuint maxUnit;
GET_CURRENT_CONTEXT(ctx);
maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV)
? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits;
if (ctx->Texture.CurrentUnit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(current unit)");
if (texunit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(texunit=%d)", texunit);
return;
}
if (target == GL_TEXTURE_ENV) {
struct gl_fixedfunc_texture_unit *texUnit =
_mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit);
_mesa_get_fixedfunc_tex_unit(ctx, texunit);
/* The GL spec says that we should report an error if the unit is greater
* than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only
@@ -697,7 +703,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
}
}
else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
const struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
const struct gl_texture_unit *texUnit = _mesa_get_tex_unit(ctx, texunit);
if (pname == GL_TEXTURE_LOD_BIAS_EXT) {
*params = texUnit->LodBias;
@@ -715,7 +721,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
return;
}
if (pname == GL_COORD_REPLACE_NV) {
if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit))
if (ctx->Point.CoordReplace & (1u << texunit))
*params = 1.0f;
else
*params = 0.0f;
@@ -732,22 +738,24 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
}
void GLAPIENTRY
_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
static void
_mesa_gettexenviv_indexed( GLuint texunit, GLenum target,
GLenum pname, GLint *params )
{
GLuint maxUnit;
GET_CURRENT_CONTEXT(ctx);
maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV)
? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits;
if (ctx->Texture.CurrentUnit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(current unit)");
if (texunit >= maxUnit) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(texunit=%d)",
texunit);
return;
}
if (target == GL_TEXTURE_ENV) {
struct gl_fixedfunc_texture_unit *texUnit =
_mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit);
_mesa_get_fixedfunc_tex_unit(ctx, texunit);
/* The GL spec says that we should report an error if the unit is greater
* than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only
@@ -772,7 +780,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
}
}
else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
const struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
const struct gl_texture_unit *texUnit = _mesa_get_tex_unit(ctx, texunit);
if (pname == GL_TEXTURE_LOD_BIAS_EXT) {
*params = (GLint) texUnit->LodBias;
@@ -790,7 +798,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
return;
}
if (pname == GL_COORD_REPLACE_NV) {
if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit))
if (ctx->Point.CoordReplace & (1u << texunit))
*params = GL_TRUE;
else
*params = GL_FALSE;
@@ -806,3 +814,18 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
}
}
void GLAPIENTRY
_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
_mesa_gettexenvfv_indexed(ctx->Texture.CurrentUnit, target, pname, params);
}
void GLAPIENTRY
_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
_mesa_gettexenviv_indexed(ctx->Texture.CurrentUnit, target, pname, params);
}