Компилируются шейдеры при перезапуске проекта. ABC для компиляции шейдеров. Скомпилированные шейдеры NVIDIA в OpenGL и Vulkan намного медленнее, чем в D3D

При сборке компьютера, обязательно нужно знать, как к материнской плате подключить провода, ведь без этих знаний ничего вообще не получится. Данный этап осуществляется, когда все комплектующие уже установлены в корпус. То есть сама материнская плата, блок питания, жесткий диск находятся на своих местах. Также желательно установить и материнскую плату в PCI-E разъем и прикрутить ее к корпусу. Только теперь и нужно к материнской плате подключить провода. Как это сделать? Об этом мы сейчас и поговорим.

Как подключить провода к материнской плате Asus, ASRock, MIS и других производителей?

Важно сразу отметить тот факт, что описанный ниже метод сильно обобщен. Разные материнские платы подключатся немного по-разному. То есть некоторые отличия могут быть, однако принцип остается тем же. Начнем с разъяснения и подключения коннекторов корпуса: кнопки питания, перезагрузки, USB-портов.

Подключение коннекторов

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

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

Подключаем первый коннектор с маркировкой M/B SW. Он отвечает за кнопку питания на корпусе. Также он может иметь название POWER SW. Внимательно присмотритесь к материнской плате (справа внизу), есть ли там пара контактов с пометкой POWER. Если есть, то именно на них и нужно нацепить данный коннектор. Если такой надписи нет, тогда открывайте инструкцию к плате и ищите схему там.

Второй коннектор с маркировкой RESET SW отвечает за кнопку перезагрузки. По аналогии с POWER, подключаем коннектор RESET SW. Если на плате нет указания, то ищем в инструкции к материнской плате, какие именно контакты нужно замыкать.

Есть также провода с пометками POWER LED+ и POWER LED-, благодаря которым светятся лампочки на корпусе системного блока. Здесь важно их подключить правильно и не перепутать местами плюс и минус. Сверяйтесь обязательно с инструкцией.

Не забываем и про USB-разъемы на корпусе. Если вы хотите иметь возможность вставлять флэшки в гнезда на корпусе, а не непосредственно в материнскую плату, то нужно подключить USB-разъемы. Они маркируются как USB. Провод Audi отвечает за Jack 3.5 mm, который используется для наушников или колонок.

Еще раз напомним, что важно знать, как подключить провода включения к материнской плате правильно. И если вам приходится с усилием втыкать коннектор, то, скорее всего, вы делаете что-то неправильно. После того как к материнской плате подключили провода коннекторов, можно приступать к блоку питания.

Подключение питания процессора

Центральный процессор ставится на отведенное для него гнездо, а на него надевается радиатор с кулером. К самому процессору никакой провод не подключается. Его питание осуществляется от материнской платы, и провод подключается непосредственно к ней. Гнездо питания находится рядом с процессором. Присмотритесь, есть ли рядом 4-пиновое гнездо. В инструкции к материнской плате обязательно указывается его расположение, однако его видно даже при беглом осмотре платы.

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

Подключение главного кабеля питания материнской платы

Самым крупным кабелем является именно этот. Он состоит из двадцати разъемов (пинов), а в дополнение к нему прилагаются еще 4 отдельных разъема. Получается, что материнская плата подключается через 24 разъема. А так как из блока питания выходит единственный провод с таким количеством пинов, то и ошибиться в его определении вы не сможете. Кроме того, на конце коннектора есть специальная защелка, которая не позволяет вставить кабель в разъем неправильно.

При подключении убедитесь, что эта конструкция вошла в гнездо и защелкнулась.

Подключение видеокарты

Если вы используете процессор с интегрированной видеокартой, то никакого подключения видеокарты не будет. Но чаще всего пользователи предпочитают использовать мощные графические платформы, которые подключатся через PCI-E-разъем и требуют дополнительного питания.

