1/* 2 * Copyright © 2010 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24/** 25 * \file linker.cpp 26 * GLSL linker implementation 27 * 28 * Given a set of shaders that are to be linked to generate a final program, 29 * there are three distinct stages. 30 * 31 * In the first stage shaders are partitioned into groups based on the shader 32 * type. All shaders of a particular type (e.g., vertex shaders) are linked 33 * together. 34 * 35 * - Undefined references in each shader are resolve to definitions in 36 * another shader. 37 * - Types and qualifiers of uniforms, outputs, and global variables defined 38 * in multiple shaders with the same name are verified to be the same. 39 * - Initializers for uniforms and global variables defined 40 * in multiple shaders with the same name are verified to be the same. 41 * 42 * The result, in the terminology of the GLSL spec, is a set of shader 43 * executables for each processing unit. 44 * 45 * After the first stage is complete, a series of semantic checks are performed 46 * on each of the shader executables. 47 * 48 * - Each shader executable must define a \c main function. 49 * - Each vertex shader executable must write to \c gl_Position. 50 * - Each fragment shader executable must write to either \c gl_FragData or 51 * \c gl_FragColor. 52 * 53 * In the final stage individual shader executables are linked to create a 54 * complete exectuable. 55 * 56 * - Types of uniforms defined in multiple shader stages with the same name 57 * are verified to be the same. 58 * - Initializers for uniforms defined in multiple shader stages with the 59 * same name are verified to be the same. 60 * - Types and qualifiers of outputs defined in one stage are verified to 61 * be the same as the types and qualifiers of inputs defined with the same 62 * name in a later stage. 63 * 64 * \author Ian Romanick <ian.d.romanick@intel.com> 65 */ 66 67#include <ctype.h> 68#include "util/strndup.h" 69#include "glsl_symbol_table.h" 70#include "glsl_parser_extras.h" 71#include "ir.h" 72#include "program.h" 73#include "program/prog_instruction.h" 74#include "program/program.h" 75#include "util/mesa-sha1.h" 76#include "util/set.h" 77#include "string_to_uint_map.h" 78#include "linker.h" 79#include "linker_util.h" 80#include "link_varyings.h" 81#include "ir_optimization.h" 82#include "ir_rvalue_visitor.h" 83#include "ir_uniform.h" 84#include "builtin_functions.h" 85#include "shader_cache.h" 86#include "util/u_string.h" 87#include "util/u_math.h" 88 89 90#include "main/shaderobj.h" 91#include "main/enums.h" 92#include "main/mtypes.h" 93 94 95namespace { 96 97struct find_variable { 98 const char *name; 99 bool found; 100 101 find_variable(const char *name) : name(name), found(false) {} 102}; 103 104/** 105 * Visitor that determines whether or not a variable is ever written. 106 * 107 * Use \ref find_assignments for convenience. 108 */ 109class find_assignment_visitor : public ir_hierarchical_visitor { 110public: 111 find_assignment_visitor(unsigned num_vars, 112 find_variable * const *vars) 113 : num_variables(num_vars), num_found(0), variables(vars) 114 { 115 } 116 117 virtual ir_visitor_status visit_enter(ir_assignment *ir) 118 { 119 ir_variable *const var = ir->lhs->variable_referenced(); 120 121 return check_variable_name(var->name); 122 } 123 124 virtual ir_visitor_status visit_enter(ir_call *ir) 125 { 126 foreach_two_lists(formal_node, &ir->callee->parameters, 127 actual_node, &ir->actual_parameters) { 128 ir_rvalue *param_rval = (ir_rvalue *) actual_node; 129 ir_variable *sig_param = (ir_variable *) formal_node; 130 131 if (sig_param->data.mode == ir_var_function_out || 132 sig_param->data.mode == ir_var_function_inout) { 133 ir_variable *var = param_rval->variable_referenced(); 134 if (var && check_variable_name(var->name) == visit_stop) 135 return visit_stop; 136 } 137 } 138 139 if (ir->return_deref != NULL) { 140 ir_variable *const var = ir->return_deref->variable_referenced(); 141 142 if (check_variable_name(var->name) == visit_stop) 143 return visit_stop; 144 } 145 146 return visit_continue_with_parent; 147 } 148 149private: 150 ir_visitor_status check_variable_name(const char *name) 151 { 152 for (unsigned i = 0; i < num_variables; ++i) { 153 if (strcmp(variables[i]->name, name) == 0) { 154 if (!variables[i]->found) { 155 variables[i]->found = true; 156 157 assert(num_found < num_variables); 158 if (++num_found == num_variables) 159 return visit_stop; 160 } 161 break; 162 } 163 } 164 165 return visit_continue_with_parent; 166 } 167 168private: 169 unsigned num_variables; /**< Number of variables to find */ 170 unsigned num_found; /**< Number of variables already found */ 171 find_variable * const *variables; /**< Variables to find */ 172}; 173 174/** 175 * Determine whether or not any of NULL-terminated list of variables is ever 176 * written to. 177 */ 178static void 179find_assignments(exec_list *ir, find_variable * const *vars) 180{ 181 unsigned num_variables = 0; 182 183 for (find_variable * const *v = vars; *v; ++v) 184 num_variables++; 185 186 find_assignment_visitor visitor(num_variables, vars); 187 visitor.run(ir); 188} 189 190/** 191 * Determine whether or not the given variable is ever written to. 192 */ 193static void 194find_assignments(exec_list *ir, find_variable *var) 195{ 196 find_assignment_visitor visitor(1, &var); 197 visitor.run(ir); 198} 199 200/** 201 * Visitor that determines whether or not a variable is ever read. 202 */ 203class find_deref_visitor : public ir_hierarchical_visitor { 204public: 205 find_deref_visitor(const char *name) 206 : name(name), found(false) 207 { 208 /* empty */ 209 } 210 211 virtual ir_visitor_status visit(ir_dereference_variable *ir) 212 { 213 if (strcmp(this->name, ir->var->name) == 0) { 214 this->found = true; 215 return visit_stop; 216 } 217 218 return visit_continue; 219 } 220 221 bool variable_found() const 222 { 223 return this->found; 224 } 225 226private: 227 const char *name; /**< Find writes to a variable with this name. */ 228 bool found; /**< Was a write to the variable found? */ 229}; 230 231 232/** 233 * A visitor helper that provides methods for updating the types of 234 * ir_dereferences. Classes that update variable types (say, updating 235 * array sizes) will want to use this so that dereference types stay in sync. 236 */ 237class deref_type_updater : public ir_hierarchical_visitor { 238public: 239 virtual ir_visitor_status visit(ir_dereference_variable *ir) 240 { 241 ir->type = ir->var->type; 242 return visit_continue; 243 } 244 245 virtual ir_visitor_status visit_leave(ir_dereference_array *ir) 246 { 247 const glsl_type *const vt = ir->array->type; 248 if (vt->is_array()) 249 ir->type = vt->fields.array; 250 return visit_continue; 251 } 252 253 virtual ir_visitor_status visit_leave(ir_dereference_record *ir) 254 { 255 ir->type = ir->record->type->fields.structure[ir->field_idx].type; 256 return visit_continue; 257 } 258}; 259 260 261class array_resize_visitor : public deref_type_updater { 262public: 263 using deref_type_updater::visit; 264 265 unsigned num_vertices; 266 gl_shader_program *prog; 267 gl_shader_stage stage; 268 269 array_resize_visitor(unsigned num_vertices, 270 gl_shader_program *prog, 271 gl_shader_stage stage) 272 { 273 this->num_vertices = num_vertices; 274 this->prog = prog; 275 this->stage = stage; 276 } 277 278 virtual ~array_resize_visitor() 279 { 280 /* empty */ 281 } 282 283 virtual ir_visitor_status visit(ir_variable *var) 284 { 285 if (!var->type->is_array() || var->data.mode != ir_var_shader_in || 286 var->data.patch) 287 return visit_continue; 288 289 unsigned size = var->type->length; 290 291 if (stage == MESA_SHADER_GEOMETRY) { 292 /* Generate a link error if the shader has declared this array with 293 * an incorrect size. 294 */ 295 if (!var->data.implicit_sized_array && 296 size && size != this->num_vertices) { 297 linker_error(this->prog, "size of array %s declared as %u, " 298 "but number of input vertices is %u\n", 299 var->name, size, this->num_vertices); 300 return visit_continue; 301 } 302 303 /* Generate a link error if the shader attempts to access an input 304 * array using an index too large for its actual size assigned at 305 * link time. 306 */ 307 if (var->data.max_array_access >= (int)this->num_vertices) { 308 linker_error(this->prog, "%s shader accesses element %i of " 309 "%s, but only %i input vertices\n", 310 _mesa_shader_stage_to_string(this->stage), 311 var->data.max_array_access, var->name, this->num_vertices); 312 return visit_continue; 313 } 314 } 315 316 var->type = glsl_type::get_array_instance(var->type->fields.array, 317 this->num_vertices); 318 var->data.max_array_access = this->num_vertices - 1; 319 320 return visit_continue; 321 } 322}; 323 324class array_length_to_const_visitor : public ir_rvalue_visitor { 325public: 326 array_length_to_const_visitor() 327 { 328 this->progress = false; 329 } 330 331 virtual ~array_length_to_const_visitor() 332 { 333 /* empty */ 334 } 335 336 bool progress; 337 338 virtual void handle_rvalue(ir_rvalue **rvalue) 339 { 340 if (*rvalue == NULL || (*rvalue)->ir_type != ir_type_expression) 341 return; 342 343 ir_expression *expr = (*rvalue)->as_expression(); 344 if (expr) { 345 if (expr->operation == ir_unop_implicitly_sized_array_length) { 346 assert(!expr->operands[0]->type->is_unsized_array()); 347 ir_constant *constant = new(expr) 348 ir_constant(expr->operands[0]->type->array_size()); 349 if (constant) { 350 *rvalue = constant; 351 } 352 } 353 } 354 } 355}; 356 357/** 358 * Visitor that determines the highest stream id to which a (geometry) shader 359 * emits vertices. It also checks whether End{Stream}Primitive is ever called. 360 */ 361class find_emit_vertex_visitor : public ir_hierarchical_visitor { 362public: 363 find_emit_vertex_visitor(int max_allowed) 364 : max_stream_allowed(max_allowed), 365 invalid_stream_id(0), 366 invalid_stream_id_from_emit_vertex(false), 367 end_primitive_found(false), 368 used_streams(0) 369 { 370 /* empty */ 371 } 372 373 virtual ir_visitor_status visit_leave(ir_emit_vertex *ir) 374 { 375 int stream_id = ir->stream_id(); 376 377 if (stream_id < 0) { 378 invalid_stream_id = stream_id; 379 invalid_stream_id_from_emit_vertex = true; 380 return visit_stop; 381 } 382 383 if (stream_id > max_stream_allowed) { 384 invalid_stream_id = stream_id; 385 invalid_stream_id_from_emit_vertex = true; 386 return visit_stop; 387 } 388 389 used_streams |= 1 << stream_id; 390 391 return visit_continue; 392 } 393 394 virtual ir_visitor_status visit_leave(ir_end_primitive *ir) 395 { 396 end_primitive_found = true; 397 398 int stream_id = ir->stream_id(); 399 400 if (stream_id < 0) { 401 invalid_stream_id = stream_id; 402 invalid_stream_id_from_emit_vertex = false; 403 return visit_stop; 404 } 405 406 if (stream_id > max_stream_allowed) { 407 invalid_stream_id = stream_id; 408 invalid_stream_id_from_emit_vertex = false; 409 return visit_stop; 410 } 411 412 used_streams |= 1 << stream_id; 413 414 return visit_continue; 415 } 416 417 bool error() 418 { 419 return invalid_stream_id != 0; 420 } 421 422 const char *error_func() 423 { 424 return invalid_stream_id_from_emit_vertex ? 425 "EmitStreamVertex" : "EndStreamPrimitive"; 426 } 427 428 int error_stream() 429 { 430 return invalid_stream_id; 431 } 432 433 unsigned active_stream_mask() 434 { 435 return used_streams; 436 } 437 438 bool uses_end_primitive() 439 { 440 return end_primitive_found; 441 } 442 443private: 444 int max_stream_allowed; 445 int invalid_stream_id; 446 bool invalid_stream_id_from_emit_vertex; 447 bool end_primitive_found; 448 unsigned used_streams; 449}; 450 451/* Class that finds array derefs and check if indexes are dynamic. */ 452class dynamic_sampler_array_indexing_visitor : public ir_hierarchical_visitor 453{ 454public: 455 dynamic_sampler_array_indexing_visitor() : 456 dynamic_sampler_array_indexing(false) 457 { 458 } 459 460 ir_visitor_status visit_enter(ir_dereference_array *ir) 461 { 462 if (!ir->variable_referenced()) 463 return visit_continue; 464 465 if (!ir->variable_referenced()->type->contains_sampler()) 466 return visit_continue; 467 468 if (!ir->array_index->constant_expression_value(ralloc_parent(ir))) { 469 dynamic_sampler_array_indexing = true; 470 return visit_stop; 471 } 472 return visit_continue; 473 } 474 475 bool uses_dynamic_sampler_array_indexing() 476 { 477 return dynamic_sampler_array_indexing; 478 } 479 480private: 481 bool dynamic_sampler_array_indexing; 482}; 483 484} /* anonymous namespace */ 485 486void 487linker_error(gl_shader_program *prog, const char *fmt, ...) 488{ 489 va_list ap; 490 491 ralloc_strcat(&prog->data->InfoLog, "error: "); 492 va_start(ap, fmt); 493 ralloc_vasprintf_append(&prog->data->InfoLog, fmt, ap); 494 va_end(ap); 495 496 prog->data->LinkStatus = LINKING_FAILURE; 497} 498 499 500void 501linker_warning(gl_shader_program *prog, const char *fmt, ...) 502{ 503 va_list ap; 504 505 ralloc_strcat(&prog->data->InfoLog, "warning: "); 506 va_start(ap, fmt); 507 ralloc_vasprintf_append(&prog->data->InfoLog, fmt, ap); 508 va_end(ap); 509 510} 511 512 513/** 514 * Given a string identifying a program resource, break it into a base name 515 * and an optional array index in square brackets. 516 * 517 * If an array index is present, \c out_base_name_end is set to point to the 518 * "[" that precedes the array index, and the array index itself is returned 519 * as a long. 520 * 521 * If no array index is present (or if the array index is negative or 522 * mal-formed), \c out_base_name_end, is set to point to the null terminator 523 * at the end of the input string, and -1 is returned. 524 * 525 * Only the final array index is parsed; if the string contains other array 526 * indices (or structure field accesses), they are left in the base name. 527 * 528 * No attempt is made to check that the base name is properly formed; 529 * typically the caller will look up the base name in a hash table, so 530 * ill-formed base names simply turn into hash table lookup failures. 531 */ 532long 533parse_program_resource_name(const GLchar *name, 534 const size_t len, 535 const GLchar **out_base_name_end) 536{ 537 /* Section 7.3.1 ("Program Interfaces") of the OpenGL 4.3 spec says: 538 * 539 * "When an integer array element or block instance number is part of 540 * the name string, it will be specified in decimal form without a "+" 541 * or "-" sign or any extra leading zeroes. Additionally, the name 542 * string will not include white space anywhere in the string." 543 */ 544 545 *out_base_name_end = name + len; 546 547 if (len == 0 || name[len-1] != ']') 548 return -1; 549 550 /* Walk backwards over the string looking for a non-digit character. This 551 * had better be the opening bracket for an array index. 552 * 553 * Initially, i specifies the location of the ']'. Since the string may 554 * contain only the ']' charcater, walk backwards very carefully. 555 */ 556 unsigned i; 557 for (i = len - 1; (i > 0) && isdigit(name[i-1]); --i) 558 /* empty */ ; 559 560 if ((i == 0) || name[i-1] != '[') 561 return -1; 562 563 long array_index = strtol(&name[i], NULL, 10); 564 if (array_index < 0) 565 return -1; 566 567 /* Check for leading zero */ 568 if (name[i] == '0' && name[i+1] != ']') 569 return -1; 570 571 *out_base_name_end = name + (i - 1); 572 return array_index; 573} 574 575 576void 577link_invalidate_variable_locations(exec_list *ir) 578{ 579 foreach_in_list(ir_instruction, node, ir) { 580 ir_variable *const var = node->as_variable(); 581 582 if (var == NULL) 583 continue; 584 585 /* Only assign locations for variables that lack an explicit location. 586 * Explicit locations are set for all built-in variables, generic vertex 587 * shader inputs (via layout(location=...)), and generic fragment shader 588 * outputs (also via layout(location=...)). 589 */ 590 if (!var->data.explicit_location) { 591 var->data.location = -1; 592 var->data.location_frac = 0; 593 } 594 595 /* ir_variable::is_unmatched_generic_inout is used by the linker while 596 * connecting outputs from one stage to inputs of the next stage. 597 */ 598 if (var->data.explicit_location && 599 var->data.location < VARYING_SLOT_VAR0) { 600 var->data.is_unmatched_generic_inout = 0; 601 } else { 602 var->data.is_unmatched_generic_inout = 1; 603 } 604 } 605} 606 607 608/** 609 * Set clip_distance_array_size based and cull_distance_array_size on the given 610 * shader. 611 * 612 * Also check for errors based on incorrect usage of gl_ClipVertex and 613 * gl_ClipDistance and gl_CullDistance. 614 * Additionally test whether the arrays gl_ClipDistance and gl_CullDistance 615 * exceed the maximum size defined by gl_MaxCombinedClipAndCullDistances. 616 * 617 * Return false if an error was reported. 618 */ 619static void 620analyze_clip_cull_usage(struct gl_shader_program *prog, 621 struct gl_linked_shader *shader, 622 struct gl_context *ctx, 623 struct shader_info *info) 624{ 625 info->clip_distance_array_size = 0; 626 info->cull_distance_array_size = 0; 627 628 if (prog->data->Version >= (prog->IsES ? 300 : 130)) { 629 /* From section 7.1 (Vertex Shader Special Variables) of the 630 * GLSL 1.30 spec: 631 * 632 * "It is an error for a shader to statically write both 633 * gl_ClipVertex and gl_ClipDistance." 634 * 635 * This does not apply to GLSL ES shaders, since GLSL ES defines neither 636 * gl_ClipVertex nor gl_ClipDistance. However with 637 * GL_EXT_clip_cull_distance, this functionality is exposed in ES 3.0. 638 */ 639 find_variable gl_ClipDistance("gl_ClipDistance"); 640 find_variable gl_CullDistance("gl_CullDistance"); 641 find_variable gl_ClipVertex("gl_ClipVertex"); 642 find_variable * const variables[] = { 643 &gl_ClipDistance, 644 &gl_CullDistance, 645 !prog->IsES ? &gl_ClipVertex : NULL, 646 NULL 647 }; 648 find_assignments(shader->ir, variables); 649 650 /* From the ARB_cull_distance spec: 651 * 652 * It is a compile-time or link-time error for the set of shaders forming 653 * a program to statically read or write both gl_ClipVertex and either 654 * gl_ClipDistance or gl_CullDistance. 655 * 656 * This does not apply to GLSL ES shaders, since GLSL ES doesn't define 657 * gl_ClipVertex. 658 */ 659 if (!prog->IsES) { 660 if (gl_ClipVertex.found && gl_ClipDistance.found) { 661 linker_error(prog, "%s shader writes to both `gl_ClipVertex' " 662 "and `gl_ClipDistance'\n", 663 _mesa_shader_stage_to_string(shader->Stage)); 664 return; 665 } 666 if (gl_ClipVertex.found && gl_CullDistance.found) { 667 linker_error(prog, "%s shader writes to both `gl_ClipVertex' " 668 "and `gl_CullDistance'\n", 669 _mesa_shader_stage_to_string(shader->Stage)); 670 return; 671 } 672 } 673 674 if (gl_ClipDistance.found) { 675 ir_variable *clip_distance_var = 676 shader->symbols->get_variable("gl_ClipDistance"); 677 assert(clip_distance_var); 678 info->clip_distance_array_size = clip_distance_var->type->length; 679 } 680 if (gl_CullDistance.found) { 681 ir_variable *cull_distance_var = 682 shader->symbols->get_variable("gl_CullDistance"); 683 assert(cull_distance_var); 684 info->cull_distance_array_size = cull_distance_var->type->length; 685 } 686 /* From the ARB_cull_distance spec: 687 * 688 * It is a compile-time or link-time error for the set of shaders forming 689 * a program to have the sum of the sizes of the gl_ClipDistance and 690 * gl_CullDistance arrays to be larger than 691 * gl_MaxCombinedClipAndCullDistances. 692 */ 693 if ((uint32_t)(info->clip_distance_array_size + info->cull_distance_array_size) > 694 ctx->Const.MaxClipPlanes) { 695 linker_error(prog, "%s shader: the combined size of " 696 "'gl_ClipDistance' and 'gl_CullDistance' size cannot " 697 "be larger than " 698 "gl_MaxCombinedClipAndCullDistances (%u)", 699 _mesa_shader_stage_to_string(shader->Stage), 700 ctx->Const.MaxClipPlanes); 701 } 702 } 703} 704 705 706/** 707 * Verify that a vertex shader executable meets all semantic requirements. 708 * 709 * Also sets info.clip_distance_array_size and 710 * info.cull_distance_array_size as a side effect. 711 * 712 * \param shader Vertex shader executable to be verified 713 */ 714static void 715validate_vertex_shader_executable(struct gl_shader_program *prog, 716 struct gl_linked_shader *shader, 717 struct gl_context *ctx) 718{ 719 if (shader == NULL) 720 return; 721 722 /* From the GLSL 1.10 spec, page 48: 723 * 724 * "The variable gl_Position is available only in the vertex 725 * language and is intended for writing the homogeneous vertex 726 * position. All executions of a well-formed vertex shader 727 * executable must write a value into this variable. [...] The 728 * variable gl_Position is available only in the vertex 729 * language and is intended for writing the homogeneous vertex 730 * position. All executions of a well-formed vertex shader 731 * executable must write a value into this variable." 732 * 733 * while in GLSL 1.40 this text is changed to: 734 * 735 * "The variable gl_Position is available only in the vertex 736 * language and is intended for writing the homogeneous vertex 737 * position. It can be written at any time during shader 738 * execution. It may also be read back by a vertex shader 739 * after being written. This value will be used by primitive 740 * assembly, clipping, culling, and other fixed functionality 741 * operations, if present, that operate on primitives after 742 * vertex processing has occurred. Its value is undefined if 743 * the vertex shader executable does not write gl_Position." 744 * 745 * All GLSL ES Versions are similar to GLSL 1.40--failing to write to 746 * gl_Position is not an error. 747 */ 748 if (prog->data->Version < (prog->IsES ? 300 : 140)) { 749 find_variable gl_Position("gl_Position"); 750 find_assignments(shader->ir, &gl_Position); 751 if (!gl_Position.found) { 752 if (prog->IsES) { 753 linker_warning(prog, 754 "vertex shader does not write to `gl_Position'. " 755 "Its value is undefined. \n"); 756 } else { 757 linker_error(prog, 758 "vertex shader does not write to `gl_Position'. \n"); 759 } 760 return; 761 } 762 } 763 764 analyze_clip_cull_usage(prog, shader, ctx, &shader->Program->info); 765} 766 767static void 768validate_tess_eval_shader_executable(struct gl_shader_program *prog, 769 struct gl_linked_shader *shader, 770 struct gl_context *ctx) 771{ 772 if (shader == NULL) 773 return; 774 775 analyze_clip_cull_usage(prog, shader, ctx, &shader->Program->info); 776} 777 778 779/** 780 * Verify that a fragment shader executable meets all semantic requirements 781 * 782 * \param shader Fragment shader executable to be verified 783 */ 784static void 785validate_fragment_shader_executable(struct gl_shader_program *prog, 786 struct gl_linked_shader *shader) 787{ 788 if (shader == NULL) 789 return; 790 791 find_variable gl_FragColor("gl_FragColor"); 792 find_variable gl_FragData("gl_FragData"); 793 find_variable * const variables[] = { &gl_FragColor, &gl_FragData, NULL }; 794 find_assignments(shader->ir, variables); 795 796 if (gl_FragColor.found && gl_FragData.found) { 797 linker_error(prog, "fragment shader writes to both " 798 "`gl_FragColor' and `gl_FragData'\n"); 799 } 800} 801 802/** 803 * Verify that a geometry shader executable meets all semantic requirements 804 * 805 * Also sets prog->Geom.VerticesIn, and info.clip_distance_array_sizeand 806 * info.cull_distance_array_size as a side effect. 807 * 808 * \param shader Geometry shader executable to be verified 809 */ 810static void 811validate_geometry_shader_executable(struct gl_shader_program *prog, 812 struct gl_linked_shader *shader, 813 struct gl_context *ctx) 814{ 815 if (shader == NULL) 816 return; 817 818 unsigned num_vertices = 819 vertices_per_prim(shader->Program->info.gs.input_primitive); 820 prog->Geom.VerticesIn = num_vertices; 821 822 analyze_clip_cull_usage(prog, shader, ctx, &shader->Program->info); 823} 824 825/** 826 * Check if geometry shaders emit to non-zero streams and do corresponding 827 * validations. 828 */ 829static void 830validate_geometry_shader_emissions(struct gl_context *ctx, 831 struct gl_shader_program *prog) 832{ 833 struct gl_linked_shader *sh = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]; 834 835 if (sh != NULL) { 836 find_emit_vertex_visitor emit_vertex(ctx->Const.MaxVertexStreams - 1); 837 emit_vertex.run(sh->ir); 838 if (emit_vertex.error()) { 839 linker_error(prog, "Invalid call %s(%d). Accepted values for the " 840 "stream parameter are in the range [0, %d].\n", 841 emit_vertex.error_func(), 842 emit_vertex.error_stream(), 843 ctx->Const.MaxVertexStreams - 1); 844 } 845 prog->Geom.ActiveStreamMask = emit_vertex.active_stream_mask(); 846 prog->Geom.UsesEndPrimitive = emit_vertex.uses_end_primitive(); 847 848 /* From the ARB_gpu_shader5 spec: 849 * 850 * "Multiple vertex streams are supported only if the output primitive 851 * type is declared to be "points". A program will fail to link if it 852 * contains a geometry shader calling EmitStreamVertex() or 853 * EndStreamPrimitive() if its output primitive type is not "points". 854 * 855 * However, in the same spec: 856 * 857 * "The function EmitVertex() is equivalent to calling EmitStreamVertex() 858 * with <stream> set to zero." 859 * 860 * And: 861 * 862 * "The function EndPrimitive() is equivalent to calling 863 * EndStreamPrimitive() with <stream> set to zero." 864 * 865 * Since we can call EmitVertex() and EndPrimitive() when we output 866 * primitives other than points, calling EmitStreamVertex(0) or 867 * EmitEndPrimitive(0) should not produce errors. This it also what Nvidia 868 * does. We can use prog->Geom.ActiveStreamMask to check whether only the 869 * first (zero) stream is active. 870 * stream. 871 */ 872 if (prog->Geom.ActiveStreamMask & ~(1 << 0) && 873 sh->Program->info.gs.output_primitive != GL_POINTS) { 874 linker_error(prog, "EmitStreamVertex(n) and EndStreamPrimitive(n) " 875 "with n>0 requires point output\n"); 876 } 877 } 878} 879 880bool 881validate_intrastage_arrays(struct gl_shader_program *prog, 882 ir_variable *const var, 883 ir_variable *const existing, 884 bool match_precision) 885{ 886 /* Consider the types to be "the same" if both types are arrays 887 * of the same type and one of the arrays is implicitly sized. 888 * In addition, set the type of the linked variable to the 889 * explicitly sized array. 890 */ 891 if (var->type->is_array() && existing->type->is_array()) { 892 const glsl_type *no_array_var = var->type->fields.array; 893 const glsl_type *no_array_existing = existing->type->fields.array; 894 bool type_matches; 895 896 type_matches = (match_precision ? 897 no_array_var == no_array_existing : 898 no_array_var->compare_no_precision(no_array_existing)); 899 900 if (type_matches && 901 ((var->type->length == 0)|| (existing->type->length == 0))) { 902 if (var->type->length != 0) { 903 if ((int)var->type->length <= existing->data.max_array_access) { 904 linker_error(prog, "%s `%s' declared as type " 905 "`%s' but outermost dimension has an index" 906 " of `%i'\n", 907 mode_string(var), 908 var->name, var->type->name, 909 existing->data.max_array_access); 910 } 911 existing->type = var->type; 912 return true; 913 } else if (existing->type->length != 0) { 914 if((int)existing->type->length <= var->data.max_array_access && 915 !existing->data.from_ssbo_unsized_array) { 916 linker_error(prog, "%s `%s' declared as type " 917 "`%s' but outermost dimension has an index" 918 " of `%i'\n", 919 mode_string(var), 920 var->name, existing->type->name, 921 var->data.max_array_access); 922 } 923 return true; 924 } 925 } 926 } 927 return false; 928} 929 930 931/** 932 * Perform validation of global variables used across multiple shaders 933 */ 934static void 935cross_validate_globals(struct gl_context *ctx, struct gl_shader_program *prog, 936 struct exec_list *ir, glsl_symbol_table *variables, 937 bool uniforms_only) 938{ 939 foreach_in_list(ir_instruction, node, ir) { 940 ir_variable *const var = node->as_variable(); 941 942 if (var == NULL) 943 continue; 944 945 if (uniforms_only && (var->data.mode != ir_var_uniform && var->data.mode != ir_var_shader_storage)) 946 continue; 947 948 /* don't cross validate subroutine uniforms */ 949 if (var->type->contains_subroutine()) 950 continue; 951 952 /* Don't cross validate interface instances. These are only relevant 953 * inside a shader. The cross validation is done at the Interface Block 954 * name level. 955 */ 956 if (var->is_interface_instance()) 957 continue; 958 959 /* Don't cross validate temporaries that are at global scope. These 960 * will eventually get pulled into the shaders 'main'. 961 */ 962 if (var->data.mode == ir_var_temporary) 963 continue; 964 965 /* If a global with this name has already been seen, verify that the 966 * new instance has the same type. In addition, if the globals have 967 * initializers, the values of the initializers must be the same. 968 */ 969 ir_variable *const existing = variables->get_variable(var->name); 970 if (existing != NULL) { 971 /* Check if types match. */ 972 if (var->type != existing->type) { 973 if (!validate_intrastage_arrays(prog, var, existing)) { 974 /* If it is an unsized array in a Shader Storage Block, 975 * two different shaders can access to different elements. 976 * Because of that, they might be converted to different 977 * sized arrays, then check that they are compatible but 978 * ignore the array size. 979 */ 980 if (!(var->data.mode == ir_var_shader_storage && 981 var->data.from_ssbo_unsized_array && 982 existing->data.mode == ir_var_shader_storage && 983 existing->data.from_ssbo_unsized_array && 984 var->type->gl_type == existing->type->gl_type)) { 985 linker_error(prog, "%s `%s' declared as type " 986 "`%s' and type `%s'\n", 987 mode_string(var), 988 var->name, var->type->name, 989 existing->type->name); 990 return; 991 } 992 } 993 } 994 995 if (var->data.explicit_location) { 996 if (existing->data.explicit_location 997 && (var->data.location != existing->data.location)) { 998 linker_error(prog, "explicit locations for %s " 999 "`%s' have differing values\n", 1000 mode_string(var), var->name); 1001 return; 1002 } 1003 1004 if (var->data.location_frac != existing->data.location_frac) { 1005 linker_error(prog, "explicit components for %s `%s' have " 1006 "differing values\n", mode_string(var), var->name); 1007 return; 1008 } 1009 1010 existing->data.location = var->data.location; 1011 existing->data.explicit_location = true; 1012 } else { 1013 /* Check if uniform with implicit location was marked explicit 1014 * by earlier shader stage. If so, mark it explicit in this stage 1015 * too to make sure later processing does not treat it as 1016 * implicit one. 1017 */ 1018 if (existing->data.explicit_location) { 1019 var->data.location = existing->data.location; 1020 var->data.explicit_location = true; 1021 } 1022 } 1023 1024 /* From the GLSL 4.20 specification: 1025 * "A link error will result if two compilation units in a program 1026 * specify different integer-constant bindings for the same 1027 * opaque-uniform name. However, it is not an error to specify a 1028 * binding on some but not all declarations for the same name" 1029 */ 1030 if (var->data.explicit_binding) { 1031 if (existing->data.explicit_binding && 1032 var->data.binding != existing->data.binding) { 1033 linker_error(prog, "explicit bindings for %s " 1034 "`%s' have differing values\n", 1035 mode_string(var), var->name); 1036 return; 1037 } 1038 1039 existing->data.binding = var->data.binding; 1040 existing->data.explicit_binding = true; 1041 } 1042 1043 if (var->type->contains_atomic() && 1044 var->data.offset != existing->data.offset) { 1045 linker_error(prog, "offset specifications for %s " 1046 "`%s' have differing values\n", 1047 mode_string(var), var->name); 1048 return; 1049 } 1050 1051 /* Validate layout qualifiers for gl_FragDepth. 1052 * 1053 * From the AMD/ARB_conservative_depth specs: 1054 * 1055 * "If gl_FragDepth is redeclared in any fragment shader in a 1056 * program, it must be redeclared in all fragment shaders in 1057 * that program that have static assignments to 1058 * gl_FragDepth. All redeclarations of gl_FragDepth in all 1059 * fragment shaders in a single program must have the same set 1060 * of qualifiers." 1061 */ 1062 if (strcmp(var->name, "gl_FragDepth") == 0) { 1063 bool layout_declared = var->data.depth_layout != ir_depth_layout_none; 1064 bool layout_differs = 1065 var->data.depth_layout != existing->data.depth_layout; 1066 1067 if (layout_declared && layout_differs) { 1068 linker_error(prog, 1069 "All redeclarations of gl_FragDepth in all " 1070 "fragment shaders in a single program must have " 1071 "the same set of qualifiers.\n"); 1072 } 1073 1074 if (var->data.used && layout_differs) { 1075 linker_error(prog, 1076 "If gl_FragDepth is redeclared with a layout " 1077 "qualifier in any fragment shader, it must be " 1078 "redeclared with the same layout qualifier in " 1079 "all fragment shaders that have assignments to " 1080 "gl_FragDepth\n"); 1081 } 1082 } 1083 1084 /* Page 35 (page 41 of the PDF) of the GLSL 4.20 spec says: 1085 * 1086 * "If a shared global has multiple initializers, the 1087 * initializers must all be constant expressions, and they 1088 * must all have the same value. Otherwise, a link error will 1089 * result. (A shared global having only one initializer does 1090 * not require that initializer to be a constant expression.)" 1091 * 1092 * Previous to 4.20 the GLSL spec simply said that initializers 1093 * must have the same value. In this case of non-constant 1094 * initializers, this was impossible to determine. As a result, 1095 * no vendor actually implemented that behavior. The 4.20 1096 * behavior matches the implemented behavior of at least one other 1097 * vendor, so we'll implement that for all GLSL versions. 1098 * If (at least) one of these constant expressions is implicit, 1099 * because it was added by glsl_zero_init, we skip the verification. 1100 */ 1101 if (var->constant_initializer != NULL) { 1102 if (existing->constant_initializer != NULL && 1103 !existing->data.is_implicit_initializer && 1104 !var->data.is_implicit_initializer) { 1105 if (!var->constant_initializer->has_value(existing->constant_initializer)) { 1106 linker_error(prog, "initializers for %s " 1107 "`%s' have differing values\n", 1108 mode_string(var), var->name); 1109 return; 1110 } 1111 } else { 1112 /* If the first-seen instance of a particular uniform did 1113 * not have an initializer but a later instance does, 1114 * replace the former with the later. 1115 */ 1116 if (!var->data.is_implicit_initializer) 1117 variables->replace_variable(existing->name, var); 1118 } 1119 } 1120 1121 if (var->data.has_initializer) { 1122 if (existing->data.has_initializer 1123 && (var->constant_initializer == NULL 1124 || existing->constant_initializer == NULL)) { 1125 linker_error(prog, 1126 "shared global variable `%s' has multiple " 1127 "non-constant initializers.\n", 1128 var->name); 1129 return; 1130 } 1131 } 1132 1133 if (existing->data.explicit_invariant != var->data.explicit_invariant) { 1134 linker_error(prog, "declarations for %s `%s' have " 1135 "mismatching invariant qualifiers\n", 1136 mode_string(var), var->name); 1137 return; 1138 } 1139 if (existing->data.centroid != var->data.centroid) { 1140 linker_error(prog, "declarations for %s `%s' have " 1141 "mismatching centroid qualifiers\n", 1142 mode_string(var), var->name); 1143 return; 1144 } 1145 if (existing->data.sample != var->data.sample) { 1146 linker_error(prog, "declarations for %s `%s` have " 1147 "mismatching sample qualifiers\n", 1148 mode_string(var), var->name); 1149 return; 1150 } 1151 if (existing->data.image_format != var->data.image_format) { 1152 linker_error(prog, "declarations for %s `%s` have " 1153 "mismatching image format qualifiers\n", 1154 mode_string(var), var->name); 1155 return; 1156 } 1157 1158 /* Check the precision qualifier matches for uniform variables on 1159 * GLSL ES. 1160 */ 1161 if (!ctx->Const.AllowGLSLRelaxedES && 1162 prog->IsES && !var->get_interface_type() && 1163 existing->data.precision != var->data.precision) { 1164 if ((existing->data.used && var->data.used) || prog->data->Version >= 300) { 1165 linker_error(prog, "declarations for %s `%s` have " 1166 "mismatching precision qualifiers\n", 1167 mode_string(var), var->name); 1168 return; 1169 } else { 1170 linker_warning(prog, "declarations for %s `%s` have " 1171 "mismatching precision qualifiers\n", 1172 mode_string(var), var->name); 1173 } 1174 } 1175 1176 /* In OpenGL GLSL 3.20 spec, section 4.3.9: 1177 * 1178 * "It is a link-time error if any particular shader interface 1179 * contains: 1180 * 1181 * - two different blocks, each having no instance name, and each 1182 * having a member of the same name, or 1183 * 1184 * - a variable outside a block, and a block with no instance name, 1185 * where the variable has the same name as a member in the block." 1186 */ 1187 const glsl_type *var_itype = var->get_interface_type(); 1188 const glsl_type *existing_itype = existing->get_interface_type(); 1189 if (var_itype != existing_itype) { 1190 if (!var_itype || !existing_itype) { 1191 linker_error(prog, "declarations for %s `%s` are inside block " 1192 "`%s` and outside a block", 1193 mode_string(var), var->name, 1194 var_itype ? var_itype->name : existing_itype->name); 1195 return; 1196 } else if (strcmp(var_itype->name, existing_itype->name) != 0) { 1197 linker_error(prog, "declarations for %s `%s` are inside blocks " 1198 "`%s` and `%s`", 1199 mode_string(var), var->name, 1200 existing_itype->name, 1201 var_itype->name); 1202 return; 1203 } 1204 } 1205 } else 1206 variables->add_variable(var); 1207 } 1208} 1209 1210 1211/** 1212 * Perform validation of uniforms used across multiple shader stages 1213 */ 1214static void 1215cross_validate_uniforms(struct gl_context *ctx, 1216 struct gl_shader_program *prog) 1217{ 1218 glsl_symbol_table variables; 1219 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 1220 if (prog->_LinkedShaders[i] == NULL) 1221 continue; 1222 1223 cross_validate_globals(ctx, prog, prog->_LinkedShaders[i]->ir, 1224 &variables, true); 1225 } 1226} 1227 1228/** 1229 * Accumulates the array of buffer blocks and checks that all definitions of 1230 * blocks agree on their contents. 1231 */ 1232static bool 1233interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog, 1234 bool validate_ssbo) 1235{ 1236 int *ifc_blk_stage_idx[MESA_SHADER_STAGES]; 1237 struct gl_uniform_block *blks = NULL; 1238 unsigned *num_blks = validate_ssbo ? &prog->data->NumShaderStorageBlocks : 1239 &prog->data->NumUniformBlocks; 1240 1241 unsigned max_num_buffer_blocks = 0; 1242 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 1243 if (prog->_LinkedShaders[i]) { 1244 if (validate_ssbo) { 1245 max_num_buffer_blocks += 1246 prog->_LinkedShaders[i]->Program->info.num_ssbos; 1247 } else { 1248 max_num_buffer_blocks += 1249 prog->_LinkedShaders[i]->Program->info.num_ubos; 1250 } 1251 } 1252 } 1253 1254 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 1255 struct gl_linked_shader *sh = prog->_LinkedShaders[i]; 1256 1257 ifc_blk_stage_idx[i] = 1258 (int *) malloc(sizeof(int) * max_num_buffer_blocks); 1259 for (unsigned int j = 0; j < max_num_buffer_blocks; j++) 1260 ifc_blk_stage_idx[i][j] = -1; 1261 1262 if (sh == NULL) 1263 continue; 1264 1265 unsigned sh_num_blocks; 1266 struct gl_uniform_block **sh_blks; 1267 if (validate_ssbo) { 1268 sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ssbos; 1269 sh_blks = sh->Program->sh.ShaderStorageBlocks; 1270 } else { 1271 sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ubos; 1272 sh_blks = sh->Program->sh.UniformBlocks; 1273 } 1274 1275 for (unsigned int j = 0; j < sh_num_blocks; j++) { 1276 int index = link_cross_validate_uniform_block(prog->data, &blks, 1277 num_blks, sh_blks[j]); 1278 1279 if (index == -1) { 1280 linker_error(prog, "buffer block `%s' has mismatching " 1281 "definitions\n", sh_blks[j]->Name); 1282 1283 for (unsigned k = 0; k <= i; k++) { 1284 free(ifc_blk_stage_idx[k]); 1285 } 1286 1287 /* Reset the block count. This will help avoid various segfaults 1288 * from api calls that assume the array exists due to the count 1289 * being non-zero. 1290 */ 1291 *num_blks = 0; 1292 return false; 1293 } 1294 1295 ifc_blk_stage_idx[i][index] = j; 1296 } 1297 } 1298 1299 /* Update per stage block pointers to point to the program list. 1300 * FIXME: We should be able to free the per stage blocks here. 1301 */ 1302 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 1303 for (unsigned j = 0; j < *num_blks; j++) { 1304 int stage_index = ifc_blk_stage_idx[i][j]; 1305 1306 if (stage_index != -1) { 1307 struct gl_linked_shader *sh = prog->_LinkedShaders[i]; 1308 1309 struct gl_uniform_block **sh_blks = validate_ssbo ? 1310 sh->Program->sh.ShaderStorageBlocks : 1311 sh->Program->sh.UniformBlocks; 1312 1313 blks[j].stageref |= sh_blks[stage_index]->stageref; 1314 sh_blks[stage_index] = &blks[j]; 1315 } 1316 } 1317 } 1318 1319 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 1320 free(ifc_blk_stage_idx[i]); 1321 } 1322 1323 if (validate_ssbo) 1324 prog->data->ShaderStorageBlocks = blks; 1325 else 1326 prog->data->UniformBlocks = blks; 1327 1328 return true; 1329} 1330 1331/** 1332 * Verifies the invariance of built-in special variables. 1333 */ 1334static bool 1335validate_invariant_builtins(struct gl_shader_program *prog, 1336 const gl_linked_shader *vert, 1337 const gl_linked_shader *frag) 1338{ 1339 const ir_variable *var_vert; 1340 const ir_variable *var_frag; 1341 1342 if (!vert || !frag) 1343 return true; 1344 1345 /* 1346 * From OpenGL ES Shading Language 1.0 specification 1347 * (4.6.4 Invariance and Linkage): 1348 * "The invariance of varyings that are declared in both the vertex and 1349 * fragment shaders must match. For the built-in special variables, 1350 * gl_FragCoord can only be declared invariant if and only if 1351 * gl_Position is declared invariant. Similarly gl_PointCoord can only 1352 * be declared invariant if and only if gl_PointSize is declared 1353 * invariant. It is an error to declare gl_FrontFacing as invariant. 1354 * The invariance of gl_FrontFacing is the same as the invariance of 1355 * gl_Position." 1356 */ 1357 var_frag = frag->symbols->get_variable("gl_FragCoord"); 1358 if (var_frag && var_frag->data.invariant) { 1359 var_vert = vert->symbols->get_variable("gl_Position"); 1360 if (var_vert && !var_vert->data.invariant) { 1361 linker_error(prog, 1362 "fragment shader built-in `%s' has invariant qualifier, " 1363 "but vertex shader built-in `%s' lacks invariant qualifier\n", 1364 var_frag->name, var_vert->name); 1365 return false; 1366 } 1367 } 1368 1369 var_frag = frag->symbols->get_variable("gl_PointCoord"); 1370 if (var_frag && var_frag->data.invariant) { 1371 var_vert = vert->symbols->get_variable("gl_PointSize"); 1372 if (var_vert && !var_vert->data.invariant) { 1373 linker_error(prog, 1374 "fragment shader built-in `%s' has invariant qualifier, " 1375 "but vertex shader built-in `%s' lacks invariant qualifier\n", 1376 var_frag->name, var_vert->name); 1377 return false; 1378 } 1379 } 1380 1381 var_frag = frag->symbols->get_variable("gl_FrontFacing"); 1382 if (var_frag && var_frag->data.invariant) { 1383 linker_error(prog, 1384 "fragment shader built-in `%s' can not be declared as invariant\n", 1385 var_frag->name); 1386 return false; 1387 } 1388 1389 return true; 1390} 1391 1392/** 1393 * Populates a shaders symbol table with all global declarations 1394 */ 1395static void 1396populate_symbol_table(gl_linked_shader *sh, glsl_symbol_table *symbols) 1397{ 1398 sh->symbols = new(sh) glsl_symbol_table; 1399 1400 _mesa_glsl_copy_symbols_from_table(sh->ir, symbols, sh->symbols); 1401} 1402 1403 1404/** 1405 * Remap variables referenced in an instruction tree 1406 * 1407 * This is used when instruction trees are cloned from one shader and placed in 1408 * another. These trees will contain references to \c ir_variable nodes that 1409 * do not exist in the target shader. This function finds these \c ir_variable 1410 * references and replaces the references with matching variables in the target 1411 * shader. 1412 * 1413 * If there is no matching variable in the target shader, a clone of the 1414 * \c ir_variable is made and added to the target shader. The new variable is 1415 * added to \b both the instruction stream and the symbol table. 1416 * 1417 * \param inst IR tree that is to be processed. 1418 * \param symbols Symbol table containing global scope symbols in the 1419 * linked shader. 1420 * \param instructions Instruction stream where new variable declarations 1421 * should be added. 1422 */ 1423static void 1424remap_variables(ir_instruction *inst, struct gl_linked_shader *target, 1425 hash_table *temps) 1426{ 1427 class remap_visitor : public ir_hierarchical_visitor { 1428 public: 1429 remap_visitor(struct gl_linked_shader *target, hash_table *temps) 1430 { 1431 this->target = target; 1432 this->symbols = target->symbols; 1433 this->instructions = target->ir; 1434 this->temps = temps; 1435 } 1436 1437 virtual ir_visitor_status visit(ir_dereference_variable *ir) 1438 { 1439 if (ir->var->data.mode == ir_var_temporary) { 1440 hash_entry *entry = _mesa_hash_table_search(temps, ir->var); 1441 ir_variable *var = entry ? (ir_variable *) entry->data : NULL; 1442 1443 assert(var != NULL); 1444 ir->var = var; 1445 return visit_continue; 1446 } 1447 1448 ir_variable *const existing = 1449 this->symbols->get_variable(ir->var->name); 1450 if (existing != NULL) 1451 ir->var = existing; 1452 else { 1453 ir_variable *copy = ir->var->clone(this->target, NULL); 1454 1455 this->symbols->add_variable(copy); 1456 this->instructions->push_head(copy); 1457 ir->var = copy; 1458 } 1459 1460 return visit_continue; 1461 } 1462 1463 private: 1464 struct gl_linked_shader *target; 1465 glsl_symbol_table *symbols; 1466 exec_list *instructions; 1467 hash_table *temps; 1468 }; 1469 1470 remap_visitor v(target, temps); 1471 1472 inst->accept(&v); 1473} 1474 1475 1476/** 1477 * Move non-declarations from one instruction stream to another 1478 * 1479 * The intended usage pattern of this function is to pass the pointer to the 1480 * head sentinel of a list (i.e., a pointer to the list cast to an \c exec_node 1481 * pointer) for \c last and \c false for \c make_copies on the first 1482 * call. Successive calls pass the return value of the previous call for 1483 * \c last and \c true for \c make_copies. 1484 * 1485 * \param instructions Source instruction stream 1486 * \param last Instruction after which new instructions should be 1487 * inserted in the target instruction stream 1488 * \param make_copies Flag selecting whether instructions in \c instructions 1489 * should be copied (via \c ir_instruction::clone) into the 1490 * target list or moved. 1491 * 1492 * \return 1493 * The new "last" instruction in the target instruction stream. This pointer 1494 * is suitable for use as the \c last parameter of a later call to this 1495 * function. 1496 */ 1497static exec_node * 1498move_non_declarations(exec_list *instructions, exec_node *last, 1499 bool make_copies, gl_linked_shader *target) 1500{ 1501 hash_table *temps = NULL; 1502 1503 if (make_copies) 1504 temps = _mesa_pointer_hash_table_create(NULL); 1505 1506 foreach_in_list_safe(ir_instruction, inst, instructions) { 1507 if (inst->as_function()) 1508 continue; 1509 1510 ir_variable *var = inst->as_variable(); 1511 if ((var != NULL) && (var->data.mode != ir_var_temporary)) 1512 continue; 1513 1514 assert(inst->as_assignment() 1515 || inst->as_call() 1516 || inst->as_if() /* for initializers with the ?: operator */ 1517 || ((var != NULL) && (var->data.mode == ir_var_temporary))); 1518 1519 if (make_copies) { 1520 inst = inst->clone(target, NULL); 1521 1522 if (var != NULL) 1523 _mesa_hash_table_insert(temps, var, inst); 1524 else 1525 remap_variables(inst, target, temps); 1526 } else { 1527 inst->remove(); 1528 } 1529 1530 last->insert_after(inst); 1531 last = inst; 1532 } 1533 1534 if (make_copies) 1535 _mesa_hash_table_destroy(temps, NULL); 1536 1537 return last; 1538} 1539 1540 1541/** 1542 * This class is only used in link_intrastage_shaders() below but declaring 1543 * it inside that function leads to compiler warnings with some versions of 1544 * gcc. 1545 */ 1546class array_sizing_visitor : public deref_type_updater { 1547public: 1548 using deref_type_updater::visit; 1549 1550 array_sizing_visitor() 1551 : mem_ctx(ralloc_context(NULL)), 1552 unnamed_interfaces(_mesa_pointer_hash_table_create(NULL)) 1553 { 1554 } 1555 1556 ~array_sizing_visitor() 1557 { 1558 _mesa_hash_table_destroy(this->unnamed_interfaces, NULL); 1559 ralloc_free(this->mem_ctx); 1560 } 1561 1562 virtual ir_visitor_status visit(ir_variable *var) 1563 { 1564 const glsl_type *type_without_array; 1565 bool implicit_sized_array = var->data.implicit_sized_array; 1566 fixup_type(&var->type, var->data.max_array_access, 1567 var->data.from_ssbo_unsized_array, 1568 &implicit_sized_array); 1569 var->data.implicit_sized_array = implicit_sized_array; 1570 type_without_array = var->type->without_array(); 1571 if (var->type->is_interface()) { 1572 if (interface_contains_unsized_arrays(var->type)) { 1573 const glsl_type *new_type = 1574 resize_interface_members(var->type, 1575 var->get_max_ifc_array_access(), 1576 var->is_in_shader_storage_block()); 1577 var->type = new_type; 1578 var->change_interface_type(new_type); 1579 } 1580 } else if (type_without_array->is_interface()) { 1581 if (interface_contains_unsized_arrays(type_without_array)) { 1582 const glsl_type *new_type = 1583 resize_interface_members(type_without_array, 1584 var->get_max_ifc_array_access(), 1585 var->is_in_shader_storage_block()); 1586 var->change_interface_type(new_type); 1587 var->type = update_interface_members_array(var->type, new_type); 1588 } 1589 } else if (const glsl_type *ifc_type = var->get_interface_type()) { 1590 /* Store a pointer to the variable in the unnamed_interfaces 1591 * hashtable. 1592 */ 1593 hash_entry *entry = 1594 _mesa_hash_table_search(this->unnamed_interfaces, 1595 ifc_type); 1596 1597 ir_variable **interface_vars = entry ? (ir_variable **) entry->data : NULL; 1598 1599 if (interface_vars == NULL) { 1600 interface_vars = rzalloc_array(mem_ctx, ir_variable *, 1601 ifc_type->length); 1602 _mesa_hash_table_insert(this->unnamed_interfaces, ifc_type, 1603 interface_vars); 1604 } 1605 unsigned index = ifc_type->field_index(var->name); 1606 assert(index < ifc_type->length); 1607 assert(interface_vars[index] == NULL); 1608 interface_vars[index] = var; 1609 } 1610 return visit_continue; 1611 } 1612 1613 /** 1614 * For each unnamed interface block that was discovered while running the 1615 * visitor, adjust the interface type to reflect the newly assigned array 1616 * sizes, and fix up the ir_variable nodes to point to the new interface 1617 * type. 1618 */ 1619 void fixup_unnamed_interface_types() 1620 { 1621 hash_table_call_foreach(this->unnamed_interfaces, 1622 fixup_unnamed_interface_type, NULL); 1623 } 1624 1625private: 1626 /** 1627 * If the type pointed to by \c type represents an unsized array, replace 1628 * it with a sized array whose size is determined by max_array_access. 1629 */ 1630 static void fixup_type(const glsl_type **type, unsigned max_array_access, 1631 bool from_ssbo_unsized_array, bool *implicit_sized) 1632 { 1633 if (!from_ssbo_unsized_array && (*type)->is_unsized_array()) { 1634 *type = glsl_type::get_array_instance((*type)->fields.array, 1635 max_array_access + 1); 1636 *implicit_sized = true; 1637 assert(*type != NULL); 1638 } 1639 } 1640 1641 static const glsl_type * 1642 update_interface_members_array(const glsl_type *type, 1643 const glsl_type *new_interface_type) 1644 { 1645 const glsl_type *element_type = type->fields.array; 1646 if (element_type->is_array()) { 1647 const glsl_type *new_array_type = 1648 update_interface_members_array(element_type, new_interface_type); 1649 return glsl_type::get_array_instance(new_array_type, type->length); 1650 } else { 1651 return glsl_type::get_array_instance(new_interface_type, 1652 type->length); 1653 } 1654 } 1655 1656 /** 1657 * Determine whether the given interface type contains unsized arrays (if 1658 * it doesn't, array_sizing_visitor doesn't need to process it). 1659 */ 1660 static bool interface_contains_unsized_arrays(const glsl_type *type) 1661 { 1662 for (unsigned i = 0; i < type->length; i++) { 1663 const glsl_type *elem_type = type->fields.structure[i].type; 1664 if (elem_type->is_unsized_array()) 1665 return true; 1666 } 1667 return false; 1668 } 1669 1670 /** 1671 * Create a new interface type based on the given type, with unsized arrays 1672 * replaced by sized arrays whose size is determined by 1673 * max_ifc_array_access. 1674 */ 1675 static const glsl_type * 1676 resize_interface_members(const glsl_type *type, 1677 const int *max_ifc_array_access, 1678 bool is_ssbo) 1679 { 1680 unsigned num_fields = type->length; 1681 glsl_struct_field *fields = new glsl_struct_field[num_fields]; 1682 memcpy(fields, type->fields.structure, 1683 num_fields * sizeof(*fields)); 1684 for (unsigned i = 0; i < num_fields; i++) { 1685 bool implicit_sized_array = fields[i].implicit_sized_array; 1686 /* If SSBO last member is unsized array, we don't replace it by a sized 1687 * array. 1688 */ 1689 if (is_ssbo && i == (num_fields - 1)) 1690 fixup_type(&fields[i].type, max_ifc_array_access[i], 1691 true, &implicit_sized_array); 1692 else 1693 fixup_type(&fields[i].type, max_ifc_array_access[i], 1694 false, &implicit_sized_array); 1695 fields[i].implicit_sized_array = implicit_sized_array; 1696 } 1697 glsl_interface_packing packing = 1698 (glsl_interface_packing) type->interface_packing; 1699 bool row_major = (bool) type->interface_row_major; 1700 const glsl_type *new_ifc_type = 1701 glsl_type::get_interface_instance(fields, num_fields, 1702 packing, row_major, type->name); 1703 delete [] fields; 1704 return new_ifc_type; 1705 } 1706 1707 static void fixup_unnamed_interface_type(const void *key, void *data, 1708 void *) 1709 { 1710 const glsl_type *ifc_type = (const glsl_type *) key; 1711 ir_variable **interface_vars = (ir_variable **) data; 1712 unsigned num_fields = ifc_type->length; 1713 glsl_struct_field *fields = new glsl_struct_field[num_fields]; 1714 memcpy(fields, ifc_type->fields.structure, 1715 num_fields * sizeof(*fields)); 1716 bool interface_type_changed = false; 1717 for (unsigned i = 0; i < num_fields; i++) { 1718 if (interface_vars[i] != NULL && 1719 fields[i].type != interface_vars[i]->type) { 1720 fields[i].type = interface_vars[i]->type; 1721 interface_type_changed = true; 1722 } 1723 } 1724 if (!interface_type_changed) { 1725 delete [] fields; 1726 return; 1727 } 1728 glsl_interface_packing packing = 1729 (glsl_interface_packing) ifc_type->interface_packing; 1730 bool row_major = (bool) ifc_type->interface_row_major; 1731 const glsl_type *new_ifc_type = 1732 glsl_type::get_interface_instance(fields, num_fields, packing, 1733 row_major, ifc_type->name); 1734 delete [] fields; 1735 for (unsigned i = 0; i < num_fields; i++) { 1736 if (interface_vars[i] != NULL) 1737 interface_vars[i]->change_interface_type(new_ifc_type); 1738 } 1739 } 1740 1741 /** 1742 * Memory context used to allocate the data in \c unnamed_interfaces. 1743 */ 1744 void *mem_ctx; 1745 1746 /** 1747 * Hash table from const glsl_type * to an array of ir_variable *'s 1748 * pointing to the ir_variables constituting each unnamed interface block. 1749 */ 1750 hash_table *unnamed_interfaces; 1751}; 1752 1753static bool 1754validate_xfb_buffer_stride(struct gl_context *ctx, unsigned idx, 1755 struct gl_shader_program *prog) 1756{ 1757 /* We will validate doubles at a later stage */ 1758 if (prog->TransformFeedback.BufferStride[idx] % 4) { 1759 linker_error(prog, "invalid qualifier xfb_stride=%d must be a " 1760 "multiple of 4 or if its applied to a type that is " 1761 "or contains a double a multiple of 8.", 1762 prog->TransformFeedback.BufferStride[idx]); 1763 return false; 1764 } 1765 1766 if (prog->TransformFeedback.BufferStride[idx] / 4 > 1767 ctx->Const.MaxTransformFeedbackInterleavedComponents) { 1768 linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS " 1769 "limit has been exceeded."); 1770 return false; 1771 } 1772 1773 return true; 1774} 1775 1776/** 1777 * Check for conflicting xfb_stride default qualifiers and store buffer stride 1778 * for later use. 1779 */ 1780static void 1781link_xfb_stride_layout_qualifiers(struct gl_context *ctx, 1782 struct gl_shader_program *prog, 1783 struct gl_shader **shader_list, 1784 unsigned num_shaders) 1785{ 1786 for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) { 1787 prog->TransformFeedback.BufferStride[i] = 0; 1788 } 1789 1790 for (unsigned i = 0; i < num_shaders; i++) { 1791 struct gl_shader *shader = shader_list[i]; 1792 1793 for (unsigned j = 0; j < MAX_FEEDBACK_BUFFERS; j++) { 1794 if (shader->TransformFeedbackBufferStride[j]) { 1795 if (prog->TransformFeedback.BufferStride[j] == 0) { 1796 prog->TransformFeedback.BufferStride[j] = 1797 shader->TransformFeedbackBufferStride[j]; 1798 if (!validate_xfb_buffer_stride(ctx, j, prog)) 1799 return; 1800 } else if (prog->TransformFeedback.BufferStride[j] != 1801 shader->TransformFeedbackBufferStride[j]){ 1802 linker_error(prog, 1803 "intrastage shaders defined with conflicting " 1804 "xfb_stride for buffer %d (%d and %d)\n", j, 1805 prog->TransformFeedback.BufferStride[j], 1806 shader->TransformFeedbackBufferStride[j]); 1807 return; 1808 } 1809 } 1810 } 1811 } 1812} 1813 1814/** 1815 * Check for conflicting bindless/bound sampler/image layout qualifiers at 1816 * global scope. 1817 */ 1818static void 1819link_bindless_layout_qualifiers(struct gl_shader_program *prog, 1820 struct gl_shader **shader_list, 1821 unsigned num_shaders) 1822{ 1823 bool bindless_sampler, bindless_image; 1824 bool bound_sampler, bound_image; 1825 1826 bindless_sampler = bindless_image = false; 1827 bound_sampler = bound_image = false; 1828 1829 for (unsigned i = 0; i < num_shaders; i++) { 1830 struct gl_shader *shader = shader_list[i]; 1831 1832 if (shader->bindless_sampler) 1833 bindless_sampler = true; 1834 if (shader->bindless_image) 1835 bindless_image = true; 1836 if (shader->bound_sampler) 1837 bound_sampler = true; 1838 if (shader->bound_image) 1839 bound_image = true; 1840 1841 if ((bindless_sampler && bound_sampler) || 1842 (bindless_image && bound_image)) { 1843 /* From section 4.4.6 of the ARB_bindless_texture spec: 1844 * 1845 * "If both bindless_sampler and bound_sampler, or bindless_image 1846 * and bound_image, are declared at global scope in any 1847 * compilation unit, a link- time error will be generated." 1848 */ 1849 linker_error(prog, "both bindless_sampler and bound_sampler, or " 1850 "bindless_image and bound_image, can't be declared at " 1851 "global scope"); 1852 } 1853 } 1854} 1855 1856/** 1857 * Check for conflicting viewport_relative settings across shaders, and sets 1858 * the value for the linked shader. 1859 */ 1860static void 1861link_layer_viewport_relative_qualifier(struct gl_shader_program *prog, 1862 struct gl_program *gl_prog, 1863 struct gl_shader **shader_list, 1864 unsigned num_shaders) 1865{ 1866 unsigned i; 1867 1868 /* Find first shader with explicit layer declaration */ 1869 for (i = 0; i < num_shaders; i++) { 1870 if (shader_list[i]->redeclares_gl_layer) { 1871 gl_prog->info.layer_viewport_relative = 1872 shader_list[i]->layer_viewport_relative; 1873 break; 1874 } 1875 } 1876 1877 /* Now make sure that each subsequent shader's explicit layer declaration 1878 * matches the first one's. 1879 */ 1880 for (; i < num_shaders; i++) { 1881 if (shader_list[i]->redeclares_gl_layer && 1882 shader_list[i]->layer_viewport_relative != 1883 gl_prog->info.layer_viewport_relative) { 1884 linker_error(prog, "all gl_Layer redeclarations must have identical " 1885 "viewport_relative settings"); 1886 } 1887 } 1888} 1889 1890/** 1891 * Performs the cross-validation of tessellation control shader vertices and 1892 * layout qualifiers for the attached tessellation control shaders, 1893 * and propagates them to the linked TCS and linked shader program. 1894 */ 1895static void 1896link_tcs_out_layout_qualifiers(struct gl_shader_program *prog, 1897 struct gl_program *gl_prog, 1898 struct gl_shader **shader_list, 1899 unsigned num_shaders) 1900{ 1901 if (gl_prog->info.stage != MESA_SHADER_TESS_CTRL) 1902 return; 1903 1904 gl_prog->info.tess.tcs_vertices_out = 0; 1905 1906 /* From the GLSL 4.0 spec (chapter 4.3.8.2): 1907 * 1908 * "All tessellation control shader layout declarations in a program 1909 * must specify the same output patch vertex count. There must be at 1910 * least one layout qualifier specifying an output patch vertex count 1911 * in any program containing tessellation control shaders; however, 1912 * such a declaration is not required in all tessellation control 1913 * shaders." 1914 */ 1915 1916 for (unsigned i = 0; i < num_shaders; i++) { 1917 struct gl_shader *shader = shader_list[i]; 1918 1919 if (shader->info.TessCtrl.VerticesOut != 0) { 1920 if (gl_prog->info.tess.tcs_vertices_out != 0 && 1921 gl_prog->info.tess.tcs_vertices_out != 1922 (unsigned) shader->info.TessCtrl.VerticesOut) { 1923 linker_error(prog, "tessellation control shader defined with " 1924 "conflicting output vertex count (%d and %d)\n", 1925 gl_prog->info.tess.tcs_vertices_out, 1926 shader->info.TessCtrl.VerticesOut); 1927 return; 1928 } 1929 gl_prog->info.tess.tcs_vertices_out = 1930 shader->info.TessCtrl.VerticesOut; 1931 } 1932 } 1933 1934 /* Just do the intrastage -> interstage propagation right now, 1935 * since we already know we're in the right type of shader program 1936 * for doing it. 1937 */ 1938 if (gl_prog->info.tess.tcs_vertices_out == 0) { 1939 linker_error(prog, "tessellation control shader didn't declare " 1940 "vertices out layout qualifier\n"); 1941 return; 1942 } 1943} 1944 1945 1946/** 1947 * Performs the cross-validation of tessellation evaluation shader 1948 * primitive type, vertex spacing, ordering and point_mode layout qualifiers 1949 * for the attached tessellation evaluation shaders, and propagates them 1950 * to the linked TES and linked shader program. 1951 */ 1952static void 1953link_tes_in_layout_qualifiers(struct gl_shader_program *prog, 1954 struct gl_program *gl_prog, 1955 struct gl_shader **shader_list, 1956 unsigned num_shaders) 1957{ 1958 if (gl_prog->info.stage != MESA_SHADER_TESS_EVAL) 1959 return; 1960 1961 int point_mode = -1; 1962 unsigned vertex_order = 0; 1963 1964 gl_prog->info.tess.primitive_mode = PRIM_UNKNOWN; 1965 gl_prog->info.tess.spacing = TESS_SPACING_UNSPECIFIED; 1966 1967 /* From the GLSL 4.0 spec (chapter 4.3.8.1): 1968 * 1969 * "At least one tessellation evaluation shader (compilation unit) in 1970 * a program must declare a primitive mode in its input layout. 1971 * Declaration vertex spacing, ordering, and point mode identifiers is 1972 * optional. It is not required that all tessellation evaluation 1973 * shaders in a program declare a primitive mode. If spacing or 1974 * vertex ordering declarations are omitted, the tessellation 1975 * primitive generator will use equal spacing or counter-clockwise 1976 * vertex ordering, respectively. If a point mode declaration is 1977 * omitted, the tessellation primitive generator will produce lines or 1978 * triangles according to the primitive mode." 1979 */ 1980 1981 for (unsigned i = 0; i < num_shaders; i++) { 1982 struct gl_shader *shader = shader_list[i]; 1983 1984 if (shader->info.TessEval.PrimitiveMode != PRIM_UNKNOWN) { 1985 if (gl_prog->info.tess.primitive_mode != PRIM_UNKNOWN && 1986 gl_prog->info.tess.primitive_mode != 1987 shader->info.TessEval.PrimitiveMode) { 1988 linker_error(prog, "tessellation evaluation shader defined with " 1989 "conflicting input primitive modes.\n"); 1990 return; 1991 } 1992 gl_prog->info.tess.primitive_mode = 1993 shader->info.TessEval.PrimitiveMode; 1994 } 1995 1996 if (shader->info.TessEval.Spacing != 0) { 1997 if (gl_prog->info.tess.spacing != 0 && gl_prog->info.tess.spacing != 1998 shader->info.TessEval.Spacing) { 1999 linker_error(prog, "tessellation evaluation shader defined with " 2000 "conflicting vertex spacing.\n"); 2001 return; 2002 } 2003 gl_prog->info.tess.spacing = shader->info.TessEval.Spacing; 2004 } 2005 2006 if (shader->info.TessEval.VertexOrder != 0) { 2007 if (vertex_order != 0 && 2008 vertex_order != shader->info.TessEval.VertexOrder) { 2009 linker_error(prog, "tessellation evaluation shader defined with " 2010 "conflicting ordering.\n"); 2011 return; 2012 } 2013 vertex_order = shader->info.TessEval.VertexOrder; 2014 } 2015 2016 if (shader->info.TessEval.PointMode != -1) { 2017 if (point_mode != -1 && 2018 point_mode != shader->info.TessEval.PointMode) { 2019 linker_error(prog, "tessellation evaluation shader defined with " 2020 "conflicting point modes.\n"); 2021 return; 2022 } 2023 point_mode = shader->info.TessEval.PointMode; 2024 } 2025 2026 } 2027 2028 /* Just do the intrastage -> interstage propagation right now, 2029 * since we already know we're in the right type of shader program 2030 * for doing it. 2031 */ 2032 if (gl_prog->info.tess.primitive_mode == PRIM_UNKNOWN) { 2033 linker_error(prog, 2034 "tessellation evaluation shader didn't declare input " 2035 "primitive modes.\n"); 2036 return; 2037 } 2038 2039 if (gl_prog->info.tess.spacing == TESS_SPACING_UNSPECIFIED) 2040 gl_prog->info.tess.spacing = TESS_SPACING_EQUAL; 2041 2042 if (vertex_order == 0 || vertex_order == GL_CCW) 2043 gl_prog->info.tess.ccw = true; 2044 else 2045 gl_prog->info.tess.ccw = false; 2046 2047 2048 if (point_mode == -1 || point_mode == GL_FALSE) 2049 gl_prog->info.tess.point_mode = false; 2050 else 2051 gl_prog->info.tess.point_mode = true; 2052} 2053 2054 2055/** 2056 * Performs the cross-validation of layout qualifiers specified in 2057 * redeclaration of gl_FragCoord for the attached fragment shaders, 2058 * and propagates them to the linked FS and linked shader program. 2059 */ 2060static void 2061link_fs_inout_layout_qualifiers(struct gl_shader_program *prog, 2062 struct gl_linked_shader *linked_shader, 2063 struct gl_shader **shader_list, 2064 unsigned num_shaders) 2065{ 2066 bool redeclares_gl_fragcoord = false; 2067 bool uses_gl_fragcoord = false; 2068 bool origin_upper_left = false; 2069 bool pixel_center_integer = false; 2070 2071 if (linked_shader->Stage != MESA_SHADER_FRAGMENT || 2072 (prog->data->Version < 150 && 2073 !prog->ARB_fragment_coord_conventions_enable)) 2074 return; 2075 2076 for (unsigned i = 0; i < num_shaders; i++) { 2077 struct gl_shader *shader = shader_list[i]; 2078 /* From the GLSL 1.50 spec, page 39: 2079 * 2080 * "If gl_FragCoord is redeclared in any fragment shader in a program, 2081 * it must be redeclared in all the fragment shaders in that program 2082 * that have a static use gl_FragCoord." 2083 */ 2084 if ((redeclares_gl_fragcoord && !shader->redeclares_gl_fragcoord && 2085 shader->uses_gl_fragcoord) 2086 || (shader->redeclares_gl_fragcoord && !redeclares_gl_fragcoord && 2087 uses_gl_fragcoord)) { 2088 linker_error(prog, "fragment shader defined with conflicting " 2089 "layout qualifiers for gl_FragCoord\n"); 2090 } 2091 2092 /* From the GLSL 1.50 spec, page 39: 2093 * 2094 * "All redeclarations of gl_FragCoord in all fragment shaders in a 2095 * single program must have the same set of qualifiers." 2096 */ 2097 if (redeclares_gl_fragcoord && shader->redeclares_gl_fragcoord && 2098 (shader->origin_upper_left != origin_upper_left || 2099 shader->pixel_center_integer != pixel_center_integer)) { 2100 linker_error(prog, "fragment shader defined with conflicting " 2101 "layout qualifiers for gl_FragCoord\n"); 2102 } 2103 2104 /* Update the linked shader state. Note that uses_gl_fragcoord should 2105 * accumulate the results. The other values should replace. If there 2106 * are multiple redeclarations, all the fields except uses_gl_fragcoord 2107 * are already known to be the same. 2108 */ 2109 if (shader->redeclares_gl_fragcoord || shader->uses_gl_fragcoord) { 2110 redeclares_gl_fragcoord = shader->redeclares_gl_fragcoord; 2111 uses_gl_fragcoord |= shader->uses_gl_fragcoord; 2112 origin_upper_left = shader->origin_upper_left; 2113 pixel_center_integer = shader->pixel_center_integer; 2114 } 2115 2116 linked_shader->Program->info.fs.early_fragment_tests |= 2117 shader->EarlyFragmentTests || shader->PostDepthCoverage; 2118 linked_shader->Program->info.fs.inner_coverage |= shader->InnerCoverage; 2119 linked_shader->Program->info.fs.post_depth_coverage |= 2120 shader->PostDepthCoverage; 2121 linked_shader->Program->info.fs.pixel_interlock_ordered |= 2122 shader->PixelInterlockOrdered; 2123 linked_shader->Program->info.fs.pixel_interlock_unordered |= 2124 shader->PixelInterlockUnordered; 2125 linked_shader->Program->info.fs.sample_interlock_ordered |= 2126 shader->SampleInterlockOrdered; 2127 linked_shader->Program->info.fs.sample_interlock_unordered |= 2128 shader->SampleInterlockUnordered; 2129 linked_shader->Program->info.fs.advanced_blend_modes |= shader->BlendSupport; 2130 } 2131 2132 linked_shader->Program->info.fs.pixel_center_integer = pixel_center_integer; 2133 linked_shader->Program->info.fs.origin_upper_left = origin_upper_left; 2134} 2135 2136/** 2137 * Performs the cross-validation of geometry shader max_vertices and 2138 * primitive type layout qualifiers for the attached geometry shaders, 2139 * and propagates them to the linked GS and linked shader program. 2140 */ 2141static void 2142link_gs_inout_layout_qualifiers(struct gl_shader_program *prog, 2143 struct gl_program *gl_prog, 2144 struct gl_shader **shader_list, 2145 unsigned num_shaders) 2146{ 2147 /* No in/out qualifiers defined for anything but GLSL 1.50+ 2148 * geometry shaders so far. 2149 */ 2150 if (gl_prog->info.stage != MESA_SHADER_GEOMETRY || 2151 prog->data->Version < 150) 2152 return; 2153 2154 int vertices_out = -1; 2155 2156 gl_prog->info.gs.invocations = 0; 2157 gl_prog->info.gs.input_primitive = PRIM_UNKNOWN; 2158 gl_prog->info.gs.output_primitive = PRIM_UNKNOWN; 2159 2160 /* From the GLSL 1.50 spec, page 46: 2161 * 2162 * "All geometry shader output layout declarations in a program 2163 * must declare the same layout and same value for 2164 * max_vertices. There must be at least one geometry output 2165 * layout declaration somewhere in a program, but not all 2166 * geometry shaders (compilation units) are required to 2167 * declare it." 2168 */ 2169 2170 for (unsigned i = 0; i < num_shaders; i++) { 2171 struct gl_shader *shader = shader_list[i]; 2172 2173 if (shader->info.Geom.InputType != PRIM_UNKNOWN) { 2174 if (gl_prog->info.gs.input_primitive != PRIM_UNKNOWN && 2175 gl_prog->info.gs.input_primitive != 2176 shader->info.Geom.InputType) { 2177 linker_error(prog, "geometry shader defined with conflicting " 2178 "input types\n"); 2179 return; 2180 } 2181 gl_prog->info.gs.input_primitive = shader->info.Geom.InputType; 2182 } 2183 2184 if (shader->info.Geom.OutputType != PRIM_UNKNOWN) { 2185 if (gl_prog->info.gs.output_primitive != PRIM_UNKNOWN && 2186 gl_prog->info.gs.output_primitive != 2187 shader->info.Geom.OutputType) { 2188 linker_error(prog, "geometry shader defined with conflicting " 2189 "output types\n"); 2190 return; 2191 } 2192 gl_prog->info.gs.output_primitive = shader->info.Geom.OutputType; 2193 } 2194 2195 if (shader->info.Geom.VerticesOut != -1) { 2196 if (vertices_out != -1 && 2197 vertices_out != shader->info.Geom.VerticesOut) { 2198 linker_error(prog, "geometry shader defined with conflicting " 2199 "output vertex count (%d and %d)\n", 2200 vertices_out, shader->info.Geom.VerticesOut); 2201 return; 2202 } 2203 vertices_out = shader->info.Geom.VerticesOut; 2204 } 2205 2206 if (shader->info.Geom.Invocations != 0) { 2207 if (gl_prog->info.gs.invocations != 0 && 2208 gl_prog->info.gs.invocations != 2209 (unsigned) shader->info.Geom.Invocations) { 2210 linker_error(prog, "geometry shader defined with conflicting " 2211 "invocation count (%d and %d)\n", 2212 gl_prog->info.gs.invocations, 2213 shader->info.Geom.Invocations); 2214 return; 2215 } 2216 gl_prog->info.gs.invocations = shader->info.Geom.Invocations; 2217 } 2218 } 2219 2220 /* Just do the intrastage -> interstage propagation right now, 2221 * since we already know we're in the right type of shader program 2222 * for doing it. 2223 */ 2224 if (gl_prog->info.gs.input_primitive == PRIM_UNKNOWN) { 2225 linker_error(prog, 2226 "geometry shader didn't declare primitive input type\n"); 2227 return; 2228 } 2229 2230 if (gl_prog->info.gs.output_primitive == PRIM_UNKNOWN) { 2231 linker_error(prog, 2232 "geometry shader didn't declare primitive output type\n"); 2233 return; 2234 } 2235 2236 if (vertices_out == -1) { 2237 linker_error(prog, 2238 "geometry shader didn't declare max_vertices\n"); 2239 return; 2240 } else { 2241 gl_prog->info.gs.vertices_out = vertices_out; 2242 } 2243 2244 if (gl_prog->info.gs.invocations == 0) 2245 gl_prog->info.gs.invocations = 1; 2246} 2247 2248 2249/** 2250 * Perform cross-validation of compute shader local_size_{x,y,z} layout and 2251 * derivative arrangement qualifiers for the attached compute shaders, and 2252 * propagate them to the linked CS and linked shader program. 2253 */ 2254static void 2255link_cs_input_layout_qualifiers(struct gl_shader_program *prog, 2256 struct gl_program *gl_prog, 2257 struct gl_shader **shader_list, 2258 unsigned num_shaders) 2259{ 2260 /* This function is called for all shader stages, but it only has an effect 2261 * for compute shaders. 2262 */ 2263 if (gl_prog->info.stage != MESA_SHADER_COMPUTE) 2264 return; 2265 2266 for (int i = 0; i < 3; i++) 2267 gl_prog->info.workgroup_size[i] = 0; 2268 2269 gl_prog->info.workgroup_size_variable = false; 2270 2271 gl_prog->info.cs.derivative_group = DERIVATIVE_GROUP_NONE; 2272 2273 /* From the ARB_compute_shader spec, in the section describing local size 2274 * declarations: 2275 * 2276 * If multiple compute shaders attached to a single program object 2277 * declare local work-group size, the declarations must be identical; 2278 * otherwise a link-time error results. Furthermore, if a program 2279 * object contains any compute shaders, at least one must contain an 2280 * input layout qualifier specifying the local work sizes of the 2281 * program, or a link-time error will occur. 2282 */ 2283 for (unsigned sh = 0; sh < num_shaders; sh++) { 2284 struct gl_shader *shader = shader_list[sh]; 2285 2286 if (shader->info.Comp.LocalSize[0] != 0) { 2287 if (gl_prog->info.workgroup_size[0] != 0) { 2288 for (int i = 0; i < 3; i++) { 2289 if (gl_prog->info.workgroup_size[i] != 2290 shader->info.Comp.LocalSize[i]) { 2291 linker_error(prog, "compute shader defined with conflicting " 2292 "local sizes\n"); 2293 return; 2294 } 2295 } 2296 } 2297 for (int i = 0; i < 3; i++) { 2298 gl_prog->info.workgroup_size[i] = 2299 shader->info.Comp.LocalSize[i]; 2300 } 2301 } else if (shader->info.Comp.LocalSizeVariable) { 2302 if (gl_prog->info.workgroup_size[0] != 0) { 2303 /* The ARB_compute_variable_group_size spec says: 2304 * 2305 * If one compute shader attached to a program declares a 2306 * variable local group size and a second compute shader 2307 * attached to the same program declares a fixed local group 2308 * size, a link-time error results. 2309 */ 2310 linker_error(prog, "compute shader defined with both fixed and " 2311 "variable local group size\n"); 2312 return; 2313 } 2314 gl_prog->info.workgroup_size_variable = true; 2315 } 2316 2317 enum gl_derivative_group group = shader->info.Comp.DerivativeGroup; 2318 if (group != DERIVATIVE_GROUP_NONE) { 2319 if (gl_prog->info.cs.derivative_group != DERIVATIVE_GROUP_NONE && 2320 gl_prog->info.cs.derivative_group != group) { 2321 linker_error(prog, "compute shader defined with conflicting " 2322 "derivative groups\n"); 2323 return; 2324 } 2325 gl_prog->info.cs.derivative_group = group; 2326 } 2327 } 2328 2329 /* Just do the intrastage -> interstage propagation right now, 2330 * since we already know we're in the right type of shader program 2331 * for doing it. 2332 */ 2333 if (gl_prog->info.workgroup_size[0] == 0 && 2334 !gl_prog->info.workgroup_size_variable) { 2335 linker_error(prog, "compute shader must contain a fixed or a variable " 2336 "local group size\n"); 2337 return; 2338 } 2339 2340 if (gl_prog->info.cs.derivative_group == DERIVATIVE_GROUP_QUADS) { 2341 if (gl_prog->info.workgroup_size[0] % 2 != 0) { 2342 linker_error(prog, "derivative_group_quadsNV must be used with a " 2343 "local group size whose first dimension " 2344 "is a multiple of 2\n"); 2345 return; 2346 } 2347 if (gl_prog->info.workgroup_size[1] % 2 != 0) { 2348 linker_error(prog, "derivative_group_quadsNV must be used with a local" 2349 "group size whose second dimension " 2350 "is a multiple of 2\n"); 2351 return; 2352 } 2353 } else if (gl_prog->info.cs.derivative_group == DERIVATIVE_GROUP_LINEAR) { 2354 if ((gl_prog->info.workgroup_size[0] * 2355 gl_prog->info.workgroup_size[1] * 2356 gl_prog->info.workgroup_size[2]) % 4 != 0) { 2357 linker_error(prog, "derivative_group_linearNV must be used with a " 2358 "local group size whose total number of invocations " 2359 "is a multiple of 4\n"); 2360 return; 2361 } 2362 } 2363} 2364 2365/** 2366 * Link all out variables on a single stage which are not 2367 * directly used in a shader with the main function. 2368 */ 2369static void 2370link_output_variables(struct gl_linked_shader *linked_shader, 2371 struct gl_shader **shader_list, 2372 unsigned num_shaders) 2373{ 2374 struct glsl_symbol_table *symbols = linked_shader->symbols; 2375 2376 for (unsigned i = 0; i < num_shaders; i++) { 2377 2378 /* Skip shader object with main function */ 2379 if (shader_list[i]->symbols->get_function("main")) 2380 continue; 2381 2382 foreach_in_list(ir_instruction, ir, shader_list[i]->ir) { 2383 if (ir->ir_type != ir_type_variable) 2384 continue; 2385 2386 ir_variable *var = (ir_variable *) ir; 2387 2388 if (var->data.mode == ir_var_shader_out && 2389 !symbols->get_variable(var->name)) { 2390 var = var->clone(linked_shader, NULL); 2391 symbols->add_variable(var); 2392 linked_shader->ir->push_head(var); 2393 } 2394 } 2395 } 2396 2397 return; 2398} 2399 2400 2401/** 2402 * Combine a group of shaders for a single stage to generate a linked shader 2403 * 2404 * \note 2405 * If this function is supplied a single shader, it is cloned, and the new 2406 * shader is returned. 2407 */ 2408struct gl_linked_shader * 2409link_intrastage_shaders(void *mem_ctx, 2410 struct gl_context *ctx, 2411 struct gl_shader_program *prog, 2412 struct gl_shader **shader_list, 2413 unsigned num_shaders, 2414 bool allow_missing_main) 2415{ 2416 struct gl_uniform_block *ubo_blocks = NULL; 2417 struct gl_uniform_block *ssbo_blocks = NULL; 2418 unsigned num_ubo_blocks = 0; 2419 unsigned num_ssbo_blocks = 0; 2420 2421 /* Check that global variables defined in multiple shaders are consistent. 2422 */ 2423 glsl_symbol_table variables; 2424 for (unsigned i = 0; i < num_shaders; i++) { 2425 if (shader_list[i] == NULL) 2426 continue; 2427 cross_validate_globals(ctx, prog, shader_list[i]->ir, &variables, 2428 false); 2429 } 2430 2431 if (!prog->data->LinkStatus) 2432 return NULL; 2433 2434 /* Check that interface blocks defined in multiple shaders are consistent. 2435 */ 2436 validate_intrastage_interface_blocks(prog, (const gl_shader **)shader_list, 2437 num_shaders); 2438 if (!prog->data->LinkStatus) 2439 return NULL; 2440 2441 /* Check that there is only a single definition of each function signature 2442 * across all shaders. 2443 */ 2444 for (unsigned i = 0; i < (num_shaders - 1); i++) { 2445 foreach_in_list(ir_instruction, node, shader_list[i]->ir) { 2446 ir_function *const f = node->as_function(); 2447 2448 if (f == NULL) 2449 continue; 2450 2451 for (unsigned j = i + 1; j < num_shaders; j++) { 2452 ir_function *const other = 2453 shader_list[j]->symbols->get_function(f->name); 2454 2455 /* If the other shader has no function (and therefore no function 2456 * signatures) with the same name, skip to the next shader. 2457 */ 2458 if (other == NULL) 2459 continue; 2460 2461 foreach_in_list(ir_function_signature, sig, &f->signatures) { 2462 if (!sig->is_defined) 2463 continue; 2464 2465 ir_function_signature *other_sig = 2466 other->exact_matching_signature(NULL, &sig->parameters); 2467 2468 if (other_sig != NULL && other_sig->is_defined) { 2469 linker_error(prog, "function `%s' is multiply defined\n", 2470 f->name); 2471 return NULL; 2472 } 2473 } 2474 } 2475 } 2476 } 2477 2478 /* Find the shader that defines main, and make a clone of it. 2479 * 2480 * Starting with the clone, search for undefined references. If one is 2481 * found, find the shader that defines it. Clone the reference and add 2482 * it to the shader. Repeat until there are no undefined references or 2483 * until a reference cannot be resolved. 2484 */ 2485 gl_shader *main = NULL; 2486 for (unsigned i = 0; i < num_shaders; i++) { 2487 if (_mesa_get_main_function_signature(shader_list[i]->symbols)) { 2488 main = shader_list[i]; 2489 break; 2490 } 2491 } 2492 2493 if (main == NULL && allow_missing_main) 2494 main = shader_list[0]; 2495 2496 if (main == NULL) { 2497 linker_error(prog, "%s shader lacks `main'\n", 2498 _mesa_shader_stage_to_string(shader_list[0]->Stage)); 2499 return NULL; 2500 } 2501 2502 gl_linked_shader *linked = rzalloc(NULL, struct gl_linked_shader); 2503 linked->Stage = shader_list[0]->Stage; 2504 2505 /* Create program and attach it to the linked shader */ 2506 struct gl_program *gl_prog = 2507 ctx->Driver.NewProgram(ctx, shader_list[0]->Stage, prog->Name, false); 2508 if (!gl_prog) { 2509 prog->data->LinkStatus = LINKING_FAILURE; 2510 _mesa_delete_linked_shader(ctx, linked); 2511 return NULL; 2512 } 2513 2514 _mesa_reference_shader_program_data(ctx, &gl_prog->sh.data, prog->data); 2515 2516 /* Don't use _mesa_reference_program() just take ownership */ 2517 linked->Program = gl_prog; 2518 2519 linked->ir = new(linked) exec_list; 2520 clone_ir_list(mem_ctx, linked->ir, main->ir); 2521 2522 link_fs_inout_layout_qualifiers(prog, linked, shader_list, num_shaders); 2523 link_tcs_out_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); 2524 link_tes_in_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); 2525 link_gs_inout_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); 2526 link_cs_input_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); 2527 2528 if (linked->Stage != MESA_SHADER_FRAGMENT) 2529 link_xfb_stride_layout_qualifiers(ctx, prog, shader_list, num_shaders); 2530 2531 link_bindless_layout_qualifiers(prog, shader_list, num_shaders); 2532 2533 link_layer_viewport_relative_qualifier(prog, gl_prog, shader_list, num_shaders); 2534 2535 populate_symbol_table(linked, shader_list[0]->symbols); 2536 2537 /* The pointer to the main function in the final linked shader (i.e., the 2538 * copy of the original shader that contained the main function). 2539 */ 2540 ir_function_signature *const main_sig = 2541 _mesa_get_main_function_signature(linked->symbols); 2542 2543 /* Move any instructions other than variable declarations or function 2544 * declarations into main. 2545 */ 2546 if (main_sig != NULL) { 2547 exec_node *insertion_point = 2548 move_non_declarations(linked->ir, (exec_node *) &main_sig->body, false, 2549 linked); 2550 2551 for (unsigned i = 0; i < num_shaders; i++) { 2552 if (shader_list[i] == main) 2553 continue; 2554 2555 insertion_point = move_non_declarations(shader_list[i]->ir, 2556 insertion_point, true, linked); 2557 } 2558 } 2559 2560 if (!link_function_calls(prog, linked, shader_list, num_shaders)) { 2561 _mesa_delete_linked_shader(ctx, linked); 2562 return NULL; 2563 } 2564 2565 if (linked->Stage != MESA_SHADER_FRAGMENT) 2566 link_output_variables(linked, shader_list, num_shaders); 2567 2568 /* Make a pass over all variable declarations to ensure that arrays with 2569 * unspecified sizes have a size specified. The size is inferred from the 2570 * max_array_access field. 2571 */ 2572 array_sizing_visitor v; 2573 v.run(linked->ir); 2574 v.fixup_unnamed_interface_types(); 2575 2576 /* Now that we know the sizes of all the arrays, we can replace .length() 2577 * calls with a constant expression. 2578 */ 2579 array_length_to_const_visitor len_v; 2580 len_v.run(linked->ir); 2581 2582 /* Link up uniform blocks defined within this stage. */ 2583 link_uniform_blocks(mem_ctx, ctx, prog, linked, &ubo_blocks, 2584 &num_ubo_blocks, &ssbo_blocks, &num_ssbo_blocks); 2585 2586 const unsigned max_uniform_blocks = 2587 ctx->Const.Program[linked->Stage].MaxUniformBlocks; 2588 if (num_ubo_blocks > max_uniform_blocks) { 2589 linker_error(prog, "Too many %s uniform blocks (%d/%d)\n", 2590 _mesa_shader_stage_to_string(linked->Stage), 2591 num_ubo_blocks, max_uniform_blocks); 2592 } 2593 2594 const unsigned max_shader_storage_blocks = 2595 ctx->Const.Program[linked->Stage].MaxShaderStorageBlocks; 2596 if (num_ssbo_blocks > max_shader_storage_blocks) { 2597 linker_error(prog, "Too many %s shader storage blocks (%d/%d)\n", 2598 _mesa_shader_stage_to_string(linked->Stage), 2599 num_ssbo_blocks, max_shader_storage_blocks); 2600 } 2601 2602 if (!prog->data->LinkStatus) { 2603 _mesa_delete_linked_shader(ctx, linked); 2604 return NULL; 2605 } 2606 2607 /* Copy ubo blocks to linked shader list */ 2608 linked->Program->sh.UniformBlocks = 2609 ralloc_array(linked, gl_uniform_block *, num_ubo_blocks); 2610 ralloc_steal(linked, ubo_blocks); 2611 for (unsigned i = 0; i < num_ubo_blocks; i++) { 2612 linked->Program->sh.UniformBlocks[i] = &ubo_blocks[i]; 2613 } 2614 linked->Program->sh.NumUniformBlocks = num_ubo_blocks; 2615 linked->Program->info.num_ubos = num_ubo_blocks; 2616 2617 /* Copy ssbo blocks to linked shader list */ 2618 linked->Program->sh.ShaderStorageBlocks = 2619 ralloc_array(linked, gl_uniform_block *, num_ssbo_blocks); 2620 ralloc_steal(linked, ssbo_blocks); 2621 for (unsigned i = 0; i < num_ssbo_blocks; i++) { 2622 linked->Program->sh.ShaderStorageBlocks[i] = &ssbo_blocks[i]; 2623 } 2624 linked->Program->info.num_ssbos = num_ssbo_blocks; 2625 2626 /* At this point linked should contain all of the linked IR, so 2627 * validate it to make sure nothing went wrong. 2628 */ 2629 validate_ir_tree(linked->ir); 2630 2631 /* Set the size of geometry shader input arrays */ 2632 if (linked->Stage == MESA_SHADER_GEOMETRY) { 2633 unsigned num_vertices = 2634 vertices_per_prim(gl_prog->info.gs.input_primitive); 2635 array_resize_visitor input_resize_visitor(num_vertices, prog, 2636 MESA_SHADER_GEOMETRY); 2637 foreach_in_list(ir_instruction, ir, linked->ir) { 2638 ir->accept(&input_resize_visitor); 2639 } 2640 } 2641 2642 if (ctx->Const.VertexID_is_zero_based) 2643 lower_vertex_id(linked); 2644 2645 if (ctx->Const.LowerCsDerivedVariables) 2646 lower_cs_derived(linked); 2647 2648#ifdef DEBUG 2649 /* Compute the source checksum. */ 2650 linked->SourceChecksum = 0; 2651 for (unsigned i = 0; i < num_shaders; i++) { 2652 if (shader_list[i] == NULL) 2653 continue; 2654 linked->SourceChecksum ^= shader_list[i]->SourceChecksum; 2655 } 2656#endif 2657 2658 return linked; 2659} 2660 2661/** 2662 * Update the sizes of linked shader uniform arrays to the maximum 2663 * array index used. 2664 * 2665 * From page 81 (page 95 of the PDF) of the OpenGL 2.1 spec: 2666 * 2667 * If one or more elements of an array are active, 2668 * GetActiveUniform will return the name of the array in name, 2669 * subject to the restrictions listed above. The type of the array 2670 * is returned in type. The size parameter contains the highest 2671 * array element index used, plus one. The compiler or linker 2672 * determines the highest index used. There will be only one 2673 * active uniform reported by the GL per uniform array. 2674 2675 */ 2676static void 2677update_array_sizes(struct gl_shader_program *prog) 2678{ 2679 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 2680 if (prog->_LinkedShaders[i] == NULL) 2681 continue; 2682 2683 bool types_were_updated = false; 2684 2685 foreach_in_list(ir_instruction, node, prog->_LinkedShaders[i]->ir) { 2686 ir_variable *const var = node->as_variable(); 2687 2688 if ((var == NULL) || (var->data.mode != ir_var_uniform) || 2689 !var->type->is_array()) 2690 continue; 2691 2692 /* GL_ARB_uniform_buffer_object says that std140 uniforms 2693 * will not be eliminated. Since we always do std140, just 2694 * don't resize arrays in UBOs. 2695 * 2696 * Atomic counters are supposed to get deterministic 2697 * locations assigned based on the declaration ordering and 2698 * sizes, array compaction would mess that up. 2699 * 2700 * Subroutine uniforms are not removed. 2701 */ 2702 if (var->is_in_buffer_block() || var->type->contains_atomic() || 2703 var->type->contains_subroutine() || var->constant_initializer) 2704 continue; 2705 2706 int size = var->data.max_array_access; 2707 for (unsigned j = 0; j < MESA_SHADER_STAGES; j++) { 2708 if (prog->_LinkedShaders[j] == NULL) 2709 continue; 2710 2711 foreach_in_list(ir_instruction, node2, prog->_LinkedShaders[j]->ir) { 2712 ir_variable *other_var = node2->as_variable(); 2713 if (!other_var) 2714 continue; 2715 2716 if (strcmp(var->name, other_var->name) == 0 && 2717 other_var->data.max_array_access > size) { 2718 size = other_var->data.max_array_access; 2719 } 2720 } 2721 } 2722 2723 if (size + 1 != (int)var->type->length) { 2724 /* If this is a built-in uniform (i.e., it's backed by some 2725 * fixed-function state), adjust the number of state slots to 2726 * match the new array size. The number of slots per array entry 2727 * is not known. It seems safe to assume that the total number of 2728 * slots is an integer multiple of the number of array elements. 2729 * Determine the number of slots per array element by dividing by 2730 * the old (total) size. 2731 */ 2732 const unsigned num_slots = var->get_num_state_slots(); 2733 if (num_slots > 0) { 2734 var->set_num_state_slots((size + 1) 2735 * (num_slots / var->type->length)); 2736 } 2737 2738 var->type = glsl_type::get_array_instance(var->type->fields.array, 2739 size + 1); 2740 types_were_updated = true; 2741 } 2742 } 2743 2744 /* Update the types of dereferences in case we changed any. */ 2745 if (types_were_updated) { 2746 deref_type_updater v; 2747 v.run(prog->_LinkedShaders[i]->ir); 2748 } 2749 } 2750} 2751 2752/** 2753 * Resize tessellation evaluation per-vertex inputs to the size of 2754 * tessellation control per-vertex outputs. 2755 */ 2756static void 2757resize_tes_inputs(struct gl_context *ctx, 2758 struct gl_shader_program *prog) 2759{ 2760 if (prog->_LinkedShaders[MESA_SHADER_TESS_EVAL] == NULL) 2761 return; 2762 2763 gl_linked_shader *const tcs = prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]; 2764 gl_linked_shader *const tes = prog->_LinkedShaders[MESA_SHADER_TESS_EVAL]; 2765 2766 /* If no control shader is present, then the TES inputs are statically 2767 * sized to MaxPatchVertices; the actual size of the arrays won't be 2768 * known until draw time. 2769 */ 2770 const int num_vertices = tcs 2771 ? tcs->Program->info.tess.tcs_vertices_out 2772 : ctx->Const.MaxPatchVertices; 2773 2774 array_resize_visitor input_resize_visitor(num_vertices, prog, 2775 MESA_SHADER_TESS_EVAL); 2776 foreach_in_list(ir_instruction, ir, tes->ir) { 2777 ir->accept(&input_resize_visitor); 2778 } 2779 2780 if (tcs) { 2781 /* Convert the gl_PatchVerticesIn system value into a constant, since 2782 * the value is known at this point. 2783 */ 2784 foreach_in_list(ir_instruction, ir, tes->ir) { 2785 ir_variable *var = ir->as_variable(); 2786 if (var && var->data.mode == ir_var_system_value && 2787 var->data.location == SYSTEM_VALUE_VERTICES_IN) { 2788 void *mem_ctx = ralloc_parent(var); 2789 var->data.location = 0; 2790 var->data.explicit_location = false; 2791 var->data.mode = ir_var_auto; 2792 var->constant_value = new(mem_ctx) ir_constant(num_vertices); 2793 } 2794 } 2795 } 2796} 2797 2798/** 2799 * Find a contiguous set of available bits in a bitmask. 2800 * 2801 * \param used_mask Bits representing used (1) and unused (0) locations 2802 * \param needed_count Number of contiguous bits needed. 2803 * 2804 * \return 2805 * Base location of the available bits on success or -1 on failure. 2806 */ 2807static int 2808find_available_slots(unsigned used_mask, unsigned needed_count) 2809{ 2810 unsigned needed_mask = (1 << needed_count) - 1; 2811 const int max_bit_to_test = (8 * sizeof(used_mask)) - needed_count; 2812 2813 /* The comparison to 32 is redundant, but without it GCC emits "warning: 2814 * cannot optimize possibly infinite loops" for the loop below. 2815 */ 2816 if ((needed_count == 0) || (max_bit_to_test < 0) || (max_bit_to_test > 32)) 2817 return -1; 2818 2819 for (int i = 0; i <= max_bit_to_test; i++) { 2820 if ((needed_mask & ~used_mask) == needed_mask) 2821 return i; 2822 2823 needed_mask <<= 1; 2824 } 2825 2826 return -1; 2827} 2828 2829 2830#define SAFE_MASK_FROM_INDEX(i) (((i) >= 32) ? ~0 : ((1 << (i)) - 1)) 2831 2832/** 2833 * Assign locations for either VS inputs or FS outputs. 2834 * 2835 * \param mem_ctx Temporary ralloc context used for linking. 2836 * \param prog Shader program whose variables need locations 2837 * assigned. 2838 * \param constants Driver specific constant values for the program. 2839 * \param target_index Selector for the program target to receive location 2840 * assignmnets. Must be either \c MESA_SHADER_VERTEX or 2841 * \c MESA_SHADER_FRAGMENT. 2842 * \param do_assignment Whether we are actually marking the assignment or we 2843 * are just doing a dry-run checking. 2844 * 2845 * \return 2846 * If locations are (or can be, in case of dry-running) successfully assigned, 2847 * true is returned. Otherwise an error is emitted to the shader link log and 2848 * false is returned. 2849 */ 2850static bool 2851assign_attribute_or_color_locations(void *mem_ctx, 2852 gl_shader_program *prog, 2853 struct gl_constants *constants, 2854 unsigned target_index, 2855 bool do_assignment) 2856{ 2857 /* Maximum number of generic locations. This corresponds to either the 2858 * maximum number of draw buffers or the maximum number of generic 2859 * attributes. 2860 */ 2861 unsigned max_index = (target_index == MESA_SHADER_VERTEX) ? 2862 constants->Program[target_index].MaxAttribs : 2863 MAX2(constants->MaxDrawBuffers, constants->MaxDualSourceDrawBuffers); 2864 2865 /* Mark invalid locations as being used. 2866 */ 2867 unsigned used_locations = ~SAFE_MASK_FROM_INDEX(max_index); 2868 unsigned double_storage_locations = 0; 2869 2870 assert((target_index == MESA_SHADER_VERTEX) 2871 || (target_index == MESA_SHADER_FRAGMENT)); 2872 2873 gl_linked_shader *const sh = prog->_LinkedShaders[target_index]; 2874 if (sh == NULL) 2875 return true; 2876 2877 /* Operate in a total of four passes. 2878 * 2879 * 1. Invalidate the location assignments for all vertex shader inputs. 2880 * 2881 * 2. Assign locations for inputs that have user-defined (via 2882 * glBindVertexAttribLocation) locations and outputs that have 2883 * user-defined locations (via glBindFragDataLocation). 2884 * 2885 * 3. Sort the attributes without assigned locations by number of slots 2886 * required in decreasing order. Fragmentation caused by attribute 2887 * locations assigned by the application may prevent large attributes 2888 * from having enough contiguous space. 2889 * 2890 * 4. Assign locations to any inputs without assigned locations. 2891 */ 2892 2893 const int generic_base = (target_index == MESA_SHADER_VERTEX) 2894 ? (int) VERT_ATTRIB_GENERIC0 : (int) FRAG_RESULT_DATA0; 2895 2896 const enum ir_variable_mode direction = 2897 (target_index == MESA_SHADER_VERTEX) 2898 ? ir_var_shader_in : ir_var_shader_out; 2899 2900 2901 /* Temporary storage for the set of attributes that need locations assigned. 2902 */ 2903 struct temp_attr { 2904 unsigned slots; 2905 ir_variable *var; 2906 2907 /* Used below in the call to qsort. */ 2908 static int compare(const void *a, const void *b) 2909 { 2910 const temp_attr *const l = (const temp_attr *) a; 2911 const temp_attr *const r = (const temp_attr *) b; 2912 2913 /* Reversed because we want a descending order sort below. */ 2914 return r->slots - l->slots; 2915 } 2916 } to_assign[32]; 2917 assert(max_index <= 32); 2918 2919 /* Temporary array for the set of attributes that have locations assigned, 2920 * for the purpose of checking overlapping slots/components of (non-ES) 2921 * fragment shader outputs. 2922 */ 2923 ir_variable *assigned[12 * 4]; /* (max # of FS outputs) * # components */ 2924 unsigned assigned_attr = 0; 2925 2926 unsigned num_attr = 0; 2927 2928 foreach_in_list(ir_instruction, node, sh->ir) { 2929 ir_variable *const var = node->as_variable(); 2930 2931 if ((var == NULL) || (var->data.mode != (unsigned) direction)) 2932 continue; 2933 2934 if (var->data.explicit_location) { 2935 var->data.is_unmatched_generic_inout = 0; 2936 if ((var->data.location >= (int)(max_index + generic_base)) 2937 || (var->data.location < 0)) { 2938 linker_error(prog, 2939 "invalid explicit location %d specified for `%s'\n", 2940 (var->data.location < 0) 2941 ? var->data.location 2942 : var->data.location - generic_base, 2943 var->name); 2944 return false; 2945 } 2946 } else if (target_index == MESA_SHADER_VERTEX) { 2947 unsigned binding; 2948 2949 if (prog->AttributeBindings->get(binding, var->name)) { 2950 assert(binding >= VERT_ATTRIB_GENERIC0); 2951 var->data.location = binding; 2952 var->data.is_unmatched_generic_inout = 0; 2953 } 2954 } else if (target_index == MESA_SHADER_FRAGMENT) { 2955 unsigned binding; 2956 unsigned index; 2957 const char *name = var->name; 2958 const glsl_type *type = var->type; 2959 2960 while (type) { 2961 /* Check if there's a binding for the variable name */ 2962 if (prog->FragDataBindings->get(binding, name)) { 2963 assert(binding >= FRAG_RESULT_DATA0); 2964 var->data.location = binding; 2965 var->data.is_unmatched_generic_inout = 0; 2966 2967 if (prog->FragDataIndexBindings->get(index, name)) { 2968 var->data.index = index; 2969 } 2970 break; 2971 } 2972 2973 /* If not, but it's an array type, look for name[0] */ 2974 if (type->is_array()) { 2975 name = ralloc_asprintf(mem_ctx, "%s[0]", name); 2976 type = type->fields.array; 2977 continue; 2978 } 2979 2980 break; 2981 } 2982 } 2983 2984 if (strcmp(var->name, "gl_LastFragData") == 0) 2985 continue; 2986 2987 /* From GL4.5 core spec, section 15.2 (Shader Execution): 2988 * 2989 * "Output binding assignments will cause LinkProgram to fail: 2990 * ... 2991 * If the program has an active output assigned to a location greater 2992 * than or equal to the value of MAX_DUAL_SOURCE_DRAW_BUFFERS and has 2993 * an active output assigned an index greater than or equal to one;" 2994 */ 2995 if (target_index == MESA_SHADER_FRAGMENT && var->data.index >= 1 && 2996 var->data.location - generic_base >= 2997 (int) constants->MaxDualSourceDrawBuffers) { 2998 linker_error(prog, 2999 "output location %d >= GL_MAX_DUAL_SOURCE_DRAW_BUFFERS " 3000 "with index %u for %s\n", 3001 var->data.location - generic_base, var->data.index, 3002 var->name); 3003 return false; 3004 } 3005 3006 const unsigned slots = var->type->count_attribute_slots(target_index == MESA_SHADER_VERTEX); 3007 3008 /* If the variable is not a built-in and has a location statically 3009 * assigned in the shader (presumably via a layout qualifier), make sure 3010 * that it doesn't collide with other assigned locations. Otherwise, 3011 * add it to the list of variables that need linker-assigned locations. 3012 */ 3013 if (var->data.location != -1) { 3014 if (var->data.location >= generic_base && var->data.index < 1) { 3015 /* From page 61 of the OpenGL 4.0 spec: 3016 * 3017 * "LinkProgram will fail if the attribute bindings assigned 3018 * by BindAttribLocation do not leave not enough space to 3019 * assign a location for an active matrix attribute or an 3020 * active attribute array, both of which require multiple 3021 * contiguous generic attributes." 3022 * 3023 * I think above text prohibits the aliasing of explicit and 3024 * automatic assignments. But, aliasing is allowed in manual 3025 * assignments of attribute locations. See below comments for 3026 * the details. 3027 * 3028 * From OpenGL 4.0 spec, page 61: 3029 * 3030 * "It is possible for an application to bind more than one 3031 * attribute name to the same location. This is referred to as 3032 * aliasing. This will only work if only one of the aliased 3033 * attributes is active in the executable program, or if no 3034 * path through the shader consumes more than one attribute of 3035 * a set of attributes aliased to the same location. A link 3036 * error can occur if the linker determines that every path 3037 * through the shader consumes multiple aliased attributes, 3038 * but implementations are not required to generate an error 3039 * in this case." 3040 * 3041 * From GLSL 4.30 spec, page 54: 3042 * 3043 * "A program will fail to link if any two non-vertex shader 3044 * input variables are assigned to the same location. For 3045 * vertex shaders, multiple input variables may be assigned 3046 * to the same location using either layout qualifiers or via 3047 * the OpenGL API. However, such aliasing is intended only to 3048 * support vertex shaders where each execution path accesses 3049 * at most one input per each location. Implementations are 3050 * permitted, but not required, to generate link-time errors 3051 * if they detect that every path through the vertex shader 3052 * executable accesses multiple inputs assigned to any single 3053 * location. For all shader types, a program will fail to link 3054 * if explicit location assignments leave the linker unable 3055 * to find space for other variables without explicit 3056 * assignments." 3057 * 3058 * From OpenGL ES 3.0 spec, page 56: 3059 * 3060 * "Binding more than one attribute name to the same location 3061 * is referred to as aliasing, and is not permitted in OpenGL 3062 * ES Shading Language 3.00 vertex shaders. LinkProgram will 3063 * fail when this condition exists. However, aliasing is 3064 * possible in OpenGL ES Shading Language 1.00 vertex shaders. 3065 * This will only work if only one of the aliased attributes 3066 * is active in the executable program, or if no path through 3067 * the shader consumes more than one attribute of a set of 3068 * attributes aliased to the same location. A link error can 3069 * occur if the linker determines that every path through the 3070 * shader consumes multiple aliased attributes, but implemen- 3071 * tations are not required to generate an error in this case." 3072 * 3073 * After looking at above references from OpenGL, OpenGL ES and 3074 * GLSL specifications, we allow aliasing of vertex input variables 3075 * in: OpenGL 2.0 (and above) and OpenGL ES 2.0. 3076 * 3077 * NOTE: This is not required by the spec but its worth mentioning 3078 * here that we're not doing anything to make sure that no path 3079 * through the vertex shader executable accesses multiple inputs 3080 * assigned to any single location. 3081 */ 3082 3083 /* Mask representing the contiguous slots that will be used by 3084 * this attribute. 3085 */ 3086 const unsigned attr = var->data.location - generic_base; 3087 const unsigned use_mask = (1 << slots) - 1; 3088 const char *const string = (target_index == MESA_SHADER_VERTEX) 3089 ? "vertex shader input" : "fragment shader output"; 3090 3091 /* Generate a link error if the requested locations for this 3092 * attribute exceed the maximum allowed attribute location. 3093 */ 3094 if (attr + slots > max_index) { 3095 linker_error(prog, 3096 "insufficient contiguous locations " 3097 "available for %s `%s' %d %d %d\n", string, 3098 var->name, used_locations, use_mask, attr); 3099 return false; 3100 } 3101 3102 /* Generate a link error if the set of bits requested for this 3103 * attribute overlaps any previously allocated bits. 3104 */ 3105 if ((~(use_mask << attr) & used_locations) != used_locations) { 3106 if (target_index == MESA_SHADER_FRAGMENT && !prog->IsES) { 3107 /* From section 4.4.2 (Output Layout Qualifiers) of the GLSL 3108 * 4.40 spec: 3109 * 3110 * "Additionally, for fragment shader outputs, if two 3111 * variables are placed within the same location, they 3112 * must have the same underlying type (floating-point or 3113 * integer). No component aliasing of output variables or 3114 * members is allowed. 3115 */ 3116 for (unsigned i = 0; i < assigned_attr; i++) { 3117 unsigned assigned_slots = 3118 assigned[i]->type->count_attribute_slots(false); 3119 unsigned assig_attr = 3120 assigned[i]->data.location - generic_base; 3121 unsigned assigned_use_mask = (1 << assigned_slots) - 1; 3122 3123 if ((assigned_use_mask << assig_attr) & 3124 (use_mask << attr)) { 3125 3126 const glsl_type *assigned_type = 3127 assigned[i]->type->without_array(); 3128 const glsl_type *type = var->type->without_array(); 3129 if (assigned_type->base_type != type->base_type) { 3130 linker_error(prog, "types do not match for aliased" 3131 " %ss %s and %s\n", string, 3132 assigned[i]->name, var->name); 3133 return false; 3134 } 3135 3136 unsigned assigned_component_mask = 3137 ((1 << assigned_type->vector_elements) - 1) << 3138 assigned[i]->data.location_frac; 3139 unsigned component_mask = 3140 ((1 << type->vector_elements) - 1) << 3141 var->data.location_frac; 3142 if (assigned_component_mask & component_mask) { 3143 linker_error(prog, "overlapping component is " 3144 "assigned to %ss %s and %s " 3145 "(component=%d)\n", 3146 string, assigned[i]->name, var->name, 3147 var->data.location_frac); 3148 return false; 3149 } 3150 } 3151 } 3152 } else if (target_index == MESA_SHADER_FRAGMENT || 3153 (prog->IsES && prog->data->Version >= 300)) { 3154 linker_error(prog, "overlapping location is assigned " 3155 "to %s `%s' %d %d %d\n", string, var->name, 3156 used_locations, use_mask, attr); 3157 return false; 3158 } else { 3159 linker_warning(prog, "overlapping location is assigned " 3160 "to %s `%s' %d %d %d\n", string, var->name, 3161 used_locations, use_mask, attr); 3162 } 3163 } 3164 3165 if (target_index == MESA_SHADER_FRAGMENT && !prog->IsES) { 3166 /* Only track assigned variables for non-ES fragment shaders 3167 * to avoid overflowing the array. 3168 * 3169 * At most one variable per fragment output component should 3170 * reach this. 3171 */ 3172 assert(assigned_attr < ARRAY_SIZE(assigned)); 3173 assigned[assigned_attr] = var; 3174 assigned_attr++; 3175 } 3176 3177 used_locations |= (use_mask << attr); 3178 3179 /* From the GL 4.5 core spec, section 11.1.1 (Vertex Attributes): 3180 * 3181 * "A program with more than the value of MAX_VERTEX_ATTRIBS 3182 * active attribute variables may fail to link, unless 3183 * device-dependent optimizations are able to make the program 3184 * fit within available hardware resources. For the purposes 3185 * of this test, attribute variables of the type dvec3, dvec4, 3186 * dmat2x3, dmat2x4, dmat3, dmat3x4, dmat4x3, and dmat4 may 3187 * count as consuming twice as many attributes as equivalent 3188 * single-precision types. While these types use the same number 3189 * of generic attributes as their single-precision equivalents, 3190 * implementations are permitted to consume two single-precision 3191 * vectors of internal storage for each three- or four-component 3192 * double-precision vector." 3193 * 3194 * Mark this attribute slot as taking up twice as much space 3195 * so we can count it properly against limits. According to 3196 * issue (3) of the GL_ARB_vertex_attrib_64bit behavior, this 3197 * is optional behavior, but it seems preferable. 3198 */ 3199 if (var->type->without_array()->is_dual_slot()) 3200 double_storage_locations |= (use_mask << attr); 3201 } 3202 3203 continue; 3204 } 3205 3206 if (num_attr >= max_index) { 3207 linker_error(prog, "too many %s (max %u)", 3208 target_index == MESA_SHADER_VERTEX ? 3209 "vertex shader inputs" : "fragment shader outputs", 3210 max_index); 3211 return false; 3212 } 3213 to_assign[num_attr].slots = slots; 3214 to_assign[num_attr].var = var; 3215 num_attr++; 3216 } 3217 3218 if (!do_assignment) 3219 return true; 3220 3221 if (target_index == MESA_SHADER_VERTEX) { 3222 unsigned total_attribs_size = 3223 util_bitcount(used_locations & SAFE_MASK_FROM_INDEX(max_index)) + 3224 util_bitcount(double_storage_locations); 3225 if (total_attribs_size > max_index) { 3226 linker_error(prog, 3227 "attempt to use %d vertex attribute slots only %d available ", 3228 total_attribs_size, max_index); 3229 return false; 3230 } 3231 } 3232 3233 /* If all of the attributes were assigned locations by the application (or 3234 * are built-in attributes with fixed locations), return early. This should 3235 * be the common case. 3236 */ 3237 if (num_attr == 0) 3238 return true; 3239 3240 qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare); 3241 3242 if (target_index == MESA_SHADER_VERTEX) { 3243 /* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS. It can 3244 * only be explicitly assigned by via glBindAttribLocation. Mark it as 3245 * reserved to prevent it from being automatically allocated below. 3246 */ 3247 find_deref_visitor find("gl_Vertex"); 3248 find.run(sh->ir); 3249 if (find.variable_found()) 3250 used_locations |= (1 << 0); 3251 } 3252 3253 for (unsigned i = 0; i < num_attr; i++) { 3254 /* Mask representing the contiguous slots that will be used by this 3255 * attribute. 3256 */ 3257 const unsigned use_mask = (1 << to_assign[i].slots) - 1; 3258 3259 int location = find_available_slots(used_locations, to_assign[i].slots); 3260 3261 if (location < 0) { 3262 const char *const string = (target_index == MESA_SHADER_VERTEX) 3263 ? "vertex shader input" : "fragment shader output"; 3264 3265 linker_error(prog, 3266 "insufficient contiguous locations " 3267 "available for %s `%s'\n", 3268 string, to_assign[i].var->name); 3269 return false; 3270 } 3271 3272 to_assign[i].var->data.location = generic_base + location; 3273 to_assign[i].var->data.is_unmatched_generic_inout = 0; 3274 used_locations |= (use_mask << location); 3275 3276 if (to_assign[i].var->type->without_array()->is_dual_slot()) 3277 double_storage_locations |= (use_mask << location); 3278 } 3279 3280 /* Now that we have all the locations, from the GL 4.5 core spec, section 3281 * 11.1.1 (Vertex Attributes), dvec3, dvec4, dmat2x3, dmat2x4, dmat3, 3282 * dmat3x4, dmat4x3, and dmat4 count as consuming twice as many attributes 3283 * as equivalent single-precision types. 3284 */ 3285 if (target_index == MESA_SHADER_VERTEX) { 3286 unsigned total_attribs_size = 3287 util_bitcount(used_locations & SAFE_MASK_FROM_INDEX(max_index)) + 3288 util_bitcount(double_storage_locations); 3289 if (total_attribs_size > max_index) { 3290 linker_error(prog, 3291 "attempt to use %d vertex attribute slots only %d available ", 3292 total_attribs_size, max_index); 3293 return false; 3294 } 3295 } 3296 3297 return true; 3298} 3299 3300/** 3301 * Match explicit locations of outputs to inputs and deactivate the 3302 * unmatch flag if found so we don't optimise them away. 3303 */ 3304static void 3305match_explicit_outputs_to_inputs(gl_linked_shader *producer, 3306 gl_linked_shader *consumer) 3307{ 3308 glsl_symbol_table parameters; 3309 ir_variable *explicit_locations[MAX_VARYINGS_INCL_PATCH][4] = 3310 { {NULL, NULL} }; 3311 3312 /* Find all shader outputs in the "producer" stage. 3313 */ 3314 foreach_in_list(ir_instruction, node, producer->ir) { 3315 ir_variable *const var = node->as_variable(); 3316 3317 if ((var == NULL) || (var->data.mode != ir_var_shader_out)) 3318 continue; 3319 3320 if (var->data.explicit_location && 3321 var->data.location >= VARYING_SLOT_VAR0) { 3322 const unsigned idx = var->data.location - VARYING_SLOT_VAR0; 3323 if (explicit_locations[idx][var->data.location_frac] == NULL) 3324 explicit_locations[idx][var->data.location_frac] = var; 3325 3326 /* Always match TCS outputs. They are shared by all invocations 3327 * within a patch and can be used as shared memory. 3328 */ 3329 if (producer->Stage == MESA_SHADER_TESS_CTRL) 3330 var->data.is_unmatched_generic_inout = 0; 3331 } 3332 } 3333 3334 /* Match inputs to outputs */ 3335 foreach_in_list(ir_instruction, node, consumer->ir) { 3336 ir_variable *const input = node->as_variable(); 3337 3338 if ((input == NULL) || (input->data.mode != ir_var_shader_in)) 3339 continue; 3340 3341 ir_variable *output = NULL; 3342 if (input->data.explicit_location 3343 && input->data.location >= VARYING_SLOT_VAR0) { 3344 output = explicit_locations[input->data.location - VARYING_SLOT_VAR0] 3345 [input->data.location_frac]; 3346 3347 if (output != NULL){ 3348 input->data.is_unmatched_generic_inout = 0; 3349 output->data.is_unmatched_generic_inout = 0; 3350 } 3351 } 3352 } 3353} 3354 3355/** 3356 * Store the gl_FragDepth layout in the gl_shader_program struct. 3357 */ 3358static void 3359store_fragdepth_layout(struct gl_shader_program *prog) 3360{ 3361 if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { 3362 return; 3363 } 3364 3365 struct exec_list *ir = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir; 3366 3367 /* We don't look up the gl_FragDepth symbol directly because if 3368 * gl_FragDepth is not used in the shader, it's removed from the IR. 3369 * However, the symbol won't be removed from the symbol table. 3370 * 3371 * We're only interested in the cases where the variable is NOT removed 3372 * from the IR. 3373 */ 3374 foreach_in_list(ir_instruction, node, ir) { 3375 ir_variable *const var = node->as_variable(); 3376 3377 if (var == NULL || var->data.mode != ir_var_shader_out) { 3378 continue; 3379 } 3380 3381 if (strcmp(var->name, "gl_FragDepth") == 0) { 3382 switch (var->data.depth_layout) { 3383 case ir_depth_layout_none: 3384 prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_NONE; 3385 return; 3386 case ir_depth_layout_any: 3387 prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_ANY; 3388 return; 3389 case ir_depth_layout_greater: 3390 prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_GREATER; 3391 return; 3392 case ir_depth_layout_less: 3393 prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_LESS; 3394 return; 3395 case ir_depth_layout_unchanged: 3396 prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_UNCHANGED; 3397 return; 3398 default: 3399 assert(0); 3400 return; 3401 } 3402 } 3403 } 3404} 3405 3406/** 3407 * Validate shader image resources. 3408 */ 3409static void 3410check_image_resources(struct gl_context *ctx, struct gl_shader_program *prog) 3411{ 3412 unsigned total_image_units = 0; 3413 unsigned fragment_outputs = 0; 3414 unsigned total_shader_storage_blocks = 0; 3415 3416 if (!ctx->Extensions.ARB_shader_image_load_store) 3417 return; 3418 3419 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 3420 struct gl_linked_shader *sh = prog->_LinkedShaders[i]; 3421 3422 if (sh) { 3423 total_image_units += sh->Program->info.num_images; 3424 total_shader_storage_blocks += sh->Program->info.num_ssbos; 3425 3426 if (i == MESA_SHADER_FRAGMENT) { 3427 foreach_in_list(ir_instruction, node, sh->ir) { 3428 ir_variable *var = node->as_variable(); 3429 if (var && var->data.mode == ir_var_shader_out) 3430 /* since there are no double fs outputs - pass false */ 3431 fragment_outputs += var->type->count_attribute_slots(false); 3432 } 3433 } 3434 } 3435 } 3436 3437 if (total_image_units > ctx->Const.MaxCombinedImageUniforms) 3438 linker_error(prog, "Too many combined image uniforms\n"); 3439 3440 if (total_image_units + fragment_outputs + total_shader_storage_blocks > 3441 ctx->Const.MaxCombinedShaderOutputResources) 3442 linker_error(prog, "Too many combined image uniforms, shader storage " 3443 " buffers and fragment outputs\n"); 3444} 3445 3446 3447/** 3448 * Initializes explicit location slots to INACTIVE_UNIFORM_EXPLICIT_LOCATION 3449 * for a variable, checks for overlaps between other uniforms using explicit 3450 * locations. 3451 */ 3452static int 3453reserve_explicit_locations(struct gl_shader_program *prog, 3454 string_to_uint_map *map, ir_variable *var) 3455{ 3456 unsigned slots = var->type->uniform_locations(); 3457 unsigned max_loc = var->data.location + slots - 1; 3458 unsigned return_value = slots; 3459 3460 /* Resize remap table if locations do not fit in the current one. */ 3461 if (max_loc + 1 > prog->NumUniformRemapTable) { 3462 prog->UniformRemapTable = 3463 reralloc(prog, prog->UniformRemapTable, 3464 gl_uniform_storage *, 3465 max_loc + 1); 3466 3467 if (!prog->UniformRemapTable) { 3468 linker_error(prog, "Out of memory during linking.\n"); 3469 return -1; 3470 } 3471 3472 /* Initialize allocated space. */ 3473 for (unsigned i = prog->NumUniformRemapTable; i < max_loc + 1; i++) 3474 prog->UniformRemapTable[i] = NULL; 3475 3476 prog->NumUniformRemapTable = max_loc + 1; 3477 } 3478 3479 for (unsigned i = 0; i < slots; i++) { 3480 unsigned loc = var->data.location + i; 3481 3482 /* Check if location is already used. */ 3483 if (prog->UniformRemapTable[loc] == INACTIVE_UNIFORM_EXPLICIT_LOCATION) { 3484 3485 /* Possibly same uniform from a different stage, this is ok. */ 3486 unsigned hash_loc; 3487 if (map->get(hash_loc, var->name) && hash_loc == loc - i) { 3488 return_value = 0; 3489 continue; 3490 } 3491 3492 /* ARB_explicit_uniform_location specification states: 3493 * 3494 * "No two default-block uniform variables in the program can have 3495 * the same location, even if they are unused, otherwise a compiler 3496 * or linker error will be generated." 3497 */ 3498 linker_error(prog, 3499 "location qualifier for uniform %s overlaps " 3500 "previously used location\n", 3501 var->name); 3502 return -1; 3503 } 3504 3505 /* Initialize location as inactive before optimization 3506 * rounds and location assignment. 3507 */ 3508 prog->UniformRemapTable[loc] = INACTIVE_UNIFORM_EXPLICIT_LOCATION; 3509 } 3510 3511 /* Note, base location used for arrays. */ 3512 map->put(var->data.location, var->name); 3513 3514 return return_value; 3515} 3516 3517static bool 3518reserve_subroutine_explicit_locations(struct gl_shader_program *prog, 3519 struct gl_program *p, 3520 ir_variable *var) 3521{ 3522 unsigned slots = var->type->uniform_locations(); 3523 unsigned max_loc = var->data.location + slots - 1; 3524 3525 /* Resize remap table if locations do not fit in the current one. */ 3526 if (max_loc + 1 > p->sh.NumSubroutineUniformRemapTable) { 3527 p->sh.SubroutineUniformRemapTable = 3528 reralloc(p, p->sh.SubroutineUniformRemapTable, 3529 gl_uniform_storage *, 3530 max_loc + 1); 3531 3532 if (!p->sh.SubroutineUniformRemapTable) { 3533 linker_error(prog, "Out of memory during linking.\n"); 3534 return false; 3535 } 3536 3537 /* Initialize allocated space. */ 3538 for (unsigned i = p->sh.NumSubroutineUniformRemapTable; i < max_loc + 1; i++) 3539 p->sh.SubroutineUniformRemapTable[i] = NULL; 3540 3541 p->sh.NumSubroutineUniformRemapTable = max_loc + 1; 3542 } 3543 3544 for (unsigned i = 0; i < slots; i++) { 3545 unsigned loc = var->data.location + i; 3546 3547 /* Check if location is already used. */ 3548 if (p->sh.SubroutineUniformRemapTable[loc] == INACTIVE_UNIFORM_EXPLICIT_LOCATION) { 3549 3550 /* ARB_explicit_uniform_location specification states: 3551 * "No two subroutine uniform variables can have the same location 3552 * in the same shader stage, otherwise a compiler or linker error 3553 * will be generated." 3554 */ 3555 linker_error(prog, 3556 "location qualifier for uniform %s overlaps " 3557 "previously used location\n", 3558 var->name); 3559 return false; 3560 } 3561 3562 /* Initialize location as inactive before optimization 3563 * rounds and location assignment. 3564 */ 3565 p->sh.SubroutineUniformRemapTable[loc] = INACTIVE_UNIFORM_EXPLICIT_LOCATION; 3566 } 3567 3568 return true; 3569} 3570/** 3571 * Check and reserve all explicit uniform locations, called before 3572 * any optimizations happen to handle also inactive uniforms and 3573 * inactive array elements that may get trimmed away. 3574 */ 3575static void 3576check_explicit_uniform_locations(struct gl_context *ctx, 3577 struct gl_shader_program *prog) 3578{ 3579 prog->NumExplicitUniformLocations = 0; 3580 3581 if (!ctx->Extensions.ARB_explicit_uniform_location) 3582 return; 3583 3584 /* This map is used to detect if overlapping explicit locations 3585 * occur with the same uniform (from different stage) or a different one. 3586 */ 3587 string_to_uint_map *uniform_map = new string_to_uint_map; 3588 3589 if (!uniform_map) { 3590 linker_error(prog, "Out of memory during linking.\n"); 3591 return; 3592 } 3593 3594 unsigned entries_total = 0; 3595 unsigned mask = prog->data->linked_stages; 3596 while (mask) { 3597 const int i = u_bit_scan(&mask); 3598 struct gl_program *p = prog->_LinkedShaders[i]->Program; 3599 3600 foreach_in_list(ir_instruction, node, prog->_LinkedShaders[i]->ir) { 3601 ir_variable *var = node->as_variable(); 3602 if (!var || var->data.mode != ir_var_uniform) 3603 continue; 3604 3605 if (var->data.explicit_location) { 3606 bool ret = false; 3607 if (var->type->without_array()->is_subroutine()) 3608 ret = reserve_subroutine_explicit_locations(prog, p, var); 3609 else { 3610 int slots = reserve_explicit_locations(prog, uniform_map, 3611 var); 3612 if (slots != -1) { 3613 ret = true; 3614 entries_total += slots; 3615 } 3616 } 3617 if (!ret) { 3618 delete uniform_map; 3619 return; 3620 } 3621 } 3622 } 3623 } 3624 3625 link_util_update_empty_uniform_locations(prog); 3626 3627 delete uniform_map; 3628 prog->NumExplicitUniformLocations = entries_total; 3629} 3630 3631/* Function checks if a variable var is a packed varying and 3632 * if given name is part of packed varying's list. 3633 * 3634 * If a variable is a packed varying, it has a name like 3635 * 'packed:a,b,c' where a, b and c are separate variables. 3636 */ 3637static bool 3638included_in_packed_varying(ir_variable *var, const char *name) 3639{ 3640 if (strncmp(var->name, "packed:", 7) != 0) 3641 return false; 3642 3643 char *list = strdup(var->name + 7); 3644 assert(list); 3645 3646 bool found = false; 3647 char *saveptr; 3648 char *token = strtok_r(list, ",", &saveptr); 3649 while (token) { 3650 if (strcmp(token, name) == 0) { 3651 found = true; 3652 break; 3653 } 3654 token = strtok_r(NULL, ",", &saveptr); 3655 } 3656 free(list); 3657 return found; 3658} 3659 3660/** 3661 * Function builds a stage reference bitmask from variable name. 3662 */ 3663static uint8_t 3664build_stageref(struct gl_shader_program *shProg, const char *name, 3665 unsigned mode) 3666{ 3667 uint8_t stages = 0; 3668 3669 /* Note, that we assume MAX 8 stages, if there will be more stages, type 3670 * used for reference mask in gl_program_resource will need to be changed. 3671 */ 3672 assert(MESA_SHADER_STAGES < 8); 3673 3674 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 3675 struct gl_linked_shader *sh = shProg->_LinkedShaders[i]; 3676 if (!sh) 3677 continue; 3678 3679 /* Shader symbol table may contain variables that have 3680 * been optimized away. Search IR for the variable instead. 3681 */ 3682 foreach_in_list(ir_instruction, node, sh->ir) { 3683 ir_variable *var = node->as_variable(); 3684 if (var) { 3685 unsigned baselen = strlen(var->name); 3686 3687 if (included_in_packed_varying(var, name)) { 3688 stages |= (1 << i); 3689 break; 3690 } 3691 3692 /* Type needs to match if specified, otherwise we might 3693 * pick a variable with same name but different interface. 3694 */ 3695 if (var->data.mode != mode) 3696 continue; 3697 3698 if (strncmp(var->name, name, baselen) == 0) { 3699 /* Check for exact name matches but also check for arrays and 3700 * structs. 3701 */ 3702 if (name[baselen] == '\0' || 3703 name[baselen] == '[' || 3704 name[baselen] == '.') { 3705 stages |= (1 << i); 3706 break; 3707 } 3708 } 3709 } 3710 } 3711 } 3712 return stages; 3713} 3714 3715/** 3716 * Create gl_shader_variable from ir_variable class. 3717 */ 3718static gl_shader_variable * 3719create_shader_variable(struct gl_shader_program *shProg, 3720 const ir_variable *in, 3721 const char *name, const glsl_type *type, 3722 const glsl_type *interface_type, 3723 bool use_implicit_location, int location, 3724 const glsl_type *outermost_struct_type) 3725{ 3726 /* Allocate zero-initialized memory to ensure that bitfield padding 3727 * is zero. 3728 */ 3729 gl_shader_variable *out = rzalloc(shProg, struct gl_shader_variable); 3730 if (!out) 3731 return NULL; 3732 3733 /* Since gl_VertexID may be lowered to gl_VertexIDMESA, but applications 3734 * expect to see gl_VertexID in the program resource list. Pretend. 3735 */ 3736 if (in->data.mode == ir_var_system_value && 3737 in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) { 3738 out->name = ralloc_strdup(shProg, "gl_VertexID"); 3739 } else if ((in->data.mode == ir_var_shader_out && 3740 in->data.location == VARYING_SLOT_TESS_LEVEL_OUTER) || 3741 (in->data.mode == ir_var_system_value && 3742 in->data.location == SYSTEM_VALUE_TESS_LEVEL_OUTER)) { 3743 out->name = ralloc_strdup(shProg, "gl_TessLevelOuter"); 3744 type = glsl_type::get_array_instance(glsl_type::float_type, 4); 3745 } else if ((in->data.mode == ir_var_shader_out && 3746 in->data.location == VARYING_SLOT_TESS_LEVEL_INNER) || 3747 (in->data.mode == ir_var_system_value && 3748 in->data.location == SYSTEM_VALUE_TESS_LEVEL_INNER)) { 3749 out->name = ralloc_strdup(shProg, "gl_TessLevelInner"); 3750 type = glsl_type::get_array_instance(glsl_type::float_type, 2); 3751 } else { 3752 out->name = ralloc_strdup(shProg, name); 3753 } 3754 3755 if (!out->name) 3756 return NULL; 3757 3758 /* The ARB_program_interface_query spec says: 3759 * 3760 * "Not all active variables are assigned valid locations; the 3761 * following variables will have an effective location of -1: 3762 * 3763 * * uniforms declared as atomic counters; 3764 * 3765 * * members of a uniform block; 3766 * 3767 * * built-in inputs, outputs, and uniforms (starting with "gl_"); and 3768 * 3769 * * inputs or outputs not declared with a "location" layout 3770 * qualifier, except for vertex shader inputs and fragment shader 3771 * outputs." 3772 */ 3773 if (in->type->is_atomic_uint() || is_gl_identifier(in->name) || 3774 !(in->data.explicit_location || use_implicit_location)) { 3775 out->location = -1; 3776 } else { 3777 out->location = location; 3778 } 3779 3780 out->type = type; 3781 out->outermost_struct_type = outermost_struct_type; 3782 out->interface_type = interface_type; 3783 out->component = in->data.location_frac; 3784 out->index = in->data.index; 3785 out->patch = in->data.patch; 3786 out->mode = in->data.mode; 3787 out->interpolation = in->data.interpolation; 3788 out->explicit_location = in->data.explicit_location; 3789 out->precision = in->data.precision; 3790 3791 return out; 3792} 3793 3794static bool 3795add_shader_variable(const struct gl_context *ctx, 3796 struct gl_shader_program *shProg, 3797 struct set *resource_set, 3798 unsigned stage_mask, 3799 GLenum programInterface, ir_variable *var, 3800 const char *name, const glsl_type *type, 3801 bool use_implicit_location, int location, 3802 bool inouts_share_location, 3803 const glsl_type *outermost_struct_type = NULL) 3804{ 3805 const glsl_type *interface_type = var->get_interface_type(); 3806 3807 if (outermost_struct_type == NULL) { 3808 if (var->data.from_named_ifc_block) { 3809 const char *interface_name = interface_type->name; 3810 3811 if (interface_type->is_array()) { 3812 /* Issue #16 of the ARB_program_interface_query spec says: 3813 * 3814 * "* If a variable is a member of an interface block without an 3815 * instance name, it is enumerated using just the variable name. 3816 * 3817 * * If a variable is a member of an interface block with an 3818 * instance name, it is enumerated as "BlockName.Member", where 3819 * "BlockName" is the name of the interface block (not the 3820 * instance name) and "Member" is the name of the variable." 3821 * 3822 * In particular, it indicates that it should be "BlockName", 3823 * not "BlockName[array length]". The conformance suite and 3824 * dEQP both require this behavior. 3825 * 3826 * Here, we unwrap the extra array level added by named interface 3827 * block array lowering so we have the correct variable type. We 3828 * also unwrap the interface type when constructing the name. 3829 * 3830 * We leave interface_type the same so that ES 3.x SSO pipeline 3831 * validation can enforce the rules requiring array length to 3832 * match on interface blocks. 3833 */ 3834 type = type->fields.array; 3835 3836 interface_name = interface_type->fields.array->name; 3837 } 3838 3839 name = ralloc_asprintf(shProg, "%s.%s", interface_name, name); 3840 } 3841 } 3842 3843 switch (type->base_type) { 3844 case GLSL_TYPE_STRUCT: { 3845 /* The ARB_program_interface_query spec says: 3846 * 3847 * "For an active variable declared as a structure, a separate entry 3848 * will be generated for each active structure member. The name of 3849 * each entry is formed by concatenating the name of the structure, 3850 * the "." character, and the name of the structure member. If a 3851 * structure member to enumerate is itself a structure or array, 3852 * these enumeration rules are applied recursively." 3853 */ 3854 if (outermost_struct_type == NULL) 3855 outermost_struct_type = type; 3856 3857 unsigned field_location = location; 3858 for (unsigned i = 0; i < type->length; i++) { 3859 const struct glsl_struct_field *field = &type->fields.structure[i]; 3860 char *field_name = ralloc_asprintf(shProg, "%s.%s", name, field->name); 3861 if (!add_shader_variable(ctx, shProg, resource_set, 3862 stage_mask, programInterface, 3863 var, field_name, field->type, 3864 use_implicit_location, field_location, 3865 false, outermost_struct_type)) 3866 return false; 3867 3868 field_location += field->type->count_attribute_slots(false); 3869 } 3870 return true; 3871 } 3872 3873 case GLSL_TYPE_ARRAY: { 3874 /* The ARB_program_interface_query spec says: 3875 * 3876 * "For an active variable declared as an array of basic types, a 3877 * single entry will be generated, with its name string formed by 3878 * concatenating the name of the array and the string "[0]"." 3879 * 3880 * "For an active variable declared as an array of an aggregate data 3881 * type (structures or arrays), a separate entry will be generated 3882 * for each active array element, unless noted immediately below. 3883 * The name of each entry is formed by concatenating the name of 3884 * the array, the "[" character, an integer identifying the element 3885 * number, and the "]" character. These enumeration rules are 3886 * applied recursively, treating each enumerated array element as a 3887 * separate active variable." 3888 */ 3889 const struct glsl_type *array_type = type->fields.array; 3890 if (array_type->base_type == GLSL_TYPE_STRUCT || 3891 array_type->base_type == GLSL_TYPE_ARRAY) { 3892 unsigned elem_location = location; 3893 unsigned stride = inouts_share_location ? 0 : 3894 array_type->count_attribute_slots(false); 3895 for (unsigned i = 0; i < type->length; i++) { 3896 char *elem = ralloc_asprintf(shProg, "%s[%d]", name, i); 3897 if (!add_shader_variable(ctx, shProg, resource_set, 3898 stage_mask, programInterface, 3899 var, elem, array_type, 3900 use_implicit_location, elem_location, 3901 false, outermost_struct_type)) 3902 return false; 3903 elem_location += stride; 3904 } 3905 return true; 3906 } 3907 FALLTHROUGH; 3908 } 3909 3910 default: { 3911 /* The ARB_program_interface_query spec says: 3912 * 3913 * "For an active variable declared as a single instance of a basic 3914 * type, a single entry will be generated, using the variable name 3915 * from the shader source." 3916 */ 3917 gl_shader_variable *sha_v = 3918 create_shader_variable(shProg, var, name, type, interface_type, 3919 use_implicit_location, location, 3920 outermost_struct_type); 3921 if (!sha_v) 3922 return false; 3923 3924 return link_util_add_program_resource(shProg, resource_set, 3925 programInterface, sha_v, stage_mask); 3926 } 3927 } 3928} 3929 3930static bool 3931inout_has_same_location(const ir_variable *var, unsigned stage) 3932{ 3933 if (!var->data.patch && 3934 ((var->data.mode == ir_var_shader_out && 3935 stage == MESA_SHADER_TESS_CTRL) || 3936 (var->data.mode == ir_var_shader_in && 3937 (stage == MESA_SHADER_TESS_CTRL || stage == MESA_SHADER_TESS_EVAL || 3938 stage == MESA_SHADER_GEOMETRY)))) 3939 return true; 3940 else 3941 return false; 3942} 3943 3944static bool 3945add_interface_variables(const struct gl_context *ctx, 3946 struct gl_shader_program *shProg, 3947 struct set *resource_set, 3948 unsigned stage, GLenum programInterface) 3949{ 3950 exec_list *ir = shProg->_LinkedShaders[stage]->ir; 3951 3952 foreach_in_list(ir_instruction, node, ir) { 3953 ir_variable *var = node->as_variable(); 3954 3955 if (!var || var->data.how_declared == ir_var_hidden) 3956 continue; 3957 3958 int loc_bias; 3959 3960 switch (var->data.mode) { 3961 case ir_var_system_value: 3962 case ir_var_shader_in: 3963 if (programInterface != GL_PROGRAM_INPUT) 3964 continue; 3965 loc_bias = (stage == MESA_SHADER_VERTEX) ? int(VERT_ATTRIB_GENERIC0) 3966 : int(VARYING_SLOT_VAR0); 3967 break; 3968 case ir_var_shader_out: 3969 if (programInterface != GL_PROGRAM_OUTPUT) 3970 continue; 3971 loc_bias = (stage == MESA_SHADER_FRAGMENT) ? int(FRAG_RESULT_DATA0) 3972 : int(VARYING_SLOT_VAR0); 3973 break; 3974 default: 3975 continue; 3976 }; 3977 3978 if (var->data.patch) 3979 loc_bias = int(VARYING_SLOT_PATCH0); 3980 3981 /* Skip packed varyings, packed varyings are handled separately 3982 * by add_packed_varyings. 3983 */ 3984 if (strncmp(var->name, "packed:", 7) == 0) 3985 continue; 3986 3987 /* Skip fragdata arrays, these are handled separately 3988 * by add_fragdata_arrays. 3989 */ 3990 if (strncmp(var->name, "gl_out_FragData", 15) == 0) 3991 continue; 3992 3993 const bool vs_input_or_fs_output = 3994 (stage == MESA_SHADER_VERTEX && var->data.mode == ir_var_shader_in) || 3995 (stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out); 3996 3997 if (!add_shader_variable(ctx, shProg, resource_set, 3998 1 << stage, programInterface, 3999 var, var->name, var->type, vs_input_or_fs_output, 4000 var->data.location - loc_bias, 4001 inout_has_same_location(var, stage))) 4002 return false; 4003 } 4004 return true; 4005} 4006 4007static bool 4008add_packed_varyings(const struct gl_context *ctx, 4009 struct gl_shader_program *shProg, 4010 struct set *resource_set, 4011 int stage, GLenum type) 4012{ 4013 struct gl_linked_shader *sh = shProg->_LinkedShaders[stage]; 4014 GLenum iface; 4015 4016 if (!sh || !sh->packed_varyings) 4017 return true; 4018 4019 foreach_in_list(ir_instruction, node, sh->packed_varyings) { 4020 ir_variable *var = node->as_variable(); 4021 if (var) { 4022 switch (var->data.mode) { 4023 case ir_var_shader_in: 4024 iface = GL_PROGRAM_INPUT; 4025 break; 4026 case ir_var_shader_out: 4027 iface = GL_PROGRAM_OUTPUT; 4028 break; 4029 default: 4030 unreachable("unexpected type"); 4031 } 4032 4033 if (type == iface) { 4034 const int stage_mask = 4035 build_stageref(shProg, var->name, var->data.mode); 4036 if (!add_shader_variable(ctx, shProg, resource_set, 4037 stage_mask, 4038 iface, var, var->name, var->type, false, 4039 var->data.location - VARYING_SLOT_VAR0, 4040 inout_has_same_location(var, stage))) 4041 return false; 4042 } 4043 } 4044 } 4045 return true; 4046} 4047 4048static bool 4049add_fragdata_arrays(const struct gl_context *ctx, 4050 struct gl_shader_program *shProg, 4051 struct set *resource_set) 4052{ 4053 struct gl_linked_shader *sh = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT]; 4054 4055 if (!sh || !sh->fragdata_arrays) 4056 return true; 4057 4058 foreach_in_list(ir_instruction, node, sh->fragdata_arrays) { 4059 ir_variable *var = node->as_variable(); 4060 if (var) { 4061 assert(var->data.mode == ir_var_shader_out); 4062 4063 if (!add_shader_variable(ctx, shProg, resource_set, 4064 1 << MESA_SHADER_FRAGMENT, 4065 GL_PROGRAM_OUTPUT, var, var->name, var->type, 4066 true, var->data.location - FRAG_RESULT_DATA0, 4067 false)) 4068 return false; 4069 } 4070 } 4071 return true; 4072} 4073 4074/** 4075 * Builds up a list of program resources that point to existing 4076 * resource data. 4077 */ 4078void 4079build_program_resource_list(struct gl_context *ctx, 4080 struct gl_shader_program *shProg, 4081 bool add_packed_varyings_only) 4082{ 4083 /* Rebuild resource list. */ 4084 if (shProg->data->ProgramResourceList) { 4085 ralloc_free(shProg->data->ProgramResourceList); 4086 shProg->data->ProgramResourceList = NULL; 4087 shProg->data->NumProgramResourceList = 0; 4088 } 4089 4090 int input_stage = MESA_SHADER_STAGES, output_stage = 0; 4091 4092 /* Determine first input and final output stage. These are used to 4093 * detect which variables should be enumerated in the resource list 4094 * for GL_PROGRAM_INPUT and GL_PROGRAM_OUTPUT. 4095 */ 4096 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4097 if (!shProg->_LinkedShaders[i]) 4098 continue; 4099 if (input_stage == MESA_SHADER_STAGES) 4100 input_stage = i; 4101 output_stage = i; 4102 } 4103 4104 /* Empty shader, no resources. */ 4105 if (input_stage == MESA_SHADER_STAGES && output_stage == 0) 4106 return; 4107 4108 struct set *resource_set = _mesa_pointer_set_create(NULL); 4109 4110 /* Program interface needs to expose varyings in case of SSO. */ 4111 if (shProg->SeparateShader) { 4112 if (!add_packed_varyings(ctx, shProg, resource_set, 4113 input_stage, GL_PROGRAM_INPUT)) 4114 return; 4115 4116 if (!add_packed_varyings(ctx, shProg, resource_set, 4117 output_stage, GL_PROGRAM_OUTPUT)) 4118 return; 4119 } 4120 4121 if (add_packed_varyings_only) { 4122 _mesa_set_destroy(resource_set, NULL); 4123 return; 4124 } 4125 4126 if (!add_fragdata_arrays(ctx, shProg, resource_set)) 4127 return; 4128 4129 /* Add inputs and outputs to the resource list. */ 4130 if (!add_interface_variables(ctx, shProg, resource_set, 4131 input_stage, GL_PROGRAM_INPUT)) 4132 return; 4133 4134 if (!add_interface_variables(ctx, shProg, resource_set, 4135 output_stage, GL_PROGRAM_OUTPUT)) 4136 return; 4137 4138 if (shProg->last_vert_prog) { 4139 struct gl_transform_feedback_info *linked_xfb = 4140 shProg->last_vert_prog->sh.LinkedTransformFeedback; 4141 4142 /* Add transform feedback varyings. */ 4143 if (linked_xfb->NumVarying > 0) { 4144 for (int i = 0; i < linked_xfb->NumVarying; i++) { 4145 if (!link_util_add_program_resource(shProg, resource_set, 4146 GL_TRANSFORM_FEEDBACK_VARYING, 4147 &linked_xfb->Varyings[i], 0)) 4148 return; 4149 } 4150 } 4151 4152 /* Add transform feedback buffers. */ 4153 for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) { 4154 if ((linked_xfb->ActiveBuffers >> i) & 1) { 4155 linked_xfb->Buffers[i].Binding = i; 4156 if (!link_util_add_program_resource(shProg, resource_set, 4157 GL_TRANSFORM_FEEDBACK_BUFFER, 4158 &linked_xfb->Buffers[i], 0)) 4159 return; 4160 } 4161 } 4162 } 4163 4164 int top_level_array_base_offset = -1; 4165 int top_level_array_size_in_bytes = -1; 4166 int second_element_offset = -1; 4167 int buffer_block_index = -1; 4168 4169 /* Add uniforms from uniform storage. */ 4170 for (unsigned i = 0; i < shProg->data->NumUniformStorage; i++) { 4171 /* Do not add uniforms internally used by Mesa. */ 4172 if (shProg->data->UniformStorage[i].hidden) 4173 continue; 4174 4175 bool is_shader_storage = 4176 shProg->data->UniformStorage[i].is_shader_storage; 4177 GLenum type = is_shader_storage ? GL_BUFFER_VARIABLE : GL_UNIFORM; 4178 if (!link_util_should_add_buffer_variable(shProg, 4179 &shProg->data->UniformStorage[i], 4180 top_level_array_base_offset, 4181 top_level_array_size_in_bytes, 4182 second_element_offset, 4183 buffer_block_index)) 4184 continue; 4185 4186 if (is_shader_storage) { 4187 /* From the OpenGL 4.6 specification, 7.3.1.1 Naming Active Resources: 4188 * 4189 * "For an active shader storage block member declared as an array 4190 * of an aggregate type, an entry will be generated only for the 4191 * first array element, regardless of its type. Such block members 4192 * are referred to as top-level arrays. If the block member is an 4193 * aggregate type, the enumeration rules are then applied 4194 * recursively." 4195 * 4196 * Below we update our tracking values used by 4197 * link_util_should_add_buffer_variable(). We only want to reset the 4198 * offsets once we have moved past the first element. 4199 */ 4200 if (shProg->data->UniformStorage[i].offset >= second_element_offset) { 4201 top_level_array_base_offset = 4202 shProg->data->UniformStorage[i].offset; 4203 4204 top_level_array_size_in_bytes = 4205 shProg->data->UniformStorage[i].top_level_array_size * 4206 shProg->data->UniformStorage[i].top_level_array_stride; 4207 4208 /* Set or reset the second element offset. For non arrays this 4209 * will be set to -1. 4210 */ 4211 second_element_offset = top_level_array_size_in_bytes ? 4212 top_level_array_base_offset + 4213 shProg->data->UniformStorage[i].top_level_array_stride : -1; 4214 } 4215 4216 buffer_block_index = shProg->data->UniformStorage[i].block_index; 4217 } 4218 4219 uint8_t stageref = shProg->data->UniformStorage[i].active_shader_mask; 4220 if (!link_util_add_program_resource(shProg, resource_set, type, 4221 &shProg->data->UniformStorage[i], stageref)) 4222 return; 4223 } 4224 4225 /* Add program uniform blocks. */ 4226 for (unsigned i = 0; i < shProg->data->NumUniformBlocks; i++) { 4227 if (!link_util_add_program_resource(shProg, resource_set, GL_UNIFORM_BLOCK, 4228 &shProg->data->UniformBlocks[i], 0)) 4229 return; 4230 } 4231 4232 /* Add program shader storage blocks. */ 4233 for (unsigned i = 0; i < shProg->data->NumShaderStorageBlocks; i++) { 4234 if (!link_util_add_program_resource(shProg, resource_set, GL_SHADER_STORAGE_BLOCK, 4235 &shProg->data->ShaderStorageBlocks[i], 0)) 4236 return; 4237 } 4238 4239 /* Add atomic counter buffers. */ 4240 for (unsigned i = 0; i < shProg->data->NumAtomicBuffers; i++) { 4241 if (!link_util_add_program_resource(shProg, resource_set, GL_ATOMIC_COUNTER_BUFFER, 4242 &shProg->data->AtomicBuffers[i], 0)) 4243 return; 4244 } 4245 4246 for (unsigned i = 0; i < shProg->data->NumUniformStorage; i++) { 4247 GLenum type; 4248 if (!shProg->data->UniformStorage[i].hidden) 4249 continue; 4250 4251 for (int j = MESA_SHADER_VERTEX; j < MESA_SHADER_STAGES; j++) { 4252 if (!shProg->data->UniformStorage[i].opaque[j].active || 4253 !shProg->data->UniformStorage[i].type->is_subroutine()) 4254 continue; 4255 4256 type = _mesa_shader_stage_to_subroutine_uniform((gl_shader_stage)j); 4257 /* add shader subroutines */ 4258 if (!link_util_add_program_resource(shProg, resource_set, 4259 type, &shProg->data->UniformStorage[i], 0)) 4260 return; 4261 } 4262 } 4263 4264 unsigned mask = shProg->data->linked_stages; 4265 while (mask) { 4266 const int i = u_bit_scan(&mask); 4267 struct gl_program *p = shProg->_LinkedShaders[i]->Program; 4268 4269 GLuint type = _mesa_shader_stage_to_subroutine((gl_shader_stage)i); 4270 for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { 4271 if (!link_util_add_program_resource(shProg, resource_set, 4272 type, &p->sh.SubroutineFunctions[j], 0)) 4273 return; 4274 } 4275 } 4276 4277 _mesa_set_destroy(resource_set, NULL); 4278} 4279 4280/** 4281 * This check is done to make sure we allow only constant expression 4282 * indexing and "constant-index-expression" (indexing with an expression 4283 * that includes loop induction variable). 4284 */ 4285static bool 4286validate_sampler_array_indexing(struct gl_context *ctx, 4287 struct gl_shader_program *prog) 4288{ 4289 dynamic_sampler_array_indexing_visitor v; 4290 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4291 if (prog->_LinkedShaders[i] == NULL) 4292 continue; 4293 4294 bool no_dynamic_indexing = 4295 ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler; 4296 4297 /* Search for array derefs in shader. */ 4298 v.run(prog->_LinkedShaders[i]->ir); 4299 if (v.uses_dynamic_sampler_array_indexing()) { 4300 const char *msg = "sampler arrays indexed with non-constant " 4301 "expressions is forbidden in GLSL %s %u"; 4302 /* Backend has indicated that it has no dynamic indexing support. */ 4303 if (no_dynamic_indexing) { 4304 linker_error(prog, msg, prog->IsES ? "ES" : "", 4305 prog->data->Version); 4306 return false; 4307 } else { 4308 linker_warning(prog, msg, prog->IsES ? "ES" : "", 4309 prog->data->Version); 4310 } 4311 } 4312 } 4313 return true; 4314} 4315 4316static void 4317link_assign_subroutine_types(struct gl_shader_program *prog) 4318{ 4319 unsigned mask = prog->data->linked_stages; 4320 while (mask) { 4321 const int i = u_bit_scan(&mask); 4322 gl_program *p = prog->_LinkedShaders[i]->Program; 4323 4324 p->sh.MaxSubroutineFunctionIndex = 0; 4325 foreach_in_list(ir_instruction, node, prog->_LinkedShaders[i]->ir) { 4326 ir_function *fn = node->as_function(); 4327 if (!fn) 4328 continue; 4329 4330 if (fn->is_subroutine) 4331 p->sh.NumSubroutineUniformTypes++; 4332 4333 if (!fn->num_subroutine_types) 4334 continue; 4335 4336 /* these should have been calculated earlier. */ 4337 assert(fn->subroutine_index != -1); 4338 if (p->sh.NumSubroutineFunctions + 1 > MAX_SUBROUTINES) { 4339 linker_error(prog, "Too many subroutine functions declared.\n"); 4340 return; 4341 } 4342 p->sh.SubroutineFunctions = reralloc(p, p->sh.SubroutineFunctions, 4343 struct gl_subroutine_function, 4344 p->sh.NumSubroutineFunctions + 1); 4345 p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].name = ralloc_strdup(p, fn->name); 4346 p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].num_compat_types = fn->num_subroutine_types; 4347 p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].types = 4348 ralloc_array(p, const struct glsl_type *, 4349 fn->num_subroutine_types); 4350 4351 /* From Section 4.4.4(Subroutine Function Layout Qualifiers) of the 4352 * GLSL 4.5 spec: 4353 * 4354 * "Each subroutine with an index qualifier in the shader must be 4355 * given a unique index, otherwise a compile or link error will be 4356 * generated." 4357 */ 4358 for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { 4359 if (p->sh.SubroutineFunctions[j].index != -1 && 4360 p->sh.SubroutineFunctions[j].index == fn->subroutine_index) { 4361 linker_error(prog, "each subroutine index qualifier in the " 4362 "shader must be unique\n"); 4363 return; 4364 } 4365 } 4366 p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].index = 4367 fn->subroutine_index; 4368 4369 if (fn->subroutine_index > (int)p->sh.MaxSubroutineFunctionIndex) 4370 p->sh.MaxSubroutineFunctionIndex = fn->subroutine_index; 4371 4372 for (int j = 0; j < fn->num_subroutine_types; j++) 4373 p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].types[j] = fn->subroutine_types[j]; 4374 p->sh.NumSubroutineFunctions++; 4375 } 4376 } 4377} 4378 4379static void 4380verify_subroutine_associated_funcs(struct gl_shader_program *prog) 4381{ 4382 unsigned mask = prog->data->linked_stages; 4383 while (mask) { 4384 const int i = u_bit_scan(&mask); 4385 gl_program *p = prog->_LinkedShaders[i]->Program; 4386 glsl_symbol_table *symbols = prog->_LinkedShaders[i]->symbols; 4387 4388 /* Section 6.1.2 (Subroutines) of the GLSL 4.00 spec says: 4389 * 4390 * "A program will fail to compile or link if any shader 4391 * or stage contains two or more functions with the same 4392 * name if the name is associated with a subroutine type." 4393 */ 4394 for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { 4395 unsigned definitions = 0; 4396 char *name = p->sh.SubroutineFunctions[j].name; 4397 ir_function *fn = symbols->get_function(name); 4398 4399 /* Calculate number of function definitions with the same name */ 4400 foreach_in_list(ir_function_signature, sig, &fn->signatures) { 4401 if (sig->is_defined) { 4402 if (++definitions > 1) { 4403 linker_error(prog, "%s shader contains two or more function " 4404 "definitions with name `%s', which is " 4405 "associated with a subroutine type.\n", 4406 _mesa_shader_stage_to_string(i), 4407 fn->name); 4408 return; 4409 } 4410 } 4411 } 4412 } 4413 } 4414} 4415 4416 4417static void 4418set_always_active_io(exec_list *ir, ir_variable_mode io_mode) 4419{ 4420 assert(io_mode == ir_var_shader_in || io_mode == ir_var_shader_out); 4421 4422 foreach_in_list(ir_instruction, node, ir) { 4423 ir_variable *const var = node->as_variable(); 4424 4425 if (var == NULL || var->data.mode != io_mode) 4426 continue; 4427 4428 /* Don't set always active on builtins that haven't been redeclared */ 4429 if (var->data.how_declared == ir_var_declared_implicitly) 4430 continue; 4431 4432 var->data.always_active_io = true; 4433 } 4434} 4435 4436/** 4437 * When separate shader programs are enabled, only input/outputs between 4438 * the stages of a multi-stage separate program can be safely removed 4439 * from the shader interface. Other inputs/outputs must remain active. 4440 */ 4441static void 4442disable_varying_optimizations_for_sso(struct gl_shader_program *prog) 4443{ 4444 unsigned first, last; 4445 assert(prog->SeparateShader); 4446 4447 first = MESA_SHADER_STAGES; 4448 last = 0; 4449 4450 /* Determine first and last stage. Excluding the compute stage */ 4451 for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) { 4452 if (!prog->_LinkedShaders[i]) 4453 continue; 4454 if (first == MESA_SHADER_STAGES) 4455 first = i; 4456 last = i; 4457 } 4458 4459 if (first == MESA_SHADER_STAGES) 4460 return; 4461 4462 for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { 4463 gl_linked_shader *sh = prog->_LinkedShaders[stage]; 4464 if (!sh) 4465 continue; 4466 4467 /* Prevent the removal of inputs to the first and outputs from the last 4468 * stage, unless they are the initial pipeline inputs or final pipeline 4469 * outputs, respectively. 4470 * 4471 * The removal of IO between shaders in the same program is always 4472 * allowed. 4473 */ 4474 if (stage == first && stage != MESA_SHADER_VERTEX) 4475 set_always_active_io(sh->ir, ir_var_shader_in); 4476 if (stage == last && stage != MESA_SHADER_FRAGMENT) 4477 set_always_active_io(sh->ir, ir_var_shader_out); 4478 } 4479} 4480 4481static void 4482link_and_validate_uniforms(struct gl_context *ctx, 4483 struct gl_shader_program *prog) 4484{ 4485 assert(!ctx->Const.UseNIRGLSLLinker); 4486 4487 update_array_sizes(prog); 4488 link_assign_uniform_locations(prog, ctx); 4489 4490 if (prog->data->LinkStatus == LINKING_FAILURE) 4491 return; 4492 4493 link_util_calculate_subroutine_compat(prog); 4494 link_util_check_uniform_resources(ctx, prog); 4495 link_util_check_subroutine_resources(prog); 4496 check_image_resources(ctx, prog); 4497 link_assign_atomic_counter_resources(ctx, prog); 4498 link_check_atomic_counter_resources(ctx, prog); 4499} 4500 4501static bool 4502link_varyings_and_uniforms(unsigned first, unsigned last, 4503 struct gl_context *ctx, 4504 struct gl_shader_program *prog, void *mem_ctx) 4505{ 4506 /* Mark all generic shader inputs and outputs as unpaired. */ 4507 for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { 4508 if (prog->_LinkedShaders[i] != NULL) { 4509 link_invalidate_variable_locations(prog->_LinkedShaders[i]->ir); 4510 } 4511 } 4512 4513 unsigned prev = first; 4514 for (unsigned i = prev + 1; i <= MESA_SHADER_FRAGMENT; i++) { 4515 if (prog->_LinkedShaders[i] == NULL) 4516 continue; 4517 4518 match_explicit_outputs_to_inputs(prog->_LinkedShaders[prev], 4519 prog->_LinkedShaders[i]); 4520 prev = i; 4521 } 4522 4523 if (!assign_attribute_or_color_locations(mem_ctx, prog, &ctx->Const, 4524 MESA_SHADER_VERTEX, true)) { 4525 return false; 4526 } 4527 4528 if (!assign_attribute_or_color_locations(mem_ctx, prog, &ctx->Const, 4529 MESA_SHADER_FRAGMENT, true)) { 4530 return false; 4531 } 4532 4533 prog->last_vert_prog = NULL; 4534 for (int i = MESA_SHADER_GEOMETRY; i >= MESA_SHADER_VERTEX; i--) { 4535 if (prog->_LinkedShaders[i] == NULL) 4536 continue; 4537 4538 prog->last_vert_prog = prog->_LinkedShaders[i]->Program; 4539 break; 4540 } 4541 4542 if (!link_varyings(prog, first, last, ctx, mem_ctx)) 4543 return false; 4544 4545 if (!ctx->Const.UseNIRGLSLLinker) 4546 link_and_validate_uniforms(ctx, prog); 4547 4548 if (!prog->data->LinkStatus) 4549 return false; 4550 4551 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4552 if (prog->_LinkedShaders[i] == NULL) 4553 continue; 4554 4555 const struct gl_shader_compiler_options *options = 4556 &ctx->Const.ShaderCompilerOptions[i]; 4557 4558 if (options->LowerBufferInterfaceBlocks) 4559 lower_ubo_reference(prog->_LinkedShaders[i], 4560 options->ClampBlockIndicesToArrayBounds, 4561 ctx->Const.UseSTD430AsDefaultPacking); 4562 4563 if (i == MESA_SHADER_COMPUTE) 4564 lower_shared_reference(ctx, prog, prog->_LinkedShaders[i]); 4565 4566 lower_vector_derefs(prog->_LinkedShaders[i]); 4567 do_vec_index_to_swizzle(prog->_LinkedShaders[i]->ir); 4568 } 4569 4570 return true; 4571} 4572 4573static void 4574linker_optimisation_loop(struct gl_context *ctx, exec_list *ir, 4575 unsigned stage) 4576{ 4577 if (ctx->Const.GLSLOptimizeConservatively) { 4578 /* Run it just once. */ 4579 do_common_optimization(ir, true, false, 4580 &ctx->Const.ShaderCompilerOptions[stage], 4581 ctx->Const.NativeIntegers); 4582 } else { 4583 /* Repeat it until it stops making changes. */ 4584 while (do_common_optimization(ir, true, false, 4585 &ctx->Const.ShaderCompilerOptions[stage], 4586 ctx->Const.NativeIntegers)) 4587 ; 4588 } 4589} 4590 4591void 4592link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) 4593{ 4594 prog->data->LinkStatus = LINKING_SUCCESS; /* All error paths will set this to false */ 4595 prog->data->Validated = false; 4596 4597 /* Section 7.3 (Program Objects) of the OpenGL 4.5 Core Profile spec says: 4598 * 4599 * "Linking can fail for a variety of reasons as specified in the 4600 * OpenGL Shading Language Specification, as well as any of the 4601 * following reasons: 4602 * 4603 * - No shader objects are attached to program." 4604 * 4605 * The Compatibility Profile specification does not list the error. In 4606 * Compatibility Profile missing shader stages are replaced by 4607 * fixed-function. This applies to the case where all stages are 4608 * missing. 4609 */ 4610 if (prog->NumShaders == 0) { 4611 if (ctx->API != API_OPENGL_COMPAT) 4612 linker_error(prog, "no shaders attached to the program\n"); 4613 return; 4614 } 4615 4616#ifdef ENABLE_SHADER_CACHE 4617 if (shader_cache_read_program_metadata(ctx, prog)) 4618 return; 4619#endif 4620 4621 void *mem_ctx = ralloc_context(NULL); // temporary linker context 4622 4623 prog->ARB_fragment_coord_conventions_enable = false; 4624 4625 /* Separate the shaders into groups based on their type. 4626 */ 4627 struct gl_shader **shader_list[MESA_SHADER_STAGES]; 4628 unsigned num_shaders[MESA_SHADER_STAGES]; 4629 4630 for (int i = 0; i < MESA_SHADER_STAGES; i++) { 4631 shader_list[i] = (struct gl_shader **) 4632 calloc(prog->NumShaders, sizeof(struct gl_shader *)); 4633 num_shaders[i] = 0; 4634 } 4635 4636 unsigned min_version = UINT_MAX; 4637 unsigned max_version = 0; 4638 for (unsigned i = 0; i < prog->NumShaders; i++) { 4639 min_version = MIN2(min_version, prog->Shaders[i]->Version); 4640 max_version = MAX2(max_version, prog->Shaders[i]->Version); 4641 4642 if (!ctx->Const.AllowGLSLRelaxedES && 4643 prog->Shaders[i]->IsES != prog->Shaders[0]->IsES) { 4644 linker_error(prog, "all shaders must use same shading " 4645 "language version\n"); 4646 goto done; 4647 } 4648 4649 if (prog->Shaders[i]->ARB_fragment_coord_conventions_enable) { 4650 prog->ARB_fragment_coord_conventions_enable = true; 4651 } 4652 4653 gl_shader_stage shader_type = prog->Shaders[i]->Stage; 4654 shader_list[shader_type][num_shaders[shader_type]] = prog->Shaders[i]; 4655 num_shaders[shader_type]++; 4656 } 4657 4658 /* In desktop GLSL, different shader versions may be linked together. In 4659 * GLSL ES, all shader versions must be the same. 4660 */ 4661 if (!ctx->Const.AllowGLSLRelaxedES && prog->Shaders[0]->IsES && 4662 min_version != max_version) { 4663 linker_error(prog, "all shaders must use same shading " 4664 "language version\n"); 4665 goto done; 4666 } 4667 4668 prog->data->Version = max_version; 4669 prog->IsES = prog->Shaders[0]->IsES; 4670 4671 /* Some shaders have to be linked with some other shaders present. 4672 */ 4673 if (!prog->SeparateShader) { 4674 if (num_shaders[MESA_SHADER_GEOMETRY] > 0 && 4675 num_shaders[MESA_SHADER_VERTEX] == 0) { 4676 linker_error(prog, "Geometry shader must be linked with " 4677 "vertex shader\n"); 4678 goto done; 4679 } 4680 if (num_shaders[MESA_SHADER_TESS_EVAL] > 0 && 4681 num_shaders[MESA_SHADER_VERTEX] == 0) { 4682 linker_error(prog, "Tessellation evaluation shader must be linked " 4683 "with vertex shader\n"); 4684 goto done; 4685 } 4686 if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 && 4687 num_shaders[MESA_SHADER_VERTEX] == 0) { 4688 linker_error(prog, "Tessellation control shader must be linked with " 4689 "vertex shader\n"); 4690 goto done; 4691 } 4692 4693 /* Section 7.3 of the OpenGL ES 3.2 specification says: 4694 * 4695 * "Linking can fail for [...] any of the following reasons: 4696 * 4697 * * program contains an object to form a tessellation control 4698 * shader [...] and [...] the program is not separable and 4699 * contains no object to form a tessellation evaluation shader" 4700 * 4701 * The OpenGL spec is contradictory. It allows linking without a tess 4702 * eval shader, but that can only be used with transform feedback and 4703 * rasterization disabled. However, transform feedback isn't allowed 4704 * with GL_PATCHES, so it can't be used. 4705 * 4706 * More investigation showed that the idea of transform feedback after 4707 * a tess control shader was dropped, because some hw vendors couldn't 4708 * support tessellation without a tess eval shader, but the linker 4709 * section wasn't updated to reflect that. 4710 * 4711 * All specifications (ARB_tessellation_shader, GL 4.0-4.5) have this 4712 * spec bug. 4713 * 4714 * Do what's reasonable and always require a tess eval shader if a tess 4715 * control shader is present. 4716 */ 4717 if (num_shaders[MESA_SHADER_TESS_CTRL] > 0 && 4718 num_shaders[MESA_SHADER_TESS_EVAL] == 0) { 4719 linker_error(prog, "Tessellation control shader must be linked with " 4720 "tessellation evaluation shader\n"); 4721 goto done; 4722 } 4723 4724 if (prog->IsES) { 4725 if (num_shaders[MESA_SHADER_TESS_EVAL] > 0 && 4726 num_shaders[MESA_SHADER_TESS_CTRL] == 0) { 4727 linker_error(prog, "GLSL ES requires non-separable programs " 4728 "containing a tessellation evaluation shader to also " 4729 "be linked with a tessellation control shader\n"); 4730 goto done; 4731 } 4732 } 4733 } 4734 4735 /* Compute shaders have additional restrictions. */ 4736 if (num_shaders[MESA_SHADER_COMPUTE] > 0 && 4737 num_shaders[MESA_SHADER_COMPUTE] != prog->NumShaders) { 4738 linker_error(prog, "Compute shaders may not be linked with any other " 4739 "type of shader\n"); 4740 } 4741 4742 /* Link all shaders for a particular stage and validate the result. 4743 */ 4744 for (int stage = 0; stage < MESA_SHADER_STAGES; stage++) { 4745 if (num_shaders[stage] > 0) { 4746 gl_linked_shader *const sh = 4747 link_intrastage_shaders(mem_ctx, ctx, prog, shader_list[stage], 4748 num_shaders[stage], false); 4749 4750 if (!prog->data->LinkStatus) { 4751 if (sh) 4752 _mesa_delete_linked_shader(ctx, sh); 4753 goto done; 4754 } 4755 4756 switch (stage) { 4757 case MESA_SHADER_VERTEX: 4758 validate_vertex_shader_executable(prog, sh, ctx); 4759 break; 4760 case MESA_SHADER_TESS_CTRL: 4761 /* nothing to be done */ 4762 break; 4763 case MESA_SHADER_TESS_EVAL: 4764 validate_tess_eval_shader_executable(prog, sh, ctx); 4765 break; 4766 case MESA_SHADER_GEOMETRY: 4767 validate_geometry_shader_executable(prog, sh, ctx); 4768 break; 4769 case MESA_SHADER_FRAGMENT: 4770 validate_fragment_shader_executable(prog, sh); 4771 break; 4772 } 4773 if (!prog->data->LinkStatus) { 4774 if (sh) 4775 _mesa_delete_linked_shader(ctx, sh); 4776 goto done; 4777 } 4778 4779 prog->_LinkedShaders[stage] = sh; 4780 prog->data->linked_stages |= 1 << stage; 4781 } 4782 } 4783 4784 /* Here begins the inter-stage linking phase. Some initial validation is 4785 * performed, then locations are assigned for uniforms, attributes, and 4786 * varyings. 4787 */ 4788 cross_validate_uniforms(ctx, prog); 4789 if (!prog->data->LinkStatus) 4790 goto done; 4791 4792 unsigned first, last, prev; 4793 4794 first = MESA_SHADER_STAGES; 4795 last = 0; 4796 4797 /* Determine first and last stage. */ 4798 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4799 if (!prog->_LinkedShaders[i]) 4800 continue; 4801 if (first == MESA_SHADER_STAGES) 4802 first = i; 4803 last = i; 4804 } 4805 4806 check_explicit_uniform_locations(ctx, prog); 4807 link_assign_subroutine_types(prog); 4808 verify_subroutine_associated_funcs(prog); 4809 4810 if (!prog->data->LinkStatus) 4811 goto done; 4812 4813 resize_tes_inputs(ctx, prog); 4814 4815 /* Validate the inputs of each stage with the output of the preceding 4816 * stage. 4817 */ 4818 prev = first; 4819 for (unsigned i = prev + 1; i <= MESA_SHADER_FRAGMENT; i++) { 4820 if (prog->_LinkedShaders[i] == NULL) 4821 continue; 4822 4823 validate_interstage_inout_blocks(prog, prog->_LinkedShaders[prev], 4824 prog->_LinkedShaders[i]); 4825 if (!prog->data->LinkStatus) 4826 goto done; 4827 4828 cross_validate_outputs_to_inputs(ctx, prog, 4829 prog->_LinkedShaders[prev], 4830 prog->_LinkedShaders[i]); 4831 if (!prog->data->LinkStatus) 4832 goto done; 4833 4834 prev = i; 4835 } 4836 4837 /* The cross validation of outputs/inputs above validates interstage 4838 * explicit locations. We need to do this also for the inputs in the first 4839 * stage and outputs of the last stage included in the program, since there 4840 * is no cross validation for these. 4841 */ 4842 validate_first_and_last_interface_explicit_locations(ctx, prog, 4843 (gl_shader_stage) first, 4844 (gl_shader_stage) last); 4845 4846 /* Cross-validate uniform blocks between shader stages */ 4847 validate_interstage_uniform_blocks(prog, prog->_LinkedShaders); 4848 if (!prog->data->LinkStatus) 4849 goto done; 4850 4851 for (unsigned int i = 0; i < MESA_SHADER_STAGES; i++) { 4852 if (prog->_LinkedShaders[i] != NULL) 4853 lower_named_interface_blocks(mem_ctx, prog->_LinkedShaders[i]); 4854 } 4855 4856 if (prog->IsES && prog->data->Version == 100) 4857 if (!validate_invariant_builtins(prog, 4858 prog->_LinkedShaders[MESA_SHADER_VERTEX], 4859 prog->_LinkedShaders[MESA_SHADER_FRAGMENT])) 4860 goto done; 4861 4862 /* Implement the GLSL 1.30+ rule for discard vs infinite loops Do 4863 * it before optimization because we want most of the checks to get 4864 * dropped thanks to constant propagation. 4865 * 4866 * This rule also applies to GLSL ES 3.00. 4867 */ 4868 if (max_version >= (prog->IsES ? 300 : 130)) { 4869 struct gl_linked_shader *sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; 4870 if (sh) { 4871 lower_discard_flow(sh->ir); 4872 } 4873 } 4874 4875 if (prog->SeparateShader) 4876 disable_varying_optimizations_for_sso(prog); 4877 4878 /* Process UBOs */ 4879 if (!interstage_cross_validate_uniform_blocks(prog, false)) 4880 goto done; 4881 4882 /* Process SSBOs */ 4883 if (!interstage_cross_validate_uniform_blocks(prog, true)) 4884 goto done; 4885 4886 /* Do common optimization before assigning storage for attributes, 4887 * uniforms, and varyings. Later optimization could possibly make 4888 * some of that unused. 4889 */ 4890 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4891 if (prog->_LinkedShaders[i] == NULL) 4892 continue; 4893 4894 detect_recursion_linked(prog, prog->_LinkedShaders[i]->ir); 4895 if (!prog->data->LinkStatus) 4896 goto done; 4897 4898 if (ctx->Const.ShaderCompilerOptions[i].LowerCombinedClipCullDistance) { 4899 lower_clip_cull_distance(prog, prog->_LinkedShaders[i]); 4900 } 4901 4902 if (ctx->Const.LowerTessLevel) { 4903 lower_tess_level(prog->_LinkedShaders[i]); 4904 } 4905 4906 /* Section 13.46 (Vertex Attribute Aliasing) of the OpenGL ES 3.2 4907 * specification says: 4908 * 4909 * "In general, the behavior of GLSL ES should not depend on compiler 4910 * optimizations which might be implementation-dependent. Name matching 4911 * rules in most languages, including C++ from which GLSL ES is derived, 4912 * are based on declarations rather than use. 4913 * 4914 * RESOLUTION: The existence of aliasing is determined by declarations 4915 * present after preprocessing." 4916 * 4917 * Because of this rule, we do a 'dry-run' of attribute assignment for 4918 * vertex shader inputs here. 4919 */ 4920 if (prog->IsES && i == MESA_SHADER_VERTEX) { 4921 if (!assign_attribute_or_color_locations(mem_ctx, prog, &ctx->Const, 4922 MESA_SHADER_VERTEX, false)) { 4923 goto done; 4924 } 4925 } 4926 4927 /* Call opts before lowering const arrays to uniforms so we can const 4928 * propagate any elements accessed directly. 4929 */ 4930 linker_optimisation_loop(ctx, prog->_LinkedShaders[i]->ir, i); 4931 4932 /* Call opts after lowering const arrays to copy propagate things. */ 4933 if (ctx->Const.GLSLLowerConstArrays && 4934 lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir, i, 4935 ctx->Const.Program[i].MaxUniformComponents)) 4936 linker_optimisation_loop(ctx, prog->_LinkedShaders[i]->ir, i); 4937 4938 } 4939 4940 /* Validation for special cases where we allow sampler array indexing 4941 * with loop induction variable. This check emits a warning or error 4942 * depending if backend can handle dynamic indexing. 4943 */ 4944 if ((!prog->IsES && prog->data->Version < 130) || 4945 (prog->IsES && prog->data->Version < 300)) { 4946 if (!validate_sampler_array_indexing(ctx, prog)) 4947 goto done; 4948 } 4949 4950 /* Check and validate stream emissions in geometry shaders */ 4951 validate_geometry_shader_emissions(ctx, prog); 4952 4953 store_fragdepth_layout(prog); 4954 4955 if(!link_varyings_and_uniforms(first, last, ctx, prog, mem_ctx)) 4956 goto done; 4957 4958 /* Linking varyings can cause some extra, useless swizzles to be generated 4959 * due to packing and unpacking. 4960 */ 4961 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 4962 if (prog->_LinkedShaders[i] == NULL) 4963 continue; 4964 4965 optimize_swizzles(prog->_LinkedShaders[i]->ir); 4966 } 4967 4968 /* OpenGL ES < 3.1 requires that a vertex shader and a fragment shader both 4969 * be present in a linked program. GL_ARB_ES2_compatibility doesn't say 4970 * anything about shader linking when one of the shaders (vertex or 4971 * fragment shader) is absent. So, the extension shouldn't change the 4972 * behavior specified in GLSL specification. 4973 * 4974 * From OpenGL ES 3.1 specification (7.3 Program Objects): 4975 * "Linking can fail for a variety of reasons as specified in the 4976 * OpenGL ES Shading Language Specification, as well as any of the 4977 * following reasons: 4978 * 4979 * ... 4980 * 4981 * * program contains objects to form either a vertex shader or 4982 * fragment shader, and program is not separable, and does not 4983 * contain objects to form both a vertex shader and fragment 4984 * shader." 4985 * 4986 * However, the only scenario in 3.1+ where we don't require them both is 4987 * when we have a compute shader. For example: 4988 * 4989 * - No shaders is a link error. 4990 * - Geom or Tess without a Vertex shader is a link error which means we 4991 * always require a Vertex shader and hence a Fragment shader. 4992 * - Finally a Compute shader linked with any other stage is a link error. 4993 */ 4994 if (!prog->SeparateShader && ctx->API == API_OPENGLES2 && 4995 num_shaders[MESA_SHADER_COMPUTE] == 0) { 4996 if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) { 4997 linker_error(prog, "program lacks a vertex shader\n"); 4998 } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { 4999 linker_error(prog, "program lacks a fragment shader\n"); 5000 } 5001 } 5002 5003done: 5004 for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { 5005 free(shader_list[i]); 5006 if (prog->_LinkedShaders[i] == NULL) 5007 continue; 5008 5009 /* Do a final validation step to make sure that the IR wasn't 5010 * invalidated by any modifications performed after intrastage linking. 5011 */ 5012 validate_ir_tree(prog->_LinkedShaders[i]->ir); 5013 5014 /* Retain any live IR, but trash the rest. */ 5015 reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir); 5016 5017 /* The symbol table in the linked shaders may contain references to 5018 * variables that were removed (e.g., unused uniforms). Since it may 5019 * contain junk, there is no possible valid use. Delete it and set the 5020 * pointer to NULL. 5021 */ 5022 delete prog->_LinkedShaders[i]->symbols; 5023 prog->_LinkedShaders[i]->symbols = NULL; 5024 } 5025 5026 ralloc_free(mem_ctx); 5027} 5028