diff options
| author | Yong He <yonghe@outlook.com> | 2021-01-14 15:48:54 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-14 15:48:54 -0800 |
| commit | f834f25794cfb746079e92d58c7410b767c57208 (patch) | |
| tree | 583a86d4cb2e446c2c06f9d786996d10647baf84 /examples | |
| parent | ac76997690a39605b2b8fbd63de9cbbbc2af2a73 (diff) | |
COM-ify all slang-gfx interfaces. (#1656)
* COM-ify all slang-gfx interfaces.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/gpu-printing/main.cpp | 39 | ||||
| -rw-r--r-- | examples/hello-world/main.cpp | 50 | ||||
| -rw-r--r-- | examples/heterogeneous-hello-world/main.cpp | 90 | ||||
| -rw-r--r-- | examples/model-viewer/main.cpp | 67 | ||||
| -rw-r--r-- | examples/shader-toy/main.cpp | 56 |
5 files changed, 153 insertions, 149 deletions
diff --git a/examples/gpu-printing/main.cpp b/examples/gpu-printing/main.cpp index 75c083a33..03b20b969 100644 --- a/examples/gpu-printing/main.cpp +++ b/examples/gpu-printing/main.cpp @@ -8,6 +8,7 @@ using Slang::ComPtr; #include "gfx/render.h" #include "gfx/d3d11/render-d3d11.h" #include "tools/graphics-app-framework/window.h" +#include "source/core/slang-basic.h" using namespace gfx; #include <string> @@ -69,17 +70,17 @@ ComPtr<gfx::IRenderer> gRenderer; ComPtr<slang::ISession> gSlangSession; ComPtr<slang::IModule> gSlangModule; -RefPtr<gfx::ShaderProgram> gProgram; +ComPtr<gfx::IShaderProgram> gProgram; -RefPtr<gfx::PipelineLayout> gPipelineLayout; -RefPtr<gfx::PipelineState> gPipelineState; -RefPtr<gfx::DescriptorSet> gDescriptorSet; +ComPtr<gfx::IPipelineLayout> gPipelineLayout; +ComPtr<gfx::IPipelineState> gPipelineState; +ComPtr<gfx::IDescriptorSet> gDescriptorSet; -Dictionary<int, std::string> gHashedStrings; +Slang::Dictionary<int, std::string> gHashedStrings; GPUPrinting gGPUPrinting; -RefPtr<gfx::ShaderProgram> loadComputeProgram(slang::IModule* slangModule, char const* entryPointName) +ComPtr<gfx::IShaderProgram> loadComputeProgram(slang::IModule* slangModule, char const* entryPointName) { ComPtr<slang::IEntryPoint> entryPoint; slangModule->findEntryPointByName(entryPointName, entryPoint.writeRef()); @@ -95,12 +96,12 @@ RefPtr<gfx::ShaderProgram> loadComputeProgram(slang::IModule* slangModule, char char const* code = (char const*) codeBlob->getBufferPointer(); char const* codeEnd = code + codeBlob->getBufferSize(); - gfx::ShaderProgram::KernelDesc kernelDescs[] = + gfx::IShaderProgram::KernelDesc kernelDescs[] = { { gfx::StageType::Compute, code, codeEnd }, }; - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Compute; programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 2; @@ -133,21 +134,21 @@ Result execute() gProgram = loadComputeProgram(gSlangModule, "computeMain"); if(!gProgram) return SLANG_FAIL; - 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]; auto descriptorSetLayout = gRenderer->createDescriptorSetLayout(descriptorSetLayoutDesc); if(!descriptorSetLayout) return SLANG_FAIL; - 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]; @@ -176,14 +177,14 @@ Result execute() size_t printBufferSize = 4 * 1024; // use a small-ish (4KB) buffer for print output - BufferResource::Desc printBufferDesc; + IBufferResource::Desc printBufferDesc; printBufferDesc.init(printBufferSize); printBufferDesc.elementSize = sizeof(uint32_t); - printBufferDesc.cpuAccessFlags = Resource::AccessFlag::Read; // | Resource::AccessFlag::Write; - auto printBuffer = gRenderer->createBufferResource(Resource::Usage::UnorderedAccess, printBufferDesc); + printBufferDesc.cpuAccessFlags = IResource::AccessFlag::Read; // | Resource::AccessFlag::Write; + auto printBuffer = gRenderer->createBufferResource(IResource::Usage::UnorderedAccess, printBufferDesc); - ResourceView::Desc printBufferViewDesc; - printBufferViewDesc.type = ResourceView::Type::UnorderedAccess; + IResourceView::Desc printBufferViewDesc; + printBufferViewDesc.type = IResourceView::Type::UnorderedAccess; auto printBufferView = gRenderer->createBufferView(printBuffer, printBufferViewDesc); // TODO: need to copy a zero into the start of the print buffer! diff --git a/examples/hello-world/main.cpp b/examples/hello-world/main.cpp index da35f3f0a..77ca8a978 100644 --- a/examples/hello-world/main.cpp +++ b/examples/hello-world/main.cpp @@ -36,8 +36,10 @@ #include "gfx/d3d11/render-d3d11.h" #include "tools/graphics-app-framework/window.h" #include "slang-com-ptr.h" +#include "source/core/slang-basic.h" using namespace gfx; +using namespace Slang; // For the purposes of a small example, we will define the vertex data for a // single triangle directly in the source file. It should be easy to extend @@ -72,7 +74,7 @@ struct HelloWorld // Slang API. This function is representative of code that a user // might write to integrate Slang into their renderer/engine. // -RefPtr<gfx::ShaderProgram> loadShaderProgram(gfx::IRenderer* renderer) +ComPtr<gfx::IShaderProgram> loadShaderProgram(gfx::IRenderer* renderer) { // First, we need to create a "session" for interacting with the Slang // compiler. This scopes all of our application's interactions @@ -183,13 +185,13 @@ RefPtr<gfx::ShaderProgram> loadShaderProgram(gfx::IRenderer* renderer) // Reminder: this section does not involve the Slang API at all. // - gfx::ShaderProgram::KernelDesc kernelDescs[] = + gfx::IShaderProgram::KernelDesc kernelDescs[] = { { gfx::StageType::Vertex, vertexCode, vertexCodeEnd }, { gfx::StageType::Fragment, fragmentCode, fragmentCodeEnd }, }; - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Graphics; programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 2; @@ -230,19 +232,19 @@ int gWindowHeight = 768; gfx::ApplicationContext* gAppContext; gfx::Window* gWindow; Slang::ComPtr<gfx::IRenderer> gRenderer; -RefPtr<gfx::BufferResource> gConstantBuffer; +ComPtr<gfx::IBufferResource> gConstantBuffer; -RefPtr<gfx::PipelineLayout> gPipelineLayout; -RefPtr<gfx::PipelineState> gPipelineState; -RefPtr<gfx::DescriptorSet> gDescriptorSet; +ComPtr<gfx::IPipelineLayout> gPipelineLayout; +ComPtr<gfx::IPipelineState> gPipelineState; +ComPtr<gfx::IDescriptorSet> gDescriptorSet; -RefPtr<gfx::BufferResource> gVertexBuffer; +ComPtr<gfx::IBufferResource> gVertexBuffer; // Now that we've covered the function that actually loads and // compiles our Slang shade code, we can go through the rest // of the application code without as much commentary. // -Result initialize() +Slang::Result initialize() { // Create a window for our application to render into. // @@ -264,7 +266,7 @@ Result initialize() rendererDesc.width = gWindowWidth; rendererDesc.height = gWindowHeight; { - Result res = gRenderer->initialize(rendererDesc, getPlatformWindowHandle(gWindow)); + gfx::Result res = gRenderer->initialize(rendererDesc, getPlatformWindowHandle(gWindow)); if(SLANG_FAILED(res)) return res; } @@ -278,13 +280,13 @@ Result initialize() // int constantBufferSize = 16 * sizeof(float); - BufferResource::Desc constantBufferDesc; + IBufferResource::Desc constantBufferDesc; constantBufferDesc.init(constantBufferSize); - constantBufferDesc.setDefaults(Resource::Usage::ConstantBuffer); - constantBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write; + constantBufferDesc.setDefaults(IResource::Usage::ConstantBuffer); + constantBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; gConstantBuffer = gRenderer->createBufferResource( - Resource::Usage::ConstantBuffer, + IResource::Usage::ConstantBuffer, constantBufferDesc); if(!gConstantBuffer) return SLANG_FAIL; @@ -305,11 +307,11 @@ Result initialize() // Next we allocate a vertex buffer for our pre-initialized // vertex data. // - BufferResource::Desc vertexBufferDesc; + IBufferResource::Desc vertexBufferDesc; vertexBufferDesc.init(kVertexCount * sizeof(Vertex)); - vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer); + vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); gVertexBuffer = gRenderer->createBufferResource( - Resource::Usage::VertexBuffer, + IResource::Usage::VertexBuffer, vertexBufferDesc, &kVertexData[0]); if(!gVertexBuffer) return SLANG_FAIL; @@ -317,7 +319,7 @@ Result initialize() // Now we will use our `loadShaderProgram` function to load // the code from `shaders.slang` into the graphics API. // - RefPtr<ShaderProgram> shaderProgram = loadShaderProgram(gRenderer); + ComPtr<IShaderProgram> shaderProgram = loadShaderProgram(gRenderer); if(!shaderProgram) return SLANG_FAIL; // Our example graphics API usess a "modern" D3D12/Vulkan style @@ -326,11 +328,11 @@ Result initialize() // // First, we need to construct a descriptor set *layout*. // - DescriptorSetLayout::SlotRangeDesc slotRanges[] = + IDescriptorSetLayout::SlotRangeDesc slotRanges[] = { - DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer), + IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer), }; - DescriptorSetLayout::Desc descriptorSetLayoutDesc; + IDescriptorSetLayout::Desc descriptorSetLayoutDesc; descriptorSetLayoutDesc.slotRangeCount = 1; descriptorSetLayoutDesc.slotRanges = &slotRanges[0]; auto descriptorSetLayout = gRenderer->createDescriptorSetLayout(descriptorSetLayoutDesc); @@ -340,11 +342,11 @@ Result initialize() // 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]; 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 diff --git a/examples/model-viewer/main.cpp b/examples/model-viewer/main.cpp index 2dc7df3b5..387ec7293 100644 --- a/examples/model-viewer/main.cpp +++ b/examples/model-viewer/main.cpp @@ -23,7 +23,8 @@ #include "graphics-app-framework/window.h" #include "graphics-app-framework/gui.h" using namespace gfx; - +using Slang::RefObject; +using Slang::RefPtr; // We will use a few utilities from the C++ standard library, // just to keep the code short. Note that the Slang API does // not use or require any C++ standard library features. @@ -382,7 +383,7 @@ struct ParameterBlockLayout : RefObject // API-specific layout information computes from `slangTypelayout`. // - RefPtr<gfx::DescriptorSetLayout> descriptorSetLayout; + ComPtr<gfx::IDescriptorSetLayout> descriptorSetLayout; }; // // A parameter block layout can be computed for any `struct` type @@ -423,7 +424,7 @@ RefPtr<ParameterBlockLayout> getParameterBlockLayout( // create a graphics-API-level descriptor-set layout that // is compatible with the original declaration. // - std::vector<gfx::DescriptorSetLayout::SlotRangeDesc> slotRanges; + std::vector<gfx::IDescriptorSetLayout::SlotRangeDesc> slotRanges; // If the type has any ordinary data, then the descriptor set // will need a constant buffer to be the first thing it stores. @@ -438,7 +439,7 @@ RefPtr<ParameterBlockLayout> getParameterBlockLayout( if(primaryConstantBufferSize) { slotRanges.push_back( - gfx::DescriptorSetLayout::SlotRangeDesc( + gfx::IDescriptorSetLayout::SlotRangeDesc( gfx::DescriptorSlotType::UniformBuffer)); } @@ -453,7 +454,7 @@ RefPtr<ParameterBlockLayout> getParameterBlockLayout( // Now that we've collected the graphics-API level binding // information, we can construct a graphics API descriptor set // layout. - gfx::DescriptorSetLayout::Desc descriptorSetLayoutDesc; + gfx::IDescriptorSetLayout::Desc descriptorSetLayoutDesc; descriptorSetLayoutDesc.slotRangeCount = slotRanges.size(); descriptorSetLayoutDesc.slotRanges = slotRanges.data(); auto descriptorSetLayout = renderer->createDescriptorSetLayout(descriptorSetLayoutDesc); @@ -552,7 +553,7 @@ struct ParameterBlockEncoder // The underlying descriptor set being filled in. // - gfx::DescriptorSet* descriptorSet = nullptr; + gfx::IDescriptorSet* descriptorSet = nullptr; // The Slang type information for the part of the // block that we are filling in. This might be the @@ -648,11 +649,11 @@ struct ParameterBlock : RefObject // The (optional) constant buffer that holds the values // for any ordinay fields. This will be null if // `layout->primaryConstantBufferSize` is zero. - RefPtr<BufferResource> primaryConstantBuffer; + ComPtr<IBufferResource> primaryConstantBuffer; // The graphics-API descriptor set that provides storage // for any resource fields. - RefPtr<gfx::DescriptorSet> descriptorSet; + ComPtr<gfx::IDescriptorSet> descriptorSet; ParameterBlockEncoder beginEncoding(); }; @@ -674,15 +675,15 @@ RefPtr<ParameterBlock> allocateParameterBlockImpl( // If the parameter block has any ordinary data, then it requires // a "primary" constant buffer to hold that data. // - RefPtr<gfx::BufferResource> primaryConstantBuffer = nullptr; + ComPtr<gfx::IBufferResource> primaryConstantBuffer = nullptr; if(auto primaryConstantBufferSize = layout->primaryConstantBufferSize) { - gfx::BufferResource::Desc bufferDesc; + gfx::IBufferResource::Desc bufferDesc; bufferDesc.init(primaryConstantBufferSize); - bufferDesc.setDefaults(gfx::Resource::Usage::ConstantBuffer); - bufferDesc.cpuAccessFlags = gfx::Resource::AccessFlag::Write; + bufferDesc.setDefaults(gfx::IResource::Usage::ConstantBuffer); + bufferDesc.cpuAccessFlags = gfx::IResource::AccessFlag::Write; primaryConstantBuffer = renderer->createBufferResource( - gfx::Resource::Usage::ConstantBuffer, + gfx::IResource::Usage::ConstantBuffer, bufferDesc); // The primary constant buffer will always be the first thing @@ -774,7 +775,7 @@ struct Effect : RefObject // Additional state corresponding to the data needed // to create a graphics-API pipeline state object. - RefPtr<gfx::InputLayout> inputLayout; + ComPtr<gfx::IInputLayout> inputLayout; Int renderTargetCount; }; @@ -791,8 +792,8 @@ struct EffectVariant : RefObject // that need to be bound in order to use this // effect. // - RefPtr<gfx::PipelineLayout> pipelineLayout; - RefPtr<gfx::PipelineState> pipelineState; + ComPtr<gfx::IPipelineLayout> pipelineLayout; + ComPtr<gfx::IPipelineState> pipelineState; }; // // A specialized variant is created based on a base effect @@ -839,13 +840,13 @@ RefPtr<EffectVariant> createEffectVaraint( // be determined based on the descriptor-set layouts // already cached in the given parameter block layouts. // - std::vector<PipelineLayout::DescriptorSetDesc> descriptorSets; + std::vector<IPipelineLayout::DescriptorSetDesc> descriptorSets; for(UInt pp = 0; pp < parameterBlockCount; ++pp) { descriptorSets.emplace_back( parameterBlockLayouts[pp]->descriptorSetLayout); } - PipelineLayout::Desc pipelineLayoutDesc; + IPipelineLayout::Desc pipelineLayoutDesc; pipelineLayoutDesc.renderTargetCount = 1; pipelineLayoutDesc.descriptorSetCount = descriptorSets.size(); pipelineLayoutDesc.descriptorSets = descriptorSets.data(); @@ -927,7 +928,7 @@ RefPtr<EffectVariant> createEffectVaraint( // to the graphics APIs loading logic. // std::vector<ISlangBlob*> kernelBlobs; - std::vector<gfx::ShaderProgram::KernelDesc> kernelDescs; + std::vector<gfx::IShaderProgram::KernelDesc> kernelDescs; for(int ii = 0; ii < entryPointCount; ++ii) { auto entryPoint = program->entryPoints[ii]; @@ -937,7 +938,7 @@ RefPtr<EffectVariant> createEffectVaraint( kernelBlobs.push_back(blob); - ShaderProgram::KernelDesc kernelDesc; + IShaderProgram::KernelDesc kernelDesc; char const* codeBegin = (char const*) blob->getBufferPointer(); char const* codeEnd = codeBegin + blob->getBufferSize(); @@ -960,7 +961,7 @@ RefPtr<EffectVariant> createEffectVaraint( spDestroyCompileRequest(slangRequest); // We use the graphics API to load a program into the GPU - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Graphics; programDesc.kernels = kernelDescs.data(); programDesc.kernelCount = kernelDescs.size(); @@ -1020,11 +1021,11 @@ struct ShaderCache : RefObject Slang::HashCode getHashCode() const { - auto hash = ::getHashCode(effect); - hash = combineHash(hash, ::getHashCode(parameterBlockCount)); + auto hash = Slang::getHashCode(effect); + hash = Slang::combineHash(hash, Slang::getHashCode(parameterBlockCount)); for( UInt ii = 0; ii < parameterBlockCount; ++ii ) { - hash = combineHash(hash, ::getHashCode(parameterBlockLayouts[ii])); + hash = Slang::combineHash(hash, Slang::getHashCode(parameterBlockLayouts[ii])); } return hash; } @@ -1033,7 +1034,7 @@ struct ShaderCache : RefObject // The shader cache is mostly just a dictionary mapping // variant keys to the associated variant, generated on-demand. // - Dictionary<VariantKey, RefPtr<EffectVariant> > variants; + Slang::Dictionary<VariantKey, RefPtr<EffectVariant> > variants; // Getting a variant is just a matter of looking for an // existing entry in the dictionary, and creating one @@ -1372,8 +1373,8 @@ struct Model : RefObject { typedef ModelLoader::Vertex Vertex; - RefPtr<BufferResource> vertexBuffer; - RefPtr<BufferResource> indexBuffer; + ComPtr<IBufferResource> vertexBuffer; + ComPtr<IBufferResource> indexBuffer; PrimitiveTopology primitiveTopology; int vertexCount; int indexCount; @@ -1911,7 +1912,7 @@ struct ModelViewer { Window* gWindow; Slang::ComPtr<gfx::IRenderer> gRenderer; -RefPtr<gfx::ResourceView> gDepthTarget; +ComPtr<gfx::IResourceView> gDepthTarget; // We keep a pointer to the one effect we are using (for a forward // rendering pass), plus the parameter-block layouts for our `PerView` @@ -2069,16 +2070,16 @@ Result initialize() // Because we are rendering more than a single triangle this time, we // require a depth buffer to resolve visibility. // - TextureResource::Desc depthBufferDesc = gRenderer->getSwapChainTextureDesc(); + ITextureResource::Desc depthBufferDesc = gRenderer->getSwapChainTextureDesc(); depthBufferDesc.format = Format::D_Float32; - depthBufferDesc.setDefaults(Resource::Usage::DepthWrite); + depthBufferDesc.setDefaults(IResource::Usage::DepthWrite); auto depthTexture = gRenderer->createTextureResource( - Resource::Usage::DepthWrite, + IResource::Usage::DepthWrite, depthBufferDesc); if(!depthTexture) return SLANG_FAIL; - ResourceView::Desc textureViewDesc; - textureViewDesc.type = ResourceView::Type::DepthStencil; + IResourceView::Desc textureViewDesc; + textureViewDesc.type = IResourceView::Type::DepthStencil; auto depthTarget = gRenderer->createTextureView(depthTexture, textureViewDesc); if (!depthTarget) return SLANG_FAIL; diff --git a/examples/shader-toy/main.cpp b/examples/shader-toy/main.cpp index 89a40b794..e2efc325c 100644 --- a/examples/shader-toy/main.cpp +++ b/examples/shader-toy/main.cpp @@ -22,6 +22,8 @@ using Slang::ComPtr; #include "gfx/render.h" #include "gfx/d3d11/render-d3d11.h" #include "tools/graphics-app-framework/window.h" +#include "source/core/slang-basic.h" + using namespace gfx; // In order to display a shader toy effect using rasterization-based shader @@ -88,7 +90,7 @@ void diagnoseIfNeeded(slang::IBlob* diagnosticsBlob) // The main interesting part of the host application code is where we // load, compile, inspect, and compose the Slang shader code. // -Result loadShaderProgram(gfx::IRenderer* renderer, RefPtr<gfx::ShaderProgram>& outShaderProgram) +Result loadShaderProgram(gfx::IRenderer* renderer, ComPtr<gfx::IShaderProgram>& outShaderProgram) { // The first step in interacting with the Slang API is to create a "global session," // which represents an instance of the Slang API loaded from the library. @@ -192,7 +194,7 @@ Result loadShaderProgram(gfx::IRenderer* renderer, RefPtr<gfx::ShaderProgram>& o // other pieces, and that is what we are going to do with our module // and entry points. // - List<slang::IComponentType*> componentTypes; + Slang::List<slang::IComponentType*> componentTypes; componentTypes.add(module); // Later on when we go to extract compiled kernel code for our vertex @@ -266,7 +268,7 @@ Result loadShaderProgram(gfx::IRenderer* renderer, RefPtr<gfx::ShaderProgram>& o // Because a shader program could have zero or more specialization parameters, // we need to build up an array of specialization arguments. // - List<slang::SpecializationArg> specializationArgs; + Slang::List<slang::SpecializationArg> specializationArgs; { // In our case, we only have a single specialization argument we plan @@ -344,13 +346,13 @@ Result loadShaderProgram(gfx::IRenderer* renderer, RefPtr<gfx::ShaderProgram>& o char const* fragmentCode = (char const*) fragmentShaderBlob->getBufferPointer(); char const* fragmentCodeEnd = fragmentCode + fragmentShaderBlob->getBufferSize(); - gfx::ShaderProgram::KernelDesc kernelDescs[] = + gfx::IShaderProgram::KernelDesc kernelDescs[] = { { gfx::StageType::Vertex, vertexCode, vertexCodeEnd }, { gfx::StageType::Fragment, fragmentCode, fragmentCodeEnd }, }; - gfx::ShaderProgram::Desc programDesc; + gfx::IShaderProgram::Desc programDesc; programDesc.pipelineType = gfx::PipelineType::Graphics; programDesc.kernels = &kernelDescs[0]; programDesc.kernelCount = 2; @@ -367,13 +369,11 @@ int gWindowHeight = 768; gfx::ApplicationContext* gAppContext; gfx::Window* gWindow; Slang::ComPtr<gfx::IRenderer> gRenderer; -RefPtr<gfx::BufferResource> gConstantBuffer; - -RefPtr<gfx::PipelineLayout> gPipelineLayout; -RefPtr<gfx::PipelineState> gPipelineState; -RefPtr<gfx::DescriptorSet> gDescriptorSet; - -RefPtr<gfx::BufferResource> gVertexBuffer; +ComPtr<gfx::IBufferResource> gConstantBuffer; +ComPtr<gfx::IPipelineLayout> gPipelineLayout; +ComPtr<gfx::IPipelineState> gPipelineState; +ComPtr<gfx::IDescriptorSet> gDescriptorSet; +ComPtr<gfx::IBufferResource> gVertexBuffer; Result initialize() { @@ -396,13 +396,13 @@ Result initialize() int constantBufferSize = sizeof(Uniforms); - BufferResource::Desc constantBufferDesc; + IBufferResource::Desc constantBufferDesc; constantBufferDesc.init(constantBufferSize); - constantBufferDesc.setDefaults(Resource::Usage::ConstantBuffer); - constantBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write; + constantBufferDesc.setDefaults(IResource::Usage::ConstantBuffer); + constantBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write; gConstantBuffer = gRenderer->createBufferResource( - Resource::Usage::ConstantBuffer, + IResource::Usage::ConstantBuffer, constantBufferDesc); if(!gConstantBuffer) return SLANG_FAIL; @@ -414,33 +414,33 @@ Result initialize() SLANG_COUNT_OF(inputElements)); if(!inputLayout) return SLANG_FAIL; - BufferResource::Desc vertexBufferDesc; + IBufferResource::Desc vertexBufferDesc; vertexBufferDesc.init(FullScreenTriangle::kVertexCount * sizeof(FullScreenTriangle::Vertex)); - vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer); + vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer); gVertexBuffer = gRenderer->createBufferResource( - Resource::Usage::VertexBuffer, + IResource::Usage::VertexBuffer, vertexBufferDesc, &FullScreenTriangle::kVertices[0]); if(!gVertexBuffer) return SLANG_FAIL; - RefPtr<ShaderProgram> shaderProgram; + ComPtr<IShaderProgram> shaderProgram; SLANG_RETURN_ON_FAIL(loadShaderProgram(gRenderer, shaderProgram)); - DescriptorSetLayout::SlotRangeDesc slotRanges[] = + IDescriptorSetLayout::SlotRangeDesc slotRanges[] = { - DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer), + IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer), }; - DescriptorSetLayout::Desc descriptorSetLayoutDesc; + IDescriptorSetLayout::Desc descriptorSetLayoutDesc; descriptorSetLayoutDesc.slotRangeCount = 1; descriptorSetLayoutDesc.slotRanges = &slotRanges[0]; auto descriptorSetLayout = gRenderer->createDescriptorSetLayout(descriptorSetLayoutDesc); if(!descriptorSetLayout) return SLANG_FAIL; - 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]; @@ -526,9 +526,7 @@ void renderFrame() gRenderer->presentFrame(); } -void finalize() -{ -} +void finalize() { destroyWindow(gWindow); } void handleEvent(Event const& event) { |
