{"version":3,"file":"generateGpuLayoutGroups.mjs","sources":["../../../../../../src/rendering/renderers/gpu/shader/utils/generateGpuLayoutGroups.ts"],"sourcesContent":["import { ShaderStage } from '../../../shared/shader/const';\n\nimport type { ProgramPipelineLayoutDescription } from '../GpuProgram';\nimport type { StructsAndGroups } from './extractStructAndGroups';\n\n/**\n * @param root0\n * @param root0.groups\n * @internal\n */\nexport function generateGpuLayoutGroups({ groups }: StructsAndGroups): ProgramPipelineLayoutDescription\n{\n    const layout: ProgramPipelineLayoutDescription = [];\n\n    for (let i = 0; i < groups.length; i++)\n    {\n        const group = groups[i];\n\n        if (!layout[group.group])\n        {\n            layout[group.group] = [];\n        }\n\n        if (group.isUniform)\n        {\n            layout[group.group].push({\n                binding: group.binding,\n                visibility: ShaderStage.VERTEX | ShaderStage.FRAGMENT,\n                buffer: {\n                    type: 'uniform'\n                }\n            });\n        }\n        else if (group.type === 'sampler')\n        {\n            layout[group.group].push({\n                binding: group.binding,\n                visibility: ShaderStage.FRAGMENT,\n                sampler: {\n                    type: 'filtering'\n                }\n            });\n        }\n        else if (group.type === 'texture_2d' || group.type.startsWith('texture_2d<'))\n        {\n            layout[group.group].push({\n                binding: group.binding,\n                visibility: ShaderStage.FRAGMENT,\n                texture: {\n                    sampleType: 'float',\n                    viewDimension: '2d',\n                    multisampled: false,\n                }\n            });\n        }\n        else if (group.type === 'texture_2d_array' || group.type.startsWith('texture_2d_array<'))\n        {\n            layout[group.group].push({\n                binding: group.binding,\n                visibility: ShaderStage.FRAGMENT,\n                texture: {\n                    sampleType: 'float',\n                    viewDimension: '2d-array',\n                    multisampled: false,\n                }\n            });\n        }\n        else if (group.type === 'texture_cube' || group.type.startsWith('texture_cube<'))\n        {\n            layout[group.group].push({\n                binding: group.binding,\n                visibility: ShaderStage.FRAGMENT,\n                texture: {\n                    sampleType: 'float',\n                    viewDimension: 'cube',\n                    multisampled: false,\n                }\n            });\n        }\n    }\n\n    // Ensure a dense array. WebGPU expects intermediate bind groups to exist even if empty.\n    for (let i = 0; i < layout.length; i++)\n    {\n        layout[i] ||= [];\n    }\n\n    return layout;\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,uBAAA,CAAwB,EAAE,MAAA,EAAO,EACjD;AACI,EAAA,MAAM,SAA2C,EAAC;AAElD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EACnC;AACI,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AAEtB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EACvB;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,EAAC;AAAA,IAC3B;AAEA,IAAA,IAAI,MAAM,SAAA,EACV;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,UAAA,EAAY,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,QAAA;AAAA,QAC7C,MAAA,EAAQ;AAAA,UACJ,IAAA,EAAM;AAAA;AACV,OACH,CAAA;AAAA,IACL,CAAA,MAAA,IACS,KAAA,CAAM,IAAA,KAAS,SAAA,EACxB;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,YAAY,WAAA,CAAY,QAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACL,IAAA,EAAM;AAAA;AACV,OACH,CAAA;AAAA,IACL,CAAA,MAAA,IACS,MAAM,IAAA,KAAS,YAAA,IAAgB,MAAM,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA,EAC3E;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,YAAY,WAAA,CAAY,QAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACL,UAAA,EAAY,OAAA;AAAA,UACZ,aAAA,EAAe,IAAA;AAAA,UACf,YAAA,EAAc;AAAA;AAClB,OACH,CAAA;AAAA,IACL,CAAA,MAAA,IACS,MAAM,IAAA,KAAS,kBAAA,IAAsB,MAAM,IAAA,CAAK,UAAA,CAAW,mBAAmB,CAAA,EACvF;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,YAAY,WAAA,CAAY,QAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACL,UAAA,EAAY,OAAA;AAAA,UACZ,aAAA,EAAe,UAAA;AAAA,UACf,YAAA,EAAc;AAAA;AAClB,OACH,CAAA;AAAA,IACL,CAAA,MAAA,IACS,MAAM,IAAA,KAAS,cAAA,IAAkB,MAAM,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,EAC/E;AACI,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,YAAY,WAAA,CAAY,QAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACL,UAAA,EAAY,OAAA;AAAA,UACZ,aAAA,EAAe,MAAA;AAAA,UACf,YAAA,EAAc;AAAA;AAClB,OACH,CAAA;AAAA,IACL;AAAA,EACJ;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EACnC;AACI,IAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAc,EAAC,CAAA;AAAA,EACnB;AAEA,EAAA,OAAO,MAAA;AACX;;;;"}