2014-08-28 3 views
0

Effects 11 라이브러리를 사용하는 대신 쉐이더 관리 시스템을 생성합니다. 셰이더의 리소스 관리에 대해 몇 가지 질문이 있습니다.DirectX 11 쉐이더 리소스 관리

셰이더 코드의 특정 레지스터로 설정된 상수 버퍼를 장치에 설정할 때 해당 레지스터로 설정해야합니까? 그 레지스터를 사용하는 셰이더가 여러 개 있으면 어떻게 될까요?

상수 버퍼가 메모리 사이에서 메모리 사이에 유지 관리되는지, 아니면 지워지나요? 예를 들어 마지막 무승부에서 변경되지 않은 상수 버퍼가 있는데 다시 설정해야합니까?

상수 버퍼를 한 번에 하나씩 설정하거나 모든 것을 한꺼번에 설정하는 것이 더 느 립니 까?

미리 감사드립니다.

답변

2

예, 레지스터를 고정 버퍼 슬롯으로 설정해야합니다.

예, 다른 것으로 전환 할 때까지 계속 유지됩니다.

"한 번에 하나씩 또는 한꺼번에 상수 버퍼를 설정하는 것이 느립니까?"

"한꺼번에"는 무엇을 의미합니까? https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/gdc12/Efficient_Buffer_Management_McDonald.pdf

참고 픽셀 쉐이더와 버텍스 쉐이더 (다른 쉐이더 유형)는 정확히 같은 "변수"사용하는 경우에도 다른 레지스터를 사용

어쨌든

, cbuffer 관리에 큰 정보를 원하시면,이 엔비디아 프리젠 테이션을 확인 hlsl 코드. Thats가 처리되었으므로 레지스터에 cbuffer를 업데이트하려면 d3d 함수의 픽셀 쉐이더 버전 (VSSetConstantBuffer 대 PSSetConstantBuffer 등)을 사용합니다. 물론 모든 유형의 쉐이더에 해당합니다.

예를 들어, hlsl 코드에서 동일한 슬롯 (레지스터)을 사용하는 2 개의 상수 버퍼를 가질 수 있지만 동일한 셰이더에서 두 가지를 모두 사용하지 마십시오. 다시 말하면 동일한 상수 두 쉐이더 모두에 버퍼를 둡니다. 실제로는 같지 않습니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 한 번에, 나는 매개 변수로 버퍼 배열을 취하고 시작 입력 슬롯을 기반으로 순차적으로 설정하는 함수 VSSetConstantBuffers가 있음을 의미합니다. 한번에 모든 것을 설정하거나이 함수를 여러 번 호출하는 것이 좋습니다. – pghazanfari

+0

확실히 한 번에. 그것은 드라이버와의 모든 의사 소통을 한 번에 일어날 것입니다 (1 함수 호출과 롯트는 말할 것도 없습니다). 기본적으로 함수의 존재 목적. – Icebone1000

+0

몇 가지 추가 질문 : 동일한 레지스터를 사용하여 2 개의 쉐이더를 처리하려면 어떻게합니까? 상수 버퍼를 inbetween draw 호출로 설정해야합니까? 정점 버퍼와 인덱스 버퍼는 어떨까요? 드로잉 할 각 메쉬가 동일한 입력 슬롯을 사용해야합니까, 아니면 다른 메쉬를 사용해야합니까? 또는 다른 데이터를 GPU에 설정할 수있는 입력 슬롯입니까? – pghazanfari