2017-10-10 2 views
1

저는 그래픽 프로그래밍과 Vulkan을 처음 사용합니다. 우리는 디스크립터 세트에 대한 바인드 버퍼가 필요하다는 것을 알고 있지만, 모든 버퍼에 대해 새로운 디스크립터 세트가 필요한지 궁금하거나 디스크립터 세트가 2 개 이상의 버퍼를 바인드 할 수 있습니까? 그렇다면 엄지 손가락 규칙은 무엇입니까?모든 버퍼에 대해 새로운 설명자 세트를 만들어야합니까?

답변

1

각 설명자 세트에는 동일하거나 다른 유형의 여러 자원이있을 수 있습니다. 디스크립터 집합을 통해 어떤 유형의 리소스를 바인딩 할 수 있는지는 디스크립터 집합 레이아웃에 정의됩니다. VkDescriptorSetLayoutBinding 구조를 통해 주어진 유형의 리소스 (예 : 샘플러, 저장 이미지 또는 균일 버퍼)를 지정하고이 유형의 리소스 수가 셰이더 내부의 배열로 액세스되도록 지정합니다. 그러나 별도의 레이아웃 항목 (레이아웃을 만드는 동안 지정된 여러 VkDescriptorSetLayoutBinding 항목)과 동일한 유형의 여러 리소스를 지정할 수도 있습니다. 이러한 각 설명자는 별도의 다른 바인딩을 사용해야합니다. 주어진 리소스에 액세스하려면 셰이더 내부에서 동일한 바인딩을 사용해야합니다.

질문의 두 번째 부분은 다릅니다. 각 상황, 그려진 장면, 렌더링 된 리소스의 유형, 리소스의 수, 메모리 사용량, 그래픽 하드웨어 공급 업체까지도 렌더링하는 동안 설명자 세트를 만들고 바인딩하는 데 사용되는 접근 방식에 영향을줍니다. 일반적인 규칙은 렌더링하는 동안 상태 변화를 최소화해야한다는 것입니다. 따라서 vkCmdBindDescriptorSets() 함수 호출의 수를 가능한 한 작게 유지해야합니다. 그러나 이것은 귀하의 장면의 유연성과 역동 성을 모두 제한합니다. 따라서 설명자를 변경하거나 여러 설명자를 한꺼번에 여러 설명자를 바인딩해야하는 많은 경우가 있습니다. 그러나 내가 쓴 것처럼, 그것은 모두 주어진 상황에 달려있다.

1

아니요, 각 리소스마다 별도의 설명자 세트가 필요하지 않습니다.

문서가 VkDescriptorSetLayout 인 것은 무슨 일이 일어나고 있는지 분명하게 보입니다. 같은 장에서 이것을 보여주는 좋은 코드 예제가 있습니다.

  • 당신은 당신은 각각 어떤 기술자 유형 자원을 보유 할 수있는 몇 가지 "바인딩"을 가질 수
  • 하나의 기술 자형의 (균일) 배열을 가질 수 있습니다 (또는 :

    그래서

    , 그 정리해 자신의 배열)

  • 그리고 간접 또 하나 개의 층으로 여러 설명이있을 수 엄지 손가락의

규칙은 아마도 "적은 더"자신의 바인딩 각을 설정합니다. 리소스에 별도의 유형이나 이름이 필요하지 않은 경우 array를 사용하십시오. 별도의 세트가 필요하지 않은 경우 하나의 세트 만 사용하십시오.

관련 문제