Назначение pNext в структурах Vulkan

Многие структуры, используемые в Vulkan, имеют член sType, который определяет тип структуры, и член pNext для структур, специфичных для расширения. Этот ответ довольно хорошо объясняет, для чего нужен член sType и зачем он нужен. Он вкратце касается pNext, хотя я не уверен, что понимаю его смысл.

Если первым членом каждой структуры является sType, не могли бы расширения просто определять свои собственные типы структур, когда им нужны другие / дополнительные параметры?


person Andrew Williamson    schedule 12.04.2016    source источник


Ответы (1)


Как четко указано в спецификации:

Любой параметр, который является структурой, содержащей член void* pNext, должен иметь значение pNext, которое либо NULL, либо указывает на допустимую структуру, которая определяется включенным расширением.

Это для расширений.

Если первым членом каждой структуры является sType, не могли бы расширения просто определять свои собственные типы структур, когда им нужны другие / дополнительные параметры?

Это не было бы расширяемым.

Есть только одно поле sType. Так как же два расширения могли расширить один и тот же API новыми значениями? Точно так же, как старое расширение может работать вместе с новыми версиями Vulkan, которые сами используют другую структуру данных, обозначенную sType.

С pNext у вас нет этой проблемы. Каждая структура данных расширения будет не только иметь собственное внутреннее поле sType, но, несомненно, также будет иметь собственное поле pNext. Таким образом, несколько расширений могут расширять одни и те же структуры данных.

sType в этом нет необходимости, потому что он будет изменен только в более поздних версиях Vulkan.

person Nicol Bolas    schedule 12.04.2016
comment
Итак, если каждая структура расширения начинается с sType и pNext, у вас может быть связанный список специфичных для расширения данных? - person Andrew Williamson; 12.04.2016
comment
@AndrewWilliamson: Я думал, что имя pNext делает это довольно очевидным. - person Nicol Bolas; 12.04.2016
comment
Да, каждый раз, когда я задаю вопрос, а ты на него отвечаешь, я чувствую себя немного идиотом ... - person Andrew Williamson; 12.04.2016
comment
@NicolBolas Я готов звучать как полный дурак, но мне всегда было интересно, что означают p и pp в начале некоторых структурных элементов в Vulkan. (Я предполагаю, что s здесь означает структура / структура) - person Jerfov2; 11.07.2016
comment
@OnaFriday p для указателя и pp для указателя (-ов). Вы можете добавить столько 'p', сколько вам нужно для соответствующих уровней косвенного обращения указателя. - person Andrew Williamson; 17.07.2016
comment
@ Jerfov2 Это венгерская нотация, что-то вроде используемой документации встроенного типа, например, во всем Win32 API. Другой вопрос, хорошая ли это идея. - person Alex Shpilkin; 26.02.2018