계산 쉐이더를 사용하여 삼각형 목록을 계산하고 RWStructuredBuffer
에 저장합니다. 테스트를 위해이 버퍼를 읽고 context.InputAssembler.SetVertexBuffers (…)
을 통해 IA로 전달합니다. 이 접근법은 작동하지만 데이터의 정확성을 테스트 할 때만 유효합니다.GPU에있는 버퍼 리소스를 입력 어셈블러 (IA)에 어떻게 바인딩 할 수 있습니까?
이제 리소스 뷰 (정점 버퍼에 대한 포인터를 전달하지 않고)를 사용하여 (이미 존재하는) 버퍼를 IA 스테이지에 바인딩하고 싶습니다.
저는 좋은 책 (프랭크 D. 루나, 제이슨 징크)을 읽었지만,이 사례는 언급하지 않았습니다.
=============== 편집 :
나는 SharpDX 래퍼에 의해 부과 여기에 사용하고 구문.
ResoureceView를 바인딩하여
context.VertexShader.SetShaderResource(...)
을 통해 버텍스 쉐이더에 버퍼를 바인딩 할 수 있습니다. VS에서 저는SV_VertexID
을 사용하여 버퍼에 접근합니다. 그래서 나는 잠시 동안 실용적인 해결책을 가지고 있지만, 앞으로 버퍼를 입력 어셈블러에 바인드해야 할 경우가있을 수 있습니다.
약간 혼란 스러워요. context.InputAssembler.SetVertexBuffers를 사용하여 실제로 구조화 된 버퍼를 IA 스테이지에 바인딩했으며 입력 레이아웃을 해당 구조로 정확하게 설정했습니다. 많은 샘플이이 설정을 사용합니다. 당신이 제안한 복사본을 만들 수 있다면, 어떻게이 새로운 버퍼를 IA 스테이지에 바인딩 할 수 있습니까? DrawIndirect 호출 중 하나를 사용합니까? –
miniTri SharpDX 샘플보기 HLSL : 구조체 VS_IN { \t float4 pos : POSITION; \t float4 col : COLOR; }; C 번호 : VAR 레이아웃 = 새로운 InputLayout (디바이스 특성, 새로운 [] { 새로운 InputElement ("POSITION"0 Format.R32G32B32A32_Float, 0, 0), 새로운 InputElement ("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) }); 은 구조화 된 버퍼처럼 보입니다 ... –
많은 샘플이 버퍼를 바인딩하지만 생성에는 BufferStructured 플래그가 없으므로 작동합니다. 버퍼를 버텍스 1에 복사하면, 버텍스 개수를 알아야하기 때문에 평소와 같이 바인딩 할 수 있습니다. 그리고 왜 dx runtime이 이것을 허용하지 않는지 모르겠다. 정말 편리 할 것이다. – catflier