Я использую единство, и я хочу отправить байт-массив на GPU с использованием HLSL. Я знаю о ByteAddressBuffer, но я понятия не имею, как его использовать. Я просто хочу знать, как отправить «байт» на GPU. Я хочу иметь StructuredBuffer<byte>
в моем вычислительном шейдере.Отправка байта [] на GPU?
ответ
Для шейдерной части вы можете использовать StructuredBuffer
. Я точно не знаю, есть ли тип данных байтов в HLSL, поэтому я просто использую целые числа для этого примера.
Shader код:
Shader "Name" {
SubShader {
...
StructuredBuffer<int> _Data;
...
}
}
На C# стороны, у вас есть материал, который соответствует вашему шейдеру, позволяет называть его mat
, и ваши байты массива bArr
. Кроме того, вам нужно создать буфер gpu, который затем можно привязать к вашему шейдеру: ComputeBuffer dataBuf = new ComputeBuffer(bArr.Length, sizeof(int))
.
Наконец, загрузите массив на GPU dataBuf.SetData(bArr)
и связать буфер для вашего шейдера mat.SetBuffer("_Data", dataBuf);
Edit
Я хочу иметь StructuredBuffer < байт> в моем вычислительном шейдере.
Из того, что я читал, вы не можете. В HLSL нет ни одного типа данных byte
(а не единственного использования CG). Пример выше - стандартный шейдер вершин/фрагментов, для использования вычислительных шейдеров я хотел бы направить вас к моему answer по вашему другому вопросу. Увеличьте его до ваших потребностей. Как я уже писал в комментарии, если вы не хотите использовать int
для своих byte
данных и, таким образом, тратите 24 бита, вы можете пробить 4 bytes
в 1 int
с битовым сдвигом. Операция переключения должна быть доступна в шейдерах при использовании шейдерной модели выше 4 (DX10.1 или что-то еще)
Я знаю, как использовать структурированные буферы, и я знаю, как отправлять ints на GPU. Я хочу знать, как отправлять «байты» на GPU @xyLe_ – None
, в HLSL и в CG нет типа данных 'byte', что по умолчанию используется единством. в CG вы можете пойти с 'char', но не можете ли вы просто пойти с' int'? – TheDjentleman
, если вы действительно обладаете используемым пространством, а затем просто упакуйте 4 байта в 1 int и используйте бит-сдвиги – TheDjentleman
Почему я получил слишком много голосов? Я что-то пропустил? – None
Ваш вопрос на самом деле не показывает, что/что вы пытались решить вашу проблему. (Я думаю, именно поэтому) – TheDjentleman