/** * Returns output index for dual source blending. */ GLint GLAPIENTRY _mesa_GetProgramResourceLocationIndex(GLuint program, GLenum programInterface, const GLchar *name) { GET_CURRENT_CONTEXT(ctx); if (MESA_VERBOSE & VERBOSE_API) { _mesa_debug(ctx, "glGetProgramResourceLocationIndex(%u, %s, %s)\n", program, _mesa_enum_to_string(programInterface), name); } struct gl_shader_program *shProg = lookup_linked_program(program, "glGetProgramResourceLocationIndex"); if (!shProg || !name) return -1; /* From the GL_ARB_program_interface_query spec: * * "For GetProgramResourceLocationIndex, <programInterface> must be * PROGRAM_OUTPUT." */ if (programInterface != GL_PROGRAM_OUTPUT) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramResourceLocationIndex(%s)", _mesa_enum_to_string(programInterface)); return -1; } return _mesa_program_resource_location_index(shProg, GL_PROGRAM_OUTPUT, name); }
GLint GLAPIENTRY _mesa_GetFragDataIndex(GLuint program, const GLchar *name) { GET_CURRENT_CONTEXT(ctx); struct gl_shader_program *const shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetFragDataIndex"); if (!shProg) { return -1; } if (!shProg->LinkStatus) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetFragDataIndex(program not linked)"); return -1; } if (!name) return -1; if (strncmp(name, "gl_", 3) == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetFragDataIndex(illegal name)"); return -1; } /* Not having a fragment shader is not an error. */ if (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) return -1; return _mesa_program_resource_location_index(shProg, GL_PROGRAM_OUTPUT, name); }
/** * Returns output index for dual source blending. */ GLint GLAPIENTRY _mesa_GetProgramResourceLocationIndex(GLuint program, GLenum programInterface, const GLchar *name) { GET_CURRENT_CONTEXT(ctx); struct gl_shader_program *shProg = lookup_linked_program(program, "glGetProgramResourceLocationIndex"); if (!shProg || !name || invalid_array_element_syntax(name)) return -1; /* From the GL_ARB_program_interface_query spec: * * "For GetProgramResourceLocationIndex, <programInterface> must be * PROGRAM_OUTPUT." */ if (programInterface != GL_PROGRAM_OUTPUT) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramResourceLocationIndex(%s)", _mesa_lookup_enum_by_nr(programInterface)); return -1; } return _mesa_program_resource_location_index(shProg, GL_PROGRAM_OUTPUT, name); }