저는 그래픽 프로그래밍과 Vulkan을 처음 사용합니다. 우리는 디스크립터 세트에 대한 바인드 버퍼가 필요하다는 것을 알고 있지만, 모든 버퍼에 대해 새로운 디스크립터 세트가 필요한지 궁금하거나 디스크립터 세트가 2 개 이상의 버퍼를 바인드 할 수 있습니까? 그렇다면 엄지 손가락 규칙은 무엇입니까?모든 버퍼에 대해 새로운 설명자 세트를 만들어야합니까?
답변
각 설명자 세트에는 동일하거나 다른 유형의 여러 자원이있을 수 있습니다. 디스크립터 집합을 통해 어떤 유형의 리소스를 바인딩 할 수 있는지는 디스크립터 집합 레이아웃에 정의됩니다. VkDescriptorSetLayoutBinding 구조를 통해 주어진 유형의 리소스 (예 : 샘플러, 저장 이미지 또는 균일 버퍼)를 지정하고이 유형의 리소스 수가 셰이더 내부의 배열로 액세스되도록 지정합니다. 그러나 별도의 레이아웃 항목 (레이아웃을 만드는 동안 지정된 여러 VkDescriptorSetLayoutBinding 항목)과 동일한 유형의 여러 리소스를 지정할 수도 있습니다. 이러한 각 설명자는 별도의 다른 바인딩을 사용해야합니다. 주어진 리소스에 액세스하려면 셰이더 내부에서 동일한 바인딩을 사용해야합니다.
질문의 두 번째 부분은 다릅니다. 각 상황, 그려진 장면, 렌더링 된 리소스의 유형, 리소스의 수, 메모리 사용량, 그래픽 하드웨어 공급 업체까지도 렌더링하는 동안 설명자 세트를 만들고 바인딩하는 데 사용되는 접근 방식에 영향을줍니다. 일반적인 규칙은 렌더링하는 동안 상태 변화를 최소화해야한다는 것입니다. 따라서 vkCmdBindDescriptorSets() 함수 호출의 수를 가능한 한 작게 유지해야합니다. 그러나 이것은 귀하의 장면의 유연성과 역동 성을 모두 제한합니다. 따라서 설명자를 변경하거나 여러 설명자를 한꺼번에 여러 설명자를 바인딩해야하는 많은 경우가 있습니다. 그러나 내가 쓴 것처럼, 그것은 모두 주어진 상황에 달려있다.
아니요, 각 리소스마다 별도의 설명자 세트가 필요하지 않습니다.
문서가 VkDescriptorSetLayout 인 것은 무슨 일이 일어나고 있는지 분명하게 보입니다. 같은 장에서 이것을 보여주는 좋은 코드 예제가 있습니다.
이- 당신은 당신은 각각 어떤 기술자 유형 자원을 보유 할 수있는 몇 가지 "바인딩"을 가질 수
- 하나의 기술 자형의 (균일) 배열을 가질 수 있습니다 (또는 : 그래서
, 그 정리해 자신의 배열)
- 그리고 간접 또 하나 개의 층으로 여러 설명이있을 수 엄지 손가락의
규칙은 아마도 "적은 더"자신의 바인딩 각을 설정합니다. 리소스에 별도의 유형이나 이름이 필요하지 않은 경우 array를 사용하십시오. 별도의 세트가 필요하지 않은 경우 하나의 세트 만 사용하십시오.
- 1. 왜 뷰에 넣은 각 요소에 대해 RelativeLayout.LayoutParams의 새로운 세트를 만들어야합니까?
- 2. 모든 메타 박스 필드에 대해 새로운 기능을 만들어야합니까?
- 3. 언제 새로운 활동을 만들어야합니까?
- 4. EF에있는 모든 테이블에 대해 클래스를 만들어야합니까?
- 5. 새로운 itunes 계정을 만들어야합니까?
- 6. 각 지오 프로세싱 도구에 대해 새로운 지오 프로세서 객체를 만들어야합니까?
- 7. Redis에서 레일스에 새로운 클래스를 만들어야합니까?
- 8. 모든 컨트롤러에 대해 모델을 만들어야합니까? 더 나은 방법은 무엇입니까?
- 9. 언제 wit.ai에서 새로운 의도를 만들어야합니까?
- 10. 연결해야합니까? 매번 새로운 연결을 만들어야합니까?
- 11. Emacs : 모든 Lisp 버퍼에 대해 특정 마이너 모드를 사용하지 않음
- 12. 매번 새로운 객체를 만들거나 하나의 객체를 만들어야합니까?
- 13. JMS 응용 프로그램이 보내는 모든 메시지에 대해 새 세션을 만들어야합니까?
- 14. 모든 Ember.js 응용 프로그램에 대해 'ApplicationView'와 'ApplicationController'를 명시 적으로 만들어야합니까?
- 15. LIFERAY PROJECTS? 모든 섹션에 대해 서로 다른 프로젝트를 만들어야합니까?
- 16. 왜 IDL의 모든 인터페이스에 대해 고유 한 uuid를 만들어야합니까?
- 17. ZURB Foundation : 모든 "행"에 대해 행을 만들어야합니까?
- 18. 각 요청마다 새로운 Struts Action 클래스를 만들어야합니까?
- 19. 새로운 버전의 앱에 대해 새로운 SSL 푸시 알림 인증을 새로 만들어야합니까?
- 20. 이맥스의 모든 버퍼에 함수 적용
- 21. Capistrano는 모든 배포에 대해 새로운 DB를 만듭니다.
- 22. Vim의 전체 버퍼에 새로운 textwidth를 적용하는 방법
- 23. 각 ViewModel에 대해 개별적인 ViewModelLocators를 만들어야합니까?
- 24. 각 iOS 앱에 대해 프로비저닝 인증서를 만들어야합니까?
- 25. 은 인스턴스를 공유하지만 모든 새로운 프로세스에 대해 새로운 것을 생성합니다.
- 26. 데이터베이스 업그레이드. 테이블을 변경하거나 새로운 테이블을 만들어야합니까?
- 27. MAC OSx 용 새로운 php.ini는 어떻게 만들어야합니까?
- 28. 새로운 쿼리 세트를 만들지 않고 장고 쿼리 세트를 쿼리합니까?
- 29. 각 그림에 대해 썸 파일을 만들어야합니까?
- 30. 하나의 (문자열) 필드에 대해 새 엔티티를 만들어야합니까?