Видеокарта запитывается от 4-пинового коннектора. Место для питания, в зависимости от может быть где-то сбоку, но чаще всего оно находится сзади. Если видеокарта очень мощная и требовательная к питанию, то она может запитываться и от 6-пинового коннектора. Поэтому, при выборе блока питания, обращайте внимание, какие именно и сколько проводов для питания у него есть. При подключении карты коннектор должен защелкнуться - обратите на это внимание.

Подключение жесткого диска

Жесткий диск подключается к материнской плате через SATA-кабель. На материнской плате (где-то в правой части) обычно присутствует 4 разъема SATA, где написано: Выбирайте первый и подключайте к нему жесткий диск.

SATA-кабель имеет одинаковые разъемы на двух концах. Но этого недостаточно. Жесткий диск также требует питания и обычно подключается к блоку через 4-пиновый разъем. Поэтому подсоединяйте к нему кабель с четырьмя жилами. По аналогии подключается и оптический привод для дисков, но они сейчас крайне редко используются.

Подключение оперативной памяти

Мы разобрались, куда подключать провода на материнской плате, и в том, что оперативная память просто вставляется в разъемы и не требует подключения через провода. На вашей плате есть 2-4 гнезда для ОЗУ. Вставляйте память туда (обратите внимание, там есть защита от неправильной вставки) и немного придавливайте. Звук щелчка будет означать, что память стала на свое место.

Ну вот и все, теперь вы знаете, как правильно подключить провода к материнской плате, и сможете сделать это самостоятельно. Добавим, что разработчики стараются делать свое "железо" максимально удобным для подключения. Поэтому у вас обязательно получится собрать этот "конструктор", ведь даже при желании, вы не сможете подключить неправильные провода в неправильные гнезда. От этого есть надежная защита.

Как подключить материнскую плату к передней панели, на которой содержаться все основные кнопки и индикаторы?

Процедура присоединения материнской платы к передней панели – это стандартный процесс сборки компьютера .

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

Помните! Если подключить элементы к главной системной плате в неправильной очередности, некоторые из них могут не работать или работать некорректно.

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

Подключение всех кнопок и индикаторов состояния

На любом корпусе присутствуют индикаторы состояния работы компьютера, светодиоды, кнопки, дисководы. Также могут присутствовать другие элементы.

На материнской плате компьютера существует отдельный блок для подключения лампочек-диодов (показывают состояние включения) и кнопок.

Компоненты к этому блоку подключаются с помощью четырех отдельных коннекторов.

Их внешний вид показан на рисунке ниже. Они выглядят одинаково на всех компьютерах, однако фразы, которые на них написаны могут отличаться (но означают они одно и то же).

Соединители окрашены в разные цвета.

Желтый предназначен для подключения кнопки включения, синий – для диода состояния системы (светится при перезагрузке системы).

Соединитель зеленого цвета подключает к материнской плате компьютера лампочку индикации нажатия кнопки питания (после нажатия клавиши включения соответствующая лампочка загорается зеленым светом).

Красный – кабель кнопки включения.

Желтым цветом также может быть окрашен соединитель, который связывает динамик на корпусе.

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

Все коннекторы подключаются к одному определенному порту материнской платы. Как правило, такой порт расположен справа внизу на главной плате системы.

Производители компьютерных деталей называют этот порт словом PANEL и его вариациями (F_PANEL).

Абсолютно каждая материнская плата имеет подписи, которые указывают на то, что и куда нужно соединять. На рисунке ниже изображен необходимый порт на плате.

Стрелками указано, куда необходимо подключать каждый из соединителей.

На главной плате часто можно встретить отдельный разъем для подключения динамика, который реагирует на ошибки в БИОСе и в железе компьютера.

Расположение разъема показано на рисунке:

После подключения блока с кнопками и диодами можно приступать к присоединению всех передних входов USB, а также аудио выходов.

Процесс подключения передней панели корпуса системного блока

Внешний вид коннекторов для USB и звука практически не отличается от тех коннекторов, которые были описаны выше в статье.

Однако, в отличие от предыдущих проводов коннекторов, они соединены вместе.

Каждый коннектор имеет наименование (соответственно USB и HD AUDIO). Внешний вид проводов показан на рисунке ниже:

