Lines Matching refs:ctx

43 check_blend_func_error(struct gl_context *ctx)
54 for (unsigned i = ctx->Const.MaxDualSourceDrawBuffers;
55 i < ctx->DrawBuffer->_NumColorDrawBuffers;
57 if (ctx->Color.Blend[i]._UsesDualSrc) {
58 _mesa_error(ctx, GL_INVALID_OPERATION,
64 if (ctx->Color.BlendEnabled && ctx->Color._AdvancedBlendMode) {
77 if (ctx->DrawBuffer->ColorDrawBuffer[0] == GL_FRONT_AND_BACK) {
78 _mesa_error(ctx, GL_INVALID_OPERATION,
84 for (unsigned i = 1; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
85 if (ctx->DrawBuffer->ColorDrawBuffer[i] != GL_NONE) {
86 _mesa_error(ctx, GL_INVALID_OPERATION,
102 const struct gl_program *prog = ctx->_Shader->_CurrentFragmentProgram;
105 if ((blend_support & ctx->Color._AdvancedBlendMode) == 0) {
106 _mesa_error(ctx, GL_INVALID_OPERATION,
109 _mesa_enum_to_string(ctx->Color.Blend[0].EquationRGB));
126 _mesa_valid_to_render(struct gl_context *ctx, const char *where)
129 if (ctx->NewState)
130 _mesa_update_state(ctx);
132 if (ctx->API == API_OPENGL_COMPAT) {
136 if (!ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX]
137 && ctx->VertexProgram.Enabled && !ctx->VertexProgram._Enabled) {
138 _mesa_error(ctx, GL_INVALID_OPERATION,
143 if (!ctx->_Shader->CurrentProgram[MESA_SHADER_FRAGMENT]) {
144 if (ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) {
145 _mesa_error(ctx, GL_INVALID_OPERATION,
153 if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerBuffers) {
154 _mesa_error(ctx, GL_INVALID_OPERATION,
162 if (ctx->_Shader->Name && !ctx->_Shader->Validated) {
163 if (!_mesa_validate_program_pipeline(ctx, ctx->_Shader)) {
164 _mesa_error(ctx, GL_INVALID_OPERATION,
173 if (ctx->_Shader->ActiveProgram && ctx->_Shader != ctx->Pipeline.Current) {
175 if (!_mesa_sampler_uniforms_are_valid(ctx->_Shader->ActiveProgram,
177 _mesa_error(ctx, GL_INVALID_OPERATION, "%s", errMsg);
182 if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
183 _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
188 if (!check_blend_func_error(ctx)) {
193 if (ctx->_Shader->Flags & GLSL_LOG) {
194 struct gl_shader_program **shProg = ctx->_Shader->CurrentProgram;
229 check_valid_to_render(struct gl_context *ctx, const char *function)
231 if (!_mesa_valid_to_render(ctx, function)) {
235 if (!_mesa_all_buffers_are_unmapped(ctx->Array.VAO)) {
236 _mesa_error(ctx, GL_INVALID_OPERATION,
261 if (ctx->TessCtrlProgram._Current && !ctx->TessEvalProgram._Current) {
262 _mesa_error(ctx, GL_INVALID_OPERATION,
267 switch (ctx->API) {
270 return ctx->VertexProgram._Current != NULL;
275 if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled)
286 if (ctx->Array.VAO == ctx->Array.DefaultVAO) {
287 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no VAO bound)", function);
301 return ctx->VertexProgram._Current != NULL;
304 if (ctx->VertexProgram._Current != NULL) {
313 return (ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled ||
314 ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled);
333 _mesa_is_valid_prim_mode(struct gl_context *ctx, GLenum mode)
344 return (ctx->API == API_OPENGL_COMPAT);
347 return _mesa_has_geometry_shaders(ctx);
350 return _mesa_has_tessellation(ctx);
364 _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
366 bool valid_enum = _mesa_is_valid_prim_mode(ctx, mode);
369 _mesa_error(ctx, GL_INVALID_ENUM, "%s(mode=%x)", name, mode);
401 if (ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]) {
403 ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]->
406 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL];
453 _mesa_error(ctx, GL_INVALID_OPERATION,
476 if (ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL] ||
477 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_CTRL]) {
479 _mesa_error(ctx, GL_INVALID_OPERATION,
486 _mesa_error(ctx, GL_INVALID_OPERATION,
506 if (_mesa_is_xfb_active_and_unpaused(ctx)) {
509 if(ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]) {
510 switch (ctx->_Shader->CurrentProgram[MESA_SHADER_GEOMETRY]->
514 pass = ctx->TransformFeedback.Mode == GL_POINTS;
517 pass = ctx->TransformFeedback.Mode == GL_LINES;
520 pass = ctx->TransformFeedback.Mode == GL_TRIANGLES;
526 else if (ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL]) {
528 ctx->_Shader->CurrentProgram[MESA_SHADER_TESS_EVAL];
532 pass = ctx->TransformFeedback.Mode == GL_POINTS;
534 pass = ctx->TransformFeedback.Mode == GL_LINES;
536 pass = ctx->TransformFeedback.Mode == GL_TRIANGLES;
541 pass = ctx->TransformFeedback.Mode == GL_POINTS;
546 pass = ctx->TransformFeedback.Mode == GL_LINES;
549 pass = ctx->TransformFeedback.Mode == GL_TRIANGLES;
554 _mesa_error(ctx, GL_INVALID_OPERATION,
558 _mesa_lookup_prim_by_nr(ctx->TransformFeedback.Mode));
570 if (ctx->IntelConservativeRasterization) {
590 if (ctx->Polygon.FrontMode != GL_FILL ||
591 ctx->Polygon.BackMode != GL_FILL)
598 _mesa_error(ctx, GL_INVALID_OPERATION,
614 valid_elements_type(struct gl_context *ctx, GLenum type, const char *name)
623 _mesa_error(ctx, GL_INVALID_ENUM, "%s(type = %s)", name,
630 validate_DrawElements_common(struct gl_context *ctx,
660 if (_mesa_is_gles3(ctx) && !ctx->Extensions.OES_geometry_shader &&
661 _mesa_is_xfb_active_and_unpaused(ctx)) {
662 _mesa_error(ctx, GL_INVALID_OPERATION,
668 _mesa_error(ctx, GL_INVALID_VALUE, "%s(count)", caller);
672 if (!_mesa_valid_prim_mode(ctx, mode, caller)) {
676 if (!valid_elements_type(ctx, type, caller))
679 if (!check_valid_to_render(ctx, caller))
684 if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj) && indices == NULL)
699 _mesa_validate_DrawElements(struct gl_context *ctx,
703 FLUSH_CURRENT(ctx, 0);
705 return validate_DrawElements_common(ctx, mode, count, type, indices,
716 _mesa_validate_MultiDrawElements(struct gl_context *ctx,
723 FLUSH_CURRENT(ctx, 0);
740 _mesa_error(ctx, GL_INVALID_VALUE,
747 _mesa_error(ctx, GL_INVALID_VALUE,
753 if (!_mesa_valid_prim_mode(ctx, mode, "glMultiDrawElements")) {
757 if (!valid_elements_type(ctx, type, "glMultiDrawElements"))
760 if (!check_valid_to_render(ctx, "glMultiDrawElements"))
765 if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) {
782 _mesa_validate_DrawRangeElements(struct gl_context *ctx, GLenum mode,
787 FLUSH_CURRENT(ctx, 0);
790 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(end<start)");
794 return validate_DrawElements_common(ctx, mode, count, type, indices,
799 validate_draw_arrays(struct gl_context *ctx, const char *func,
803 = ctx->TransformFeedback.CurrentObject;
804 FLUSH_CURRENT(ctx, 0);
807 _mesa_error(ctx, GL_INVALID_VALUE, "%s(count)", func);
811 if (!_mesa_valid_prim_mode(ctx, mode, func))
814 if (!check_valid_to_render(ctx, func))
844 if (_mesa_is_gles3(ctx) && _mesa_is_xfb_active_and_unpaused(ctx) &&
845 !_mesa_has_OES_geometry_shader(ctx) &&
846 !_mesa_has_OES_tessellation_shader(ctx)) {
849 _mesa_error(ctx, GL_INVALID_OPERATION,
868 _mesa_validate_DrawArrays(struct gl_context *ctx, GLenum mode, GLsizei count)
870 return validate_draw_arrays(ctx, "glDrawArrays", mode, count, 1);
875 _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint first,
879 _mesa_error(ctx, GL_INVALID_VALUE,
886 _mesa_error(ctx, GL_INVALID_VALUE,
891 return validate_draw_arrays(ctx, "glDrawArraysInstanced", mode, count, 1);
896 _mesa_validate_DrawElementsInstanced(struct gl_context *ctx,
900 FLUSH_CURRENT(ctx, 0);
903 _mesa_error(ctx, GL_INVALID_VALUE,
908 return validate_DrawElements_common(ctx, mode, count, type, indices,
915 _mesa_validate_DrawTransformFeedback(struct gl_context *ctx,
921 FLUSH_CURRENT(ctx, 0);
923 if (!_mesa_valid_prim_mode(ctx, mode, "glDrawTransformFeedback*(mode)")) {
928 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawTransformFeedback*(name)");
937 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawTransformFeedback*(name)");
941 if (stream >= ctx->Const.MaxVertexStreams) {
942 _mesa_error(ctx, GL_INVALID_VALUE,
948 _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawTransformFeedback*");
954 _mesa_error(ctx, GL_INVALID_VALUE,
960 if (!check_valid_to_render(ctx, "glDrawTransformFeedback*")) {
968 valid_draw_indirect(struct gl_context *ctx,
981 if (ctx->Array.VAO == ctx->Array.DefaultVAO) {
982 _mesa_error(ctx, GL_INVALID_OPERATION, "(no VAO bound)");
994 if (_mesa_is_gles31(ctx) &&
995 ctx->Array.VAO->_Enabled & ~ctx->Array.VAO->VertexAttribBufferMask) {
996 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(No VBO bound)", name);
1000 if (!_mesa_valid_prim_mode(ctx, mode, name))
1019 if (_mesa_is_gles31(ctx) && !ctx->Extensions.OES_geometry_shader &&
1020 _mesa_is_xfb_active_and_unpaused(ctx)) {
1021 _mesa_error(ctx, GL_INVALID_OPERATION,
1032 _mesa_error(ctx, GL_INVALID_VALUE,
1037 if (!_mesa_is_bufferobj(ctx->DrawIndirectBuffer)) {
1038 _mesa_error(ctx, GL_INVALID_OPERATION,
1043 if (_mesa_check_disallowed_mapping(ctx->DrawIndirectBuffer)) {
1044 _mesa_error(ctx, GL_INVALID_OPERATION,
1053 if (ctx->DrawIndirectBuffer->Size < end) {
1054 _mesa_error(ctx, GL_INVALID_OPERATION,
1059 if (!check_valid_to_render(ctx, name))
1066 valid_draw_indirect_elements(struct gl_context *ctx,
1070 if (!valid_elements_type(ctx, type, name))
1079 if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) {
1080 _mesa_error(ctx, GL_INVALID_OPERATION,
1085 return valid_draw_indirect(ctx, mode, indirect, size, name);
1089 valid_draw_indirect_multi(struct gl_context *ctx,
1102 _mesa_error(ctx, GL_INVALID_VALUE, "%s(primcount < 0)", name);
1112 _mesa_error(ctx, GL_INVALID_VALUE, "%s(stride %% 4)", name);
1120 _mesa_validate_DrawArraysIndirect(struct gl_context *ctx,
1126 FLUSH_CURRENT(ctx, 0);
1128 return valid_draw_indirect(ctx, mode,
1134 _mesa_validate_DrawElementsIndirect(struct gl_context *ctx,
1140 FLUSH_CURRENT(ctx, 0);
1142 return valid_draw_indirect_elements(ctx, mode, type,
1148 _mesa_validate_MultiDrawArraysIndirect(struct gl_context *ctx,
1156 FLUSH_CURRENT(ctx, 0);
1161 if (!valid_draw_indirect_multi(ctx, primcount, stride,
1170 if (!valid_draw_indirect(ctx, mode, indirect, size,
1178 _mesa_validate_MultiDrawElementsIndirect(struct gl_context *ctx,
1186 FLUSH_CURRENT(ctx, 0);
1191 if (!valid_draw_indirect_multi(ctx, primcount, stride,
1200 if (!valid_draw_indirect_elements(ctx, mode, type,
1209 valid_draw_indirect_parameters(struct gl_context *ctx,
1219 _mesa_error(ctx, GL_INVALID_VALUE,
1229 if (!_mesa_is_bufferobj(ctx->ParameterBuffer)) {
1230 _mesa_error(ctx, GL_INVALID_OPERATION,
1235 if (_mesa_check_disallowed_mapping(ctx->ParameterBuffer)) {
1236 _mesa_error(ctx, GL_INVALID_OPERATION,
1247 if (ctx->ParameterBuffer->Size < drawcount + sizeof(GLsizei)) {
1248 _mesa_error(ctx, GL_INVALID_OPERATION,
1257 _mesa_validate_MultiDrawArraysIndirectCount(struct gl_context *ctx,
1267 FLUSH_CURRENT(ctx, 0);
1272 if (!valid_draw_indirect_multi(ctx, maxdrawcount, stride,
1281 if (!valid_draw_indirect(ctx, mode, (void *)indirect, size,
1286 ctx, "glMultiDrawArraysIndirectCountARB", drawcount);
1290 _mesa_validate_MultiDrawElementsIndirectCount(struct gl_context *ctx,
1300 FLUSH_CURRENT(ctx, 0);
1305 if (!valid_draw_indirect_multi(ctx, maxdrawcount, stride,
1314 if (!valid_draw_indirect_elements(ctx, mode, type,
1320 ctx, "glMultiDrawElementsIndirectCountARB", drawcount);
1324 check_valid_to_compute(struct gl_context *ctx, const char *function)
1328 if (!_mesa_has_compute_shaders(ctx)) {
1329 _mesa_error(ctx, GL_INVALID_OPERATION,
1340 prog = ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
1342 _mesa_error(ctx, GL_INVALID_OPERATION,
1352 _mesa_validate_DispatchCompute(struct gl_context *ctx,
1357 FLUSH_CURRENT(ctx, 0);
1359 if (!check_valid_to_compute(ctx, "glDispatchCompute"))
1381 if (num_groups[i] > ctx->Const.MaxComputeWorkGroupCount[i]) {
1382 _mesa_error(ctx, GL_INVALID_VALUE,
1393 prog = ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
1395 _mesa_error(ctx, GL_INVALID_OPERATION,
1404 _mesa_validate_DispatchComputeGroupSizeARB(struct gl_context *ctx,
1412 FLUSH_CURRENT(ctx, 0);
1414 if (!check_valid_to_compute(ctx, "glDispatchComputeGroupSizeARB"))
1423 prog = ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
1425 _mesa_error(ctx, GL_INVALID_OPERATION,
1438 if (num_groups[i] > ctx->Const.MaxComputeWorkGroupCount[i]) {
1439 _mesa_error(ctx, GL_INVALID_VALUE,
1457 group_size[i] > ctx->Const.MaxComputeVariableGroupSize[i]) {
1458 _mesa_error(ctx, GL_INVALID_VALUE,
1474 if (total_invocations > ctx->Const.MaxComputeVariableGroupInvocations) {
1475 _mesa_error(ctx, GL_INVALID_VALUE,
1479 ctx->Const.MaxComputeVariableGroupInvocations);
1487 valid_dispatch_indirect(struct gl_context *ctx,
1494 if (!check_valid_to_compute(ctx, name))
1503 _mesa_error(ctx, GL_INVALID_VALUE,
1509 _mesa_error(ctx, GL_INVALID_VALUE,
1520 if (!_mesa_is_bufferobj(ctx->DispatchIndirectBuffer)) {
1521 _mesa_error(ctx, GL_INVALID_OPERATION,
1526 if (_mesa_check_disallowed_mapping(ctx->DispatchIndirectBuffer)) {
1527 _mesa_error(ctx, GL_INVALID_OPERATION,
1532 if (ctx->DispatchIndirectBuffer->Size < end) {
1533 _mesa_error(ctx, GL_INVALID_OPERATION,
1543 prog = ctx->_Shader->CurrentProgram[MESA_SHADER_COMPUTE];
1545 _mesa_error(ctx, GL_INVALID_OPERATION,
1554 _mesa_validate_DispatchComputeIndirect(struct gl_context *ctx,
1557 FLUSH_CURRENT(ctx, 0);
1559 return valid_dispatch_indirect(ctx, indirect, 3 * sizeof(GLuint),