diff options
Diffstat (limited to 'examples/heterogeneous-hello-world/main.cpp')
| -rw-r--r-- | examples/heterogeneous-hello-world/main.cpp | 90 |
1 files changed, 46 insertions, 44 deletions
diff --git a/examples/heterogeneous-hello-world/main.cpp b/examples/heterogeneous-hello-world/main.cpp index 51aff0a17..0446ea1a7 100644 --- a/examples/heterogeneous-hello-world/main.cpp +++ b/examples/heterogeneous-hello-world/main.cpp @@ -37,20 +37,22 @@ #include "gfx/d3d11/render-d3d11.h" #include "tools/graphics-app-framework/window.h" #include "../../prelude/slang-cpp-types.h" +#include "source/core/slang-basic.h" + using namespace gfx; // We create global ref pointers to avoid dereferencing values // -RefPtr<gfx::ShaderProgram> gShaderProgram; -RefPtr<gfx::ApplicationContext> gAppContext; +ComPtr<gfx::IShaderProgram> gShaderProgram; +Slang::RefPtr<gfx::ApplicationContext> gAppContext; Slang::ComPtr<gfx::IRenderer> gRenderer; -RefPtr<gfx::BufferResource> gStructuredBuffer; +ComPtr<gfx::IBufferResource> gStructuredBuffer; -RefPtr<gfx::PipelineLayout> gPipelineLayout; -RefPtr<gfx::PipelineState> gPipelineState; -RefPtr<gfx::DescriptorSetLayout> gDescriptorSetLayout; -RefPtr<gfx::DescriptorSet> gDescriptorSet; +ComPtr<gfx::IPipelineLayout> gPipelineLayout; +ComPtr<gfx::IPipelineState> gPipelineState; +ComPtr<gfx::IDescriptorSetLayout> gDescriptorSetLayout; +ComPtr<gfx::IDescriptorSet> gDescriptorSet; // Boilerplate types to help the slan-generated file // @@ -67,7 +69,7 @@ bool executeComputation_0(); extern unsigned char __computeMain[]; extern size_t __computeMainSize; -gfx::ShaderProgram* loadShaderProgram(gfx::IRenderer* renderer, unsigned char computeCode[], size_t computeCodeSize) +gfx::IShaderProgram* loadShaderProgram(gfx::IRenderer* renderer, unsigned char computeCode[], size_t computeCodeSize) { // We extract the begin/end pointers to the output code buffers directly // @@ -79,12 +81,12 @@ gfx::ShaderProgram* loadShaderProgram(gfx::IRenderer* renderer, unsigned char co // Reminder: this section does not involve the Slang API at all. // - gfx::ShaderProgram::KernelDesc kernelDescs[] = + gfx::IShaderProgram::KernelDesc kernelDescs[] = { { gfx::StageType::Compute, computeCode, computeCodeEnd }, }; - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Compute; programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 1; @@ -133,26 +135,26 @@ gfx::IRenderer* createRenderer( return gRenderer; } -gfx::BufferResource* createStructuredBuffer(gfx::IRenderer* renderer, float* initialArray) +gfx::IBufferResource* createStructuredBuffer(gfx::IRenderer* renderer, float* initialArray) { // Create a structured buffer for storing the data for computation // int structuredBufferSize = 4 * sizeof(float); - BufferResource::Desc structuredBufferDesc; + IBufferResource::Desc structuredBufferDesc; structuredBufferDesc.init(structuredBufferSize); - structuredBufferDesc.setDefaults(Resource::Usage::UnorderedAccess); + structuredBufferDesc.setDefaults(IResource::Usage::UnorderedAccess); structuredBufferDesc.elementSize = 4; - structuredBufferDesc.cpuAccessFlags = Resource::AccessFlag::Read; + structuredBufferDesc.cpuAccessFlags = IResource::AccessFlag::Read; gStructuredBuffer = renderer->createBufferResource( - Resource::Usage::UnorderedAccess, + IResource::Usage::UnorderedAccess, structuredBufferDesc, initialArray); return gStructuredBuffer; } -gfx::DescriptorSetLayout* buildDescriptorSetLayout(gfx::IRenderer* renderer) +gfx::IDescriptorSetLayout* buildDescriptorSetLayout(gfx::IRenderer* renderer) { // Our example graphics API usess a "modern" D3D12/Vulkan style // of resource binding, so now we will dive into describing and @@ -160,28 +162,28 @@ gfx::DescriptorSetLayout* buildDescriptorSetLayout(gfx::IRenderer* renderer) // // First, we need to construct a descriptor set *layout*. // - DescriptorSetLayout::SlotRangeDesc slotRanges[] = + IDescriptorSetLayout::SlotRangeDesc slotRanges[] = { - DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::StorageBuffer), + IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::StorageBuffer), }; - DescriptorSetLayout::Desc descriptorSetLayoutDesc; + IDescriptorSetLayout::Desc descriptorSetLayoutDesc; descriptorSetLayoutDesc.slotRangeCount = 1; descriptorSetLayoutDesc.slotRanges = &slotRanges[0]; gDescriptorSetLayout = renderer->createDescriptorSetLayout(descriptorSetLayoutDesc); return gDescriptorSetLayout; } -gfx::PipelineLayout* buildPipeline(gfx::IRenderer* renderer, gfx::DescriptorSetLayout* descriptorSetLayout) +gfx::IPipelineLayout* buildPipeline(gfx::IRenderer* renderer, gfx::IDescriptorSetLayout* descriptorSetLayout) { // Next we will allocate a pipeline layout, which specifies // that we will render with only a single descriptor set bound. // - PipelineLayout::DescriptorSetDesc descriptorSets[] = + IPipelineLayout::DescriptorSetDesc descriptorSets[] = { - PipelineLayout::DescriptorSetDesc(descriptorSetLayout), + IPipelineLayout::DescriptorSetDesc(descriptorSetLayout), }; - PipelineLayout::Desc pipelineLayoutDesc; + IPipelineLayout::Desc pipelineLayoutDesc; pipelineLayoutDesc.renderTargetCount = 1; pipelineLayoutDesc.descriptorSetCount = 1; pipelineLayoutDesc.descriptorSets = &descriptorSets[0]; @@ -190,10 +192,10 @@ gfx::PipelineLayout* buildPipeline(gfx::IRenderer* renderer, gfx::DescriptorSetL return gPipelineLayout; } -gfx::DescriptorSet* buildDescriptorSet( +gfx::IDescriptorSet* buildDescriptorSet( gfx::IRenderer* renderer, - gfx::DescriptorSetLayout* descriptorSetLayout, - gfx::BufferResource* structuredBuffer) + gfx::IDescriptorSetLayout* descriptorSetLayout, + gfx::IBufferResource* structuredBuffer) { // Once we have the descriptor set layout, we can allocate // and fill in a descriptor set to hold our parameters. @@ -204,18 +206,18 @@ gfx::DescriptorSet* buildDescriptorSet( // Once we have the bufferResource created, we can fill in // a descriptor set for creating a structured buffer // - ResourceView::Desc resourceViewDesc; - resourceViewDesc.type = ResourceView::Type::UnorderedAccess; + IResourceView::Desc resourceViewDesc; + resourceViewDesc.type = IResourceView::Type::UnorderedAccess; auto resourceView = renderer->createBufferView(structuredBuffer, resourceViewDesc); gDescriptorSet->setResource(0, 0, resourceView); return gDescriptorSet; } -gfx::PipelineState* buildPipelineState( - gfx::ShaderProgram* shaderProgram, +gfx::IPipelineState* buildPipelineState( + gfx::IShaderProgram* shaderProgram, gfx::IRenderer* renderer, - gfx::PipelineLayout* pipelineLayout) + gfx::IPipelineLayout* pipelineLayout) { // Following the D3D12/Vulkan style of API, we need a pipeline state object // (PSO) to encapsulate the configuration of the overall graphics pipeline. @@ -240,9 +242,9 @@ void printInitialValues(float* initialArray, int length) void dispatchComputation( gfx::IRenderer* gRenderer, - gfx::PipelineState* gPipelineState, - gfx::PipelineLayout* gPipelineLayout, - gfx::DescriptorSet* gDescriptorSet, + gfx::IPipelineState* gPipelineState, + gfx::IPipelineLayout* gPipelineLayout, + gfx::IDescriptorSet* gDescriptorSet, unsigned int gridDimsX, unsigned int gridDimsY, unsigned int gridDimsZ) @@ -256,7 +258,7 @@ void dispatchComputation( void print_output( gfx::IRenderer* renderer, - gfx::BufferResource* structuredBuffer, + gfx::IBufferResource* structuredBuffer, int length) { if (float* outputData = (float*)renderer->map(structuredBuffer, MapFlavor::HostRead)) @@ -301,22 +303,22 @@ gfx_DescriptorSetLayout_0* buildDescriptorSetLayout_0(gfx_Renderer_0* _0) gfx_PipelineLayout_0* buildPipeline_0(gfx_Renderer_0* _0, gfx_DescriptorSetLayout_0* _1) { - return (gfx_PipelineLayout_0*)buildPipeline((gfx::IRenderer*)_0, (gfx::DescriptorSetLayout*)_1); + return (gfx_PipelineLayout_0*)buildPipeline((gfx::IRenderer*)_0, (gfx::IDescriptorSetLayout*)_1); } gfx_DescriptorSet_0* buildDescriptorSet_0(gfx_Renderer_0* _0, gfx_DescriptorSetLayout_0* _1, gfx_BufferResource_0* _2) { return (gfx_DescriptorSet_0*)buildDescriptorSet( (gfx::IRenderer*)_0, - (gfx::DescriptorSetLayout*)_1, - (gfx::BufferResource*)_2); + (gfx::IDescriptorSetLayout*)_1, + (gfx::IBufferResource*)_2); } gfx_PipelineState_0* buildPipelineState_0(gfx_ShaderProgram_0* _0, gfx_Renderer_0* _1, gfx_PipelineLayout_0* _2) { return (gfx_PipelineState_0*)buildPipelineState( - (gfx::ShaderProgram*)_0, (gfx::IRenderer*)_1, - (gfx::PipelineLayout*)_2); + (gfx::IShaderProgram*)_0, (gfx::IRenderer*)_1, + (gfx::IPipelineLayout*)_2); } void printInitialValues_0(FixedArray<float, 4> _0, int32_t _1) @@ -328,9 +330,9 @@ void dispatchComputation_0(gfx_Renderer_0* _0, gfx_PipelineState_0* _1, gfx_Pipe { dispatchComputation( (gfx::IRenderer*)_0, - (gfx::PipelineState*)_1, - (gfx::PipelineLayout*)_2, - (gfx::DescriptorSet*)_3, + (gfx::IPipelineState*)_1, + (gfx::IPipelineLayout*)_2, + (gfx::IDescriptorSet*)_3, gridDimsX, gridDimsY, gridDimsZ); @@ -348,7 +350,7 @@ gfx_BufferResource_0* unconvertBuffer_0(RWStructuredBuffer<float> _0) { void print_output_0(gfx_Renderer_0* _0, gfx_BufferResource_0* _1, int32_t _2) { - print_output((gfx::IRenderer*)_0, (gfx::BufferResource*)_1, _2); + print_output((gfx::IRenderer*)_0, (gfx::IBufferResource*)_1, _2); } // This "inner" main function is used by the platform abstraction |
