#include "light.h"
#include "mtypes.h"
#include "enums.h"
+#include "state.h"
#include "texstate.h"
#include "varray.h"
{
struct gl_fixedfunc_texture_unit *texUnit =
_mesa_get_current_fixedfunc_tex_unit(ctx);
+ if (!texUnit)
+ return GL_FALSE;
const GLbitfield newenabled = state
? (texUnit->Enabled | texBit) : (texUnit->Enabled & ~texBit);
ctx->DriverFlags.NewIntelConservativeRasterization;
ctx->IntelConservativeRasterization = state;
break;
+ case GL_CONSERVATIVE_RASTERIZATION_NV:
+ if (!_mesa_has_NV_conservative_raster(ctx))
+ goto invalid_enum_error;
+ if (ctx->ConservativeRasterization == state)
+ return;
+ FLUSH_VERTICES(ctx, 0);
+ ctx->NewDriverState |=
+ ctx->DriverFlags.NewNvConservativeRasterization;
+ ctx->ConservativeRasterization = state;
+ break;
case GL_COLOR_LOGIC_OP:
if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
goto invalid_enum_error;
return;
FLUSH_VERTICES(ctx, _NEW_PROGRAM);
ctx->VertexProgram.Enabled = state;
+ _mesa_update_vertex_processing_mode(ctx);
break;
case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
/* This was added with ARB_vertex_program, but it is also used with
break;
case GL_DEPTH_CLAMP:
+ if (!_mesa_has_ARB_depth_clamp(ctx) &&
+ !_mesa_has_EXT_depth_clamp(ctx))
+ goto invalid_enum_error;
+ if (ctx->Transform.DepthClampNear == state &&
+ ctx->Transform.DepthClampFar == state)
+ return;
+ FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepthClamp ? 0 :
+ _NEW_TRANSFORM);
+ ctx->NewDriverState |= ctx->DriverFlags.NewDepthClamp;
+ ctx->Transform.DepthClampNear = state;
+ ctx->Transform.DepthClampFar = state;
+ break;
+
+ case GL_DEPTH_CLAMP_NEAR_AMD:
if (!_mesa_is_desktop_gl(ctx))
goto invalid_enum_error;
- CHECK_EXTENSION(ARB_depth_clamp, cap);
- if (ctx->Transform.DepthClamp == state)
+ CHECK_EXTENSION(AMD_depth_clamp_separate, cap);
+ if (ctx->Transform.DepthClampNear == state)
return;
FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepthClamp ? 0 :
_NEW_TRANSFORM);
ctx->NewDriverState |= ctx->DriverFlags.NewDepthClamp;
- ctx->Transform.DepthClamp = state;
+ ctx->Transform.DepthClampNear = state;
+ break;
+
+ case GL_DEPTH_CLAMP_FAR_AMD:
+ if (!_mesa_is_desktop_gl(ctx))
+ goto invalid_enum_error;
+ CHECK_EXTENSION(AMD_depth_clamp_separate, cap);
+ if (ctx->Transform.DepthClampFar == state)
+ return;
+ FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepthClamp ? 0 :
+ _NEW_TRANSFORM);
+ ctx->NewDriverState |= ctx->DriverFlags.NewDepthClamp;
+ ctx->Transform.DepthClampFar = state;
break;
case GL_FRAGMENT_SHADER_ATI:
/* GL3.0 - GL_framebuffer_sRGB */
case GL_FRAMEBUFFER_SRGB_EXT:
- if (!_mesa_is_desktop_gl(ctx))
- goto invalid_enum_error;
CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
_mesa_set_framebuffer_srgb(ctx, state);
return;
const struct gl_fixedfunc_texture_unit *const texUnit =
_mesa_get_current_fixedfunc_tex_unit(ctx);
+ if (!texUnit)
+ return GL_FALSE;
+
return (texUnit->Enabled & bit) ? GL_TRUE : GL_FALSE;
}
case GL_VERTEX_ARRAY:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_POS);
case GL_NORMAL_ARRAY:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_NORMAL);
case GL_COLOR_ARRAY:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_COLOR0);
case GL_INDEX_ARRAY:
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_enum_error;
- return ctx->Array.VAO->
- VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_COLOR_INDEX);
case GL_TEXTURE_COORD_ARRAY:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_enum_error;
- return ctx->Array.VAO->
- VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled;
+ return !!(ctx->Array.VAO->Enabled &
+ VERT_BIT_TEX(ctx->Array.ActiveTexture));
case GL_EDGE_FLAG_ARRAY:
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_EDGEFLAG);
case GL_FOG_COORDINATE_ARRAY_EXT:
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_FOG);
case GL_SECONDARY_COLOR_ARRAY_EXT:
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_COLOR1);
case GL_POINT_SIZE_ARRAY_OES:
if (ctx->API != API_OPENGLES)
goto invalid_enum_error;
- return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
+ return !!(ctx->Array.VAO->Enabled & VERT_BIT_POINT_SIZE);
/* GL_ARB_texture_cube_map */
case GL_TEXTURE_CUBE_MAP:
/* GL_ARB_depth_clamp */
case GL_DEPTH_CLAMP:
+ if (!_mesa_has_ARB_depth_clamp(ctx) &&
+ !_mesa_has_EXT_depth_clamp(ctx))
+ goto invalid_enum_error;
+ return ctx->Transform.DepthClampNear ||
+ ctx->Transform.DepthClampFar;
+
+ case GL_DEPTH_CLAMP_NEAR_AMD:
+ if (!_mesa_is_desktop_gl(ctx))
+ goto invalid_enum_error;
+ CHECK_EXTENSION(AMD_depth_clamp_separate);
+ return ctx->Transform.DepthClampNear;
+
+ case GL_DEPTH_CLAMP_FAR_AMD:
if (!_mesa_is_desktop_gl(ctx))
goto invalid_enum_error;
- CHECK_EXTENSION(ARB_depth_clamp);
- return ctx->Transform.DepthClamp;
+ CHECK_EXTENSION(AMD_depth_clamp_separate);
+ return ctx->Transform.DepthClampFar;
case GL_FRAGMENT_SHADER_ATI:
if (ctx->API != API_OPENGL_COMPAT)
/* GL3.0 - GL_framebuffer_sRGB */
case GL_FRAMEBUFFER_SRGB_EXT:
- if (!_mesa_is_desktop_gl(ctx))
- goto invalid_enum_error;
CHECK_EXTENSION(EXT_framebuffer_sRGB);
return ctx->Color.sRGBEnabled;
CHECK_EXTENSION(INTEL_conservative_rasterization);
return ctx->IntelConservativeRasterization;
+ case GL_CONSERVATIVE_RASTERIZATION_NV:
+ CHECK_EXTENSION(NV_conservative_raster);
+ return ctx->ConservativeRasterization;
+
case GL_TILE_RASTER_ORDER_FIXED_MESA:
CHECK_EXTENSION(MESA_tile_raster_order);
return ctx->TileRasterOrderFixed;