DX11 InputLayouts

Всичко свързано с Microsoft DirectX. Въпроси относно HLSL.
Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран на: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

DX11 InputLayouts

Мнение от KosSiO » 24 апр 2013 21:12

Хммм някой занимава ли се изобщо с това?

Както и да е въпрос е следния.
За да си направя input layout ми трябва shader bytecode, който да вертифицира инпут лейаута. MS ми обещават, че направения по този начин layout мога да го преизползвам с кой да е шейдър. Ето за коя функцийка говоря

Код: Избери всички

HRESULT hr = d3ddev->CreateInputLayout(inputElemDesc.get(), numSemantics, 
pShader->GetShaderBlob().GetBufferPointer(), 
pShader->GetShaderBlob().GetBufferLength(), 
&m_pD3D11Layout);
Решиш да се изхитря с този шейдър:

Код: Избери всички

float4 main(): SV_Position
{
	float4 retval = float4(0.f, 0.f, 0.f, 1.f);
	return retval;   
}
Правилно се създава лейаута, обаче като тръгна да рисуавм " : Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible.", Което общо взето се очакваше, но си мислех, че с някаква такава хитрина мога да го залъжа.

Единственото което се сещам, да направя е за всеки въртекс формат, да генерирам по един шейдър, да го компилирам, да си вертифицирам лейаута и да нямам ядове. Обаче MS са забранили за windows phone (май и за Xbox вече, не мога да се изкажа точно) да компилираш шейдъри runtime. Което означава, че аз трябва да разпиша шейдъри за всички възможни въртекс формати, което е безумие!!!

Потребителски аватар
Zero_effect
Sometimes here
Sometimes here
Мнения: 35
Регистриран на: 29 авг 2008 17:49

Re: DX11 InputLayouts

Мнение от Zero_effect » 27 апр 2013 11:30

Принципно, ако не си готов да пишеш фалшиви сигнатури(може да се разтърсиш за кода на Mesa за информация как се подреждат сигнатурите), трябва да генерираш малко по-дълги шейдъри, които съдържат пълната сигнатура. Трябва да се отбележи, че ако подаваш допълнителни работи в края на сигнатурата, които не се ползват от shader-а e възможно да преизползваш input layout-а. Друг вариант е да запазиш само input и output signature blob-а - има такива функции в API-то. Така че варианти има много, твоя работа е да прецениш кое ще е най-добрия вариант за твоето решение.

Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран на: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

Re: DX11 InputLayouts

Мнение от KosSiO » 27 апр 2013 16:03

Zero_effect написа:Принципно, ако не си готов да пишеш фалшиви сигнатури(може да се разтърсиш за кода на Mesa за информация как се подреждат сигнатурите), трябва да генерираш малко по-дълги шейдъри, които съдържат пълната сигнатура. Трябва да се отбележи, че ако подаваш допълнителни работи в края на сигнатурата, които не се ползват от shader-а e възможно да преизползваш input layout-а. Друг вариант е да запазиш само input и output signature blob-а - има такива функции в API-то. Така че варианти има много, твоя работа е да прецениш кое ще е най-добрия вариант за твоето решение.

Мислех подобни неща, решиш обаче, да направя нещата по openGl-ския начин, за всеки шейдър ще прочитам кой атрибут на кой слот го иска, всеки шейдър, ще си знае кое с какъв оffset-е. Layout ите няма да описват геометрия,а атрибути. Страхувах се че това ще добави голям overhead, но направих няколко теста и нямаше проблеми(дано хардуера не ме е излъгал, все пак dx11 и стандарт).

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост