diff options
| author | David Siher <32305650+dsiher@users.noreply.github.com> | 2021-09-14 12:59:55 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-14 09:59:55 -0700 |
| commit | 502aa3812a82cf0d091cff0c67804e4ee448ac78 (patch) | |
| tree | 8ac8def3a30a6531cee7f6b0380d8929811fade5 /source | |
| parent | d9d42879c4b6c0202732897ec60a355ccc91f243 (diff) | |
Bring heterogeneous-hello-world back up to date. (#1935)
* Bring heterogeneous-hello-world back up to date.
* Reintroduced heterogeneous-hello-world into the premake
* No longer uses compiled bytecode for entry point, instead a loadModule
call is hardocoded with the slang file name.
* Entry point is, similarly, hardcoded for now.
* Added a bypass to slang-legalize-types for an unneeded GPUForeach check
* Run premake and change to relative path
* Removed experimental and added README
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-ast-stmt.h | 2 | ||||
| -rw-r--r-- | source/slang/slang-check-stmt.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-emit-cpp.cpp | 20 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-types.cpp | 3 | ||||
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-parser.cpp | 2 |
6 files changed, 17 insertions, 16 deletions
diff --git a/source/slang/slang-ast-stmt.h b/source/slang/slang-ast-stmt.h index 20f9e270e..2edc844c6 100644 --- a/source/slang/slang-ast-stmt.h +++ b/source/slang/slang-ast-stmt.h @@ -125,7 +125,7 @@ class GpuForeachStmt : public ScopeStmt { SLANG_AST_CLASS(GpuForeachStmt) - Expr* renderer = nullptr; + Expr* device = nullptr; Expr* gridDims = nullptr; VarDecl* dispatchThreadID = nullptr; Expr* kernelCall = nullptr; diff --git a/source/slang/slang-check-stmt.cpp b/source/slang/slang-check-stmt.cpp index 9a5aee15c..6f8ed9ff5 100644 --- a/source/slang/slang-check-stmt.cpp +++ b/source/slang/slang-check-stmt.cpp @@ -290,7 +290,7 @@ namespace Slang void SemanticsStmtVisitor::visitGpuForeachStmt(GpuForeachStmt*stmt) { - stmt->renderer = CheckExpr(stmt->renderer); + stmt->device = CheckExpr(stmt->device); stmt->gridDims = CheckExpr(stmt->gridDims); ensureDeclBase(stmt->dispatchThreadID, DeclCheckState::Checked); WithOuterStmt subContext(this, stmt); diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp index 60b86b827..f71406261 100644 --- a/source/slang/slang-emit-cpp.cpp +++ b/source/slang/slang-emit-cpp.cpp @@ -2710,22 +2710,20 @@ void CPPSourceEmitter::emitModuleImpl(IRModule* module, DiagnosticSink* sink) // Emit a wrapper function for calling the shader blob m_writer->emit("void "); m_writer->emit(entryPointName); - m_writer->emit("_wrapper(gfx_Renderer_0* renderer, Vector<uint32_t, 3> gridDims, \n"); + m_writer->emit("_wrapper(gfx_Device_0* device, Vector<uint32_t, 3> gridDims, \n"); m_writer->emit("\tRWStructuredBuffer<float> buffer)\n{"); - m_writer->emit("\n\tgfx_ShaderProgram_0* shaderProgram = loadShaderProgram_0(renderer, __"); + /* m_writer->emit("\n\tgfx_ShaderProgram_0* shaderProgram = loadShaderProgram_0(device, __"); m_writer->emit(entryPointName); m_writer->emit(", __"); m_writer->emit(entryPointName); - m_writer->emit("Size);"); - m_writer->emit("\n\tgfx_DescriptorSetLayout_0* setLayout = buildDescriptorSetLayout_0(renderer);"); - m_writer->emit("\n\tgfx_PipelineLayout_0* pipelineLayout = buildPipeline_0(renderer, setLayout);"); - m_writer->emit("\n\tgfx_DescriptorSet_0* descriptorSet = "); - m_writer->emit("buildDescriptorSet_0(renderer, setLayout, unconvertBuffer_0(buffer));"); + m_writer->emit("Size);");*/ + m_writer->emit("\n\tgfx_ShaderProgram_0* shaderProgram = loadShaderProgram_0(device);"); + m_writer->emit("\n\tgfx_TransientResourceHeap_0* transientHeap = buildTransientHeap_0(device);"); m_writer->emit("\n\tgfx_PipelineState_0* pipelineState = "); - m_writer->emit("buildPipelineState_0(shaderProgram, renderer, pipelineLayout);"); - - m_writer->emit("\n\tdispatchComputation_0(renderer, pipelineState, pipelineLayout, "); - m_writer->emit("descriptorSet, gridDims.x, gridDims.y, gridDims.z);"); + m_writer->emit("buildPipelineState_0(device, shaderProgram);"); + m_writer->emit("\n\tgfx_ResourceView_0* bufferView = createBufferView_0(device, unconvertBuffer_0(buffer));"); + m_writer->emit("\n\tdispatchComputation_0(device, transientHeap, pipelineState, "); + m_writer->emit("bufferView, gridDims.x, gridDims.y, gridDims.z);"); m_writer->emit("\n}\n"); } } diff --git a/source/slang/slang-ir-legalize-types.cpp b/source/slang/slang-ir-legalize-types.cpp index d88166f83..416df6c77 100644 --- a/source/slang/slang-ir-legalize-types.cpp +++ b/source/slang/slang-ir-legalize-types.cpp @@ -1668,6 +1668,9 @@ static LegalVal legalizeInst( return legalizeConstruct(context, type); case kIROp_undefined: return LegalVal(); + case kIROp_GpuForeach: + // This case should only happen when compiling for a target that does not support GpuForeach + return LegalVal(); default: // TODO: produce a user-visible diagnostic here SLANG_UNEXPECTED("non-simple operand(s)!"); diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index c1738887d..cde9fcc70 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -4345,13 +4345,13 @@ struct StmtLoweringVisitor : StmtVisitor<StmtLoweringVisitor> auto builder = getBuilder(); startBlockIfNeeded(stmt); - auto renderer = getSimpleVal(context, lowerRValueExpr(context, stmt->renderer)); + auto device = getSimpleVal(context, lowerRValueExpr(context, stmt->device)); auto gridDims = getSimpleVal(context, lowerRValueExpr(context, stmt->gridDims)); List<IRInst*> irArgs; if (auto callExpr = as<InvokeExpr>(stmt->kernelCall)) { - irArgs.add(renderer); + irArgs.add(device); irArgs.add(gridDims); auto fref = getSimpleVal(context, lowerRValueExpr(context, callExpr->functionExpr)); irArgs.add(fref); diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index 7bb933b39..d9bbaaace 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -3745,7 +3745,7 @@ namespace Slang parser->FillPosition(stmt); parser->ReadToken("__GPU_FOREACH"); parser->ReadToken(TokenType::LParent); - stmt->renderer = parser->ParseArgExpr(); + stmt->device = parser->ParseArgExpr(); parser->ReadToken(TokenType::Comma); stmt->gridDims = parser->ParseArgExpr(); |
