/
githubmirror
/
pixijs
Обзор
Документация
Войти
/
githubmirror
/
pixijs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
src/rendering/renderers/gpu/shader/utils/generateGpuLayoutGroups.ts
133 строки
4 KB
Zyie
feat: WebGPU-first RenderTarget attachment architecture & TextureView depth sampling (#12091)
08 июл 2026, 13:22
Не верифицирован
08 июл 2026, 13:22
f4b382b
Код
Авторство
О чём код?
import { ShaderStage } from '../../../shared/shader/const'; import type { ProgramPipelineLayoutDescription } from '../GpuProgram'; import type { StructsAndGroups } from './extractStructAndGroups'; /** * @param root0 * @param root0.groups * @internal */ export function generateGpuLayoutGroups({ groups }: StructsAndGroups): ProgramPipelineLayoutDescription { const layout: ProgramPipelineLayoutDescription = []; for (let i = 0; i < groups.length; i++) { const group = groups[i]; if (!layout[group.group]) { layout[group.group] = []; } if (group.accessMode === 'uniform') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, buffer: { type: 'uniform' } }); } else if (group.accessMode === 'storage') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, buffer: { type: 'read-only-storage' } }); } else if (group.type === 'sampler') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, sampler: { type: 'filtering' } }); } else if (group.type === 'sampler_comparison') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, sampler: { type: 'comparison' } }); } else if (group.type === 'texture_2d' || group.type.startsWith('texture_2d<')) { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, texture: { sampleType: 'float', viewDimension: '2d', multisampled: false, } }); } else if (group.type === 'texture_depth_2d') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, texture: { sampleType: 'depth', viewDimension: '2d', multisampled: false, } }); } else if (group.type === 'texture_depth_2d_array') { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, texture: { sampleType: 'depth', viewDimension: '2d-array', multisampled: false, } }); } else if (group.type === 'texture_2d_array' || group.type.startsWith('texture_2d_array<')) { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, texture: { sampleType: 'float', viewDimension: '2d-array', multisampled: false, } }); } else if (group.type === 'texture_cube' || group.type.startsWith('texture_cube<')) { layout[group.group].push({ binding: group.binding, visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT, texture: { sampleType: 'float', viewDimension: 'cube', multisampled: false, } }); } } // Ensure a dense array. WebGPU expects intermediate bind groups to exist even if empty. for (let i = 0; i < layout.length; i++) { layout[i] ||= []; } return layout; }