Войти
ПрограммированиеФорумГрафика

HLSL и вызов функций (7 стр)

Страницы: 14 5 6 7 8 9 Следующая »
#90
22:56, 13 дек. 2019

MrShoor
> Расскажи, как ты собрался глянуть ассемблер после компиляции GLSL?
https://gpuopen.com/wp-content/uploads/2017/02/GSA_screen_shot.jpg

MrShoor
> А не инлайнится оно не может, т.к. в шейдерном ассемблере просто нету
> инструкций call и ret как для CPU.

как нехорошо получилось
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/call--sm4---asm-


#91
(Правка: 22:59) 22:57, 13 дек. 2019

MrShoor
> Я пишу: в GLSL код инлайнится как бог на душу положит.
Ты это пишешь со ссылкой на Unity, а в unity нету GLSL. Есть только порт c HLSL который уже заинлайнен. Если бы ты писал про GLSL без Unity вопросов бы не было.

#92
23:02, 13 дек. 2019

innuendo
> > Расскажи, как ты собрался глянуть ассемблер после компиляции GLSL?
> https://gpuopen.com/wp-content/uploads/2017/02/GSA_screen_shot.jpg
А у меня NVidia, дядь, скажи, что делать?

> как нехорошо получилось
> https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/call--sm4---asm-
Действительно. Не знал что добавили call и ret, ибо в выхлоп от компилятора они никогда не попадают у меня. Ок, буду знать.

#93
(Правка: 23:04) 23:03, 13 дек. 2019

MrShoor
> Не знал что добавили call и ret

они были ещё в vs2.0

MrShoor
> > > Расскажи, как ты собрался глянуть ассемблер после компиляции GLSL?
> > https://gpuopen.com/wp-content/uploads/2017/02/GSA_screen_shot.jpg
> А у меня NVidia, дядь, скажи, что делать?

до тебя дошло, что байткод d3d это не код gpu?

#94
23:04, 13 дек. 2019

foxes
> Ты это пишешь со ссылкой на Unity, а в unity нету GLSL.
Уже нету GLSL. Раньше был. Да и причем тут Unity, если речь идет про GLSL. Есть GLSL, он разными компиляторами по разрому оптимизируется. Некоторыми очень плохо, и так и появился проект GLSL Optimizer.

#95
(Правка: 23:14) 23:06, 13 дек. 2019

MrShoor
> Уже нету GLSL. Раньше был.
Никогда не было. Раньше был CG.
MrShoor
> Да и причем тут Unity, если речь идет про GLSL.
Я тоже так думаю, причем тут ссылка на unity. И прочие компиляции с HLSL в GLSL (This library takes DirectX bytecode as input, and translates it into the following languages:) если речь идет о чистом GLSL.

#96
23:14, 13 дек. 2019

innuendo
> до тебя дошло, что байткод d3d это не код gpu?
А я этого и не утверждал. Я говорил, что по d3d ассемблеру (который ты называешь не ассемблером почему-то) сразу видно как оно заинлайнилось.

#97
23:17, 13 дек. 2019

MrShoor
> Я говорил, что по d3d ассемблеру (который ты называешь не ассемблером
> почему-то) сразу видно как оно заинлайнилось.

gpu выполняет свой код и точно сравнивать желательно его

#98
(Правка: 23:22) 23:21, 13 дек. 2019

innuendo
> gpu выполняет свой код и точно сравнивать желательно его
Хочешь сказать что конечный код такой же убогий - не факт. Ты можешь тот же код с копированием как то дизассембдировать?

#99
23:48, 13 дек. 2019

innuendo
> gpu выполняет свой код и точно сравнивать желательно его
В мире теоретиков - безусловно да.

#100
2:22, 14 дек. 2019

