2016-11-23 3 views
-5

나는 화합을 사용하고 있으며 HLSL을 사용하여 GPU에 바이트 배열을 보내려고합니다. 내가 ByteAddressBuffer에 대해 알고 있지만, 나는 그것을 사용하는 방법을 모른다. 나는 단지 "바이트"를 GPU에 보내는 방법을 알고 싶을뿐입니다. 내 계산 쉐이더에 StructuredBuffer<byte>을 갖고 싶습니다.바이트 []를 GPU로 보내시겠습니까?

+0

왜 내가 너무 많은 down-votes를 얻었습니까? 내가 놓친 것이 있습니까? – None

+0

당신의 질문은 당신이 당신의 문제를 해결하려고 시도한 것을 실제로 나타내지는 않습니다. (나는 그 이유라고 생각한다) – TheDjentleman

답변

1

셰이더 부분의 경우 StructuredBuffer을 사용할 수 있습니다. HLSL에 바이트 데이터 유형이 있는지 정확히 알지 못하므로이 예제에서는 정수 만 사용합니다.

쉐이더 코드 : C#을 측면에서

Shader "Name" { 
    SubShader { 
     ... 
     StructuredBuffer<int> _Data; 
     ... 
    } 
} 

, 당신은 당신의 쉐이더에 해당하는 재료를 가지고, 그것은 mat하고 바이트 배열 bArr를 호출 할 수 있습니다. 또한 gpu 버퍼를 만들어서 셰이더에 바인딩 할 수 있습니다 : ComputeBuffer dataBuf = new ComputeBuffer(bArr.Length, sizeof(int)).

마지막으로, GPU dataBuf.SetData(bArr)에 배열을로드하고 내 컴퓨 트 쉐이더에서 StructuredBuffer < 바이트>를 갖고 싶어 셰이더 mat.SetBuffer("_Data", dataBuf);

편집

에 버퍼를 바인딩합니다.

내가 읽은 것으로부터 할 수 없습니다. HLSL에는 아무런 byte 데이터 유형도 없습니다 (단일체가 사용하는 CG도 아닙니다). 위의 예는 표준 버텍스/프래그먼트 셰이더입니다. 다른 질문에서 계산 쉐이더를 사용하면 answer을 참조 할 수 있습니다. 그것을 당신의 필요에 따라 보강하십시오. 이미 코멘트에 기입 했으므로 byte 데이터에 int을 사용하지 않으므로 24 비트가 낭비되는 경우 비트 쉬프트로 1 int에 4 bytes을 펀치 할 수 있습니다. 셰이더 모델 4 (DX10.1 또는 그 이상)를 사용하는 경우 셰이더에서 시프 팅 작업을 사용할 수 있어야합니다.

+0

구조화 된 버퍼를 사용하는 방법을 알고 있고 int를 GPU에 보내는 방법을 알고있다. "byte"를 GPU에 보내는 법을 알고 싶습니다. @xyLe_ – None

+0

HLSL이나 CG (byte가 기본으로 사용하는 것입니다)에 'byte'데이터 유형이 없습니다. CG에서는'char'와 함께 갈 수 있지만'int'만으로는 갈 수 없습니까? – TheDjentleman

+0

만약 당신이 실제로 사용 된 공간을 가지고 있다면, 단지 1 바이트에 4 바이트를 넣고 비트 쉬프트를 사용하십시오. – TheDjentleman

관련 문제