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

D3D11: слоты и массивы (2 стр)

Страницы: 1 2
#15
14:30, 3 фев. 2016

-Eugene-
> Нет. Вообще никогда не используй массивы ресурсов в шейдерах, и тогда таких
> вопросов не будет.
+1

Executor
> Ты точно не путаешь с Texture2DArray?
а?


#16
14:42, 3 фев. 2016

k119_55524
> а?

Texture2D tex[2];
vs
Texture2DArray tex;

Разные вещи. Я думаю автор путает эти вещи.

Texture2D tex[2];
==
Texture2D tex0;
Texture2D tex1;

#17
15:43, 3 фев. 2016

Executor
Да, мне кажется это так. Я сразу не обратил(ранее) внимания на ентот казус.
Ну собственно вопросам а? высказал восклицание в поддержку Вашего замечания  :)

#18
15:52, 3 фев. 2016

в 2016 году использовать DX11? Фи, как же это некультурно!

#19
15:55, 3 фев. 2016

Executor
> Каждый элемент занимает свой слот.
> Ты точно не путаешь с Texture2DArray?
Не путаю. Пример можно сказать взял из туторила с растерека:
http://www.rastertek.com/dx11tut17.html
Там текстуры устанавливают так:

deviceContext->PSSetShaderResources(0, 2, textureArray);
А в пиксельном шейдере уже текстуры объявлены как:
Texture2D shaderTextures[2];

static_cast
> в 2016 году использовать DX11? Фи, как же это некультурно!
То то я вижу в стиме полно игр поддерживающих DX12.

Еще нашел интересную тему.
http://www.gamedev.net/topic/634009-understanding-buffer-texture-… er-registers/
тут пишут, что несколько текстур могут быть в одном регистре и их якобы можно успешно использовать в разных функциях.

Texture2D TextureA : register(t0);
Texture2D TextureB : register(t0);
SamplerState SamplerA : register(s0);

float4 ThisShaderUsesTextureA(in float2 texcoord : TEXCOORD) : SV_Target0
{
    return TextureA.Sample(SamplerA, texcoord);
}

float4 ThisShaderUsesTextureB(in float2 texcoord : TEXCOORD) : SV_Target0
{
    return TextureB.Sample(SamplerA, texcoord);
}
Тоже немного в ступор поставило. Регистры и слоты это ведь не одно и тоже? В регистрах несколько слотов или как это понимать?

#20
16:18, 3 фев. 2016

Digan
> Там текстуры устанавливают так:
> deviceContext->PSSetShaderResources(0, 2, textureArray);
> А в пиксельном шейдере уже текстуры объявлены как:
> Texture2D shaderTextures[2];
Всё правильно, так выставляется 2 тексуры в 2 разных слота.
Как было сказано выше, пользуйтесь как Вам угодно.

#21
16:20, 3 фев. 2016

Digan
> Регистры и слоты это ведь не одно и тоже? В регистрах несколько слотов или как
> это понимать?
Вас смущает t0 и t0 или t0 и s0?

#22
16:31, 3 фев. 2016

Digan
> То то я вижу в стиме полно игр поддерживающих DX12.
есть передовые технологии, а есть мейнстрим. Кому интересно быть таким же, как и все остальные?

#23
16:31, 3 фев. 2016

k119_55524
> Вас смущает t0 и t0 или t0 и s0?
Уже ничего не смущает. Понял, что ThisShaderUsesTextureA и ThisShaderUsesTextureB в примере по сути разные точки входа. Поэтому в одном регистре всегда будет одна текстура. Зависит от того какая точка входа будет указана при компиляции.

#24
16:57, 3 фев. 2016

Digan
> Texture2D TextureA : register(t0);
> Texture2D TextureB : register(t0);

Как я понимаю, это алиас одной и той же текстуры. По моему польза сомнительная.

> Не путаю.

Ок.

> Texture2D shaderTextures[2];

Как я уже и писал:

Texture2D tex[2];
==
Texture2D tex0;
Texture2D tex1;

Профит тут в одном, ты меньше дёргаешь функций 3Д АПИ. Если это один раз за кадр делается, то разница стремится к нулю, если ты делаешь это очень много раз за кадр, то может влиять на производительность.
Ну и массивом может быть удобнее пользоваться в каких-то случаях.
Слотов они будут занимать одинаковое количество, код получится тоже одинаковым.

#25
17:01, 3 фев. 2016

Executor
> Как я понимаю, это алиас одной и той же текстуры. По моему польза сомнительная.
Ну если в одном файле много шейдеров, смысл есть.

#26
18:13, 3 фев. 2016

Получается при указании регистров текстур нужно просто индексы слотов проставить после t? слот 0 - t0, слот 1 - t1, слот 2 - t2 и т.д. Я правильно понял?

#27
18:17, 3 фев. 2016

Digan
Ага.

#28
18:21, 3 фев. 2016

Наконец-то разобрался с этими слотами. Всем спасибо.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.