foxes
> void main()
> {
> u_xlatu0 = uvec4(SBin_buf[0].value[(0 >> 2) + 0], SBin_buf[0].value[(0 >>
> 2) + 1], SBin_buf[0].value[(0 >> 2) + 2], SBin_buf[0].value[(0 >> 2) + 3]);
> u_xlat0 = vec4(u_xlatu0);
> u_xlatb1 = 0.5<u_xlat0.w;
> u_xlatu19 = 0u;
> while(true){
> u_xlatb37 = u_xlatu19>=16u;
> if(u_xlatb37){break;}
> u_xlat2 = TempArray0[0];
> u_xlat3 = TempArray0[1];
> u_xlat4 = TempArray0[2];
> u_xlat5 = TempArray0[3];
> u_xlat6 = TempArray0[4];
> u_xlat7 = TempArray0[5];
> u_xlat8 = TempArray0[6];
> u_xlat9 = TempArray0[7];
> u_xlat10 = TempArray0[8];
> u_xlat11 = TempArray0[9];
> u_xlat12 = TempArray0[10];
> u_xlat13 = TempArray0[11];
> u_xlat14 = TempArray0[12];
> u_xlat15 = TempArray0[13];
> u_xlat16 = TempArray0[14];
> u_xlat17 = TempArray0[15];
> TempArray1[0] = u_xlat2;
> TempArray1[1] = u_xlat3;
> TempArray1[2] = u_xlat4;
> TempArray1[3] = u_xlat5;
> TempArray1[4] = u_xlat6;
> TempArray1[5] = u_xlat7;
> TempArray1[6] = u_xlat8;
> TempArray1[7] = u_xlat9;
> TempArray1[8] = u_xlat10;
> TempArray1[9] = u_xlat11;
> TempArray1[10] = u_xlat12;
> TempArray1[11] = u_xlat13;
> TempArray1[12] = u_xlat14;
> TempArray1[13] = u_xlat15;
> TempArray1[14] = u_xlat16;
> TempArray1[15] = u_xlat17;
> if(u_xlatb1){
> TempArray1[int(u_xlatu19)] = u_xlat0;
> u_xlatu19 = u_xlatu19 + 1u;
> //ENDIF
> }
> u_xlat2 = TempArray1[0];
> u_xlat3 = TempArray1[1];
> u_xlat4 = TempArray1[2];
> u_xlat5 = TempArray1[3];
> u_xlat6 = TempArray1[4];
> u_xlat7 = TempArray1[5];
> u_xlat8 = TempArray1[6];
> u_xlat9 = TempArray1[7];
> u_xlat10 = TempArray1[8];
> u_xlat11 = TempArray1[9];
> u_xlat12 = TempArray1[10];
> u_xlat13 = TempArray1[11];
> u_xlat14 = TempArray1[12];
> u_xlat15 = TempArray1[13];
> u_xlat16 = TempArray1[14];
> u_xlat17 = TempArray1[15];
> TempArray0[0] = u_xlat2;
> TempArray0[1] = u_xlat3;
> TempArray0[2] = u_xlat4;
> TempArray0[3] = u_xlat5;
> TempArray0[4] = u_xlat6;
> TempArray0[5] = u_xlat7;
> TempArray0[6] = u_xlat8;
> TempArray0[7] = u_xlat9;
> TempArray0[8] = u_xlat10;
> TempArray0[9] = u_xlat11;
> TempArray0[10] = u_xlat12;
> TempArray0[11] = u_xlat13;
> TempArray0[12] = u_xlat14;
> TempArray0[13] = u_xlat15;
> TempArray0[14] = u_xlat16;
> TempArray0[15] = u_xlat17;
> }
> u_xlatu0.x = 0u;
> while(true){
> u_xlatb18 = u_xlatu0.x>=u_xlatu19;
> if(u_xlatb18){break;}
> u_xlat2 = TempArray0[int(u_xlatu0.x)];
> u_xlatu2 = uvec4(u_xlat2);
> SBout_buf[u_xlatu0.x].value[(0 >> 2)] = u_xlatu2.x;
> SBout_buf[u_xlatu0.x].value[(0 >> 2) + 1] = u_xlatu2.y;
> SBout_buf[u_xlatu0.x].value[(0 >> 2) + 2] = u_xlatu2.z;
> SBout_buf[u_xlatu0.x].value[(0 >> 2) + 3] = u_xlatu2.w;
> u_xlatu0.x = u_xlatu0.x + 1u;
> }
> return;
> }
ахаха, шёл 2019 год

#101
3:08, 14 дек. 2019

MrShoor
> В мире теоретиков - безусловно да.

ну да, практики они такие практики

#102
23:36, 14 дек. 2019

Suslik
> ахаха, шёл 2019 год
Это все таки сгенеренный код, а не рукописный. Тоже что и на скрине.

#103
9:52, 15 дек. 2019

foxes
> Это все таки сгенеренный код, а не рукописный. Тоже что и на скрине.
говённо это. это значит, что чтобы писать оптимальные шейдеры, нужно жутко коверкать код, потому что некоторые оптимизаторы написаны задницей. причём всё началось с того (по моему мнению), как кому-то было лень писать нормальную спеку для языка и чтобы не заморачиваться с объяснением call-by-reference, кое-кто использовал call-by-copy-in-copy-out, так как её словами описать проще, при этом *подразумевая*, что любая реализация этого делать, разумеется, на полном серьёзе не будет. в итоге имеет то, что имеем.

#104
13:32, 15 дек. 2019

Suslik
> говённо это.
Да, грабли те же.

Страницы: 14 5 6 7 8 9 Следующая »
ПрограммированиеФорумГрафика