From 4b9a34249d560a86d1333420f6cd06f6fe502c9d Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 28 Jan 2025 01:30:08 -0800 Subject: Fix geometry shader related modifier lowering. (#6197) * Fix geometry shader related modifier lowering. * Cleanup. * Delete obselete test. * Enable geometryShader test on windows only. * Fix test. --- .../slang-unit-test/unit-test-geometry-shader.cpp | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/slang-unit-test/unit-test-geometry-shader.cpp (limited to 'tools') diff --git a/tools/slang-unit-test/unit-test-geometry-shader.cpp b/tools/slang-unit-test/unit-test-geometry-shader.cpp new file mode 100644 index 000000000..e1126673e --- /dev/null +++ b/tools/slang-unit-test/unit-test-geometry-shader.cpp @@ -0,0 +1,93 @@ +// unit-test-geometry-shader.cpp + +#include "../../source/core/slang-io.h" +#include "../../source/core/slang-process.h" +#include "slang-com-ptr.h" +#include "slang.h" +#include "unit-test/slang-unit-test.h" + +#include +#include + +using namespace Slang; + +// Test the compilation API for compiling geometry shaders to DXIL. + +#if SLANG_WINDOWS_FAMILY + +SLANG_UNIT_TEST(geometryShader) +{ + const char* userSourceBody = R"( + struct GS_INPUT + { + float4 PosSS : TEXTURE0; // [Screen Space] Position + }; + + struct PS_INPUT + { + float4 PosSS : SV_POSITION; // [Screen Space] Position + }; + + [maxvertexcount(3)] + void main(triangle GS_INPUT input[3], inout TriangleStream outStream) + { + PS_INPUT output; + + output.PosSS = input[0].PosSS; + outStream.Append(output); + + output.PosSS = input[1].PosSS; + outStream.Append(output); + + output.PosSS = input[2].PosSS; + outStream.Append(output); + + outStream.RestartStrip(); + } + )"; + ComPtr globalSession; + SlangGlobalSessionDesc globalDesc = {}; + globalDesc.enableGLSL = true; + SLANG_CHECK(slang_createGlobalSession2(&globalDesc, globalSession.writeRef()) == SLANG_OK); + slang::TargetDesc targetDesc = {}; + targetDesc.format = SLANG_DXIL; + targetDesc.profile = globalSession->findProfile("sm_6_0"); + slang::SessionDesc sessionDesc = {}; + sessionDesc.targetCount = 1; + sessionDesc.targets = &targetDesc; + ComPtr session; + SLANG_CHECK(globalSession->createSession(sessionDesc, session.writeRef()) == SLANG_OK); + + ComPtr diagnosticBlob; + auto module = session->loadModuleFromSourceString( + "m", + "m.slang", + userSourceBody, + diagnosticBlob.writeRef()); + SLANG_CHECK(module != nullptr); + + ComPtr entryPoint; + module->findAndCheckEntryPoint( + "main", + SLANG_STAGE_GEOMETRY, + entryPoint.writeRef(), + diagnosticBlob.writeRef()); + + slang::IComponentType* componentTypes[2] = {module, entryPoint.get()}; + ComPtr composedProgram; + session->createCompositeComponentType( + componentTypes, + 2, + composedProgram.writeRef(), + diagnosticBlob.writeRef()); + + ComPtr linkedProgram; + composedProgram->link(linkedProgram.writeRef(), diagnosticBlob.writeRef()); + + ComPtr code; + linkedProgram->getEntryPointCode(0, 0, code.writeRef(), diagnosticBlob.writeRef()); + + SLANG_CHECK(code != nullptr); +} + +#endif -- cgit v1.2.3