diff options
| author | Yong He <yonghe@outlook.com> | 2021-03-04 16:25:58 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-04 16:25:58 -0800 |
| commit | a5ac4999b4dea546a7ef824669ab1809224b6448 (patch) | |
| tree | 15bb22eb98a94f7f81489deef55396461501d3dc /examples/shader-object | |
| parent | 13ff0bd345990c0fdfb7b52ebd5339cddb04889e (diff) | |
Refactor `gfx` to surface `CommandBuffer` interface. (#1735)
* Refactor `gfx` to surface `CommandBuffer` interface.
* Fixes.
* Fix code review issues, and make vulkan runnable on devices without VK_EXT_extended_dynamic_states.
* Update solution files
* Move out-of-date examples to examples/experimental
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'examples/shader-object')
| -rw-r--r-- | examples/shader-object/main.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/examples/shader-object/main.cpp b/examples/shader-object/main.cpp index 9b1b4de72..d368cd9aa 100644 --- a/examples/shader-object/main.cpp +++ b/examples/shader-object/main.cpp @@ -136,7 +136,7 @@ int main() // interacting with the graphics API. Slang::ComPtr<gfx::IRenderer> renderer; IRenderer::Desc rendererDesc = {}; - rendererDesc.rendererType = RendererType::CUDA; + rendererDesc.rendererType = RendererType::DirectX11; SLANG_RETURN_ON_FAIL(gfxCreateRenderer(&rendererDesc, renderer.writeRef())); // Now we can load the shader code. @@ -146,7 +146,7 @@ int main() slang::ProgramLayout* slangReflection; SLANG_RETURN_ON_FAIL(loadShaderProgram(renderer, shaderProgram, slangReflection)); - // Create a pipelien state with the loaded shader. + // Create a pipeline state with the loaded shader. gfx::ComputePipelineStateDesc pipelineDesc = {}; pipelineDesc.program = shaderProgram.get(); ComPtr<gfx::IPipelineState> pipelineState; @@ -211,17 +211,26 @@ int main() // We have set up all required parameters in entry-point object, now it is time // to bind the pipeline and root object and launch the kernel. - renderer->beginFrame(); - renderer->setPipelineState(pipelineState); - SLANG_RETURN_ON_FAIL(renderer->bindRootShaderObject(gfx::PipelineType::Compute, rootObject)); - renderer->dispatchCompute(1, 1, 1); - renderer->endFrame(); + { + ICommandQueue::Desc queueDesc = {ICommandQueue::QueueType::Graphics}; + auto queue = renderer->createCommandQueue(queueDesc); + auto commandBuffer = queue->createCommandBuffer(); + auto encoder = commandBuffer->encodeComputeCommands(); + encoder->setPipelineState(pipelineState); + encoder->bindRootShaderObject(rootObject); + encoder->dispatchCompute(1, 1, 1); + encoder->endEncoding(); + commandBuffer->close(); + queue->executeCommandBuffer(commandBuffer); + queue->wait(); + } // Read back the results. - renderer->waitForGpu(); - float* result = (float*)renderer->map(numbersBuffer, gfx::MapFlavor::HostRead); + ComPtr<ISlangBlob> resultBlob; + SLANG_RETURN_ON_FAIL(renderer->readBufferResource( + numbersBuffer, 0, numberCount * sizeof(float), resultBlob.writeRef())); + auto result = reinterpret_cast<const float*>(resultBlob->getBufferPointer()); for (int i = 0; i < numberCount; i++) printf("%f\n", result[i]); - renderer->unmap(numbersBuffer); return SLANG_OK; } |
