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

Будет ли разница в скорости glsl vertex

#0
9:13, 24 мая 2024

Допустим, есть у нас две фрагмента кода вертексного шейдера:

1) Используется одна текстура, просто один раз она читается с интерполяцией, а другой раз - без интерполяции:

layout (binding = 0) uniform sampler2DArray texSampler_1_Nearest;  // Физически одна и та же текстура
layout (binding = 1) uniform sampler2DArray texSampler_1;          // Физически одна и та же текстура

vec4 color1 = texture(texSampler_1_Nearest, vec3(xy, 0));
vec4 color2 = texture(texSampler_1, vec3(xy, 0));


2) Используется одна две разных текстуры, первая один раз она читается с интерполяцией, а вторая раз - без интерполяции.

layout (binding = 0) uniform sampler2DArray texSampler_1_Nearest;  // Эти две текстуры разные!
layout (binding = 1) uniform sampler2DArray texSampler_2;          // Эти две текстуры разные!

vec4 color1 = texture(texSampler_1_Nearest, vec3(xy, 0));
vec4 color2 = texture(texSampler_2, vec3(xy, 0));

Интересует будет ли первый фрагмент кода выполняться быстрее за счет кэша или чего либо еще, и если будет - то насколько быстрее? Существенно или в пределах погрешности?

#1
9:21, 24 мая 2024

MikeNew
> Интересует будет ли первый фрагмент кода выполняться быстрее за счет кэша или чего либо еще
Да, в больнистве случаев будет

> и если будет - то насколько быстрее?
Напиши код и замерь

#2
9:25, 24 мая 2024

MrShoor
> Да, в больнистве случаев будет
Вот блин, жаль .. понятно, спасибо. :)

#3
9:32, 24 мая 2024

MikeNew
Делаю ставку .. в пределах погрешности

#4
9:33, 24 мая 2024

MikeNew
> Интересует будет ли первый фрагмент кода выполняться быстрее за счет кэша или чего либо еще, и если будет - то насколько быстрее?
Я тебе так кажу, прям вот сильно заморачиваться с оптимизацией под кеш не стоит, ну так, учитывать общие правила нужно конечно. Современные железки довольно таки мощные и все эти оптимизации едва ли дают существенный прирост. Вон в RTX-пайплайне вообще повсюду random access в память, т.к. ускоряющая структура разбросана в глобал мемори и ничего, всё летает.

Что же касается твоего конкретного примера - всё зависит от размера текстур, скорее всего после первого цикла рендера обе текстуры окажутся целиком в кеше и разницы будет ноль. Кеши сейчас большие на GPU, с чего ты взял, что туда попадёт только одна?

#5
9:34, 24 мая 2024

innuendo
> Делаю ставку .. в пределах погрешности
Почему?
Кэш не сработает из-за разницы в способах чтения с интерполяцией и без?

#6
9:36, 24 мая 2024

dominator, если будет использоваться большой объём данных, то стоит заморачиваться. Там где для маленьких программ это всё будет не заметно, для больших программ может оказаться катастрофично.

#7
9:36, 24 мая 2024

dominator
> Что же касается твоего конкретного примера - всё зависит от размера текстур, скорее всего после первого цикла рендера обе текстуры окажутся целиком в кеше и разницы будет ноль.
Текстуры 4к и кроме них будут читаться еще множество других текстур, так что вряд ли они обе в кэше останутся. Или я что-то не понимаю.

#8
9:43, 24 мая 2024

Немного практической конкретики - делается это для мультитекстурования террайна. В данный момент я все умещаю в одну RGBA-текстуру и у получается одновременно смешивать три текстуры и может быть 32 разных текстуры.
Была мысль перейти на две текстуры и иметь возможность смешивать пять текстур и иметь 64 разных текстуры, но если это заметно ударит по производительности, то оно того не стоит.

#9
10:10, 24 мая 2024

MikeNew
> Интересует будет ли первый фрагмент кода выполняться быстрее за счет кэша или чего либо еще,
нет не будет. Текстура 2 раза биндится- к разным текстурным unit ам, в разные места текстурной памяти. Видеокарта содержит ровно мах TextureUnit x max textureSize текстурной памяти, никакого кеша там нет при работе шейдеров.

#10
10:14, 24 мая 2024

MikeNew
Мой тебе совет как старпера ,...забей на скорость :)

#11
10:25, 24 мая 2024

MikeNew
И причем тут фильтрация ?

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

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