Lines Matching refs:ctx

61 _mesa_update_allow_draw_out_of_order(struct gl_context *ctx)
93 if (!ctx->Const.AllowDrawOutOfOrder)
96 assert(ctx->API == API_OPENGL_COMPAT);
100 ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX];
102 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_CTRL];
104 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL];
106 ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY];
108 ctx->_Shader->CurrentProgram[MESA_SHADER_FRAGMENT];
109 GLenum16 depth_func = ctx->Depth.Func;
122 bool previous_state = ctx->_AllowDrawOutOfOrder;
123 ctx->_AllowDrawOutOfOrder =
124 ctx->DrawBuffer &&
125 ctx->DrawBuffer->Visual.depthBits &&
126 ctx->Depth.Test &&
127 ctx->Depth.Mask &&
133 (!ctx->DrawBuffer->Visual.stencilBits ||
134 !ctx->Stencil.Enabled) &&
135 (!ctx->Color.ColorMask ||
136 (!ctx->Color.BlendEnabled &&
137 (!ctx->Color.ColorLogicOpEnabled ||
138 ctx->Color._LogicOp == COLOR_LOGICOP_COPY))) &&
148 if (previous_state && !ctx->_AllowDrawOutOfOrder)
149 FLUSH_VERTICES(ctx, 0, 0);
154 * Update the ctx->*Program._Current pointers to point to the
167 update_program(struct gl_context *ctx)
170 ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX];
172 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_CTRL];
174 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL];
176 ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY];
178 ctx->_Shader->CurrentProgram[MESA_SHADER_FRAGMENT];
180 ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
181 const struct gl_program *prevVP = ctx->VertexProgram._Current;
182 const struct gl_program *prevFP = ctx->FragmentProgram._Current;
183 const struct gl_program *prevGP = ctx->GeometryProgram._Current;
184 const struct gl_program *prevTCP = ctx->TessCtrlProgram._Current;
185 const struct gl_program *prevTEP = ctx->TessEvalProgram._Current;
186 const struct gl_program *prevCP = ctx->ComputeProgram._Current;
189 * Set the ctx->VertexProgram._Current and ctx->FragmentProgram._Current
207 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current, fsProg);
208 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
211 else if (_mesa_arb_fragment_program_enabled(ctx)) {
213 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
214 ctx->FragmentProgram.Current);
215 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
218 else if (_mesa_ati_fragment_shader_enabled(ctx) &&
219 ctx->ATIFragmentShader.Current->Program) {
221 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
222 ctx->ATIFragmentShader.Current->Program);
223 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
228 struct gl_shader_program *f = _mesa_get_fixed_func_fragment_program(ctx);
230 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current,
232 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram,
238 _mesa_reference_program(ctx, &ctx->GeometryProgram._Current, gsProg);
241 _mesa_reference_program(ctx, &ctx->GeometryProgram._Current, NULL);
246 _mesa_reference_program(ctx, &ctx->TessEvalProgram._Current, tesProg);
250 _mesa_reference_program(ctx, &ctx->TessEvalProgram._Current, NULL);
255 _mesa_reference_program(ctx, &ctx->TessCtrlProgram._Current, tcsProg);
259 _mesa_reference_program(ctx, &ctx->TessCtrlProgram._Current, NULL);
268 assert(VP_MODE_SHADER == ctx->VertexProgram._VPMode);
269 _mesa_reference_program(ctx, &ctx->VertexProgram._Current, vsProg);
271 else if (_mesa_arb_vertex_program_enabled(ctx)) {
273 assert(VP_MODE_SHADER == ctx->VertexProgram._VPMode);
274 _mesa_reference_program(ctx, &ctx->VertexProgram._Current,
275 ctx->VertexProgram.Current);
279 assert(VP_MODE_FF == ctx->VertexProgram._VPMode);
280 _mesa_reference_program(ctx, &ctx->VertexProgram._Current,
281 _mesa_get_fixed_func_vertex_program(ctx));
282 _mesa_reference_program(ctx, &ctx->VertexProgram._TnlProgram,
283 ctx->VertexProgram._Current);
288 _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, csProg);
291 _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, NULL);
294 bool vp_changed = ctx->VertexProgram._Current != prevVP;
295 bool tep_changed = ctx->TessEvalProgram._Current != prevTEP;
296 bool gp_changed = ctx->GeometryProgram._Current != prevGP;
297 if (ctx->GeometryProgram._Current) {
298 ctx->LastVertexStageDirty |= gp_changed;
299 } else if (ctx->TessEvalProgram._Current) {
300 ctx->LastVertexStageDirty |= gp_changed | tep_changed;
302 ctx->LastVertexStageDirty |= gp_changed | tep_changed | vp_changed;
307 if (ctx->FragmentProgram._Current != prevFP ||
308 ctx->VertexProgram._Current != prevVP ||
309 ctx->GeometryProgram._Current != prevGP ||
310 ctx->TessEvalProgram._Current != prevTEP ||
311 ctx->TessCtrlProgram._Current != prevTCP ||
312 ctx->ComputeProgram._Current != prevCP)
320 update_single_program_constants(struct gl_context *ctx,
326 if (params && params->StateFlags & ctx->NewState) {
327 if (ctx->DriverFlags.NewShaderConstants[stage])
328 ctx->NewDriverState |= ctx->DriverFlags.NewShaderConstants[stage];
342 update_program_constants(struct gl_context *ctx)
345 update_single_program_constants(ctx, ctx->VertexProgram._Current,
347 update_single_program_constants(ctx, ctx->FragmentProgram._Current,
350 if (ctx->API == API_OPENGL_COMPAT &&
351 ctx->Const.GLSLVersionCompat >= 150) {
353 update_single_program_constants(ctx, ctx->GeometryProgram._Current,
356 if (_mesa_has_ARB_tessellation_shader(ctx)) {
358 update_single_program_constants(ctx, ctx->TessCtrlProgram._Current,
360 update_single_program_constants(ctx, ctx->TessEvalProgram._Current,
370 update_fixed_func_program_usage(struct gl_context *ctx)
372 ctx->FragmentProgram._UsesTexEnvProgram =
373 !ctx->_Shader->CurrentProgram[MESA_SHADER_FRAGMENT] && /* GLSL*/
374 !_mesa_arb_fragment_program_enabled(ctx) &&
375 !(_mesa_ati_fragment_shader_enabled(ctx) &&
376 ctx->ATIFragmentShader.Current->Program);
378 ctx->VertexProgram._UsesTnlProgram =
379 !ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX] && /* GLSL */
380 !_mesa_arb_vertex_program_enabled(ctx);
397 _mesa_update_state_locked( struct gl_context *ctx )
399 GLbitfield new_state = ctx->NewState;
417 _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
420 if (ctx->API == API_OPENGL_COMPAT ||
421 ctx->API == API_OPENGLES) {
424 _mesa_update_modelview_project( ctx, new_state );
427 new_state |= _mesa_update_texture_matrices(ctx);
430 new_state |= _mesa_update_texture_state(ctx);
433 new_state |= _mesa_update_lighting(ctx);
435 /* ctx->_NeedEyeCoords is determined here.
446 if (_mesa_update_tnl_spaces(ctx, new_state))
451 update_fixed_func_program_usage(ctx);
456 if (ctx->FragmentProgram._UsesTexEnvProgram) {
461 if (ctx->VertexProgram._UsesTnlProgram)
469 new_prog_state |= update_program(ctx);
474 _mesa_update_texture_state(ctx);
477 update_program(ctx);
481 new_prog_state |= update_program_constants(ctx);
483 ctx->NewState |= new_prog_state;
491 st_invalidate_state(ctx);
492 ctx->NewState = 0;
499 _mesa_update_state( struct gl_context *ctx )
501 _mesa_lock_context_textures(ctx);
502 _mesa_update_state_locked(ctx);
503 _mesa_unlock_context_textures(ctx);
514 _mesa_set_vp_override(struct gl_context *ctx, GLboolean flag)
516 if (ctx->VertexProgram._Overriden != flag) {
517 ctx->VertexProgram._Overriden = flag;
522 ctx->NewState |= _NEW_PROGRAM;
528 set_vertex_processing_mode(struct gl_context *ctx, gl_vertex_processing_mode m)
530 if (ctx->VertexProgram._VPMode == m)
534 ctx->NewDriverState |= ST_NEW_VERTEX_ARRAYS;
535 ctx->Array.NewVertexElements = true;
538 ctx->VertexProgram._VPMode = m;
543 ctx->VertexProgram._VPModeOptimizesConstantAttribs =
558 ctx->VertexProgram._VPModeInputFilter = VERT_BIT_FF_ALL;
566 assert(ctx->API != API_OPENGLES);
573 if (ctx->API == API_OPENGL_COMPAT)
574 ctx->VertexProgram._VPModeInputFilter = VERT_BIT_ALL;
576 ctx->VertexProgram._VPModeInputFilter = VERT_BIT_GENERIC_ALL;
587 _mesa_set_varying_vp_inputs(ctx, ctx->Array._DrawVAOEnabledAttribs);
592 * Update ctx->VertexProgram._VPMode.
599 _mesa_update_vertex_processing_mode(struct gl_context *ctx)
601 if (ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX])
602 set_vertex_processing_mode(ctx, VP_MODE_SHADER);
603 else if (_mesa_arb_vertex_program_enabled(ctx))
604 set_vertex_processing_mode(ctx, VP_MODE_SHADER);
606 set_vertex_processing_mode(ctx, VP_MODE_FF);
611 _mesa_reset_vertex_processing_mode(struct gl_context *ctx)
613 ctx->VertexProgram._VPMode = -1; /* force the update */
614 _mesa_update_vertex_processing_mode(ctx);