Sachverhalt:
A.
Der 1954 geborene A._ arbeitet seit 1970 bei der B._ AG. Im August 2012 musste er wegen eines Erysipels am rechten Unterschenkel hospitalisiert werden. Wenig später traten verschiedene Beschwerden (Kopfschmerzen, Schwindel, Tagesmüdigkeit, Hypersomnie) auf, weshalb sich A._ im Januar 2013 bei der Invalidenversicherung zum Leistungsbezug anmeldete. Die IV-Stelle Zürich zog die Akten der Krankentaggeldversicherung bei und führte eigene berufliche und medizinische Abklärungen durch. Dabei stellte sich heraus, dass der Versicherte an einer mässiggradigen obstruktiven Schlafapnoe leidet. Nach Durchführung des Vorbescheidverfahrens verneinte die IV-Stelle einen Rentenanspruch, weil es an einer dauerhaften Einschränkung der Arbeitsfähigkeit fehle (Verfügung vom 13. Dezember 2013).
B.
Die dagegen erhobene Beschwerde wies das Sozialversicherungsgericht des Kantons Zürich mit Entscheid vom 12. März 2015 ab.
C.
A._ lässt Beschwerde in öffentlich-rechtlichen Angelegenheiten führen und beantragen, in Aufhebung des angefochtenen Entscheides sei die Beschwerdegegnerin zu verpflichten, ihm rückwirkend eine angemessene Invalidenrente zuzusprechen.
Die IV-Stelle schliesst auf Abweisung der Beschwerde. Das Bundesamt für Sozialversicherungen verzichtet auf eine Vernehmlassung.
Erwägungen:
1.
Mit der Beschwerde in öffentlich-rechtlichen Angelegenheiten kann unter anderem die Verletzung von Bundesrecht gerügt werden (Art. 95 lit. a BGG). Die Feststellung des Sachverhalts kann nur gerügt werden, wenn sie offensichtlich unrichtig ist oder auf einer Rechtsverletzung im Sinne von Artikel 95 beruht und wenn die Behebung des Mangels für den Ausgang des Verfahrens entscheidend sein kann (Art. 97 Abs. 1 BGG). Das Bundesgericht legt seinem Urteil den Sachverhalt zugrunde, den die Vorinstanz festgestellt hat (Art. 105 Abs. 1 BGG). Es kann die Sachverhaltsfeststellung der Vorinstanz von Amtes wegen berichtigen oder ergänzen, wenn sie offensichtlich unrichtig ist oder auf einer Rechtsverletzung im Sinne von Artikel 95 beruht (Art. 105 Abs. 2 BGG).
2.
Neue Tatsachen und Beweismittel dürfen nur soweit vorgebracht werden, als erst der vorinstanzliche Entscheid dazu Anlass gibt (Art. 99 Abs. 1 BGG). Der Beschwerdeführer lässt letztinstanzlich den Gesamtarbeitsvertrag der B._ AG, eine Bestätigung seiner Stundenabrechnungen für den Zeitraum vom 1. Januar 2010 bis 31. März 2015 (Schreiben vom 7. April 2015) und die persönlichen Einsatzpläne für die Jahre 2010 bis 2014 einreichen. Es handelt sich dabei unbestritten um neue Beweismittel. Gegenstand des vorinstanzlichen Schriftenwechsels war - in Anbetracht der Verfügungsbegründung - das Vorliegen einer dauerhaften Arbeitsunfähigkeit aus medizinischen Gründen. Wie der Beschwerdeführer zutreffend darlegt, konnte er nicht voraussehen, dass die Vorinstanz die Einschränkung seiner Arbeitsfähigkeit einzig anhand der effektiv geleisteten Arbeitsstunden berechnen w ürde. Insoweit hat erst der vorinstanzliche Entscheid Anlass zur Einreichung der Unterlagen gegeben; sie sind zulässig.
3.
Das kantonale Gericht hat den Invaliditätsgrad des Versicherten festgelegt, indem es dessen zuletzt absolvierte Arbeitszeiten auf der Basis einer Sechstagewoche der betriebsüblichen Arbeitszeit (42 Stunden) gegenüber gestellt hat. Daraus hat es eine Einschränkung von 39.29 % ermittelt und einen Rentenanspruch verneint. Es hat offen gelassen, ob die beim Beschwerdeführer diagnostizierte mässiggradige obstruktive Schlafapnoe überhaupt einen invalidisierenden Gesundheitsschaden darstellt.
3.1. Die Vorinstanz hat im Einzelnen festgestellt, aus dem Arbeitgeberbericht vom 11. März 2013 gehe hervor, dass der Beschwerdeführer seit 1970 bei der B._ AG angestellt sei. Seine Arbeitszeit habe vor Eintritt des Gesundheitsschadens 7 Stunden pro Tag und 42 Stunden in der Woche und nach Eintritt des Gesundheitsschadens 4.9 Stunden pro Tag und 29.4 Stunden in der Woche betragen. Daraus folge, dass der Beschwerdeführer seine Arbeitszeit an sechs Tagen in der Woche zu leisten habe.
In Bezug auf die effektive Arbeitszeit des Versicherten nach Eintritt des Gesundheitsschadens ist den vorinstanzlichen Feststellungen zu entnehmen, die vom Beschwerdeführer ausgeübte Arbeitsschicht dauere üblicherweise von 18.45 bis 23.00 Uhr. Bei einer Sechstagewoche ergebe sich eine wöchentliche Arbeitszeit von 25.5 Stunden, woraus verglichen mit der betriebsüblichen Arbeitszeit von 42 Stunden eine zeitliche und erwerbliche Einschränkung von 39.29 % resultiere.
3.2.
3.2.1. Die von der Vorinstanz herangezogenen Arbeitszeiten des Versicherten vor Eintritt des Gesundheitsschadens (7 Stunden pro Tag/42 Stunden pro Woche) und im Februar 2013 (4.9 Stunden pro Tag/29.4 Stunden pro Woche)ergeben sich aus den Akten (Arbeitgeberbericht vom 11. März 2013). Letztere Angabe stimmt auch mit den persönlichen Einsatzplänen, welche der Beschwerdeführer verurkundet hat, überein (vgl. beispielsweise die Einsatzzeiten in der Woche vom 18. bis 22. Februar 2013 von 5 Stunden und 55 Minuten pro Tag). Nichts anderes gilt für die Schichtzeiten, welche der Beschwerdeführer bis im Verfügungszeitpunkt geleistet hat (üblicherweise 18.45 bis 23.00 Uhr; vgl. Bericht des Zentrums E._ vom 3. Oktober 2013).
Was jedoch die effektiv geleisteten Arbeitstage betrifft, bestehen begründete Zweifel, ob der Beschwerdeführer für gewöhnlich an sechs Tagen pro Woche arbeitet oder gearbeitet hat. Im Gegenteil ist dem Bestätigungsschreiben der B._ AG vom 7. April 2015 (vgl. E. 2) zu entnehmen, dass sich sein Arbeitspensum seit 2008 konstant auf fünf Tage pro Woche verteilte; dies bestätigen die persönlichen Einsatzpläne des Versicherten, woraus für die Zeitspanne von vier Jahren (1. Januar 2010 bis 31. Dezember 2014) keine Woche mit mehr als fünf absolvierten Arbeitstagen hervorgeht. Mit Blick darauf kann - entgegen den Erwägungen des kantonalen Gerichts - nicht zum vorneherein geschlossen werden, dass der Beschwerdeführer nach Eintritt des Gesundheitsschadens (übliche Schichtzeiten von 18.45 bis 23.00 Uhr; 4 Stunden 15 Minuten pro Tag) an wöchentlich sechs Arbeitstagen arbeitete. Insoweit ist der vorinstanzlichen Berechnung und damit auch der (einzigen) Begründung des angefochtenen Entscheides die Grundlage entzogen.
3.2.2. Der Sachverhalt ist insoweit zu ergänzen (vgl. BGE 136 V 362 E. 4.1 S. 366), als die behandelnden Ärzte des Zentrums E._ festhielten, die CPAP-Therapie habe zum Ziel, die Arbeitsfähigkeit des Beschwerdeführers (Einschränkung der Konzentrationsfähigkeit im Berichtszeitpunkt: 50 %) zu verbessern; die Behandlung müsse konsequent "mit einer Compliance von mindestens 80 %" eingesetzt werden (vgl. Bericht des Zentrums E._ vom 3. Oktober 2013 zu Handen der IV-Stelle, S. 3). Dem Verlaufsbericht des Zentrums E._ vom gleichen Datum (S. 9) ist diesbezüglich zu entnehmen, dass der Patient die CPAP-Therapie seit 6. September 2013 nach eigenen Angaben lediglich zehn Mal eingesetzt und die Maske während einer bis anderthalb Stunden pro Nacht getragen hatte. Vor diesem Hintergrund liegt - wie auch immer die ärztlichen Angaben zur Compliance zu interpretieren sind (mindestens 80 % Sauerstoffsättigung oder Anzahl Nächte resp. "Nachtzeit") - keine genügende Behandlung vor. Somit ist bislang nicht erstellt, dass der Versicherte die (grundsätzlich zumutbare) CPAP-Therapie mit der nötigen Konsequenz durchführt, wozu er im Rahmen der Schadenminderungspflicht verpflichtet ist (vgl. Urteil 8C_53/2010 vom 26. Mai 2010 E. 5.2.1 mit Hinweisen). Davon abgesehen werfen die Angaben seiner Ehefrau, wonach er ruhig schlafe (vgl. Bericht des Zentrums E._ vom 3. Oktober 2013 an die IV-Stelle, S. 2), Fragen in Bezug auf seine eigene Angabe auf, die Maske jeweils nacheiner bis anderthalb Stunden im Schlaf zu entfernen, ohne es zu bemerken.
Von Relevanz ist auf der anderen Seite der Bericht eines Zentrums F._. Dieser datiert zwar vom 6. Januar 2014 und damit nach Erlass der Verfügung am 13. Dezember 2013 (zum massgeblichen Zeitpunkt für die Beurteilung des rechtserheblichen Sachverhalts vgl. BGE 131 V 242 E. 2.1 S. 243); Rückschlüsse auf den vorliegend massgebenden Zeitraum können aber insoweit gezogen werden, als drei von vier Konsultationen im Zentrum F._ (26. November/6. und 9. Dezember 2013) vor dem Verfügungszeitpunkt stattfanden. Die dortigen Neurologen Dres. med. C._ und D._ hielten weitere Abklärungen (neuropsychologische Untersuchung) explizit für erforderlich. Insbesondere wiesen sie darauf hin, dass die (progredienten) Beschwerden des Versicherten (Beinataxie; Gedächtnisprobleme, Konzentrations- und Aufmerksamkeitsstörungen) nicht allein durch das Schlafapnoe-Syndrom erklärt werden könnten.
3.3. Nach dem Gesagten beruht der vorinstanzliche Entscheid auf ungenügender Beweisgrundlage. Das kantonale Gericht hat den rechtserheblichen Sachverhalt mit Blick auf die effektive Arbeitszeit des Versicherten willkürlich festgestellt, was Bundesrecht verletzt (E. 1). Nachdem die Sache in medizinischer Hinsicht der Ergänzung bedarf (vgl. E. 3.2.2), rechtfertigt es sich, sie direkt an die Verwaltung zurückzuweisen. Dabei wird - je nach sich ergebender Befundlage - im Rahmen der Invaliditätsbemessung zu prüfen sein, ob eine zusätzliche Lohneinbusse wegen Verlusts der Führungsfunktion stattgefunden hat.
4.
Die Rückweisung der Sache an die Verwaltung zu weiterer Abklärung (mit noch offenem Ausgang) gilt für die Frage der Auferlegung der Gerichtskosten wie auch der Parteientschädigung als vollständiges Obsiegen im Sinne von Art. 66 Abs. 1 sowie Art. 68 Abs. 1 und 2 BGG (BGE 137 V 210 E. 7.1 S. 271). Dementsprechend sind die Gerichtskosten der unterliegenden Beschwerdegegnerin aufzuerlegen (Art. 66 Abs. 1 BGG), welche dem Beschwerdeführer eine Parteientschädigung auszurichten hat (Art. 68 Abs. 1 und 2 BGG).
Demnach erkennt das Bundesgericht:
1.
Die Beschwerde wird teilweise gutgeheissen. Der Entscheid des Sozialversicherungsgerichts des Kantons Zürich vom 12. März 2015und die Verfügung der IV-Stelle des Kantons Zürich vom 13. Dezember 2013 werden aufgehoben. Die Sache wird zur neuen Verfügung an die IV-Stelle des Kantons Zürich zurückgewiesen.
2.
Die Gerichtskosten von Fr. 800.- werden der Beschwerdegegnerin auferlegt.
3.
Die Beschwerdegegnerin hat den Beschwerdeführer für das bundesgerichtliche Verfahren mit Fr. 2'800.- zu entschädigen.
4.
Die Sache wird zur Neuverlegung der Kosten und der Parteientschädigung des vorangegangenen Verfahrens an das Sozialversicherungsgericht des Kantons Zürich zurückgewiesen.
5.
Dieses Urteil wird den Parteien, dem Sozialversicherungsgericht des Kantons Zürich und dem Bundesamt für Sozialversicherungen schriftlich mitgeteilt.
Luzern, 8. Januar 2016
Im Namen der II. sozialrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Die Präsidentin: Glanzmann
Der Gerichtsschreiber: Grünenfelder