Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Индексирование массивов в пиксельном шейдере

Индексирование массивов в пиксельном шейдере

BonusПостоялецwww20 фев. 201811:48#0
Я выяснил, что не все массивы одинаково полезны. В dx9 в пиксельном шейдере их нельзя просто так взять и проиндексировать. Они раскладываются компилятором в регистры, которые очень быстро заканчиваются. Я работаю на Unity и поэтому не долго думая пересобрал тестовый проект под dx11 и shader model 4.0
Так вот, в этом режиме в зависимости от видео карты проект может запустится в режиме dx11 или в dx11 level 10 (или что-то типа того, от карты зависит). И если это не dx11, то в пиксельном шейдере возникает та же проблема, что и в dx9.
Вопрос в том, как узнать ТОЧНО, можно ли индексировать или нет? С какой версии API пиксельный может работать с массивами? Гугл не помог, буду рад хотя бы ссылкам на документацию.
prowkanПостоялецwww20 фев. 201812:10#1
Если вы имеете в виду что-то типа такого:
Texture2D        g_txMats[]  : register(t1);
uint matIndex;
float3 mat = g_txMats[matIndex].Sample(g_sampler, input.tex).rgb;
То это можно делать только в D3D12 Shader Model 5.1
BonusПостоялецwww20 фев. 201812:14#2
Нет, я про обычный float4[] myArray;
innuendoПостоялецwww20 фев. 201813:11#3
Bonus
4.0 ?
BonusПостоялецwww20 фев. 201813:17#4
Ну да, вот из документации Unity:
#pragma target 4.0
DX11 shader model 4.0.
Not supported on DX11 9.x (WinPhone), OpenGL ES 2.0/3.0/3.1, Metal.
Supported on DX11+, OpenGL 3.2+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 consoles.
Has geometry shaders and everything that es3.0 target has.

При этом на GeForce 9800GTX+ индексирование не работает, но сам шейдер нормально собирается, просто массив раскладывается в переменные и забивает все регистры.

innuendoПостоялецwww20 фев. 201814:02#5
Bonus
> Not supported on DX11 9.x (WinPhone), OpenGL ES 2.0/3.0/3.1, Metal.

о как, metal в пролёте ?

BonusПостоялецwww20 фев. 201814:19#6
Судя по документации Metal у них начинается с #pragma target 4.5
#pragma target 4.5 (or es3.1)
OpenGL ES 3.1 capabilities (DX11 SM5.0 on D3D platforms, just without tessellation shaders).
Not supported on DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0.
Supported on DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1, Metal, Vulkan, PS4/XB1 consoles.
Has compute shaders, random access texture writes, atomics etc. No geometry or tessellation shaders.

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр