48 lines
1.4 KiB
Python
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
|
|
|