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