修复mirage_image.slang编译失败

This commit is contained in:
2025-06-18 18:12:52 +08:00
parent 3a9ce532d5
commit d560c437fe
7 changed files with 29 additions and 14 deletions

View File

@@ -7,7 +7,10 @@
#include "shaders/mirage_text.hlsl.h"
#include "shaders/mirage_wireframe.hlsl.h"
#include "shaders/mirage_line.hlsl.h"
#include "shaders/mirage_line.shader.h"
#include "shaders/mirage_rounded_rect.shader.h"
#include "shaders/mirage_image.shader.h"
template<typename Derived>
void compute_rect_vertices(const Eigen::MatrixBase<Derived>& in_pos,

View File

@@ -6,7 +6,7 @@ cbuffer ParamBuffer
};
SamplerState textureSampler;
Texture2D texture;
Texture2D inputTexture;
struct PSInput {
float4 position : SV_POSITION;
@@ -28,8 +28,8 @@ PSInput vertex_main(VSInput input)
}
[shader("pixel")]
float4 pixel_main(PSInput input)
float4 pixel_main(PSInput input) : SV_Target
{
float4 color = texture.Sample(textureSampler, input.uv);
float4 color = inputTexture.Sample(textureSampler, input.uv);
return color * input.color;
}

View File

@@ -171,7 +171,7 @@ class CodeGenerator:
# 对于GLSL需要写入uniform的详细信息
if isinstance(param.type, (ConstantBufferType, ParameterBlockType)):
self._write_glsl_uniforms(writer, param, index)
elif target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11:
elif target == TargetFormat.DXBC:
writer.write(f'desc.uniform_blocks[{index}].hlsl_register_b_n = {param.get_register_index()};')
def _write_glsl_uniforms(self, writer: IndentManager, param: Parameter, block_index: int) -> None:
@@ -214,7 +214,7 @@ class CodeGenerator:
target = global_vars.target
if target == TargetFormat.GLSL:
writer.write(f'desc.images[{index}].glsl_name = "{param.name}";')
elif target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11:
elif target == TargetFormat.DXBC:
writer.write(f'desc.images[{index}].hlsl_register_t_n = {param.get_register_index()};')
def _write_sampler(self, writer: IndentManager, param: Parameter, index: int, stage_name: str) -> None:
@@ -226,7 +226,7 @@ class CodeGenerator:
target = global_vars.target
if target == TargetFormat.GLSL:
writer.write(f'desc.samplers[{index}].glsl_name = "{param.name}";')
elif target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11:
elif target == TargetFormat.DXBC:
writer.write(f'desc.samplers[{index}].hlsl_register_s_n = {param.get_register_index()};')
def _write_storage_buffer(self, writer: IndentManager, param: Parameter, index: int, stage_name: str) -> None:
@@ -238,7 +238,7 @@ class CodeGenerator:
target = global_vars.target
if target == TargetFormat.GLSL:
writer.write(f'desc.storage_buffers[{index}].glsl_binding_n = {param.get_register_index()};')
elif target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11:
elif target == TargetFormat.DXBC:
writer.write(f'desc.storage_buffers[{index}].hlsl_register_u_n = {param.get_register_index()};')
def _write_get_pipeline_desc_method(self, writer: IndentManager, binding_infos: ShaderInfos) -> None:

View File

@@ -13,7 +13,6 @@ def make_cmd(source_file: str, target: TargetFormat, stage: Stage, entry_point:
TargetFormat.GLSL: 'glsl',
TargetFormat.DXBC: 'dxbc',
TargetFormat.MSL: 'metal',
TargetFormat.HLSL_DX11: 'hlsl',
}[target]
stage_flag = {
@@ -26,18 +25,29 @@ def make_cmd(source_file: str, target: TargetFormat, stage: Stage, entry_point:
slangc_path,
source_file,
'-no-mangle',
'-lang', 'slang',
'-entry', entry_point,
'-o', output_path,
'-target', target_flag,
'-stage', stage_flag,
'-g3', # 生成调试信息
'-O0', # 禁用优化,便于调试和验证
'-o', output_path,
]
if global_vars.debug:
cmd.extend([
'-g3', # 生成调试信息
'-O0', # 禁用优化,便于调试和验证
])
else:
cmd.extend([
'-g0', # 禁用调试信息
'-O3' # 启用高级优化
])
# 添加包含路径
for include_path in global_vars.include_dirs:
cmd.extend(['-I', include_path])
if target == TargetFormat.DXBC or target == TargetFormat.HLSL_DX11:
if target == TargetFormat.DXBC:
cmd.extend(['-profile', 'sm_5_1'])
return cmd

View File

@@ -7,5 +7,6 @@ class GlobalVars:
source_path = ''
output_dir = ''
target = TargetFormat.DXBC
debug = False
global_vars = GlobalVars()

View File

@@ -15,10 +15,11 @@ def main():
parser = argparse.ArgumentParser(description='SDL3 GPU Slang Compiler')
parser.add_argument('input', help='Input Slang shader file')
parser.add_argument('-t', '--target', choices=['spirv', 'dxbc', 'msl'],
parser.add_argument('-t', '--target', choices=['glsl', 'dxbc', 'msl'],
required=True, help='Target shader format')
parser.add_argument('-o', '--output-dir', required=True, help='Output path for binding code')
parser.add_argument('-i', '--include-dir', help='Include path for slang shader')
parser.add_argument('-d', '--debug', action='store_true', help='Enable debug mode')
args = parser.parse_args()
@@ -30,6 +31,7 @@ def main():
global_vars.source_path = os.path.dirname(input_path)
global_vars.output_dir = os.path.abspath(args.output_dir)
global_vars.target = TargetFormat(args.target)
global_vars.debug = args.debug
shader_infos = ShaderInfos(
stages={}

View File

@@ -8,7 +8,6 @@ class TargetFormat(Enum):
GLSL = "glsl"
DXBC = "dxbc"
MSL = "msl"
HLSL_DX11 = "hlsl"
class BindingKind(Enum):