2016-11-23 13 views
-5

Я использую единство, и я хочу отправить байт-массив на GPU с использованием HLSL. Я знаю о ByteAddressBuffer, но я понятия не имею, как его использовать. Я просто хочу знать, как отправить «байт» на GPU. Я хочу иметь StructuredBuffer<byte> в моем вычислительном шейдере.Отправка байта [] на GPU?

+0

Почему я получил слишком много голосов? Я что-то пропустил? – None

+0

Ваш вопрос на самом деле не показывает, что/что вы пытались решить вашу проблему. (Я думаю, именно поэтому) – TheDjentleman

ответ

1

Для шейдерной части вы можете использовать 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 или что-то еще)

+0

Я знаю, как использовать структурированные буферы, и я знаю, как отправлять ints на GPU. Я хочу знать, как отправлять «байты» на GPU @xyLe_ – None

+0

, в HLSL и в CG нет типа данных 'byte', что по умолчанию используется единством. в CG вы можете пойти с 'char', но не можете ли вы просто пойти с' int'? – TheDjentleman

+0

, если вы действительно обладаете используемым пространством, а затем просто упакуйте 4 байта в 1 int и используйте бит-сдвиги – TheDjentleman