From 3c98cc5ae1e720d1cac07b125390d8e0313576f3 Mon Sep 17 00:00:00 2001 From: Gordon-F Date: Mon, 19 Jul 2021 00:10:07 +0300 Subject: [PATCH] [hlsl-out] Validate all entry points in Makefile --- Makefile | 24 +++++++--- tests/out/hlsl/control-flow.hlsl.config | 5 ++- tests/out/hlsl/empty.hlsl.config | 5 ++- tests/out/hlsl/globals.hlsl.config | 5 ++- tests/out/hlsl/image.hlsl.config | 11 ++--- tests/out/hlsl/interface.hlsl.config | 9 ++-- tests/out/hlsl/interpolate.hlsl.config | 7 ++- tests/out/hlsl/operators.hlsl.config | 5 ++- tests/out/hlsl/quad-vert.hlsl.config | 5 ++- tests/out/hlsl/quad.hlsl.config | 9 ++-- tests/out/hlsl/shadow.hlsl.config | 5 ++- tests/out/hlsl/skybox.hlsl.config | 7 ++- tests/out/hlsl/standard.hlsl.config | 5 ++- tests/snapshots.rs | 58 ++++++++++++++++++------- 14 files changed, 96 insertions(+), 64 deletions(-) diff --git a/Makefile b/Makefile index 3d8946235e..841f077a82 100644 --- a/Makefile +++ b/Makefile @@ -65,17 +65,27 @@ validate-wgsl: $(SNAPSHOTS_BASE_OUT)/wgsl/*.wgsl cargo run $${file}; \ done +validate-hlsl: SHELL:=/bin/bash # required because config files uses arrays validate-hlsl: $(SNAPSHOTS_BASE_OUT)/hlsl/*.hlsl @set -e && for file in $^ ; do \ + DXC_PARAMS="-Wno-parentheses-equality -Zi -Qembed_debug"; \ echo "Validating" $${file#"$(SNAPSHOTS_BASE_OUT)/"}; \ config="$$(dirname $${file})/$$(basename $${file}).config"; \ - vertex=""\ - fragment="" \ - compute="" \ . $${config}; \ - DXC_PARAMS="-Wno-parentheses-equality -Zi -Qembed_debug"; \ - [ ! -z "$${vertex}" ] && echo "Vertex Stage:" && dxc $${file} -T $${vertex} -E $${vertex_name} $${DXC_PARAMS} > /dev/null; \ - [ ! -z "$${fragment}" ] && echo "Fragment Stage:" && dxc $${file} -T $${fragment} -E $${fragment_name} $${DXC_PARAMS} > /dev/null; \ - [ ! -z "$${compute}" ] && echo "Compute Stage:" && dxc $${file} -T $${compute} -E $${compute_name} $${DXC_PARAMS} > /dev/null; \ + for (( i=0; i<$${#vertex[@]}; i++ )); do \ + name=`echo $${vertex[i]} | cut -d \: -f 1`; \ + profile=`echo $${vertex[i]} | cut -d \: -f 2`; \ + (set -x; dxc $${file} -T $${profile} -E $${name} $${DXC_PARAMS} > /dev/null); \ + done; \ + for (( i=0; i<$${#fragment[@]}; i++ )); do \ + name=`echo $${fragment[i]} | cut -d \: -f 1`; \ + profile=`echo $${fragment[i]} | cut -d \: -f 2`; \ + (set -x; dxc $${file} -T $${profile} -E $${name} $${DXC_PARAMS} > /dev/null); \ + done; \ + for (( i=0; i<$${#compute[@]}; i++ )); do \ + name=`echo $${compute[i]} | cut -d \: -f 1`; \ + profile=`echo $${compute[i]} | cut -d \: -f 2`; \ + (set -x; dxc $${file} -T $${profile} -E $${name} $${DXC_PARAMS} > /dev/null); \ + done; \ echo "======================"; \ done diff --git a/tests/out/hlsl/control-flow.hlsl.config b/tests/out/hlsl/control-flow.hlsl.config index 71412ac2d5..c0d04b8f2a 100644 --- a/tests/out/hlsl/control-flow.hlsl.config +++ b/tests/out/hlsl/control-flow.hlsl.config @@ -1,2 +1,3 @@ -compute=cs_5_0 -compute_name=main +vertex=() +fragment=() +compute=(main:cs_5_0 ) diff --git a/tests/out/hlsl/empty.hlsl.config b/tests/out/hlsl/empty.hlsl.config index 71412ac2d5..c0d04b8f2a 100644 --- a/tests/out/hlsl/empty.hlsl.config +++ b/tests/out/hlsl/empty.hlsl.config @@ -1,2 +1,3 @@ -compute=cs_5_0 -compute_name=main +vertex=() +fragment=() +compute=(main:cs_5_0 ) diff --git a/tests/out/hlsl/globals.hlsl.config b/tests/out/hlsl/globals.hlsl.config index 71412ac2d5..c0d04b8f2a 100644 --- a/tests/out/hlsl/globals.hlsl.config +++ b/tests/out/hlsl/globals.hlsl.config @@ -1,2 +1,3 @@ -compute=cs_5_0 -compute_name=main +vertex=() +fragment=() +compute=(main:cs_5_0 ) diff --git a/tests/out/hlsl/image.hlsl.config b/tests/out/hlsl/image.hlsl.config index 3e97dafc35..c182886b79 100644 --- a/tests/out/hlsl/image.hlsl.config +++ b/tests/out/hlsl/image.hlsl.config @@ -1,8 +1,3 @@ -compute=cs_5_0 -compute_name=main -vertex=vs_5_0 -vertex_name=queries -fragment=ps_5_0 -fragment_name=sample1 -fragment=ps_5_0 -fragment_name=sample_comparison +vertex=(queries:vs_5_0 ) +fragment=(sample1:ps_5_0 sample_comparison:ps_5_0 ) +compute=(main:cs_5_0 ) diff --git a/tests/out/hlsl/interface.hlsl.config b/tests/out/hlsl/interface.hlsl.config index bd33fe9c2c..4da683e011 100644 --- a/tests/out/hlsl/interface.hlsl.config +++ b/tests/out/hlsl/interface.hlsl.config @@ -1,6 +1,3 @@ -vertex=vs_5_0 -vertex_name=vertex -fragment=ps_5_0 -fragment_name=fragment -compute=cs_5_0 -compute_name=compute +vertex=(vertex:vs_5_0 ) +fragment=(fragment:ps_5_0 ) +compute=(compute:cs_5_0 ) diff --git a/tests/out/hlsl/interpolate.hlsl.config b/tests/out/hlsl/interpolate.hlsl.config index bae3c1cc68..7a83c119f5 100644 --- a/tests/out/hlsl/interpolate.hlsl.config +++ b/tests/out/hlsl/interpolate.hlsl.config @@ -1,4 +1,3 @@ -vertex=vs_5_0 -vertex_name=main -fragment=ps_5_0 -fragment_name=main1 +vertex=(main:vs_5_0 ) +fragment=(main1:ps_5_0 ) +compute=() diff --git a/tests/out/hlsl/operators.hlsl.config b/tests/out/hlsl/operators.hlsl.config index 71412ac2d5..c0d04b8f2a 100644 --- a/tests/out/hlsl/operators.hlsl.config +++ b/tests/out/hlsl/operators.hlsl.config @@ -1,2 +1,3 @@ -compute=cs_5_0 -compute_name=main +vertex=() +fragment=() +compute=(main:cs_5_0 ) diff --git a/tests/out/hlsl/quad-vert.hlsl.config b/tests/out/hlsl/quad-vert.hlsl.config index 49efa2b9a5..9f33353d2f 100644 --- a/tests/out/hlsl/quad-vert.hlsl.config +++ b/tests/out/hlsl/quad-vert.hlsl.config @@ -1,2 +1,3 @@ -vertex=vs_5_0 -vertex_name=main +vertex=(main:vs_5_0 ) +fragment=() +compute=() diff --git a/tests/out/hlsl/quad.hlsl.config b/tests/out/hlsl/quad.hlsl.config index 18bfb0bd52..094d9191f1 100644 --- a/tests/out/hlsl/quad.hlsl.config +++ b/tests/out/hlsl/quad.hlsl.config @@ -1,6 +1,3 @@ -vertex=vs_5_0 -vertex_name=main -fragment=ps_5_0 -fragment_name=main1 -fragment=ps_5_0 -fragment_name=fs_extra +vertex=(main:vs_5_0 ) +fragment=(main1:ps_5_0 fs_extra:ps_5_0 ) +compute=() diff --git a/tests/out/hlsl/shadow.hlsl.config b/tests/out/hlsl/shadow.hlsl.config index 5d17f4305a..ead2c79fa6 100644 --- a/tests/out/hlsl/shadow.hlsl.config +++ b/tests/out/hlsl/shadow.hlsl.config @@ -1,2 +1,3 @@ -fragment=ps_5_0 -fragment_name=fs_main +vertex=() +fragment=(fs_main:ps_5_0 ) +compute=() diff --git a/tests/out/hlsl/skybox.hlsl.config b/tests/out/hlsl/skybox.hlsl.config index 41df29cb70..541ec21756 100644 --- a/tests/out/hlsl/skybox.hlsl.config +++ b/tests/out/hlsl/skybox.hlsl.config @@ -1,4 +1,3 @@ -vertex=vs_5_1 -vertex_name=vs_main -fragment=ps_5_1 -fragment_name=fs_main +vertex=(vs_main:vs_5_1 ) +fragment=(fs_main:ps_5_1 ) +compute=() diff --git a/tests/out/hlsl/standard.hlsl.config b/tests/out/hlsl/standard.hlsl.config index 9ae8c9df73..512971d7c5 100644 --- a/tests/out/hlsl/standard.hlsl.config +++ b/tests/out/hlsl/standard.hlsl.config @@ -1,2 +1,3 @@ -fragment=ps_5_0 -fragment_name=derivatives +vertex=() +fragment=(derivatives:ps_5_0 ) +compute=() diff --git a/tests/snapshots.rs b/tests/snapshots.rs index fb33697287..70ab53d716 100644 --- a/tests/snapshots.rs +++ b/tests/snapshots.rs @@ -304,27 +304,55 @@ fn write_output_hlsl( // This file contains an info about profiles (shader stages) contains inside generated shader // This info will be passed to dxc let mut config_str = String::new(); + let mut vertex_str = String::from("vertex=("); + let mut fragment_str = String::from("fragment=("); + let mut compute_str = String::from("compute=("); for (index, ep) in module.entry_points.iter().enumerate() { let name = match reflection_info.entry_point_names[index] { Ok(ref name) => name, Err(_) => continue, }; - let stage_str = match ep.stage { - naga::ShaderStage::Vertex => "vertex", - naga::ShaderStage::Fragment => "fragment", - naga::ShaderStage::Compute => "compute", - }; - writeln!( - config_str, - "{}={}_{}\n{}_name={}", - stage_str, - ep.stage.to_hlsl_str(), - options.shader_model.to_str(), - stage_str, - name, - ) - .unwrap(); + match ep.stage { + naga::ShaderStage::Vertex => { + write!( + vertex_str, + "{}:{}_{} ", + name, + ep.stage.to_hlsl_str(), + options.shader_model.to_str(), + ) + .unwrap(); + } + naga::ShaderStage::Fragment => { + write!( + fragment_str, + "{}:{}_{} ", + name, + ep.stage.to_hlsl_str(), + options.shader_model.to_str(), + ) + .unwrap(); + } + naga::ShaderStage::Compute => { + write!( + compute_str, + "{}:{}_{} ", + name, + ep.stage.to_hlsl_str(), + options.shader_model.to_str(), + ) + .unwrap(); + } + } } + + writeln!( + config_str, + "{})\n{})\n{})", + vertex_str, fragment_str, compute_str + ) + .unwrap(); + fs::write( destination.join(format!("hlsl/{}.hlsl.config", file_name)), config_str,