diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-01-08 11:09:20 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-08 11:09:20 -0500 |
| commit | cae5ddd4a2c9343ec7367c9049c5cc0c8628a9c4 (patch) | |
| tree | c8200a495f3c0bc5a841ce752fdfb13a73278faf /tools/render-test/render-test-main.cpp | |
| parent | 17285faf9b4fe7f6c28b43972212068465bdb42e (diff) | |
Setup of runtime cuda device (#1162)
* CUDA generated first test compiles.
* WIP on enabling CUDA in render-test.
* Detect CUDA_PATH environmental variable to build build cuda support into render-test.
Added WIP cuda-compute-util.cpp/h
Added CUDA as a renderer type.
* Fix libraries needed for cuda in premake.
* Added -enable-cuda premake option. Defaults to false.
* Creates CUDA device, loads PTX and finds entry point.
* Fix some erroneous cruft from slang-cuda-prelude.h
Diffstat (limited to 'tools/render-test/render-test-main.cpp')
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index 1355402cf..a110b6ca9 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -25,6 +25,10 @@ #include "cpu-compute-util.h" +#if RENDER_TEST_CUDA +# include "cuda/cuda-compute-util.h" +#endif + namespace renderer_test { using Slang::Result; @@ -461,6 +465,13 @@ SLANG_TEST_TOOL_API SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSe nativeLanguage = SLANG_SOURCE_LANGUAGE_CPP; slangPassThrough = SLANG_PASS_THROUGH_GENERIC_C_CPP; break; + case RendererType::CUDA: + input.target = SLANG_PTX; + input.profile = ""; + nativeLanguage = SLANG_SOURCE_LANGUAGE_CUDA; + slangPassThrough = SLANG_PASS_THROUGH_NVRTC; + break; + default: fprintf(stderr, "error: unexpected\n"); return SLANG_FAIL; @@ -502,20 +513,30 @@ SLANG_TEST_TOOL_API SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSe rendererName << "'" << gOptions.adapter << "'"; } - // If it's CPU testing we don't need a window or a renderer - if (gOptions.rendererType == RendererType::CPU) + if (gOptions.onlyStartup) { - if (gOptions.onlyStartup) + switch (gOptions.rendererType) { - // Need generic C/C++ - if (SLANG_FAILED(spSessionCheckPassThroughSupport(session, SLANG_PASS_THROUGH_GENERIC_C_CPP))) + case RendererType::CUDA: { +#if RENDER_TEST_CUDA + return SLANG_SUCCEEDED(spSessionCheckPassThroughSupport(session, SLANG_PASS_THROUGH_NVRTC)) && CUDAComputeUtil::canCreateDevice() ? SLANG_OK : SLANG_FAIL; +#else return SLANG_FAIL; +#endif + } + case RendererType::CPU: + { + // As long as we have CPU, then this should work + return spSessionCheckPassThroughSupport(session, SLANG_PASS_THROUGH_GENERIC_C_CPP); } - // Should work ... - return SLANG_OK; + default: break; } + } + // If it's CPU testing we don't need a window or a renderer + if (gOptions.rendererType == RendererType::CPU) + { ShaderCompilerUtil::OutputAndLayout compilationAndLayout; SLANG_RETURN_ON_FAIL(ShaderCompilerUtil::compileWithLayout(session, gOptions.sourcePath, gOptions.compileArgs, gOptions.shaderType, input, compilationAndLayout)); @@ -564,10 +585,27 @@ SLANG_TEST_TOOL_API SlangResult innerMain(Slang::StdWriters* stdWriters, SlangSe } } - return SLANG_OK; } + if (gOptions.rendererType == RendererType::CUDA) + { + ShaderCompilerUtil::OutputAndLayout compilationAndLayout; + SLANG_RETURN_ON_FAIL(ShaderCompilerUtil::compileWithLayout(session, gOptions.sourcePath, gOptions.compileArgs, gOptions.shaderType, input, compilationAndLayout)); + +#if RENDER_TEST_CUDA + + // TODO(JS): + // We don't know how to execute it yet.. + + SLANG_RETURN_ON_FAIL(CUDAComputeUtil::execute(compilationAndLayout)); + + return SLANG_OK; +#else + return SLANG_FAIL; +#endif + } + Slang::RefPtr<Renderer> renderer; { RendererUtil::CreateFunc createFunc = RendererUtil::getCreateFunc(gOptions.rendererType); |
