Можете ли вы сделать свой собственный конвейер рендеринга? - PullRequest
2 голосов
/ 06 октября 2019

Я хочу написать средство визуализации, но действительно ли мне нужно использовать конвейер OpenGL, не могу ли я сделать свой собственный? Есть ли способ, которым я могу написать весь код для GPU и CPU, от управления памятью до растеризации, или я должен использовать уже предоставленный конвейер? Если я не могу сделать это в OpenGL, где я могу? Могу ли я получить некоторые направления? На каком языке я пишу код графического процессора и как его использовать на графическом процессоре?

Ответы [ 2 ]

3 голосов
/ 06 октября 2019

Графические процессоры потребительского уровня, так как они в настоящее время являются стандартными, не являются процессорами. Вы не «программируете» графический конвейер. Графический конвейер является тем, чем он является, потому что именно так GPU предназначены для работы. Очевидно, что разные конкретные графические процессоры будут иметь разные реализации, но базовые элементы конвейера рендеринга являются фундаментальными частями аппаратного обеспечения. Программируемые части конвейера могут программироваться только в той степени, в которой это позволяет GPU, и для тех целей, для которых предназначен этот этап (с некоторой гибкостью).

Будущие графические процессоры могут быть более гибкими, и естьдаже некоторые альтернативные конвейеры для обработки вершин в некоторых современных графических процессорах. Но мы еще не дошли до того, что вы можете делать вещи так, как вам нравится. Графические процессоры предназначены для эффективности;их ограничения существуют, чтобы помочь вещам оставаться на эффективном пути.

Управление памятью - это совершенно отдельная проблема. Vulkan и подобные API-интерфейсы буфера команд предоставляют гораздо более низкоуровневую функциональность управления памятью по сравнению с непосредственными API, такими как OpenGL. Однако следует понимать, что API-интерфейсы буфера команд не для программистов-хобби. Эти API не дружелюбны по любому поводу;они требуют, чтобы вы были хорошо осведомлены о многих деталях, которые непосредственные API скрывают от вас, и не сообщат вам, когда вы нарушите их правила.

0 голосов
/ 08 октября 2019

Вы можете написать библиотеку, которая выполняет вызовы непосредственно к графическим драйверам, или вы можете написать собственный конвейер, работающий на процессоре, который будет функционально эмулятором для выделенного графического оборудования, но это будет сложный, ненадежный, медленныйи, вероятно, будет стоить вам много времени для внедрения при очень небольшом окупаемости инвестиций.

Как уже упоминалось в комментариях, графические процессоры работают так, как они делают, потому что они были разработаны на аппаратном уровне для выполнения. это так. API OpenGL / DirectX / Vulkan просто позволяют вам больше или меньше контролировать этот конвейер и подключать пользовательские этапы шейдера.

Причина, по которой вы не можете написать свой собственный растеризатор, заключается в том, что это этапв конвейере, в котором это в значительной степени настолько эффективно, насколько это возможно. Ваша версия вряд ли будет лучше.

Не слишком заботьтесь о непрограммируемых частях конвейера. Это компетенция аппаратных инженеров и программистов драйверов.

Если вы хотите много контролировать существующее оборудование, попробуйте DX12 или Vulkan / Metal. Они настолько близки, насколько это возможно для программиста, без написания пользовательских драйверов.

...