Vulkan: What is the point of sType in vk*CreateInfo structs?
모든 create infostructs에서 (vk*CreateInfo) 새로운 Vulkan API에는 항상 다음이 있습니다..sType회원.가치가 한 가지 일 수밖에 없는데 왜 이것이 있습니까?또한 Vulkan 사양은 매우 명시적이므로 사용할 수 있습니다.vk*CreateInfo대응되는 매개변수로서의 구조물vkCreate*기능.좀 중복되는 것 같습니다.드라이버가 이 구조를 GPU로 바로 전달하는 경우 이 구조를 가져야 할 수도 있음을 알 수 있습니다(항상 첫 번째 멤버라는 것을 알고 있었습니다).그러나 드라이버가 실행하면 오류가 발생하지 않고 구조에 int를 추가하는 것이 매우 계산적으로 비효율적인 작업으로 보이지 않기 때문에 앱에서 실행하는 것은 매우 좋지 않은 아이디어로 보입니다.왜 존재하는 건지 모르겠어요
TL;DR
왜?vk*CreateInfo구조물은..sType멤버?
그들은 그것을 가지고 있기 때문에.pNext현장은 실제로 작동합니다.
네, API는 적절한 C 타입의 구조를 취하고 있어 발신자와 수신자 모두 그 구조가 어떤 타입인지에 대해 동의합니다.그러나 최근에는 특히 많은 그러한 구조들이 구현에 추가적인 정보를 제공하는 구조들의 연결된 목록들을 가지고 있습니다.이 확장 구조(많은 것이 불칸 1.1/2의 핵심이지만)는 다른 모든 구조와 마찬가지로 고유한 구조를 가지고 있습니다.sType들판.
링크된 목록은 다음과 같이 작성되므로 이러한 필드는 매우 중요합니다.pNext포인터...어느것이void*s. 종류가 정해져 있지 않습니다.구현이 NULL이 아닌 것을 결정하는 방식pNext포인터는 해당 위치에 저장된 처음 4바이트를 검사하는 것을 가리킵니다.여기가.sTypefield; 구현을 통해 포인터를 캐스팅할 유형을 알 수 있습니다.
물론 API가 취하는 기본 구조는 엄밀하게 필요하지 않습니다.sType필드, 그 유형은 API 자체의 일부이기 때문입니다.하지만 그렇게 해야 하는 데에는 가정적인 이유가 있습니다. (불칸 릴리스에서는 아직 완료되지 않았습니다.)
이후 버전의 Vulkan은 예를 들어 명령 버퍼 풀을 생성할 때 확장될 수 있습니다.하지만 어떻게 그럴 수 있을까요?그들은 완전히 새로운 진입점을 추가할 수 있습니다.vkCreateCommandPool2. 하지만 이 기능은 다음과 거의 동일한 서명을 가질 것입니다.vkCreateCommandPool 입니다를 입니다.pCreateInfo구조물들.
그래서 대신에, 당신이 해야 할 일은 당신이 한 일을 선언하는 것입니다.VkCommandPoolCreateInfo2구조.그리고 다음은 다음과 같이 선언합니다.vkCreateCommandPool둘 중 하나를 택할 수 있습니다.구현을 통해 어떤 것을 통과했는지 어떻게 알 수 있습니까?
는 입니다.sType은 그 할 수 그들은 그 값을 테스트할 수 있습니다.값이 다음과 같은 경우VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO_2거죠,입니다.
물론, 앞서 언급한 바와 같이, 이는 해결되지 않았습니다; 1.0 이후의 Vulkan 버전들은 기존 구조를 대체하는 대신 확장 구조를 포함하는 것을 선택했습니다.하지만 선택권은 거기에 있습니다.
언급URL : https://stackoverflow.com/questions/36347236/vulkan-what-is-the-point-of-stype-in-vkcreateinfo-structs
'programing' 카테고리의 다른 글
| Oracle PL/SQL의 테이블 변수? (0) | 2023.10.01 |
|---|---|
| Vulkan: vk*CreateInfo structs에서 sType의 요점은 무엇입니까? (0) | 2023.10.01 |
| 입력 시 ng-click 동작 방지 (0) | 2023.10.01 |
| 공유 정적 라이브러리를 사용하는 xcode에서 "중복 기호" 오류를 방지하려면 어떻게 해야 합니까? (0) | 2023.10.01 |
| Git은 왜 제 마스터 지점이 "이미 최신"이 아니라고 합니까? (0) | 2023.10.01 |