Files
mirage_slang/compiler_cmd.py
2025-06-11 18:27:47 +08:00

48 lines
1.4 KiB
Python

#!/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