Разъем для подключения данных коннекторов на материнской плате находится в ее нижней части и, как правило, подписан наименованиями F_USB1 или F_USB2.

Разъемов для подключения может быть больше чем два (более новые версии материнских плат).

Не имеет значения, куда какой провод подключать.

Все входы абсолютно идентичны, порядок их подключения никак не влияет на работу компонентов передней панели компьютера.

Также невозможно ошибиться с правильной стороной коннектора.

Разъем USB можно подключить только одной стороной.

Следуйте инструкции:

  • Найдите соединитель с названием F_USB;
  • Найдите соответствующие разъемы на материнской плате. Их расположение указано на рисунке;

  • Подсоедините коннекторы к любому из разъемов на плате.

Обратите внимание! Если на корпусе вашего компьютера указано, что используется версия USB 3.0, необходимо подключить коннектор только к определенному разъему. К какому именно, можно прочитать в инструкции, которая прилагается к материнской плате.

Когда я компилирую шейдер, он должен быть полным? Могу ли я использовать glCompileShader на шейдере без функции main ()? В справочной документации OpenGL есть хорошая запись ошибок при связывании программ, но я не могу найти ее для привязки шейдеров, поэтому я должен спросить здесь.

Я хочу иметь возможность иметь каждую часть шейдера в другом файле. Так что f.e. У меня будет функция вычисления материала, и у меня будет «основной» шейдер с основной функцией, которая будет ссылаться только на функцию вычисления материала. Прямо сейчас у меня есть мои шейдеры как массивы строк, которые они могут читать из файла, затем я собрал массив строковых указателей и скомпилировал их в один шейдер (вершина, фрагмент, геометрия). Но если бы я мог скомпилировать каждый invidividual shaders (части вершинных шейдеров, а не весь вершинный шейдер, собранный в массив строк) и объединить их, когда я свяжу программу, что сделало бы код намного яснее, и я мог бы переместите код компиляции шейдера из кода управления программой в сам объект шейдера (тот, который загружает строку из файла и раскрывает ее).

0

2 ответы

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

«Связанная» модель в стадии шейдера - это не то, на что я бы... полагался. Не из-за спецификации, а потому, что она широко не используется. И это означает, что у него больше шансов получить ошибки драйверов. Придерживайтесь пути, который обычно используется, и просто используйте несколько строк источника. Таким образом, ваш код более вероятен work .

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

Создание файлов с шейдерами

Шейдеры хранятся в отдельных файлах, имеющих расширение.hsls. Для данного урока я добавил в проект два файла: PixelShader.hlsl и VertexShader.hlsl. Файл с шейдером можно добавить через пункт меню Project → Add New Item и, в открывшемся окне, выбрав нужный тип шейдера:

Компиляция шейдеров

В DirectX 11 под Windows 8 шейдер можно скомпилировать тремя способами. Два из них используют устройство D3D11. Третий способ - функция D3DCompileFromFile, относящаяся к HLSL. Вот эту функцию мы и будем использовать для компиляции шейдеров. Просто это самый быстрый и простой способ.

Замечу, что в документации сказано, что приложения, в которых используется D3DCompileFromFile, нельзя размещать в Windows Store.

Для использования шейдерного компилятора нужно подключить заголовочный файл D3DCompiler.h и библиотеку d3dcompiler.lib:

1?#include #pragma comment(lib,"D3dcompiler.lib") ?1!

Функция D3DCompileFromFile

Функция D3DCompileFromFile компилирует HLSL шейдеры. Она принимает файл с исходным кодом шейдера и возвращает (предпоследний аргумент) экземпляр интерфейса ID3DBlob (blob - сокращение от Binary Large Object - большой двоичный объект, т.е. это просто большой массив данных):

1?HRESULT WINAPI D3DCompileFromFile(LPCWSTR pFileName, const D3D_SHADER_MACRO *pDefines, ID3DInclude *pInclude, LPCSTR pEntrypoint, LPCSTR pTarget, UINT Flags1, UINT Flags2, ID3DBlob **ppCode, ID3DBlob **ppErrorMsgs);?1!

