Почему VK_ERROR_UNKNOWN определен только в Vulkan 1.2.131?

#vulkan

#vulkan

Вопрос:

VK_ERROR_UNKNOWN был частью Vulkan 1.0. Однако впервые он был определен только в Vulkan-Header 1.2.13 (см. Историю).

Есть ли для этого особая причина?

Комментарии:

1. Нет, за исключением тех, которые указаны в спецификации и журнале изменений. Почему вы ожидаете, что у сообщества в целом будут авторитетные ответы о внутренних рассуждениях.

Ответ №1:

VK_ERROR_UNKNOWN был добавлен, чтобы у вас был определенный код для возврата, если ваш драйвер (или, возможно, layer) столкнется с некоторой несогласованностью и паникой. Ранее VK_ERROR_VALIDATION_FAILED_EXT часто использовалось для этого случая.

В любом случае, возврат VK_ERROR_UNKNOWN сам по себе является частью неопределенного поведения и не допускается как часть соответствующего поведения. Таким образом, введение кода не является нарушением совместимости.

Комментарии:

1. «В любом случае, возврат VK_ERROR_UNKNOWN сам по себе является частью неопределенного поведения […]» Вы ссылаетесь на примечание в 2.7.3, верно? «Не ожидается, что VK_ERROR_UNKNOWN когда-либо будет возвращен, если поведение приложения допустимо и если реализация не содержит ошибок». Я не знаю, я думаю, что мой вопрос все еще остается в силе: почему спецификация определяет код ошибки для неопределенного поведения (звучит как плохая идея), а затем определяет этот код ошибки только в заголовке 1.2, по существу делая 1.0 и 1.1 неполными? Я ошибаюсь, находя это странным?

2. @mkl Да, а также тот факт, что VK_ERROR_UNKNOWN не указан в качестве допустимого кода возврата ни для одной команды. ИИ в комментарии «почему» на самом деле не является подходящим вопросом для SO; только авторы могли бы знать наверняка. Вам нужно пояснить, почему это звучит плохо для вас. Обычно в драйвере может быть много if (something wrong) return something; . Для этого также может быть определенный код ошибки. Неопределенное поведение по-прежнему не определено; как и в драйвере, он может делать что угодно, включая возврат этого кода.

3. @mkl В любом случае, вы не можете ретроспективно определять данные в старых заголовках без time machine, поэтому не уверен, о чем вы спрашиваете.

4. «Вам нужно пояснить, почему это звучит плохо для вас». — Поступая таким образом, вы делаете эффекты неопределенного поведения частью спецификации, что (я думаю) является противоречием. Честно говоря, называть это плохой идеей было слишком опрометчиво. Я допускаю, что на практике этот тип ошибки может быть полезен.

5. «Неопределенное поведение по-прежнему не определено; как и в случае с драйвером, он может делать все, что угодно, включая возврат этого кода». — Я думаю, это немного проясняет ситуацию для меня, спасибо!