X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fenable.c;h=ef278a318a1bd2dfc329290dd6287c74ed55c976;hb=e75e8d6c94cf319aa597221966b31ccf89b629f2;hp=42f67990784ef5ea417a75c0b3aad860547e0d82;hpb=0fe81a25f7102d78dbe8f7e89d2b024b1741da1c;p=mesa.git diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 42f67990784..ef278a318a1 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -31,15 +31,14 @@ #include "glheader.h" #include "clip.h" #include "context.h" +#include "debug_output.h" #include "enable.h" #include "errors.h" #include "light.h" -#include "util/simple_list.h" #include "mtypes.h" #include "enums.h" #include "api_arrayelt.h" #include "texstate.h" -#include "drivers/common/meta.h" @@ -105,6 +104,8 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state) case GL_POINT_SIZE_ARRAY_OES: var = &vao->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; flag = VERT_BIT_POINT_SIZE; + FLUSH_VERTICES(ctx, _NEW_PROGRAM); + ctx->VertexProgram.PointSizeEnabled = state; break; /* GL_NV_primitive_restart */ @@ -225,7 +226,7 @@ enable_texture(struct gl_context *ctx, GLboolean state, GLbitfield texBit) if (texUnit->Enabled == newenabled) return GL_FALSE; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE); texUnit->Enabled = newenabled; return GL_TRUE; } @@ -369,10 +370,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) break; case GL_DEBUG_OUTPUT: case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: - if (!_mesa_is_desktop_gl(ctx)) - goto invalid_enum_error; - else - _mesa_set_debug_state_int(ctx, cap, state); + _mesa_set_debug_state_int(ctx, cap, state); break; case GL_DITHER: if (ctx->Color.DitherFlag == state) @@ -387,6 +385,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) return; FLUSH_VERTICES(ctx, _NEW_FOG); ctx->Fog.Enabled = state; + ctx->Fog._PackedEnabledMode = state ? ctx->Fog._PackedMode : FOG_NONE; break; case GL_LIGHT0: case GL_LIGHT1: @@ -403,11 +402,10 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) FLUSH_VERTICES(ctx, _NEW_LIGHT); ctx->Light.Light[cap-GL_LIGHT0].Enabled = state; if (state) { - insert_at_tail(&ctx->Light.EnabledList, - &ctx->Light.Light[cap-GL_LIGHT0]); + ctx->Light._EnabledLights |= 1u << (cap - GL_LIGHT0); } else { - remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]); + ctx->Light._EnabledLights &= ~(1u << (cap - GL_LIGHT0)); } break; case GL_LIGHTING: @@ -442,6 +440,16 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) FLUSH_VERTICES(ctx, _NEW_COLOR); ctx->Color.IndexLogicOpEnabled = state; break; + case GL_CONSERVATIVE_RASTERIZATION_INTEL: + if (!_mesa_has_INTEL_conservative_rasterization(ctx)) + goto invalid_enum_error; + if (ctx->IntelConservativeRasterization == state) + return; + FLUSH_VERTICES(ctx, 0); + ctx->NewDriverState |= + ctx->DriverFlags.NewIntelConservativeRasterization; + ctx->IntelConservativeRasterization = state; + break; case GL_COLOR_LOGIC_OP: if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) goto invalid_enum_error; @@ -711,7 +719,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) newenabled |= coordBit; if (texUnit->TexGenEnabled == newenabled) return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE); texUnit->TexGenEnabled = newenabled; } } @@ -732,7 +740,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) newenabled |= STR_BITS; if (texUnit->TexGenEnabled == newenabled) return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE); texUnit->TexGenEnabled = newenabled; } } @@ -742,17 +750,27 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) case GL_VERTEX_ARRAY: case GL_NORMAL_ARRAY: case GL_COLOR_ARRAY: - case GL_INDEX_ARRAY: case GL_TEXTURE_COORD_ARRAY: + if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) + goto invalid_enum_error; + client_state( ctx, cap, state ); + return; + case GL_INDEX_ARRAY: case GL_EDGE_FLAG_ARRAY: case GL_FOG_COORDINATE_ARRAY_EXT: case GL_SECONDARY_COLOR_ARRAY_EXT: + if (ctx->API != API_OPENGL_COMPAT) + goto invalid_enum_error; + client_state( ctx, cap, state ); + return; case GL_POINT_SIZE_ARRAY_OES: + if (ctx->API != API_OPENGLES) + goto invalid_enum_error; client_state( ctx, cap, state ); return; /* GL_ARB_texture_cube_map */ - case GL_TEXTURE_CUBE_MAP_ARB: + case GL_TEXTURE_CUBE_MAP: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_enum_error; CHECK_EXTENSION(ARB_texture_cube_map, cap); @@ -808,7 +826,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) /* GL_ARB_sample_shading */ case GL_SAMPLE_SHADING: - if (!_mesa_is_desktop_gl(ctx)) + if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) goto invalid_enum_error; CHECK_EXTENSION(ARB_sample_shading, cap); if (ctx->Multisample.SampleShading == state) @@ -941,7 +959,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) goto invalid_enum_error; CHECK_EXTENSION(ARB_seamless_cube_map, cap); if (ctx->Texture.CubeMapSeamless != state) { - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT); ctx->Texture.CubeMapSeamless = state; } break; @@ -1010,6 +1028,14 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) ctx->Multisample.SampleMask = state; break; + case GL_BLEND_ADVANCED_COHERENT_KHR: + CHECK_EXTENSION(KHR_blend_equation_advanced_coherent, cap); + if (ctx->Color.BlendCoherent == state) + return; + FLUSH_VERTICES(ctx, _NEW_COLOR); + ctx->Color.BlendCoherent = state; + break; + default: goto invalid_enum_error; } @@ -1225,10 +1251,7 @@ _mesa_IsEnabled( GLenum cap ) return ctx->Polygon.CullFlag; case GL_DEBUG_OUTPUT: case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: - if (!_mesa_is_desktop_gl(ctx)) - goto invalid_enum_error; - else - return (GLboolean) _mesa_get_debug_state_int(ctx, cap); + return (GLboolean) _mesa_get_debug_state_int(ctx, cap); case GL_DEPTH_TEST: return ctx->Depth.Test; case GL_DITHER: @@ -1456,7 +1479,7 @@ _mesa_IsEnabled( GLenum cap ) return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; /* GL_ARB_texture_cube_map */ - case GL_TEXTURE_CUBE_MAP_ARB: + case GL_TEXTURE_CUBE_MAP: CHECK_EXTENSION(ARB_texture_cube_map); return is_texture_enabled(ctx, TEXTURE_CUBE_BIT); @@ -1610,11 +1633,19 @@ _mesa_IsEnabled( GLenum cap ) /* ARB_sample_shading */ case GL_SAMPLE_SHADING: - if (!_mesa_is_desktop_gl(ctx)) + if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) goto invalid_enum_error; CHECK_EXTENSION(ARB_sample_shading); return ctx->Multisample.SampleShading; + case GL_BLEND_ADVANCED_COHERENT_KHR: + CHECK_EXTENSION(KHR_blend_equation_advanced_coherent); + return ctx->Color.BlendCoherent; + + case GL_CONSERVATIVE_RASTERIZATION_INTEL: + CHECK_EXTENSION(INTEL_conservative_rasterization); + return ctx->IntelConservativeRasterization; + default: goto invalid_enum_error; }