From 064c28f58e845be67a31283cb885b22f32118f49 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Sun, 9 Jul 2017 18:08:22 -0700 Subject: Pick layout rules based on target languge, not source. The tricky bit here was that the `reflection-json` output format isn't really a code generation target like the others, and we need to be able to have multiple "targets" active to make sense of it. This needs cleaning-up. --- tests/reflection/cross-compile.slang | 23 +++++++++++++ tests/reflection/cross-compile.slang.expected | 48 +++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 tests/reflection/cross-compile.slang create mode 100644 tests/reflection/cross-compile.slang.expected (limited to 'tests') diff --git a/tests/reflection/cross-compile.slang b/tests/reflection/cross-compile.slang new file mode 100644 index 000000000..12376c82a --- /dev/null +++ b/tests/reflection/cross-compile.slang @@ -0,0 +1,23 @@ +//TEST(smoke):SIMPLE:-profile glsl_fragment -target glsl -target reflection-json + +// Confirm that when targetting GLSL via cross compilation, +// we use the Vulkan layout rules instead of HLSL ones +// +// Specifically, we expect all of our top-level parameters +// to get distinct registers in the same descriptor set, +// rather than all getting register `0` because they +// occupy different names register spaces (as they would in D3D) + +Texture2D t; + +SamplerState s; + +cbuffer C +{ + float3 c; +} + +float4 main() : SV_Target +{ + return 0.0; +} \ No newline at end of file diff --git a/tests/reflection/cross-compile.slang.expected b/tests/reflection/cross-compile.slang.expected new file mode 100644 index 000000000..3bb730f66 --- /dev/null +++ b/tests/reflection/cross-compile.slang.expected @@ -0,0 +1,48 @@ +result code = 0 +standard error = { +} +standard output = { +{ + "parameters": [ + { + "name": "t", + "binding": {"kind": "descriptorTableSlot", "index": 0}, + "type": { + "kind": "resource", + "baseShape": "texture2D" + } + }, + { + "name": "s", + "binding": {"kind": "descriptorTableSlot", "index": 1}, + "type": { + "kind": "samplerState" + } + }, + { + "name": "C", + "binding": {"kind": "descriptorTableSlot", "index": 2}, + "type": { + "kind": "constantBuffer", + "elementType": { + "kind": "struct", + "fields": [ + { + "name": "c", + "type": { + "kind": "vector", + "elementCount": 3, + "elementType": { + "kind": "scalar", + "scalarType": "float32" + } + }, + "binding": {"kind": "uniform", "offset": 0, "size": 12} + } + ] + } + } + } + ] +} +} -- cgit v1.2.3 From 7af89d178736637cfad9c195f85f7f83e2f4ba99 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Mon, 10 Jul 2017 09:04:50 -0700 Subject: Cleanups for test cases: - Allow a code-generation target of `NONE` in order to suppress ordinary output in test cases where we don't care about the actual output (just pass/fail result) - Add explicit `location` layout qualifiers to intermediate vertex-to-fragment variables in GLSL test cases for rendering, to work around apparent Intel driver bugs. --- slang.h | 1 + source/slang/compiler.cpp | 4 ++++ source/slang/compiler.h | 1 + source/slang/emit.cpp | 5 +++++ source/slang/options.cpp | 1 + tests/preprocessor/import.hlsl | 2 +- tests/render/cross-compile0.hlsl | 4 ++-- tests/render/imported-parameters.hlsl | 4 ++-- tests/render/pound-import.hlsl | 4 ++-- 9 files changed, 19 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/slang.h b/slang.h index b6f35f255..87419bf45 100644 --- a/slang.h +++ b/slang.h @@ -66,6 +66,7 @@ extern "C" enum { SLANG_TARGET_UNKNOWN, + SLANG_TARGET_NONE, SLANG_GLSL, SLANG_GLSL_VULKAN, SLANG_GLSL_VULKAN_ONE_DESC, diff --git a/source/slang/compiler.cpp b/source/slang/compiler.cpp index f9c188764..2f6204eb2 100644 --- a/source/slang/compiler.cpp +++ b/source/slang/compiler.cpp @@ -461,6 +461,10 @@ namespace Slang } break; + case CodeGenTarget::None: + // The user requested no output + break; + // Note(tfoley): We currently hit this case when compiling the stdlib case CodeGenTarget::Unknown: break; diff --git a/source/slang/compiler.h b/source/slang/compiler.h index e106973bc..cb7eb6265 100644 --- a/source/slang/compiler.h +++ b/source/slang/compiler.h @@ -36,6 +36,7 @@ namespace Slang enum class CodeGenTarget { Unknown = SLANG_TARGET_UNKNOWN, + None = SLANG_TARGET_NONE, GLSL = SLANG_GLSL, GLSL_Vulkan = SLANG_GLSL_VULKAN, GLSL_Vulkan_OneDesc = SLANG_GLSL_VULKAN_ONE_DESC, diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp index 01b3e8cc2..155e1e39a 100644 --- a/source/slang/emit.cpp +++ b/source/slang/emit.cpp @@ -2159,6 +2159,11 @@ struct EmitVisitor void EmitStmt(RefPtr stmt) { + // TODO(tfoley): this shouldn't occur, but sometimes + // lowering will get confused by an empty function body... + if (!stmt) + return; + // Try to ensure that debugging can find the right location advanceToSourceLocation(stmt->Position); diff --git a/source/slang/options.cpp b/source/slang/options.cpp index 53c441f6b..bb292a4dc 100644 --- a/source/slang/options.cpp +++ b/source/slang/options.cpp @@ -230,6 +230,7 @@ struct OptionsParser CASE(spirv, SPIRV); CASE(spirv-assembly, SPIRV_ASM); + CASE(none, TARGET_NONE); #undef CASE diff --git a/tests/preprocessor/import.hlsl b/tests/preprocessor/import.hlsl index 486023678..f0618a667 100644 --- a/tests/preprocessor/import.hlsl +++ b/tests/preprocessor/import.hlsl @@ -1,4 +1,4 @@ -//TEST:SIMPLE:-profile vs_5_0 +//TEST:SIMPLE:-target none -profile vs_5_0 // Confirm that `#import` interacts with preprocessor as expected diff --git a/tests/render/cross-compile0.hlsl b/tests/render/cross-compile0.hlsl index d300e2bd5..d40f3460f 100644 --- a/tests/render/cross-compile0.hlsl +++ b/tests/render/cross-compile0.hlsl @@ -97,8 +97,8 @@ uniform Uniforms #define ASSEMBLED_VERTEX(QUAL) \ /* */ -#define V2F(QUAL) \ - QUAL vec3 coarse_color; \ +#define V2F(QUAL) \ + layout(location = 0) QUAL vec3 coarse_color; \ /* */ // Vertex Shader diff --git a/tests/render/imported-parameters.hlsl b/tests/render/imported-parameters.hlsl index 605214fc9..99216728e 100644 --- a/tests/render/imported-parameters.hlsl +++ b/tests/render/imported-parameters.hlsl @@ -84,8 +84,8 @@ FragmentStageOutput fragmentMain(FragmentStageInput input) #define ASSEMBLED_VERTEX(QUAL) \ /* */ -#define V2F(QUAL) \ - QUAL vec3 coarse_color; \ +#define V2F(QUAL) \ + layout(location = 0) QUAL vec3 coarse_color; \ /* */ // Vertex Shader diff --git a/tests/render/pound-import.hlsl b/tests/render/pound-import.hlsl index a9b625fb6..07b195966 100644 --- a/tests/render/pound-import.hlsl +++ b/tests/render/pound-import.hlsl @@ -97,8 +97,8 @@ uniform Uniforms #define ASSEMBLED_VERTEX(QUAL) \ /* */ -#define V2F(QUAL) \ - QUAL vec3 coarse_color; \ +#define V2F(QUAL) \ + layout(location = 0) QUAL vec3 coarse_color; \ /* */ // Vertex Shader -- cgit v1.2.3