Ленивое выделение памяти вам не поможет. Или, по крайней мере, вероятно, нет, в зависимости от вашей сцены. Причины двоякие. Во-первых, если вы не выполняете рендеринг с глубиной, вы должны использовать упакованное изображение глубины / трафарета (поскольку вам не разрешено иметь отдельные буферы глубины и трафарета). И поскольку вы (предположительно) не хотите, чтобы часть глубины выделялась лениво, у вас нет другого выхода, кроме как использовать фактическую память, а не лениво выделенную память.
Во-вторых, вы делаете не то, для чего лениво выделяемая память. Это не для частей рендеринга, которые должны быть необязательными. Это для изображений, которые по своей природе эфемерны.
Например, рассмотрите отложенный рендеринг. Вам нужны g-буферы. Но вы собираетесь заполнить их во время прохода g-буфера, и вы потребляете их во время прохода (ов) освещения. После этого вы больше не будете использовать их содержимое.
Для многих рендеров это не имеет значения. Но с модулем рендеринга на основе плитки это возможно. Почему? Потому что, если тайл достаточно велик, чтобы хранить все данные g-буфера сразу, тогда реализации фактически не нужно записывать данные g-буфера в память. Он может просто оставить все в памяти плитки, выполнить проходы освещения внутри плитки (вы читаете их как входные вложения), а затем забыть, что они существуют.
Но Vulkan требует, чтобы изображения имели привязанную к ним память, прежде чем их можно будет использовать. Ленивая память существует, поэтому вы можете выполнить это требование, дав понять реализации, что вы на самом деле не собираетесь использовать эту память. Или, что более важно, фактическая память будет выделена только в том случае, если вы сделаете что-то, что этого требует.
Буферы глубины и буферы глубины / трафарета также могут быть отложены, если вам не нужен доступ к ним, как к обычным изображениям. Но даже в этом случае речь не идет о том, чтобы сделать трафарет или проверку глубины необязательными. Речь идет о том, чтобы сделать их резервное хранилище эфемерным, памятью, которая может жить в тайле TBR и нигде больше. Вы все еще делаете операции; это просто не занимает реальную память.
person
Nicol Bolas
schedule
14.04.2016