1. pFileName - имя файла с исходным кодом шейдера.

2. pDefines - массив макросов шейдера. Пока просто передаём NULL.

3. pInclude - данный аргумент задаётся, когда в файле шейдера присутствует директива #include. Ставим NULL.

4. pEntrypoint - точка входа шейдера, т.е. имя функции с кодом шейдера. По умолчанию Visual Studio использует main.

5. pTarget - версия и тип шейдера: compute, domain, geometry, hull, pixel, vertex. Нам пока нужны последние два: пиксельный и вершинный. В DirectX 11 нужно использовать 5-ую версию шейдеров. Передаём значения: vs_5_0 - вершинный, ps_5_0 - пиксельный.

6-7. Флаги. Пока оставляем NULL.

8. Экземпляр ID3DBlob, куда будет сохранён скомпилированный шейдер.

9. ppErrorMsgs - здесь будут сохранены сообщения об ошибках. Передаём NULL.

Итак, давайте скомпилируем вершинный и пиксельный шейдеры:

1?ID3DBlob* vsBlob; ID3DBlob* psBlob; D3DCompileFromFile(L"VertexShader.hlsl", NULL, NULL, "main", "vs_5_0", NULL, NULL, &vsBlob, NULL); D3DCompileFromFile(L"PixelShader.hlsl", NULL, NULL, "main", "ps_5_0", NULL, NULL, &psBlob, NULL);?1!

Вершинный шейдер мы компилируем в vsBlob, а пиксельный - в psBlob.

Создание шейдерных объектов в DirectX 11

Имея скомплировнный шейдер, с помощью устройства D3D11 можно создать шейдерные объекты - это представление шейдеров в программе. Для создания шейдеров разных типов интерфейс ID3D11Device использует разные методы. Нам нужно два метода: ID3D11Device::CreateVertexShader и ID3D11Device::CreatePixelShader. Они очень похожи (отличается только последний аргумент). Рассмотрим прототип первого:

1?HRESULT CreateVertexShader(const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D11ClassLinkage *pClassLinkage, ID3D11VertexShader **ppVertexShader);?1!

1. pShaderBytecode - адрес скомпилированного шейдера в памяти.

2. BytecodeLength - размер скомпилированного шейдера.

У интерфейса ID3DBlob есть два метода, которые как раз хранят два предыдущих значения: GetBufferPointer - адрес скомпилированного шейдера, GetBufferSize - размер. Эти методы не принимают аргументов.

3. pClassLinkage - аргумент используется для динамического связывания. Ставим NULL.

4. ppVertexShader - в этой переменной будет сохранён созданный шейдерный объект.

Посмотрим на код:

1?ID3D11VertexShader* vs; ID3D11PixelShader* ps; dev->CreateVertexShader(vsBlob->GetBufferPointer(), vsBlob->GetBufferSize(), NULL, &vs); dev->CreatePixelShader(psBlob->GetBufferPointer(), psBlob->GetBufferSize(), NULL, &ps);?1!

Осталось сделать созданные шейдеры активными:

1?devContext->VSSetShader(vs, NULL, NULL); devContext->PSSetShader(ps, NULL, NULL);?1!

Здесь контекст устройства устанавливает текущие вершинный и пиксельный шейдеры. Второй и третий аргументы на данный момент не важны.

Заключение

В прикреплённом проекте в шейдерах используется код, созданный Visual Studio по умолчанию. Данные пиксельный и вершинный шейдеры ничего не делают с данными. Когда вы запустите программу, то не увидите никаких различий. Убедитесь (в отладчике), что vsBlob, psBlob, vs и ps имеют реальные адреса (не равны нулю).

В этом уроке мы научились настраивать две важнейших стадии графического конвейера DirectX 11: вершинный и пиксельный шейдеры. Тепепь нам осталось снабдить графических конвейер данными.



В продолжение темы:
Windows

Часть вторая : "Важнейшие характеристики каждого семейства процессоров Intel Core i3/i5/i7. Какие из этих чипов представляют особый интерес" Введение Сначала мы приведём...

Новые статьи
/
Популярные