mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
mesa: add EXT_dsa glEnabledIndexedEXT
The implementation uses _mesa_ActiveTexture to change the active texture unit and
then reset it.
It causes an unnecessary _NEW_TEXTURE_STATE but:
- adding an index argument to _mesa_set_enable causes a lot of changes (~140 callers)
- enable_texture (called by _mesa_set_enable) might cause a _NEW_TEXTURE_STATE
anyway.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ff0cafc8f3
commit
b1efc9d05f
2 changed files with 74 additions and 0 deletions
|
|
@ -1246,6 +1246,28 @@ _mesa_set_enablei(struct gl_context *ctx, GLenum cap,
|
|||
ctx->Scissor.EnableFlags &= ~(1 << index);
|
||||
}
|
||||
break;
|
||||
/* EXT_direct_state_access */
|
||||
case GL_TEXTURE_1D:
|
||||
case GL_TEXTURE_2D:
|
||||
case GL_TEXTURE_3D:
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
case GL_TEXTURE_GEN_S:
|
||||
case GL_TEXTURE_GEN_T:
|
||||
case GL_TEXTURE_GEN_R:
|
||||
case GL_TEXTURE_GEN_Q:
|
||||
case GL_TEXTURE_RECTANGLE_ARB: {
|
||||
const GLuint curTexUnitSave = ctx->Texture.CurrentUnit;
|
||||
if (index >= MAX2(ctx->Const.MaxCombinedTextureImageUnits,
|
||||
ctx->Const.MaxTextureCoordUnits)) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)",
|
||||
state ? "glEnablei" : "glDisablei", index);
|
||||
return;
|
||||
}
|
||||
_mesa_ActiveTexture(GL_TEXTURE0 + index);
|
||||
_mesa_set_enable( ctx, cap, state );
|
||||
_mesa_ActiveTexture(GL_TEXTURE0 + curTexUnitSave);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
goto invalid_enum_error;
|
||||
}
|
||||
|
|
@ -1294,6 +1316,29 @@ _mesa_IsEnabledi( GLenum cap, GLuint index )
|
|||
return GL_FALSE;
|
||||
}
|
||||
return (ctx->Scissor.EnableFlags >> index) & 1;
|
||||
/* EXT_direct_state_access */
|
||||
case GL_TEXTURE_1D:
|
||||
case GL_TEXTURE_2D:
|
||||
case GL_TEXTURE_3D:
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
case GL_TEXTURE_GEN_S:
|
||||
case GL_TEXTURE_GEN_T:
|
||||
case GL_TEXTURE_GEN_R:
|
||||
case GL_TEXTURE_GEN_Q:
|
||||
case GL_TEXTURE_RECTANGLE_ARB: {
|
||||
GLboolean state;
|
||||
const GLuint curTexUnitSave = ctx->Texture.CurrentUnit;
|
||||
if (index >= MAX2(ctx->Const.MaxCombinedTextureImageUnits,
|
||||
ctx->Const.MaxTextureCoordUnits)) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)",
|
||||
index);
|
||||
return GL_FALSE;
|
||||
}
|
||||
_mesa_ActiveTexture(GL_TEXTURE0 + index);
|
||||
state = _mesa_IsEnabled(cap);
|
||||
_mesa_ActiveTexture(GL_TEXTURE0 + curTexUnitSave);
|
||||
return state;
|
||||
}
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabledIndexed(cap=%s)",
|
||||
_mesa_enum_to_string(cap));
|
||||
|
|
|
|||
|
|
@ -2742,6 +2742,35 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v)
|
|||
goto invalid_value;
|
||||
_mesa_get_device_uuid(ctx, v->value_int_4);
|
||||
return TYPE_INT_4;
|
||||
/* GL_EXT_direct_state_access */
|
||||
case GL_TEXTURE_1D:
|
||||
case GL_TEXTURE_2D:
|
||||
case GL_TEXTURE_3D:
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
case GL_TEXTURE_GEN_S:
|
||||
case GL_TEXTURE_GEN_T:
|
||||
case GL_TEXTURE_GEN_R:
|
||||
case GL_TEXTURE_GEN_Q:
|
||||
case GL_TEXTURE_RECTANGLE_ARB: {
|
||||
GLuint curTexUnitSave;
|
||||
if (index >= _mesa_max_tex_unit(ctx))
|
||||
goto invalid_enum;
|
||||
curTexUnitSave = ctx->Texture.CurrentUnit;
|
||||
_mesa_ActiveTexture_no_error(GL_TEXTURE0 + index);
|
||||
v->value_int = _mesa_IsEnabled(pname);
|
||||
_mesa_ActiveTexture_no_error(GL_TEXTURE0 + curTexUnitSave);
|
||||
return TYPE_INT;
|
||||
}
|
||||
case GL_TEXTURE_COORD_ARRAY: {
|
||||
GLuint curTexUnitSave;
|
||||
if (index >= ctx->Const.MaxTextureCoordUnits)
|
||||
goto invalid_enum;
|
||||
curTexUnitSave = ctx->Array.ActiveTexture;
|
||||
_mesa_ClientActiveTexture(GL_TEXTURE0 + index);
|
||||
v->value_int = _mesa_IsEnabled(pname);
|
||||
_mesa_ClientActiveTexture(GL_TEXTURE0 + curTexUnitSave);
|
||||
return TYPE_INT;
|
||||
}
|
||||
}
|
||||
|
||||
invalid_enum:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue