From 64690fbca7cfafc0d10d9ec16f0a94fdde76328f Mon Sep 17 00:00:00 2001 From: Adam Cheney Date: Mon, 3 Feb 2025 13:00:09 -0500 Subject: [PATCH 01/22] Fix precompiledTargetModule tests --- tests/expected-failure-github.txt | 3 +- tests/expected-failure.txt | 1 - tools/CMakeLists.txt | 1 + tools/gfx/d3d12/d3d12-shader-program.cpp | 6 +- tools/gfx/d3d12/d3d12-shader-program.h | 2 +- tools/gfx/metal/metal-shader-program.cpp | 8 +- tools/gfx/metal/metal-shader-program.h | 2 +- tools/gfx/renderer-shared.cpp | 113 +++++++++++++++++++---- tools/gfx/renderer-shared.h | 2 +- tools/gfx/vulkan/vk-shader-program.cpp | 52 ++++++++++- tools/gfx/vulkan/vk-shader-program.h | 2 +- 11 files changed, 155 insertions(+), 37 deletions(-) diff --git a/tests/expected-failure-github.txt b/tests/expected-failure-github.txt index 60d632785c..38552fa9e6 100644 --- a/tests/expected-failure-github.txt +++ b/tests/expected-failure-github.txt @@ -12,5 +12,4 @@ tests/autodiff/custom-intrinsic.slang.2 syn (wgpu) tests/bugs/buffer-swizzle-store.slang.3 syn (wgpu) tests/compute/interface-shader-param-in-struct.slang.4 syn (wgpu) tests/compute/interface-shader-param.slang.5 syn (wgpu) -tests/language-feature/shader-params/interface-shader-param-ordinary.slang.4 syn (wgpu) -gfx-unit-test-tool/precompiledTargetModule2Vulkan.internal +tests/language-feature/shader-params/interface-shader-param-ordinary.slang.4 syn (wgpu) \ No newline at end of file diff --git a/tests/expected-failure.txt b/tests/expected-failure.txt index 2d95734cc7..7283c8d97c 100644 --- a/tests/expected-failure.txt +++ b/tests/expected-failure.txt @@ -5,4 +5,3 @@ tests/language-feature/saturated-cooperation/fuse.slang (vk) tests/bugs/byte-address-buffer-interlocked-add-f32.slang (vk) tests/ir/loop-unroll-0.slang.1 (vk) tests/hlsl-intrinsic/texture/float-atomics.slang (vk) -gfx-unit-test-tool/precompiledTargetModule2Vulkan.internal diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 9968d7ca8c..c894b100a7 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -141,6 +141,7 @@ if(SLANG_ENABLE_GFX) $<$:X11::X11> $<$:CUDA::cuda_driver> $<$:${NVAPI_LIBRARIES}> + SPIRV-Tools-link LINK_WITH_FRAMEWORK Foundation Cocoa QuartzCore Metal EXTRA_COMPILE_DEFINITIONS_PRIVATE $<$:GFX_ENABLE_CUDA> diff --git a/tools/gfx/d3d12/d3d12-shader-program.cpp b/tools/gfx/d3d12/d3d12-shader-program.cpp index a39f204651..c5fcf75809 100644 --- a/tools/gfx/d3d12/d3d12-shader-program.cpp +++ b/tools/gfx/d3d12/d3d12-shader-program.cpp @@ -10,14 +10,14 @@ using namespace Slang; Result ShaderProgramImpl::createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) + List> kernelCodes) { ShaderBinary shaderBin; shaderBin.stage = entryPointInfo->getStage(); shaderBin.entryPointInfo = entryPointInfo; shaderBin.code.addRange( - reinterpret_cast(kernelCode->getBufferPointer()), - (Index)kernelCode->getBufferSize()); + reinterpret_cast(kernelCodes[0]->getBufferPointer()), + (Index)kernelCodes[0]->getBufferSize()); m_shaders.add(_Move(shaderBin)); return SLANG_OK; } diff --git a/tools/gfx/d3d12/d3d12-shader-program.h b/tools/gfx/d3d12/d3d12-shader-program.h index 669bce960f..fad4e7ad01 100644 --- a/tools/gfx/d3d12/d3d12-shader-program.h +++ b/tools/gfx/d3d12/d3d12-shader-program.h @@ -27,7 +27,7 @@ class ShaderProgramImpl : public ShaderProgramBase virtual Result createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) override; + List> kernelCodes) override; }; } // namespace d3d12 diff --git a/tools/gfx/metal/metal-shader-program.cpp b/tools/gfx/metal/metal-shader-program.cpp index c95e99d047..0bb20740b8 100644 --- a/tools/gfx/metal/metal-shader-program.cpp +++ b/tools/gfx/metal/metal-shader-program.cpp @@ -21,16 +21,16 @@ ShaderProgramImpl::~ShaderProgramImpl() {} Result ShaderProgramImpl::createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) + List> kernelCodes) { Module module; module.stage = entryPointInfo->getStage(); module.entryPointName = entryPointInfo->getNameOverride(); - module.code = kernelCode; + module.code = kernelCodes[0]; dispatch_data_t data = dispatch_data_create( - kernelCode->getBufferPointer(), - kernelCode->getBufferSize(), + kernelCodes[0]->getBufferPointer(), + kernelCodes[0]->getBufferSize(), dispatch_get_main_queue(), NULL); NS::Error* error; diff --git a/tools/gfx/metal/metal-shader-program.h b/tools/gfx/metal/metal-shader-program.h index 691e12c9e4..d5b72d696b 100644 --- a/tools/gfx/metal/metal-shader-program.h +++ b/tools/gfx/metal/metal-shader-program.h @@ -33,7 +33,7 @@ class ShaderProgramImpl : public ShaderProgramBase virtual Result createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) override; + List> kernelCodes) override; }; diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 9f5574dccf..60faf3f437 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -1109,26 +1109,99 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) SlangInt entryPointIndex) { auto stage = entryPointInfo->getStage(); - ComPtr kernelCode; - ComPtr diagnostics; - auto compileResult = device->getEntryPointCodeFromShaderCache( - entryPointComponent, - entryPointIndex, - 0, - kernelCode.writeRef(), - diagnostics.writeRef()); - if (diagnostics) + List> kernelCodes; { - DebugMessageType msgType = DebugMessageType::Warning; - if (compileResult != SLANG_OK) - msgType = DebugMessageType::Error; - getDebugCallback()->handleMessage( - msgType, - DebugMessageSource::Slang, - (char*)diagnostics->getBufferPointer()); + ComPtr spirv; + ComPtr diagnostics; + auto compileResult = device->getEntryPointCodeFromShaderCache( + entryPointComponent, + entryPointIndex, + 0, + spirv.writeRef(), + diagnostics.writeRef()); + if (diagnostics) + { + DebugMessageType msgType = DebugMessageType::Warning; + if (compileResult != SLANG_OK) + msgType = DebugMessageType::Error; + getDebugCallback()->handleMessage( + msgType, + DebugMessageSource::Slang, + (char*)diagnostics->getBufferPointer()); + } + kernelCodes.add(spirv); } - SLANG_RETURN_ON_FAIL(compileResult); - SLANG_RETURN_ON_FAIL(createShaderModule(entryPointInfo, kernelCode)); + + // If target precompilation was used, kernelCode may only represent the + // glue code holding together the bits of precompiled target IR. + // Collect those dependency target IRs too. + ComPtr componentPrecompileService; + if (entryPointComponent->queryInterface( + slang::IModulePrecompileService_Experimental::getTypeGuid(), + (void**)componentPrecompileService.writeRef()) == SLANG_OK) + { + SlangInt dependencyCount = componentPrecompileService->getModuleDependencyCount(); + if (dependencyCount > 0) + { + for (int dependencyIndex = 0; dependencyIndex < dependencyCount; dependencyIndex++) + { + ComPtr dependencyModule; + { + ComPtr diagnosticsBlob; + auto result = componentPrecompileService->getModuleDependency( + dependencyIndex, + dependencyModule.writeRef(), + diagnosticsBlob.writeRef()); + if (diagnosticsBlob) + { + DebugMessageType msgType = DebugMessageType::Warning; + if (result != SLANG_OK) + msgType = DebugMessageType::Error; + getDebugCallback()->handleMessage( + msgType, + DebugMessageSource::Slang, + (char*)diagnosticsBlob->getBufferPointer()); + } + SLANG_RETURN_ON_FAIL(result); + } + + ComPtr spirv; + { + ComPtr diagnosticsBlob; + SlangResult result = SLANG_OK; + ComPtr precompileService; + result = dependencyModule->queryInterface( + slang::IModulePrecompileService_Experimental::getTypeGuid(), + (void**)precompileService.writeRef()); + if (result == SLANG_OK) + { + ComPtr diagnosticsBlob; + auto result = precompileService->getPrecompiledTargetCode( + SLANG_SPIRV, + spirv.writeRef(), + diagnosticsBlob.writeRef()); + if (result == SLANG_OK) + { + kernelCodes.add(spirv); + } + if (diagnosticsBlob) + { + DebugMessageType msgType = DebugMessageType::Warning; + if (result != SLANG_OK) + msgType = DebugMessageType::Error; + getDebugCallback()->handleMessage( + msgType, + DebugMessageSource::Slang, + (char*)diagnosticsBlob->getBufferPointer()); + } + } + SLANG_RETURN_ON_FAIL(result); + } + } + } + } + + SLANG_RETURN_ON_FAIL(createShaderModule(entryPointInfo, kernelCodes)); return SLANG_OK; }; @@ -1160,10 +1233,10 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) Result ShaderProgramBase::createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) + List> kernelCodes) { SLANG_UNUSED(entryPointInfo); - SLANG_UNUSED(kernelCode); + SLANG_UNUSED(kernelCodes); return SLANG_OK; } diff --git a/tools/gfx/renderer-shared.h b/tools/gfx/renderer-shared.h index c763c9ba28..17d3d3fc0e 100644 --- a/tools/gfx/renderer-shared.h +++ b/tools/gfx/renderer-shared.h @@ -877,7 +877,7 @@ class ShaderProgramBase : public IShaderProgram, public Slang::ComObject Slang::Result compileShaders(RendererBase* device); virtual Slang::Result createShaderModule( slang::EntryPointReflection* entryPointInfo, - Slang::ComPtr kernelCode); + Slang::List> kernelCodes); virtual SLANG_NO_THROW slang::TypeReflection* SLANG_MCALL findTypeByName(const char* name) override diff --git a/tools/gfx/vulkan/vk-shader-program.cpp b/tools/gfx/vulkan/vk-shader-program.cpp index 43a2957866..947a93ff7a 100644 --- a/tools/gfx/vulkan/vk-shader-program.cpp +++ b/tools/gfx/vulkan/vk-shader-program.cpp @@ -4,6 +4,8 @@ #include "vk-device.h" #include "vk-util.h" +#include "external/spirv-tools/include/spirv-tools/linker.hpp" + namespace gfx { @@ -69,17 +71,61 @@ VkPipelineShaderStageCreateInfo ShaderProgramImpl::compileEntryPoint( return shaderStageCreateInfo; } +static ComPtr LinkUsingSPIRVTools(List > kernelCodes) +{ + spvtools::Context context(SPV_ENV_UNIVERSAL_1_5); + spvtools::LinkerOptions options; + spvtools::MessageConsumer consumer = [](spv_message_level_t level, + const char* source, + const spv_position_t& position, + const char* message) + { + printf("SPIRV-TOOLS: %s\n", message); + printf("SPIRV-TOOLS: %s\n", source); + printf("SPIRV-TOOLS: %zu:%zu\n", position.index, position.column); + }; + context.SetMessageConsumer(consumer); + std::vector binaries; + std::vector binary_sizes; + for (auto kernelCode : kernelCodes) + { + binaries.push_back((uint32_t*)kernelCode->getBufferPointer()); + binary_sizes.push_back(kernelCode->getBufferSize() / sizeof(uint32_t)); + } + + std::vector linked_binary; + + spvtools::Link( + context, + binaries.data(), + binary_sizes.data(), + binaries.size(), + &linked_binary, + options); + + // Create a blob to hold the linked binary + ComPtr linkedKernelCode; + + // Replace kernel code with linked binary + // Creates a new blob with the linked binary + linkedKernelCode = RawBlob::create(linked_binary.data(), linked_binary.size() * sizeof(uint32_t)); + + return linkedKernelCode; +} + Result ShaderProgramImpl::createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) + List> kernelCodes) { - m_codeBlobs.add(kernelCode); + ComPtr linkedKernel = LinkUsingSPIRVTools(kernelCodes); + m_codeBlobs.add(linkedKernel); + VkShaderModule shaderModule; auto realEntryPointName = entryPointInfo->getNameOverride(); const char* spirvBinaryEntryPointName = "main"; m_stageCreateInfos.add(compileEntryPoint( spirvBinaryEntryPointName, - kernelCode, + linkedKernel, (VkShaderStageFlagBits)VulkanUtil::getShaderStage(entryPointInfo->getStage()), shaderModule)); m_entryPointNames.add(realEntryPointName); diff --git a/tools/gfx/vulkan/vk-shader-program.h b/tools/gfx/vulkan/vk-shader-program.h index 3fd56669ae..0fd01eb4cf 100644 --- a/tools/gfx/vulkan/vk-shader-program.h +++ b/tools/gfx/vulkan/vk-shader-program.h @@ -37,7 +37,7 @@ class ShaderProgramImpl : public ShaderProgramBase virtual Result createShaderModule( slang::EntryPointReflection* entryPointInfo, - ComPtr kernelCode) override; + List> kernelCodes) override; }; From 7e4bc91f9924f4da878c488d193322f07464f011 Mon Sep 17 00:00:00 2001 From: acheney Date: Fri, 21 Feb 2025 12:02:26 -0500 Subject: [PATCH 02/22] Update ci.yml --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a6a817ea6..13a73cba4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -156,20 +156,17 @@ jobs: export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 if [[ "${{matrix.full-gpu-tests}}" == "true" ]]; then "$bin_dir/slang-test" \ - -use-test-server \ -server-count 8 \ -category ${{ matrix.test-category }} \ -api all-cpu \ -expected-failure-list tests/expected-failure-github.txt elif [[ "${{matrix.has-gpu}}" == "true" ]]; then "$bin_dir/slang-test" \ - -use-test-server \ -category ${{ matrix.test-category }} \ -api all-dx12 \ -expected-failure-list tests/expected-failure-github.txt else "$bin_dir/slang-test" \ - -use-test-server \ -category ${{ matrix.test-category }} \ -api all-dx12 \ -expected-failure-list tests/expected-failure-github.txt \ From 2b7186bff0d61d9a9c372ef6e9f7b44f23eca029 Mon Sep 17 00:00:00 2001 From: acheney Date: Fri, 21 Feb 2025 19:22:53 -0500 Subject: [PATCH 03/22] ci --- .github/workflows/ci.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13a73cba4c..df92a35dcb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,13 +158,15 @@ jobs: "$bin_dir/slang-test" \ -server-count 8 \ -category ${{ matrix.test-category }} \ - -api all-cpu \ - -expected-failure-list tests/expected-failure-github.txt + -api all-cpu \ + -expected-failure-list tests/expected-failure-github.txt \ + gfx-unit-test-tool/precompiledTargetModule2Vulkan elif [[ "${{matrix.has-gpu}}" == "true" ]]; then "$bin_dir/slang-test" \ -category ${{ matrix.test-category }} \ -api all-dx12 \ - -expected-failure-list tests/expected-failure-github.txt + -expected-failure-list tests/expected-failure-github.txt \ + gfx-unit-test-tool/precompiledTargetModule2Vulkan else "$bin_dir/slang-test" \ -category ${{ matrix.test-category }} \ @@ -196,7 +198,8 @@ jobs: -category ${{ matrix.test-category }} \ -emit-spirv-via-glsl \ -api vk \ - -expected-failure-list tests/expected-failure.txt + -expected-failure-list tests/expected-failure.txt \ + gfx-unit-test-tool/precompiledTargetModule2Vulkan - uses: actions/upload-artifact@v4 if: steps.filter.outputs.should-run == 'true' && ! matrix.full-gpu-tests with: From 770fad816d5ddc50fb339f7824c18d4ad3c79ebe Mon Sep 17 00:00:00 2001 From: acheney Date: Fri, 21 Feb 2025 22:21:38 -0500 Subject: [PATCH 04/22] ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df92a35dcb..7f5a41c3b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,7 +158,7 @@ jobs: "$bin_dir/slang-test" \ -server-count 8 \ -category ${{ matrix.test-category }} \ - -api all-cpu \ + -api all-cpu \ -expected-failure-list tests/expected-failure-github.txt \ gfx-unit-test-tool/precompiledTargetModule2Vulkan elif [[ "${{matrix.has-gpu}}" == "true" ]]; then From 8c1a535452546566d0a4b0bf8e128db3be823096 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 11:11:58 -0500 Subject: [PATCH 05/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index f5d576a232..c1f04b6a14 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -213,7 +213,7 @@ void precompiledModule2TestImpl(IDevice* device, UnitTestContext* context) void precompiledTargetModule2TestImpl(IDevice* device, UnitTestContext* context) { - precompiledModule2TestImplCommon(device, context, true); + precompiledModule2TestImplCommon(device, context, false); } SLANG_UNIT_TEST(precompiledModule2D3D12) @@ -223,6 +223,7 @@ SLANG_UNIT_TEST(precompiledModule2D3D12) SLANG_UNIT_TEST(precompiledTargetModule2D3D12) { + printf("Starting precompiledTargetModule2D3D12\n"); runTestImpl(precompiledTargetModule2TestImpl, unitTestContext, Slang::RenderApiFlag::D3D12); } From cc4d64e828e323546acb85ccab9a935376ffd933 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 11:30:38 -0500 Subject: [PATCH 06/22] more --- tools/gfx-unit-test/gfx-test-util.h | 9 +++++++++ tools/gfx-unit-test/precompiled-module-2.cpp | 12 ++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tools/gfx-unit-test/gfx-test-util.h b/tools/gfx-unit-test/gfx-test-util.h index 5586701621..ff0080e485 100644 --- a/tools/gfx-unit-test/gfx-test-util.h +++ b/tools/gfx-unit-test/gfx-test-util.h @@ -112,9 +112,12 @@ void runTestImpl( { SLANG_IGNORE_TEST } + printf("File, Line: %s, %d\n", __FILE__, __LINE__); auto device = createTestingDevice(context, api, searchPaths, shaderCache); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); if (!device) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); SLANG_IGNORE_TEST } #if SLANG_WIN32 @@ -126,21 +129,27 @@ void runTestImpl( #endif // Skip d3d11 tests when we don't have DXBC support as they're bound to // fail without a backend compiler + printf("File, Line: %s, %d\n", __FILE__, __LINE__); if (api == Slang::RenderApiFlag::D3D11 && !SLANG_ENABLE_DXBC_SUPPORT) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); SLANG_IGNORE_TEST } try { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); renderDocBeginFrame(); f(device, context); } catch (AbortTestException& e) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); renderDocEndFrame(); throw e; } + printf("File, Line: %s, %d\n", __FILE__, __LINE__); renderDocEndFrame(); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); } #define GFX_CHECK_CALL(x) SLANG_CHECK(!SLANG_FAILED(x)) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index c1f04b6a14..3a6a8a89e7 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -19,6 +19,7 @@ static Slang::Result precompileProgram( const char* shaderModuleName, bool precompileToTarget) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); Slang::ComPtr slangSession; SLANG_RETURN_ON_FAIL(device->getSlangSession(slangSession.writeRef())); slang::SessionDesc sessionDesc = {}; @@ -27,7 +28,7 @@ static Slang::Result precompileProgram( sessionDesc.searchPaths = searchPaths.getBuffer(); auto globalSession = slangSession->getGlobalSession(); globalSession->createSession(sessionDesc, slangSession.writeRef()); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); slang::IModule* module; { Slang::ComPtr diagnosticsBlob; @@ -36,7 +37,7 @@ static Slang::Result precompileProgram( } if (!module) return SLANG_FAIL; - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); if (precompileToTarget) { SlangCompileTarget target; @@ -62,7 +63,7 @@ static Slang::Result precompileProgram( diagnoseIfNeeded(diagnosticsBlob); } } - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); // Write loaded modules to memory file system. for (SlangInt i = 0; i < slangSession->getLoadedModuleCount(); i++) { @@ -76,6 +77,7 @@ static Slang::Result precompileProgram( fileSys->saveFileBlob((Slang::String(name) + ".slang-module").getBuffer(), outBlob); } } + printf("File, Line: %s, %d\n", __FILE__, __LINE__); return SLANG_OK; } @@ -84,12 +86,13 @@ void precompiledModule2TestImplCommon( UnitTestContext* context, bool precompileToTarget) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); Slang::ComPtr transientHeap; ITransientResourceHeap::Desc transientHeapDesc = {}; transientHeapDesc.constantBufferSize = 4096; GFX_CHECK_CALL_ABORT( device->createTransientResourceHeap(transientHeapDesc, transientHeap.writeRef())); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); // First, load and compile the slang source. ComPtr memoryFileSystem = ComPtr(new Slang::MemoryFileSystem()); @@ -108,6 +111,7 @@ void precompiledModule2TestImplCommon( slang::SessionDesc sessionDesc = {}; sessionDesc.targetCount = 1; slang::TargetDesc targetDesc = {}; + printf("File, Line: %s, %d\n", __FILE__, __LINE__); switch (device->getDeviceInfo().deviceType) { case gfx::DeviceType::DirectX12: From d8f966b039963f8344cdeef00ad0df2a5cfc5203 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 11:46:45 -0500 Subject: [PATCH 07/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 17 ++++-- tools/slang-test/slang-test-main.cpp | 62 ++++++++++++++------ 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index 3a6a8a89e7..65e48b20d3 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -123,11 +123,12 @@ void precompiledModule2TestImplCommon( targetDesc.profile = device->getSlangSession()->getGlobalSession()->findProfile("GLSL_460"); break; } + printf("File, Line: %s, %d\n", __FILE__, __LINE__); sessionDesc.targets = &targetDesc; sessionDesc.fileSystem = memoryFileSystem.get(); auto globalSession = slangSession->getGlobalSession(); globalSession->createSession(sessionDesc, slangSession.writeRef()); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); const char* moduleSrc = R"( import "precompiled-module-imported"; @@ -145,6 +146,7 @@ void precompiledModule2TestImplCommon( } )"; memoryFileSystem->saveFile("precompiled-module.slang", moduleSrc, strlen(moduleSrc)); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); GFX_CHECK_CALL_ABORT(loadComputeProgram( device, slangSession, @@ -152,13 +154,14 @@ void precompiledModule2TestImplCommon( "precompiled-module", "computeMain", slangReflection)); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); ComputePipelineStateDesc pipelineDesc = {}; pipelineDesc.program = shaderProgram.get(); ComPtr pipelineState; + printf("File, Line: %s, %d\n", __FILE__, __LINE__); GFX_CHECK_CALL_ABORT( device->createComputePipelineState(pipelineDesc, pipelineState.writeRef())); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); const int numberCount = 4; float initialData[] = {0.0f, 0.0f, 0.0f, 0.0f}; IBufferResource::Desc bufferDesc = {}; @@ -174,16 +177,17 @@ void precompiledModule2TestImplCommon( bufferDesc.memoryType = MemoryType::DeviceLocal; ComPtr numbersBuffer; + printf("File, Line: %s, %d\n", __FILE__, __LINE__); GFX_CHECK_CALL_ABORT( device->createBufferResource(bufferDesc, (void*)initialData, numbersBuffer.writeRef())); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); ComPtr bufferView; IResourceView::Desc viewDesc = {}; viewDesc.type = IResourceView::Type::UnorderedAccess; viewDesc.format = Format::Unknown; GFX_CHECK_CALL_ABORT( device->createBufferView(numbersBuffer, nullptr, viewDesc, bufferView.writeRef())); - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); // We have done all the set up work, now it is time to start recording a command buffer for // GPU execution. { @@ -206,8 +210,9 @@ void precompiledModule2TestImplCommon( queue->executeCommandBuffer(commandBuffer); queue->waitOnHost(); } - + printf("File, Line: %s, %d\n", __FILE__, __LINE__); compareComputeResult(device, numbersBuffer, Slang::makeArray(3.0f, 3.0f, 3.0f, 3.0f)); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); } void precompiledModule2TestImpl(IDevice* device, UnitTestContext* context) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 5db82fcb7a..a7ed6b02fe 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4734,20 +4734,23 @@ SlangResult innerMain(int argc, char** argv) TestCategory* passThroughCategories[SLANG_PASS_THROUGH_COUNT_OF] = {nullptr}; // Work out what backends/pass-thrus are available + auto out = StdWriters::getOut(); { SlangSession* session = context.getSession(); - auto out = StdWriters::getOut(); + out.print("Supported backends:"); for (int i = 0; i < SLANG_PASS_THROUGH_COUNT_OF; ++i) { + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + const SlangPassThrough passThru = SlangPassThrough(i); if (passThru == SLANG_PASS_THROUGH_NONE) { continue; } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); if (SLANG_SUCCEEDED(session->checkPassThroughSupport(passThru))) { context.availableBackendFlags |= PassThroughFlags(1) << int(i); @@ -4764,19 +4767,21 @@ SlangResult innerMain(int argc, char** argv) out.write(buf.getBuffer(), buf.getLength()); } } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); out.print("\n"); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); { + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); SlangSession* session = context.getSession(); - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); const bool hasLlvm = SLANG_SUCCEEDED(session->checkPassThroughSupport(SLANG_PASS_THROUGH_LLVM)); const auto hostCallableCompiler = session->getDownstreamCompilerForTransition( SLANG_CPP_SOURCE, SLANG_SHADER_HOST_CALLABLE); - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + if (hasLlvm && hostCallableCompiler == SLANG_PASS_THROUGH_LLVM && SLANG_PROCESSOR_X86) { // TODO(JS) @@ -4788,8 +4793,11 @@ SlangResult innerMain(int argc, char** argv) // double (ie not x86/llvm) categorySet.add("war-double-host-callable", fullTestCategory); } + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Working out what renderApis is worked on on demand through // _getAvailableRenderApiFlags() @@ -4797,17 +4805,22 @@ SlangResult innerMain(int argc, char** argv) // We can set the slangc command line tool, to just use the function defined here context.setInnerMainFunc("slangc", &SlangCTool::innerMain); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + SLANG_RETURN_ON_FAIL( Options::parse(argc, argv, &categorySet, StdWriters::getError(), &context.options)); - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + Options& options = context.options; - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + context.setMaxTestRunnerThreadCount(options.serverCount); - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Set up the prelude/s TestToolUtil::setSessionDefaultPreludeFromExePath(argv[0], context.getSession()); - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + if (options.outputMode == TestOutputMode::TeamCity) { // On TeamCity CI there is an issue with unix/linux targets where test system may be @@ -4818,15 +4831,19 @@ SlangResult innerMain(int argc, char** argv) _disableCPPBackends(&context); #endif } + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); #if SLANG_PROCESSOR_X86 // Disable d3d12 tests on x86 right now since dxc for 32-bit windows doesn't seem to recognize // sm_6_6. _disableD3D12Backend(&context); #endif - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + if (options.subCommand.getLength()) { + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Get the function from the tool auto func = context.getInnerMainFunc(options.binDir, options.subCommand); if (!func) @@ -4852,18 +4869,21 @@ SlangResult innerMain(int argc, char** argv) int(args.getCount()), args.getBuffer()); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + if (options.includeCategories.getCount() == 0) { options.includeCategories.add(fullTestCategory, fullTestCategory); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Don't include OptiX tests unless the client has explicit opted into them. if (!options.includeCategories.containsKey(optixTestCategory)) { options.excludeCategories.add(optixTestCategory, optixTestCategory); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Exclude rendering tests when building under AppVeyor. // // TODO: this is very ad hoc, and we should do something cleaner. @@ -4889,7 +4909,8 @@ SlangResult innerMain(int argc, char** argv) // Enumerate test files according to policy runTestsInDirectory(&context); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // Run the unit tests (these are internal C++ tests - not specified via files in a // directory) They are registered with SLANG_UNIT_TEST macro // @@ -4917,7 +4938,8 @@ SlangResult innerMain(int argc, char** argv) TestReporter::set(nullptr); } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + // If we have a couple failed tests, they maybe intermittent failures due to parallel // excution or driver instability. We can try running them again. static constexpr int kFailedTestLimitForRetry = 16; @@ -4950,10 +4972,12 @@ SlangResult innerMain(int argc, char** argv) reporter.addResult(TestResult::Fail); } } - + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + reporter.outputSummary(); return reporter.didAllSucceed() ? SLANG_OK : SLANG_FAIL; } + out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); } int main(int argc, char** argv) From 72ae0030f8b649609bfde66dc1fd13ec41e9b33a Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 11:59:47 -0500 Subject: [PATCH 08/22] more --- tools/slang-test/slang-test-main.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index a7ed6b02fe..e1a994f9e5 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4546,10 +4546,12 @@ static SlangResult runUnitTestModule( { ISlangSharedLibraryLoader* loader = DefaultSharedLibraryLoader::getSingleton(); ComPtr moduleLibrary; + printf("about to loadSharedLIbrayr FILE LINE: %s %d\n", __FILE__, __LINE__); SLANG_RETURN_ON_FAIL(loader->loadSharedLibrary( Path::combine(context->dllDirectoryPath, moduleName).getBuffer(), moduleLibrary.writeRef())); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); UnitTestGetModuleFunc getModuleFunc = (UnitTestGetModuleFunc)moduleLibrary->findFuncByName("slangUnitTestGetModule"); @@ -4929,16 +4931,19 @@ SlangResult innerMain(int argc, char** argv) testOptions.categories.add(smokeTestCategory); runUnitTestModule(&context, testOptions, spawnType, "slang-unit-test-tool"); } + out.print("4932 FILE LINE: %s %d\n", __FILE__, __LINE__); { TestOptions testOptions; testOptions.categories.add(unitTestCategory); runUnitTestModule(&context, testOptions, spawnType, "gfx-unit-test-tool"); } + out.print("4939 FILE LINE: %s %d\n", __FILE__, __LINE__); + TestReporter::set(nullptr); } - out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + out.print("4941 FILE LINE: %s %d\n", __FILE__, __LINE__); // If we have a couple failed tests, they maybe intermittent failures due to parallel // excution or driver instability. We can try running them again. @@ -4972,12 +4977,12 @@ SlangResult innerMain(int argc, char** argv) reporter.addResult(TestResult::Fail); } } - out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + out.print("4975 FILE LINE: %s %d\n", __FILE__, __LINE__); reporter.outputSummary(); return reporter.didAllSucceed() ? SLANG_OK : SLANG_FAIL; } - out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + out.print("4980 FILE LINE: %s %d\n", __FILE__, __LINE__); } int main(int argc, char** argv) From 1bb74c3694296626a0aba9ccb54556c576ae4128 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 12:25:20 -0500 Subject: [PATCH 09/22] more --- tools/slang-test/slang-test-main.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index e1a994f9e5..7912746c09 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4544,9 +4544,9 @@ static SlangResult runUnitTestModule( SpawnType spawnType, const char* moduleName) { + printf("about to loadSharedLIbrayr FILE LINE: %s %d\n", __FILE__, __LINE__); ISlangSharedLibraryLoader* loader = DefaultSharedLibraryLoader::getSingleton(); ComPtr moduleLibrary; - printf("about to loadSharedLIbrayr FILE LINE: %s %d\n", __FILE__, __LINE__); SLANG_RETURN_ON_FAIL(loader->loadSharedLibrary( Path::combine(context->dllDirectoryPath, moduleName).getBuffer(), @@ -4557,6 +4557,7 @@ static SlangResult runUnitTestModule( (UnitTestGetModuleFunc)moduleLibrary->findFuncByName("slangUnitTestGetModule"); if (!getModuleFunc) return SLANG_FAIL; + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); IUnitTestModule* testModule = getModuleFunc(); if (!testModule) @@ -4597,6 +4598,7 @@ static SlangResult runUnitTestModule( } } } + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); auto runUnitTest = [&](TestItem test) { @@ -4615,6 +4617,7 @@ static SlangResult runUnitTestModule( { TestReporter::TestScope scopeTest(reporter, options.command); ExecuteResult exeRes; + printf("RPC FILE LINE: %s %d\n", __FILE__, __LINE__); SlangResult rpcRes = _executeRPC( context, @@ -4622,8 +4625,10 @@ static SlangResult runUnitTestModule( TestServerProtocol::ExecuteUnitTestArgs::g_methodName, &args, exeRes); + printf("2RPC FILE LINE: %s %d\n", __FILE__, __LINE__); const auto testResult = _asTestResult(ToolReturnCode(exeRes.resultCode)); - + printf("2RPC FILE LINE: %s %d\n", __FILE__, __LINE__); + // If the test fails, output any output - which might give information about // individual tests that have failed. if (SLANG_FAILED(rpcRes) || testResult == TestResult::Fail) @@ -4644,7 +4649,11 @@ static SlangResult runUnitTestModule( testModule->setTestReporter(reporter); try { + printf("TF FILE LINE: %s %d\n", __FILE__, __LINE__); + test.testFunc(&unitTestContext); + printf("TF2 FILE LINE: %s %d\n", __FILE__, __LINE__); + } catch (...) { From 83b0794e04b4ef7ea71c87fcaa9b528eaea37e18 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 13:38:54 -0500 Subject: [PATCH 10/22] more --- tools/slang-test/slang-test-main.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 7912746c09..12636fc8d3 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4598,7 +4598,7 @@ static SlangResult runUnitTestModule( } } } - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + printf("4601 FILE LINE: %s %d\n", __FILE__, __LINE__); auto runUnitTest = [&](TestItem test) { @@ -4688,10 +4688,15 @@ static SlangResult runUnitTestModule( testModule->setTestReporter(reporter); for (auto t : tests) + { + printf("Run unit test file %s line %d\n", __FILE__, __LINE__); runUnitTest(t); + printf("Ran unit test file %s line %d\n", __FILE__, __LINE__); + } } testModule->destroy(); + printf("Done run unit tests file %s line %d\n", __FILE__, __LINE__); return SLANG_OK; } @@ -4938,14 +4943,18 @@ SlangResult innerMain(int argc, char** argv) TestOptions testOptions; testOptions.categories.add(unitTestCategory); testOptions.categories.add(smokeTestCategory); + out.print("in slang-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); runUnitTestModule(&context, testOptions, spawnType, "slang-unit-test-tool"); + out.print("out slang-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); } out.print("4932 FILE LINE: %s %d\n", __FILE__, __LINE__); { TestOptions testOptions; testOptions.categories.add(unitTestCategory); + out.print("in gfx-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); runUnitTestModule(&context, testOptions, spawnType, "gfx-unit-test-tool"); + out.print("out gfx-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); } out.print("4939 FILE LINE: %s %d\n", __FILE__, __LINE__); From a6e3491d4ebddabe485447d88a3fd3955d3c8dc4 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 14:01:58 -0500 Subject: [PATCH 11/22] more --- tools/slang-test/slang-test-main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 12636fc8d3..d1ede40977 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4545,6 +4545,8 @@ static SlangResult runUnitTestModule( const char* moduleName) { printf("about to loadSharedLIbrayr FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); ISlangSharedLibraryLoader* loader = DefaultSharedLibraryLoader::getSingleton(); ComPtr moduleLibrary; From ee9d9bc9310d1434da1fef0c7ab19f03d6048631 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 14:25:57 -0500 Subject: [PATCH 12/22] more --- tools/slang-test/slang-test-main.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index d1ede40977..0fab4f63ac 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4553,17 +4553,19 @@ static SlangResult runUnitTestModule( SLANG_RETURN_ON_FAIL(loader->loadSharedLibrary( Path::combine(context->dllDirectoryPath, moduleName).getBuffer(), moduleLibrary.writeRef())); - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); - + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); UnitTestGetModuleFunc getModuleFunc = (UnitTestGetModuleFunc)moduleLibrary->findFuncByName("slangUnitTestGetModule"); if (!getModuleFunc) return SLANG_FAIL; - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); IUnitTestModule* testModule = getModuleFunc(); if (!testModule) return SLANG_FAIL; + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); UnitTestContext unitTestContext; unitTestContext.slangGlobalSession = context->getSession(); @@ -4601,6 +4603,9 @@ static SlangResult runUnitTestModule( } } printf("4601 FILE LINE: %s %d\n", __FILE__, __LINE__); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); auto runUnitTest = [&](TestItem test) { @@ -4651,10 +4656,16 @@ static SlangResult runUnitTestModule( testModule->setTestReporter(reporter); try { + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); printf("TF FILE LINE: %s %d\n", __FILE__, __LINE__); test.testFunc(&unitTestContext); printf("TF2 FILE LINE: %s %d\n", __FILE__, __LINE__); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); } catch (...) @@ -4692,8 +4703,13 @@ static SlangResult runUnitTestModule( for (auto t : tests) { printf("Run unit test file %s line %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); runUnitTest(t); printf("Ran unit test file %s line %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + } } From 4270c95db3d626602734939b5391fe4062ca5152 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 14:44:06 -0500 Subject: [PATCH 13/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 16 ++++++++++++++++ tools/slang-test/slang-test-main.cpp | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index 65e48b20d3..d391889f69 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -20,6 +20,8 @@ static Slang::Result precompileProgram( bool precompileToTarget) { printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); Slang::ComPtr slangSession; SLANG_RETURN_ON_FAIL(device->getSlangSession(slangSession.writeRef())); slang::SessionDesc sessionDesc = {}; @@ -29,6 +31,8 @@ static Slang::Result precompileProgram( auto globalSession = slangSession->getGlobalSession(); globalSession->createSession(sessionDesc, slangSession.writeRef()); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); slang::IModule* module; { Slang::ComPtr diagnosticsBlob; @@ -38,6 +42,8 @@ static Slang::Result precompileProgram( if (!module) return SLANG_FAIL; printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); if (precompileToTarget) { SlangCompileTarget target; @@ -78,6 +84,8 @@ static Slang::Result precompileProgram( } } printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); return SLANG_OK; } @@ -93,6 +101,8 @@ void precompiledModule2TestImplCommon( GFX_CHECK_CALL_ABORT( device->createTransientResourceHeap(transientHeapDesc, transientHeap.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); // First, load and compile the slang source. ComPtr memoryFileSystem = ComPtr(new Slang::MemoryFileSystem()); @@ -124,6 +134,8 @@ void precompiledModule2TestImplCommon( break; } printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); sessionDesc.targets = &targetDesc; sessionDesc.fileSystem = memoryFileSystem.get(); auto globalSession = slangSession->getGlobalSession(); @@ -147,6 +159,8 @@ void precompiledModule2TestImplCommon( )"; memoryFileSystem->saveFile("precompiled-module.slang", moduleSrc, strlen(moduleSrc)); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); GFX_CHECK_CALL_ABORT(loadComputeProgram( device, slangSession, @@ -159,6 +173,8 @@ void precompiledModule2TestImplCommon( pipelineDesc.program = shaderProgram.get(); ComPtr pipelineState; printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); GFX_CHECK_CALL_ABORT( device->createComputePipelineState(pipelineDesc, pipelineState.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 0fab4f63ac..7725c4c8bc 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4656,7 +4656,7 @@ static SlangResult runUnitTestModule( testModule->setTestReporter(reporter); try { - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + printf("ft1 FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); printf("TF FILE LINE: %s %d\n", __FILE__, __LINE__); @@ -4777,7 +4777,7 @@ SlangResult innerMain(int argc, char** argv) for (int i = 0; i < SLANG_PASS_THROUGH_COUNT_OF; ++i) { - out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); + out.print("4780 abc FILE LINE: %s %d\n", __FILE__, __LINE__); const SlangPassThrough passThru = SlangPassThrough(i); if (passThru == SLANG_PASS_THROUGH_NONE) @@ -4971,6 +4971,8 @@ SlangResult innerMain(int argc, char** argv) TestOptions testOptions; testOptions.categories.add(unitTestCategory); out.print("in gfx-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); runUnitTestModule(&context, testOptions, spawnType, "gfx-unit-test-tool"); out.print("out gfx-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); } From 30c20160c228f760fcda0d011840f6772b4b5325 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 14:54:31 -0500 Subject: [PATCH 14/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 17 +++++++++++++++++ tools/gfx/vulkan/vk-device.cpp | 12 ++++++++++-- tools/slang-test/slang-test-main.cpp | 2 ++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index d391889f69..070cfb8167 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -178,6 +178,9 @@ void precompiledModule2TestImplCommon( GFX_CHECK_CALL_ABORT( device->createComputePipelineState(pipelineDesc, pipelineState.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + const int numberCount = 4; float initialData[] = {0.0f, 0.0f, 0.0f, 0.0f}; IBufferResource::Desc bufferDesc = {}; @@ -194,9 +197,15 @@ void precompiledModule2TestImplCommon( ComPtr numbersBuffer; printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + GFX_CHECK_CALL_ABORT( device->createBufferResource(bufferDesc, (void*)initialData, numbersBuffer.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + ComPtr bufferView; IResourceView::Desc viewDesc = {}; viewDesc.type = IResourceView::Type::UnorderedAccess; @@ -204,6 +213,9 @@ void precompiledModule2TestImplCommon( GFX_CHECK_CALL_ABORT( device->createBufferView(numbersBuffer, nullptr, viewDesc, bufferView.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + // We have done all the set up work, now it is time to start recording a command buffer for // GPU execution. { @@ -227,8 +239,13 @@ void precompiledModule2TestImplCommon( queue->waitOnHost(); } printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); + compareComputeResult(device, numbersBuffer, Slang::makeArray(3.0f, 3.0f, 3.0f, 3.0f)); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); } void precompiledModule2TestImpl(IDevice* device, UnitTestContext* context) diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp index cffa094ae7..3d35aee0dc 100644 --- a/tools/gfx/vulkan/vk-device.cpp +++ b/tools/gfx/vulkan/vk-device.cpp @@ -1971,6 +1971,8 @@ Result DeviceImpl::createBufferResourceImpl( VkMemoryPropertyFlags reqMemoryProperties = 0; + printf("File Line function %s %d %d\n", __FILE__, __LINE__, __FUNCTION__); + fflush(stdout); VkBufferUsageFlags usage = _calcBufferUsageFlags(desc.allowedStates) | additionalUsageFlag; if (m_api.m_extendedFeatures.vulkan12Features.bufferDeviceAddress) { @@ -2013,13 +2015,18 @@ Result DeviceImpl::createBufferResourceImpl( reqMemoryProperties, desc.isShared, extMemHandleType)); + printf("File Line function %s %d %d\n", __FILE__, __LINE__, __FUNCTION__); + fflush(stdout); } else { + printf("File Line function %s %d %d\n", __FILE__, __LINE__, __FUNCTION__); + fflush(stdout); SLANG_RETURN_ON_FAIL( buffer->m_buffer.init(m_api, desc.sizeInBytes, usage, reqMemoryProperties)); } - + printf("File Line function %s %d %d\n", __FILE__, __LINE__, __FUNCTION__); + fflush(stdout); if (initData) { if (desc.memoryType == MemoryType::DeviceLocal) @@ -2069,7 +2076,8 @@ Result DeviceImpl::createBufferResourceImpl( m_api.vkUnmapMemory(m_device, buffer->m_buffer.m_memory); } } - + printf("File Line function %s %d %d\n", __FILE__, __LINE__, __FUNCTION__); + fflush(stdout); returnComPtr(outResource, buffer); return SLANG_OK; } diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 7725c4c8bc..d0cbaf60af 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4975,6 +4975,8 @@ SlangResult innerMain(int argc, char** argv) fflush(stderr); runUnitTestModule(&context, testOptions, spawnType, "gfx-unit-test-tool"); out.print("out gfx-unit-test-tool FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); } out.print("4939 FILE LINE: %s %d\n", __FILE__, __LINE__); From a4ca5ce0a5207425567c60f11d2a153a8006c9e4 Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 15:25:10 -0500 Subject: [PATCH 15/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index 070cfb8167..d2e9e06364 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -250,12 +250,20 @@ void precompiledModule2TestImplCommon( void precompiledModule2TestImpl(IDevice* device, UnitTestContext* context) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); precompiledModule2TestImplCommon(device, context, false); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); } void precompiledTargetModule2TestImpl(IDevice* device, UnitTestContext* context) { + printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); precompiledModule2TestImplCommon(device, context, false); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); } SLANG_UNIT_TEST(precompiledModule2D3D12) From 26f6b2be3a28163755a2d1d165f881ff4974c79e Mon Sep 17 00:00:00 2001 From: acheney Date: Mon, 24 Feb 2025 15:52:48 -0500 Subject: [PATCH 16/22] more --- source/slang/slang-compiler.cpp | 1 + source/slang/slang-emit.cpp | 31 ++++++++++++++++++++ tools/gfx-unit-test/gfx-test-util.h | 10 +++++-- tools/gfx-unit-test/precompiled-module-2.cpp | 4 +++ tools/slang-test/slang-test-main.cpp | 7 +++-- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp index 04ebb753c1..b41e7af4fb 100644 --- a/source/slang/slang-compiler.cpp +++ b/source/slang/slang-compiler.cpp @@ -1722,6 +1722,7 @@ SlangResult CodeGenContext::emitWithDownstreamForEntryPoints(ComPtr& } } } + //HERE } }); diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index e20a4a90fd..4fea47cf5e 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -2049,6 +2049,37 @@ SlangResult emitSPIRVForEntryPointsDirectly( List spirv, outSpirv; emitSPIRVFromIR(codeGenContext, irModule, irEntryPoints, spirv); + // Re-link together SPIRV + /* + // Load embedded precompiled libraries from IR into library artifacts + List> libraries; + program->enumerateIRModules( + [&](IRModule* irModule) + { + for (auto globalInst : irModule->getModuleInst()->getChildren()) + { + if (target == CodeGenTarget::SPIRVAssembly || target == CodeGenTarget::SPIRV) + { + if (auto inst = as(globalInst)) + { + if (inst->getTarget() == CodeGenTarget::SPIRV) + { + auto slice = inst->getBlob()->getStringSlice(); + ArtifactDesc desc = + ArtifactDescUtil::makeDescForCompileTarget(SLANG_SPIRV); + desc.kind = ArtifactKind::Library; + + auto library = ArtifactUtil::createArtifact(desc); + + library->addRepresentationUnknown(StringBlob::create(slice)); + libraries.add(library); + } + } + } + } + }); + + */ #if 0 String optErr; if (SLANG_FAILED(optimizeSPIRV(spirv, optErr, outSpirv))) diff --git a/tools/gfx-unit-test/gfx-test-util.h b/tools/gfx-unit-test/gfx-test-util.h index ff0080e485..1d1519dbab 100644 --- a/tools/gfx-unit-test/gfx-test-util.h +++ b/tools/gfx-unit-test/gfx-test-util.h @@ -138,18 +138,24 @@ void runTestImpl( try { printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); renderDocBeginFrame(); f(device, context); + printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); } catch (AbortTestException& e) { - printf("File, Line: %s, %d\n", __FILE__, __LINE__); + printf("EXCEPTION! File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); renderDocEndFrame(); throw e; } - printf("File, Line: %s, %d\n", __FILE__, __LINE__); + printf("Dun.. File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); renderDocEndFrame(); printf("File, Line: %s, %d\n", __FILE__, __LINE__); + fflush(stdout); } #define GFX_CHECK_CALL(x) SLANG_CHECK(!SLANG_FAILED(x)) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index d2e9e06364..e08c37ec28 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -284,7 +284,11 @@ SLANG_UNIT_TEST(precompiledModule2Vulkan) SLANG_UNIT_TEST(precompiledTargetModule2Vulkan) { + printf("Starting precompiledTargetModule2Vulkan\n"); + fflush(stdout); runTestImpl(precompiledTargetModule2TestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan); + printf("Finished precompiledTargetModule2Vulkan\n"); + fflush(stdout); } } // namespace gfx_test diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index d0cbaf60af..17aaabd6b9 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -4660,7 +4660,8 @@ static SlangResult runUnitTestModule( fflush(stdout); fflush(stderr); printf("TF FILE LINE: %s %d\n", __FILE__, __LINE__); - + fflush(stdout); + fflush(stderr); test.testFunc(&unitTestContext); printf("TF2 FILE LINE: %s %d\n", __FILE__, __LINE__); printf("FILE LINE: %s %d\n", __FILE__, __LINE__); @@ -4702,11 +4703,11 @@ static SlangResult runUnitTestModule( for (auto t : tests) { - printf("Run unit test file %s line %d\n", __FILE__, __LINE__); + printf("A Run unit test file %s line %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); runUnitTest(t); - printf("Ran unit test file %s line %d\n", __FILE__, __LINE__); + printf("B Ran unit test file %s line %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); From b659bbbbe60a6287fbca783fb072329b47e1fa8d Mon Sep 17 00:00:00 2001 From: acheney Date: Tue, 25 Feb 2025 10:22:47 -0500 Subject: [PATCH 17/22] more --- tools/gfx-unit-test/precompiled-module-2.cpp | 28 ++++++++++++++++---- tools/slang-test/slang-test-main.cpp | 4 ++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index e08c37ec28..5ff2518847 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -284,11 +284,29 @@ SLANG_UNIT_TEST(precompiledModule2Vulkan) SLANG_UNIT_TEST(precompiledTargetModule2Vulkan) { - printf("Starting precompiledTargetModule2Vulkan\n"); - fflush(stdout); - runTestImpl(precompiledTargetModule2TestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan); - printf("Finished precompiledTargetModule2Vulkan\n"); - fflush(stdout); + // catch all exceptions + try + { + printf("Starting precompiledTargetModule2Vulkan\n"); + fflush(stdout); + runTestImpl( + precompiledTargetModule2TestImpl, + unitTestContext, + Slang::RenderApiFlag::Vulkan); + printf("Finished precompiledTargetModule2Vulkan\n"); + fflush(stdout); + } + catch (const std::exception&) + { + printf("Caught exception\n"); + fflush(stdout); + } + catch (...) + { + printf("Caught unknown exception\n"); + fflush(stdout); + } + } } // namespace gfx_test diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 17aaabd6b9..7e4319814a 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -2684,7 +2684,9 @@ static TestResult runCPPCompilerSharedLibrary(TestContext* context, TestInput& i { printf("Unable to access 'test' function\n"); } - + + printf("Unload handle\n"); + fflush(stdout); SharedLibrary::unload(handle); if (!(inValue == value && strcmp(inBuffer, buffer) == 0)) From 12b2942ef3351571f28b358995dff6f8dd65145a Mon Sep 17 00:00:00 2001 From: acheney Date: Tue, 25 Feb 2025 14:56:44 -0500 Subject: [PATCH 18/22] Add ref to module dependency --- source/slang/slang-compiler-tu.cpp | 1 + tools/gfx/renderer-shared.cpp | 21 ++++++++++++++------- tools/gfx/slang-context.h | 2 ++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/source/slang/slang-compiler-tu.cpp b/source/slang/slang-compiler-tu.cpp index c20fc9a802..8bfe9a9ab7 100644 --- a/source/slang/slang-compiler-tu.cpp +++ b/source/slang/slang-compiler-tu.cpp @@ -291,6 +291,7 @@ SLANG_NO_THROW SlangResult SLANG_MCALL ComponentType::getModuleDependency( { return SLANG_E_INVALID_ARG; } + getModuleDependencies()[dependencyIndex]->addRef(); *outModule = getModuleDependencies()[dependencyIndex]; return SLANG_OK; } diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 60faf3f437..06ed66dfa8 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -1103,6 +1103,8 @@ void ShaderProgramBase::init(const IShaderProgram::Desc& inDesc) Result ShaderProgramBase::compileShaders(RendererBase* device) { + // Check target type from RenderBase device + auto compileTarget = device->slangContext.compileTarget; // For a fully specialized program, read and store its kernel code in `shaderProgram`. auto compileShader = [&](slang::EntryPointReflection* entryPointInfo, slang::IComponentType* entryPointComponent, @@ -1111,13 +1113,13 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) auto stage = entryPointInfo->getStage(); List> kernelCodes; { - ComPtr spirv; + ComPtr downstreamIR; ComPtr diagnostics; auto compileResult = device->getEntryPointCodeFromShaderCache( entryPointComponent, entryPointIndex, 0, - spirv.writeRef(), + downstreamIR.writeRef(), diagnostics.writeRef()); if (diagnostics) { @@ -1129,7 +1131,7 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) DebugMessageSource::Slang, (char*)diagnostics->getBufferPointer()); } - kernelCodes.add(spirv); + kernelCodes.add(downstreamIR); } // If target precompilation was used, kernelCode may only represent the @@ -1141,6 +1143,7 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) (void**)componentPrecompileService.writeRef()) == SLANG_OK) { SlangInt dependencyCount = componentPrecompileService->getModuleDependencyCount(); + printf("There are %d dependencies\n", dependencyCount); if (dependencyCount > 0) { for (int dependencyIndex = 0; dependencyIndex < dependencyCount; dependencyIndex++) @@ -1148,10 +1151,14 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) ComPtr dependencyModule; { ComPtr diagnosticsBlob; + printf("dependency %d\n", dependencyIndex); + fflush(stdout); auto result = componentPrecompileService->getModuleDependency( dependencyIndex, dependencyModule.writeRef(), diagnosticsBlob.writeRef()); + printf("not skippt get. did nto crash yet\n"); + fflush(stdout); if (diagnosticsBlob) { DebugMessageType msgType = DebugMessageType::Warning; @@ -1165,7 +1172,7 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) SLANG_RETURN_ON_FAIL(result); } - ComPtr spirv; + ComPtr downstreamIR; { ComPtr diagnosticsBlob; SlangResult result = SLANG_OK; @@ -1177,12 +1184,12 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) { ComPtr diagnosticsBlob; auto result = precompileService->getPrecompiledTargetCode( - SLANG_SPIRV, - spirv.writeRef(), + compileTarget, + downstreamIR.writeRef(), diagnosticsBlob.writeRef()); if (result == SLANG_OK) { - kernelCodes.add(spirv); + kernelCodes.add(downstreamIR); } if (diagnosticsBlob) { diff --git a/tools/gfx/slang-context.h b/tools/gfx/slang-context.h index 719c70b506..5494ccfcea 100644 --- a/tools/gfx/slang-context.h +++ b/tools/gfx/slang-context.h @@ -10,6 +10,7 @@ class SlangContext public: Slang::ComPtr globalSession; Slang::ComPtr session; + SlangCompileTarget compileTarget; Result initialize( const gfx::IDevice::SlangDesc& desc, uint32_t extendedDescCount, @@ -27,6 +28,7 @@ class SlangContext SLANG_RETURN_ON_FAIL(slang::createGlobalSession(globalSession.writeRef())); } + this->compileTarget = compileTarget; slang::SessionDesc slangSessionDesc = {}; slangSessionDesc.defaultMatrixLayoutMode = desc.defaultMatrixLayoutMode; slangSessionDesc.searchPathCount = desc.searchPathCount; From 5f3f837109bb8cece974d3efba526fcef8497b4c Mon Sep 17 00:00:00 2001 From: acheney Date: Tue, 25 Feb 2025 15:10:43 -0500 Subject: [PATCH 19/22] Revert "ci" This reverts commit 770fad816d5ddc50fb339f7824c18d4ad3c79ebe. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f5a41c3b9..df92a35dcb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,7 +158,7 @@ jobs: "$bin_dir/slang-test" \ -server-count 8 \ -category ${{ matrix.test-category }} \ - -api all-cpu \ + -api all-cpu \ -expected-failure-list tests/expected-failure-github.txt \ gfx-unit-test-tool/precompiledTargetModule2Vulkan elif [[ "${{matrix.has-gpu}}" == "true" ]]; then From f1729cc4a30d771167ae347e109b1aef7031a3c3 Mon Sep 17 00:00:00 2001 From: acheney Date: Tue, 25 Feb 2025 15:10:57 -0500 Subject: [PATCH 20/22] Revert "ci" This reverts commit 2b7186bff0d61d9a9c372ef6e9f7b44f23eca029. --- .github/workflows/ci.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df92a35dcb..13a73cba4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -158,15 +158,13 @@ jobs: "$bin_dir/slang-test" \ -server-count 8 \ -category ${{ matrix.test-category }} \ - -api all-cpu \ - -expected-failure-list tests/expected-failure-github.txt \ - gfx-unit-test-tool/precompiledTargetModule2Vulkan + -api all-cpu \ + -expected-failure-list tests/expected-failure-github.txt elif [[ "${{matrix.has-gpu}}" == "true" ]]; then "$bin_dir/slang-test" \ -category ${{ matrix.test-category }} \ -api all-dx12 \ - -expected-failure-list tests/expected-failure-github.txt \ - gfx-unit-test-tool/precompiledTargetModule2Vulkan + -expected-failure-list tests/expected-failure-github.txt else "$bin_dir/slang-test" \ -category ${{ matrix.test-category }} \ @@ -198,8 +196,7 @@ jobs: -category ${{ matrix.test-category }} \ -emit-spirv-via-glsl \ -api vk \ - -expected-failure-list tests/expected-failure.txt \ - gfx-unit-test-tool/precompiledTargetModule2Vulkan + -expected-failure-list tests/expected-failure.txt - uses: actions/upload-artifact@v4 if: steps.filter.outputs.should-run == 'true' && ! matrix.full-gpu-tests with: From f49e1e11e55cde95227493ad3b2f5f051d720ddb Mon Sep 17 00:00:00 2001 From: acheney Date: Tue, 25 Feb 2025 15:11:09 -0500 Subject: [PATCH 21/22] Revert "Update ci.yml" This reverts commit 7e4bc91f9924f4da878c488d193322f07464f011. --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13a73cba4c..3a6a817ea6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -156,17 +156,20 @@ jobs: export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 if [[ "${{matrix.full-gpu-tests}}" == "true" ]]; then "$bin_dir/slang-test" \ + -use-test-server \ -server-count 8 \ -category ${{ matrix.test-category }} \ -api all-cpu \ -expected-failure-list tests/expected-failure-github.txt elif [[ "${{matrix.has-gpu}}" == "true" ]]; then "$bin_dir/slang-test" \ + -use-test-server \ -category ${{ matrix.test-category }} \ -api all-dx12 \ -expected-failure-list tests/expected-failure-github.txt else "$bin_dir/slang-test" \ + -use-test-server \ -category ${{ matrix.test-category }} \ -api all-dx12 \ -expected-failure-list tests/expected-failure-github.txt \ From bfe75bee9931722de4179823f25227db272ef022 Mon Sep 17 00:00:00 2001 From: slangbot <186143334+slangbot@users.noreply.github.com> Date: Tue, 25 Feb 2025 20:50:02 +0000 Subject: [PATCH 22/22] format code --- source/slang/slang-compiler.cpp | 2 +- tools/gfx-unit-test/precompiled-module-2.cpp | 13 +++--- tools/gfx/renderer-shared.cpp | 4 +- tools/gfx/vulkan/vk-shader-program.cpp | 14 +++--- tools/slang-test/slang-test-main.cpp | 49 ++++++++++---------- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp index b41e7af4fb..aa23e35075 100644 --- a/source/slang/slang-compiler.cpp +++ b/source/slang/slang-compiler.cpp @@ -1722,7 +1722,7 @@ SlangResult CodeGenContext::emitWithDownstreamForEntryPoints(ComPtr& } } } - //HERE + // HERE } }); diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp index 5ff2518847..10ea9be5ed 100644 --- a/tools/gfx-unit-test/precompiled-module-2.cpp +++ b/tools/gfx-unit-test/precompiled-module-2.cpp @@ -180,7 +180,7 @@ void precompiledModule2TestImplCommon( printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - + const int numberCount = 4; float initialData[] = {0.0f, 0.0f, 0.0f, 0.0f}; IBufferResource::Desc bufferDesc = {}; @@ -199,13 +199,13 @@ void precompiledModule2TestImplCommon( printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - + GFX_CHECK_CALL_ABORT( device->createBufferResource(bufferDesc, (void*)initialData, numbersBuffer.writeRef())); printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - + ComPtr bufferView; IResourceView::Desc viewDesc = {}; viewDesc.type = IResourceView::Type::UnorderedAccess; @@ -215,7 +215,7 @@ void precompiledModule2TestImplCommon( printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - + // We have done all the set up work, now it is time to start recording a command buffer for // GPU execution. { @@ -241,7 +241,7 @@ void precompiledModule2TestImplCommon( printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - + compareComputeResult(device, numbersBuffer, Slang::makeArray(3.0f, 3.0f, 3.0f, 3.0f)); printf("File, Line: %s, %d\n", __FILE__, __LINE__); fflush(stdout); @@ -298,7 +298,7 @@ SLANG_UNIT_TEST(precompiledTargetModule2Vulkan) } catch (const std::exception&) { - printf("Caught exception\n"); + printf("Caught exception\n"); fflush(stdout); } catch (...) @@ -306,7 +306,6 @@ SLANG_UNIT_TEST(precompiledTargetModule2Vulkan) printf("Caught unknown exception\n"); fflush(stdout); } - } } // namespace gfx_test diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 06ed66dfa8..9cbdc093a0 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -1184,8 +1184,8 @@ Result ShaderProgramBase::compileShaders(RendererBase* device) { ComPtr diagnosticsBlob; auto result = precompileService->getPrecompiledTargetCode( - compileTarget, - downstreamIR.writeRef(), + compileTarget, + downstreamIR.writeRef(), diagnosticsBlob.writeRef()); if (result == SLANG_OK) { diff --git a/tools/gfx/vulkan/vk-shader-program.cpp b/tools/gfx/vulkan/vk-shader-program.cpp index 947a93ff7a..39d3ac4cb6 100644 --- a/tools/gfx/vulkan/vk-shader-program.cpp +++ b/tools/gfx/vulkan/vk-shader-program.cpp @@ -1,11 +1,10 @@ // vk-shader-program.cpp #include "vk-shader-program.h" +#include "external/spirv-tools/include/spirv-tools/linker.hpp" #include "vk-device.h" #include "vk-util.h" -#include "external/spirv-tools/include/spirv-tools/linker.hpp" - namespace gfx { @@ -71,14 +70,14 @@ VkPipelineShaderStageCreateInfo ShaderProgramImpl::compileEntryPoint( return shaderStageCreateInfo; } -static ComPtr LinkUsingSPIRVTools(List > kernelCodes) +static ComPtr LinkUsingSPIRVTools(List> kernelCodes) { spvtools::Context context(SPV_ENV_UNIVERSAL_1_5); spvtools::LinkerOptions options; spvtools::MessageConsumer consumer = [](spv_message_level_t level, - const char* source, - const spv_position_t& position, - const char* message) + const char* source, + const spv_position_t& position, + const char* message) { printf("SPIRV-TOOLS: %s\n", message); printf("SPIRV-TOOLS: %s\n", source); @@ -108,7 +107,8 @@ static ComPtr LinkUsingSPIRVTools(List > kernelCo // Replace kernel code with linked binary // Creates a new blob with the linked binary - linkedKernelCode = RawBlob::create(linked_binary.data(), linked_binary.size() * sizeof(uint32_t)); + linkedKernelCode = + RawBlob::create(linked_binary.data(), linked_binary.size() * sizeof(uint32_t)); return linkedKernelCode; } diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 7e4319814a..5e1304259e 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -2684,7 +2684,7 @@ static TestResult runCPPCompilerSharedLibrary(TestContext* context, TestInput& i { printf("Unable to access 'test' function\n"); } - + printf("Unload handle\n"); fflush(stdout); SharedLibrary::unload(handle); @@ -4555,12 +4555,16 @@ static SlangResult runUnitTestModule( SLANG_RETURN_ON_FAIL(loader->loadSharedLibrary( Path::combine(context->dllDirectoryPath, moduleName).getBuffer(), moduleLibrary.writeRef())); - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); UnitTestGetModuleFunc getModuleFunc = (UnitTestGetModuleFunc)moduleLibrary->findFuncByName("slangUnitTestGetModule"); if (!getModuleFunc) return SLANG_FAIL; - printf("FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); + printf("FILE LINE: %s %d\n", __FILE__, __LINE__); + fflush(stdout); + fflush(stderr); IUnitTestModule* testModule = getModuleFunc(); if (!testModule) @@ -4637,7 +4641,7 @@ static SlangResult runUnitTestModule( printf("2RPC FILE LINE: %s %d\n", __FILE__, __LINE__); const auto testResult = _asTestResult(ToolReturnCode(exeRes.resultCode)); printf("2RPC FILE LINE: %s %d\n", __FILE__, __LINE__); - + // If the test fails, output any output - which might give information about // individual tests that have failed. if (SLANG_FAILED(rpcRes) || testResult == TestResult::Fail) @@ -4663,13 +4667,12 @@ static SlangResult runUnitTestModule( fflush(stderr); printf("TF FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); - fflush(stderr); + fflush(stderr); test.testFunc(&unitTestContext); printf("TF2 FILE LINE: %s %d\n", __FILE__, __LINE__); printf("FILE LINE: %s %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - } catch (...) { @@ -4712,7 +4715,6 @@ static SlangResult runUnitTestModule( printf("B Ran unit test file %s line %d\n", __FILE__, __LINE__); fflush(stdout); fflush(stderr); - } } @@ -4775,7 +4777,7 @@ SlangResult innerMain(int argc, char** argv) { SlangSession* session = context.getSession(); - + out.print("Supported backends:"); for (int i = 0; i < SLANG_PASS_THROUGH_COUNT_OF; ++i) @@ -4818,7 +4820,7 @@ SlangResult innerMain(int argc, char** argv) SLANG_CPP_SOURCE, SLANG_SHADER_HOST_CALLABLE); out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + if (hasLlvm && hostCallableCompiler == SLANG_PASS_THROUGH_LLVM && SLANG_PROCESSOR_X86) { // TODO(JS) @@ -4831,10 +4833,9 @@ SlangResult innerMain(int argc, char** argv) categorySet.add("war-double-host-callable", fullTestCategory); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Working out what renderApis is worked on on demand through // _getAvailableRenderApiFlags() @@ -4843,21 +4844,21 @@ SlangResult innerMain(int argc, char** argv) context.setInnerMainFunc("slangc", &SlangCTool::innerMain); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + SLANG_RETURN_ON_FAIL( Options::parse(argc, argv, &categorySet, StdWriters::getError(), &context.options)); out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + Options& options = context.options; out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + context.setMaxTestRunnerThreadCount(options.serverCount); out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Set up the prelude/s TestToolUtil::setSessionDefaultPreludeFromExePath(argv[0], context.getSession()); out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + if (options.outputMode == TestOutputMode::TeamCity) { // On TeamCity CI there is an issue with unix/linux targets where test system may be @@ -4876,11 +4877,11 @@ SlangResult innerMain(int argc, char** argv) _disableD3D12Backend(&context); #endif out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + if (options.subCommand.getLength()) { out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Get the function from the tool auto func = context.getInnerMainFunc(options.binDir, options.subCommand); if (!func) @@ -4907,20 +4908,20 @@ SlangResult innerMain(int argc, char** argv) args.getBuffer()); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + if (options.includeCategories.getCount() == 0) { options.includeCategories.add(fullTestCategory, fullTestCategory); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Don't include OptiX tests unless the client has explicit opted into them. if (!options.includeCategories.containsKey(optixTestCategory)) { options.excludeCategories.add(optixTestCategory, optixTestCategory); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Exclude rendering tests when building under AppVeyor. // // TODO: this is very ad hoc, and we should do something cleaner. @@ -4947,7 +4948,7 @@ SlangResult innerMain(int argc, char** argv) runTestsInDirectory(&context); } out.print("FILE LINE: %s %d\n", __FILE__, __LINE__); - + // Run the unit tests (these are internal C++ tests - not specified via files in a // directory) They are registered with SLANG_UNIT_TEST macro // @@ -4987,7 +4988,7 @@ SlangResult innerMain(int argc, char** argv) TestReporter::set(nullptr); } out.print("4941 FILE LINE: %s %d\n", __FILE__, __LINE__); - + // If we have a couple failed tests, they maybe intermittent failures due to parallel // excution or driver instability. We can try running them again. static constexpr int kFailedTestLimitForRetry = 16; @@ -5021,7 +5022,7 @@ SlangResult innerMain(int argc, char** argv) } } out.print("4975 FILE LINE: %s %d\n", __FILE__, __LINE__); - + reporter.outputSummary(); return reporter.didAllSucceed() ? SLANG_OK : SLANG_FAIL; }