#!/usr/bin/env python3 """ SDL3_GPU Slang Compiler - Command Generation """ from exe_finder import slangc_path from global_vars import global_vars from shader_types import TargetFormat, ShaderStage def make_cmd(source_file: str, target: TargetFormat, stage: ShaderStage, entry_point: str, output_path: str): """生成编译命令""" target_flag = { TargetFormat.SPIRV: 'spirv', TargetFormat.DXIL: 'dxil', TargetFormat.DXBC: 'dxbc', TargetFormat.MSL: 'metal', TargetFormat.HLSL_DX12: 'hlsl', TargetFormat.HLSL_DX11: 'hlsl', }[target] stage_flag = { ShaderStage.VERTEX: 'vertex', ShaderStage.FRAGMENT: 'fragment', ShaderStage.COMPUTE: 'compute' }[stage] cmd = [ slangc_path, source_file, '-no-mangle', '-entry', entry_point, '-o', output_path, '-target', target_flag, '-stage', stage_flag, '-g3', # 生成调试信息 '-O0', # 禁用优化,便于调试和验证 ] # 添加包含路径 for include_path in global_vars.include_dirs: cmd.extend(['-I', include_path]) if target == TargetFormat.DXIL or target == TargetFormat.HLSL_DX12: cmd.extend(['-profile', 'sm_6_6']) elif target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11: cmd.extend(['-profile', 'sm_5_1']) return cmd