Вы задали очень широкий и сложный вопрос.На самом деле, вы задали несколько широких, сложных вопросов.
Программное обеспечение, которое окончательно управляет работой любого оборудования, называется «драйвером» оборудования.Естественно, для графического оборудования это называется «графический драйвер».Как и все драйверы, графический драйвер фактически является устанавливаемой частью ОС;ОС - это то, что позволяет графическому драйверу выполнять свою работу и общаться с оборудованием.Они работают рука об руку.
В действительности существует два типа вызовов D3D или OpenGL (ранее называемых «API»): те, которые общаются с драйвером, и те, которые этого не делают.Каждый вызов, который на самом деле что-то рисует, должен (в конце концов) общаться с драйвером, но вызовы, которые устанавливают более поздние вызовы рисования, могут просто сохранять данные локально.
Когда вы делаете вызов рисования, API выполняет некоторые проверки, чтобы сделатьуверен, что вы, как пользователь, сделали правильный вызов рендеринга.Если это так, у API есть несколько вариантов того, что делать.Оказывается, что разговор напрямую с водителем занимает много времени, независимо от того, сколько команд вы ему дадите, когда начинаете говорить.Поэтому часто происходит то, что API сохраняет ваш вызов рендеринга и сразу же возвращается.Затем, возможно, в другом потоке, он может посмотреть, сколько вызовов рендеринга было сохранено.Если их «достаточно», он отправит их водителю.Это называется «сортировкой».
Задача водителя состоит в том, чтобы принимать переадресованные вызовы и преобразовывать их в то, что будет делать графический процессор.
В той же строкегде определяется графический конвейер?в оборудовании GPU, драйвере или библиотеке программного обеспечения?
Это на самом деле довольно сложный вопрос в наши дни, и он становится все сложнее с каждым поколением оборудования.
В старые временаПостроение графического конвейера жестко контролировалось аппаратным обеспечением графического процессора.В наши дни это менее верно, хотя есть некоторый аппаратный контроль.На современном оборудовании (поддерживающем OpenGL 3.0 или Direct3D10 или выше) теоретически было бы возможно, если бы у вас был прямой доступ к графическому драйверу, разработать API, который использовал бы несколько измененную версию графического конвейера.Таким образом, API-интерфейсы в значительной степени определяют внешний вид графического конвейера.
Каждый этап конвейера рендеринга принимает определенные значения из ценных этапов в качестве входных данных и генерирует некоторое количество значений в качестве выходных данных.Стадия является «программируемой», если механизм генерирования выходов из входов включает в себя выполнение предоставленной пользователем программы, называемой «шейдер».Так что не существует такого понятия, как программируемый конвейер (пока);просто программируемые ступени фиксированного трубопровода.