Является ли StructuredBuffer[ ] более похожим на std::vector[ ] или std::vector>?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли StructuredBuffer[ ] более похожим на std::vector[ ] или std::vector>?

Сообщение Anonymous »

Скажем так:

Код: Выделить всё

// HLSL
layout (set = 0, binding = 4) StructuredBuffer my_buffer;
И сравните его с:

Код: Выделить всё

// HLSL
layout (set = 0, binding = 4) StructuredBuffer my_buffers[];
В GLSL это будет эквивалентно разнице между:

Код: Выделить всё

// GLSL
layout (set = 0, binding = 4) buffer MyBuffer
{
T my_buffer[];
};
и:

Код: Выделить всё

// GLSL
layout (set = 0, binding = 4) buffer MyBuffer
{
T my_buffer[];
}my_buffers[];
Итак, мне интересно, вводит ли версия массива дополнительный уровень косвенности? Я думаю, что если:

Код: Выделить всё

// HLSL
StructuredBuffer my_buffer;
или

Код: Выделить всё

// GLSL
buffer MyBuffer
{
T my_buffer[];
};
по сути является указателем на буфер, тогда версия массива может быть просто массивом указателей на буфер без дополнительной косвенности. Однако я думаю, что здесь есть дополнительная косвенность. Аналогия, о которой я говорю, по сути, представляет собой разницу между:

Код: Выделить всё

std::vector my_buffer[]; // THE MORE EFFICIENT WAY
и

Код: Выделить всё

std::vector my_buffers; // THE LESS EFFICIENT WAY, THE WAY I THINK IT'S HANDLED IN GLSL/HLSL/SLANG
Мой вопрос:
  • Это больше похоже на способ «дополнительной косвенности»?
  • Устраняет ли указание размера массива дополнительную косвенность?
  • Приводит ли дополнительное направление к падению производительности?
Я подумываю о доступе ко ВСЕЙ глобальной памяти устройства графического процессора через глобальный дескриптор, содержащий каждый буфер, как описано выше. В результате получится что-то вроде «адреса буферного устройства», который должен работать на всех устройствах/версиях/платформах.

Подробнее здесь: https://stackoverflow.com/questions/797 ... dvectorstd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»