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 /tools/gfx/vulkan/render-vk.cpp | |
| parent | ac76997690a39605b2b8fbd63de9cbbbc2af2a73 (diff) | |
COM-ify all slang-gfx interfaces. (#1656)
* COM-ify all slang-gfx interfaces.
Diffstat (limited to 'tools/gfx/vulkan/render-vk.cpp')
| -rw-r--r-- | tools/gfx/vulkan/render-vk.cpp | 300 |
1 files changed, 182 insertions, 118 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp index 3cd10902b..c2a1e36bf 100644 --- a/tools/gfx/vulkan/render-vk.cpp +++ b/tools/gfx/vulkan/render-vk.cpp @@ -2,10 +2,10 @@ #include "render-vk.h" //WORKING:#include "options.h" -#include "../render.h" +#include "../renderer-shared.h" #include "../render-graphics-common.h" -#include "core/slang-smart-pointer.h" +#include "core/slang-basic.h" #include "vk-api.h" #include "vk-util.h" @@ -43,84 +43,80 @@ public: // Renderer implementation virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize(const Desc& desc, void* inWindowHandle) override; - virtual SLANG_NO_THROW const List<String>& SLANG_MCALL getFeatures() override - { - return m_features; - } virtual SLANG_NO_THROW void SLANG_MCALL setClearColor(const float color[4]) override; virtual SLANG_NO_THROW void SLANG_MCALL clearFrame() override; virtual SLANG_NO_THROW void SLANG_MCALL presentFrame() override; virtual SLANG_NO_THROW TextureResource::Desc SLANG_MCALL getSwapChainTextureDesc() override; virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource( - Resource::Usage initialUsage, - const TextureResource::Desc& desc, - const TextureResource::Data* initData, - TextureResource** outResource) override; + IResource::Usage initialUsage, + const ITextureResource::Desc& desc, + const ITextureResource::Data* initData, + ITextureResource** outResource) override; virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource( - Resource::Usage initialUsage, - const BufferResource::Desc& desc, + IResource::Usage initialUsage, + const IBufferResource::Desc& desc, const void* initData, - BufferResource** outResource) override; + IBufferResource** outResource) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) override; + createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override; virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView( - TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) override; + ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) override; virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView( - BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) override; + IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) override; virtual SLANG_NO_THROW Result SLANG_MCALL createInputLayout( const InputElementDesc* inputElements, UInt inputElementCount, - InputLayout** outLayout) override; + IInputLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL createDescriptorSetLayout( - const DescriptorSetLayout::Desc& desc, - DescriptorSetLayout** outLayout) override; + const IDescriptorSetLayout::Desc& desc, + IDescriptorSetLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) override; + createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) override; + createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet** outDescriptorSet) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) override; + createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) override; virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState( const GraphicsPipelineStateDesc& desc, - PipelineState** outState) override; + IPipelineState** outState) override; virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState( const ComputePipelineStateDesc& desc, - PipelineState** outState) override; + IPipelineState** outState) override; virtual SLANG_NO_THROW SlangResult SLANG_MCALL captureScreenSurface(Surface& surface) override; - virtual SLANG_NO_THROW void* SLANG_MCALL map(BufferResource* buffer, MapFlavor flavor) override; - virtual SLANG_NO_THROW void SLANG_MCALL unmap(BufferResource* buffer) override; + virtual SLANG_NO_THROW void* SLANG_MCALL map(IBufferResource* buffer, MapFlavor flavor) override; + virtual SLANG_NO_THROW void SLANG_MCALL unmap(IBufferResource* buffer) override; virtual SLANG_NO_THROW void SLANG_MCALL setPrimitiveTopology(PrimitiveTopology topology) override; virtual SLANG_NO_THROW void SLANG_MCALL setDescriptorSet( PipelineType pipelineType, - PipelineLayout* layout, + IPipelineLayout* layout, UInt index, - DescriptorSet* descriptorSet) override; + IDescriptorSet* descriptorSet) override; virtual SLANG_NO_THROW void SLANG_MCALL setVertexBuffers( UInt startSlot, UInt slotCount, - BufferResource* const* buffers, + IBufferResource* const* buffers, const UInt* strides, const UInt* offsets) override; virtual SLANG_NO_THROW void SLANG_MCALL - setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) override; + setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) override; virtual SLANG_NO_THROW void SLANG_MCALL - setDepthStencilTarget(ResourceView* depthStencilView) override; + setDepthStencilTarget(IResourceView* depthStencilView) override; virtual SLANG_NO_THROW void SLANG_MCALL setViewports(UInt count, Viewport const* viewports) override; virtual SLANG_NO_THROW void SLANG_MCALL setScissorRects(UInt count, ScissorRect const* rects) override; virtual SLANG_NO_THROW void SLANG_MCALL - setPipelineState(PipelineType pipelineType, PipelineState* state) override; + setPipelineState(PipelineType pipelineType, IPipelineState* state) override; virtual SLANG_NO_THROW void SLANG_MCALL draw(UInt vertexCount, UInt startVertex) override; virtual SLANG_NO_THROW void SLANG_MCALL drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) override; @@ -169,8 +165,16 @@ public: const VulkanApi* m_api; }; - class InputLayoutImpl : public InputLayout - { + class InputLayoutImpl : public IInputLayout, public RefObject + { + public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IInputLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IInputLayout) + return static_cast<IInputLayout*>(this); + return nullptr; + } public: List<VkVertexInputAttributeDescription> m_vertexDescs; int m_vertexSize; @@ -181,7 +185,7 @@ public: public: typedef BufferResource Parent; - BufferResourceImpl(Resource::Usage initialUsage, const BufferResource::Desc& desc, VKRenderer* renderer): + BufferResourceImpl(IResource::Usage initialUsage, const IBufferResource::Desc& desc, VKRenderer* renderer): Parent(desc), m_renderer(renderer), m_initialUsage(initialUsage) @@ -189,7 +193,7 @@ public: assert(renderer); } - Resource::Usage m_initialUsage; + IResource::Usage m_initialUsage; VKRenderer* m_renderer; Buffer m_buffer; Buffer m_uploadBuffer; @@ -232,15 +236,31 @@ public: const VulkanApi* m_api; }; - class SamplerStateImpl : public SamplerState + class SamplerStateImpl : public ISamplerState, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + ISamplerState* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_ISamplerState) + return static_cast<ISamplerState*>(this); + return nullptr; + } + public: VkSampler m_sampler; }; - class ResourceViewImpl : public ResourceView + class ResourceViewImpl : public IResourceView, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IResourceView* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IResourceView) + return static_cast<IResourceView*>(this); + return nullptr; + } + public: enum class ViewType { Texture, @@ -288,9 +308,17 @@ public: VkDeviceSize size; }; - class ShaderProgramImpl: public ShaderProgram + class ShaderProgramImpl: public IShaderProgram, public RefObject { - public: + public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IShaderProgram* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IShaderProgram) + return static_cast<IShaderProgram*>(this); + return nullptr; + } + public: ShaderProgramImpl(const VulkanApi& api, PipelineType pipelineType): m_api(&api), @@ -322,9 +350,17 @@ public: VkShaderModule m_modules[2]; }; - class DescriptorSetLayoutImpl : public DescriptorSetLayout + class DescriptorSetLayoutImpl : public IDescriptorSetLayout, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IDescriptorSetLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IDescriptorSetLayout) + return static_cast<IDescriptorSetLayout*>(this); + return nullptr; + } + public: DescriptorSetLayoutImpl(const VulkanApi& api) : m_api(&api) { @@ -399,9 +435,19 @@ public: Index m_totalBoundObjectCount = 0; }; - class PipelineLayoutImpl : public PipelineLayout + class PipelineLayoutImpl : public IPipelineLayout, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IPipelineLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IPipelineLayout) + { + return static_cast<IPipelineLayout*>(this); + } + return nullptr; + } + public: PipelineLayoutImpl(const VulkanApi& api) : m_api(&api) { @@ -423,9 +469,17 @@ public: List<uint32_t> m_descriptorSetRootConstantOffsets; }; - class DescriptorSetImpl : public DescriptorSet + class DescriptorSetImpl : public IDescriptorSet, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IDescriptorSet* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IDescriptorSet) + return static_cast<IDescriptorSet*>(this); + return nullptr; + } + public: DescriptorSetImpl(VKRenderer* renderer) : m_renderer(renderer) { @@ -435,15 +489,18 @@ public: { } - virtual void setConstantBuffer(UInt range, UInt index, BufferResource* buffer) override; - virtual void setResource(UInt range, UInt index, ResourceView* view) override; - virtual void setSampler(UInt range, UInt index, SamplerState* sampler) override; - virtual void setCombinedTextureSampler( + virtual SLANG_NO_THROW void SLANG_MCALL setConstantBuffer(UInt range, UInt index, IBufferResource* buffer) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setResource(UInt range, UInt index, IResourceView* view) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setSampler(UInt range, UInt index, ISamplerState* sampler) override; + virtual SLANG_NO_THROW void SLANG_MCALL setCombinedTextureSampler( UInt range, UInt index, - ResourceView* textureView, - SamplerState* sampler) override; - virtual void setRootConstants( + IResourceView* textureView, + ISamplerState* sampler) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setRootConstants( UInt range, UInt offset, UInt size, @@ -467,9 +524,17 @@ public: int m_offset; }; - class PipelineStateImpl : public PipelineState + class PipelineStateImpl : public IPipelineState, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IPipelineState* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IPipelineState) + return static_cast<IPipelineState*>(this); + return nullptr; + } + public: PipelineStateImpl(const VulkanApi& api): m_api(&api) { @@ -497,7 +562,7 @@ public: /// Note that the outShaderModule value should be cleaned up when no longer needed by caller /// via vkShaderModuleDestroy() VkPipelineShaderStageCreateInfo compileEntryPoint( - ShaderProgram::KernelDesc const& kernelDesc, + IShaderProgram::KernelDesc const& kernelDesc, VkShaderStageFlagBits stage, List<char>& outBuffer, VkShaderModule& outShaderModule); @@ -550,7 +615,6 @@ public: float m_clearColor[4] = { 0, 0, 0, 0 }; Desc m_desc; - List<String> m_features; }; /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! VkRenderer::Buffer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ @@ -858,7 +922,7 @@ void VKRenderer::_endRender() m_deviceQueue.flush(); } -SlangResult createVKRenderer(IRenderer** outRenderer) +Result SLANG_MCALL createVKRenderer(IRenderer** outRenderer) { *outRenderer = new VKRenderer(); (*outRenderer)->addRef(); @@ -941,7 +1005,7 @@ VkBool32 VKRenderer::handleDebugMessage(VkDebugReportFlagsEXT flags, VkDebugRepo } VkPipelineShaderStageCreateInfo VKRenderer::compileEntryPoint( - ShaderProgram::KernelDesc const& kernelDesc, + IShaderProgram::KernelDesc const& kernelDesc, VkShaderStageFlagBits stage, List<char>& outBuffer, VkShaderModule& outShaderModule) @@ -1085,11 +1149,11 @@ SlangResult VKRenderer::initialize(const Desc& desc, void* inWindowHandle) Index selectedDeviceIndex = 0; - if (desc.adapter.getLength()) + if (desc.adapter) { selectedDeviceIndex = -1; - String lowerAdapter = desc.adapter.toLower(); + String lowerAdapter = String(desc.adapter).toLower(); for (Index i = 0; i < physicalDevices.getCount(); ++i) { @@ -1371,7 +1435,7 @@ void VKRenderer::presentFrame() TextureResource::Desc VKRenderer::getSwapChainTextureDesc() { TextureResource::Desc desc; - desc.init2D(Resource::Type::Texture2D, Format::Unknown, m_desc.width, m_desc.height, 1); + desc.init2D(IResource::Type::Texture2D, Format::Unknown, m_desc.width, m_desc.height, 1); return desc; } @@ -1380,9 +1444,9 @@ SlangResult VKRenderer::captureScreenSurface(Surface& surfaceOut) return SLANG_FAIL; } -static VkBufferUsageFlagBits _calcBufferUsageFlags(Resource::BindFlag::Enum bind) +static VkBufferUsageFlagBits _calcBufferUsageFlags(IResource::BindFlag::Enum bind) { - typedef Resource::BindFlag BindFlag; + typedef IResource::BindFlag BindFlag; switch (bind) { @@ -1409,7 +1473,7 @@ static VkBufferUsageFlagBits _calcBufferUsageFlags(int bindFlags) while (bindFlags) { int lsb = bindFlags & -bindFlags; - dstFlags |= _calcBufferUsageFlags(Resource::BindFlag::Enum(lsb)); + dstFlags |= _calcBufferUsageFlags(IResource::BindFlag::Enum(lsb)); bindFlags &= ~lsb; } return VkBufferUsageFlagBits(dstFlags); @@ -1419,12 +1483,12 @@ static VkBufferUsageFlags _calcBufferUsageFlags(int bindFlags, int cpuAccessFlag { VkBufferUsageFlags usage = _calcBufferUsageFlags(bindFlags); - if (cpuAccessFlags & Resource::AccessFlag::Read) + if (cpuAccessFlags & IResource::AccessFlag::Read) { // If it can be read from, set this usage |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT; } - if ((cpuAccessFlags & Resource::AccessFlag::Write) || initData) + if ((cpuAccessFlags & IResource::AccessFlag::Write) || initData) { usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; } @@ -1432,9 +1496,9 @@ static VkBufferUsageFlags _calcBufferUsageFlags(int bindFlags, int cpuAccessFlag return usage; } -static VkImageUsageFlagBits _calcImageUsageFlags(Resource::BindFlag::Enum bind) +static VkImageUsageFlagBits _calcImageUsageFlags(IResource::BindFlag::Enum bind) { - typedef Resource::BindFlag BindFlag; + typedef IResource::BindFlag BindFlag; switch (bind) { @@ -1460,7 +1524,7 @@ static VkImageUsageFlagBits _calcImageUsageFlags(int bindFlags) while (bindFlags) { int lsb = bindFlags & -bindFlags; - dstFlags |= _calcImageUsageFlags(Resource::BindFlag::Enum(lsb)); + dstFlags |= _calcImageUsageFlags(IResource::BindFlag::Enum(lsb)); bindFlags &= ~lsb; } return VkImageUsageFlagBits(dstFlags); @@ -1472,12 +1536,12 @@ static VkImageUsageFlags _calcImageUsageFlags(int bindFlags, int cpuAccessFlags, usage |= VK_IMAGE_USAGE_SAMPLED_BIT; - if (cpuAccessFlags & Resource::AccessFlag::Read) + if (cpuAccessFlags & IResource::AccessFlag::Read) { // If it can be read from, set this usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; } - if ((cpuAccessFlags & Resource::AccessFlag::Write) || initData) + if ((cpuAccessFlags & IResource::AccessFlag::Write) || initData) { usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; } @@ -1530,7 +1594,7 @@ void VKRenderer::_transitionImageLayout(VkImage image, VkFormat format, const Te m_api.vkCmdPipelineBarrier(commandBuffer, sourceStage, destinationStage, 0, 0, nullptr, 0, nullptr, 1, &barrier); } -Result VKRenderer::createTextureResource(Resource::Usage initialUsage, const TextureResource::Desc& descIn, const TextureResource::Data* initData, TextureResource** outResource) +Result VKRenderer::createTextureResource(IResource::Usage initialUsage, const ITextureResource::Desc& descIn, const ITextureResource::Data* initData, ITextureResource** outResource) { TextureResource::Desc desc(descIn); desc.setDefaults(initialUsage); @@ -1552,25 +1616,25 @@ Result VKRenderer::createTextureResource(Resource::Usage initialUsage, const Tex switch (desc.type) { - case Resource::Type::Texture1D: + case IResource::Type::Texture1D: { imageInfo.imageType = VK_IMAGE_TYPE_1D; imageInfo.extent = VkExtent3D{ uint32_t(descIn.size.width), 1, 1 }; break; } - case Resource::Type::Texture2D: + case IResource::Type::Texture2D: { imageInfo.imageType = VK_IMAGE_TYPE_2D; imageInfo.extent = VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; break; } - case Resource::Type::TextureCube: + case IResource::Type::TextureCube: { imageInfo.imageType = VK_IMAGE_TYPE_2D; imageInfo.extent = VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; break; } - case Resource::Type::Texture3D: + case IResource::Type::Texture3D: { // Can't have an array and 3d texture assert(desc.arraySize <= 1); @@ -1694,7 +1758,7 @@ Result VKRenderer::createTextureResource(Resource::Usage initialUsage, const Tex m_api.vkUnmapMemory(m_device, uploadBuffer.m_memory); } - _transitionImageLayout(texture->m_image, format, texture->getDesc(), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + _transitionImageLayout(texture->m_image, format, *texture->getDesc(), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); { size_t srcOffset = 0; @@ -1734,7 +1798,7 @@ Result VKRenderer::createTextureResource(Resource::Usage initialUsage, const Tex } } - _transitionImageLayout(texture->m_image, format, texture->getDesc(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + _transitionImageLayout(texture->m_image, format, *texture->getDesc(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_deviceQueue.flushAndWait(); } @@ -1743,7 +1807,7 @@ Result VKRenderer::createTextureResource(Resource::Usage initialUsage, const Tex return SLANG_OK; } -Result VKRenderer::createBufferResource(Resource::Usage initialUsage, const BufferResource::Desc& descIn, const void* initData, BufferResource** outResource) +Result VKRenderer::createBufferResource(IResource::Usage initialUsage, const IBufferResource::Desc& descIn, const void* initData, IBufferResource** outResource) { BufferResource::Desc desc(descIn); desc.setDefaults(initialUsage); @@ -1756,7 +1820,7 @@ Result VKRenderer::createBufferResource(Resource::Usage initialUsage, const Buff switch (initialUsage) { - case Resource::Usage::ConstantBuffer: + case IResource::Usage::ConstantBuffer: { reqMemoryProperties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; break; @@ -1767,7 +1831,7 @@ Result VKRenderer::createBufferResource(Resource::Usage initialUsage, const Buff RefPtr<BufferResourceImpl> buffer(new BufferResourceImpl(initialUsage, desc, this)); SLANG_RETURN_ON_FAIL(buffer->m_buffer.init(m_api, desc.sizeInBytes, usage, reqMemoryProperties)); - if ((desc.cpuAccessFlags & Resource::AccessFlag::Write) || initData) + if ((desc.cpuAccessFlags & IResource::AccessFlag::Write) || initData) { SLANG_RETURN_ON_FAIL(buffer->m_uploadBuffer.init(m_api, bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)); } @@ -1875,7 +1939,7 @@ static VkCompareOp translateComparisonFunc(ComparisonFunc func) } } -Result VKRenderer::createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) +Result VKRenderer::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) { VkSamplerCreateInfo samplerInfo = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; @@ -1906,19 +1970,19 @@ Result VKRenderer::createSamplerState(SamplerState::Desc const& desc, SamplerSta return SLANG_OK; } -Result VKRenderer::createTextureView(TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) +Result VKRenderer::createTextureView(ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) { assert(!"unimplemented"); return SLANG_FAIL; } -Result VKRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) +Result VKRenderer::createBufferView(IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (BufferResourceImpl*) buffer; // TODO: These should come from the `ResourceView::Desc` VkDeviceSize offset = 0; - VkDeviceSize size = resourceImpl->getDesc().sizeInBytes; + VkDeviceSize size = resourceImpl->getDesc()->sizeInBytes; // There are two different cases we need to think about for buffers. // @@ -1945,7 +2009,7 @@ Result VKRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc c assert(!"unhandled"); return SLANG_FAIL; - case ResourceView::Type::UnorderedAccess: + case IResourceView::Type::UnorderedAccess: // Is this a formatted view? // if(desc.format == Format::Unknown) @@ -1964,7 +2028,7 @@ Result VKRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc c // it just like we would for a "sampled" buffer: // // FALLTHROUGH - case ResourceView::Type::ShaderResource: + case IResourceView::Type::ShaderResource: { VkBufferViewCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO }; @@ -1986,7 +2050,7 @@ Result VKRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc c } } -Result VKRenderer::createInputLayout(const InputElementDesc* elements, UInt numElements, InputLayout** outLayout) +Result VKRenderer::createInputLayout(const InputElementDesc* elements, UInt numElements, IInputLayout** outLayout) { RefPtr<InputLayoutImpl> layout(new InputLayoutImpl); @@ -2010,7 +2074,7 @@ Result VKRenderer::createInputLayout(const InputElementDesc* elements, UInt numE dstDesc.offset = uint32_t(srcDesc.offset); - const size_t elementSize = RendererUtil::getFormatSize(srcDesc.format); + const size_t elementSize = gfxGetFormatSize(srcDesc.format); assert(elementSize > 0); const size_t endElement = srcDesc.offset + elementSize; @@ -2023,7 +2087,7 @@ Result VKRenderer::createInputLayout(const InputElementDesc* elements, UInt numE return SLANG_OK; } -void* VKRenderer::map(BufferResource* bufferIn, MapFlavor flavor) +void* VKRenderer::map(IBufferResource* bufferIn, MapFlavor flavor) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); assert(buffer->m_mapFlavor == MapFlavor::Unknown); @@ -2031,7 +2095,7 @@ void* VKRenderer::map(BufferResource* bufferIn, MapFlavor flavor) // Make sure everything has completed before reading... m_deviceQueue.flushAndWait(); - const size_t bufferSize = buffer->getDesc().sizeInBytes; + const size_t bufferSize = buffer->getDesc()->sizeInBytes; switch (flavor) { @@ -2083,12 +2147,12 @@ void* VKRenderer::map(BufferResource* bufferIn, MapFlavor flavor) } } -void VKRenderer::unmap(BufferResource* bufferIn) +void VKRenderer::unmap(IBufferResource* bufferIn) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); assert(buffer->m_mapFlavor != MapFlavor::Unknown); - const size_t bufferSize = buffer->getDesc().sizeInBytes; + const size_t bufferSize = buffer->getDesc()->sizeInBytes; switch (buffer->m_mapFlavor) { @@ -2120,7 +2184,7 @@ void VKRenderer::setPrimitiveTopology(PrimitiveTopology topology) m_primitiveTopology = VulkanUtil::getVkPrimitiveTopology(topology); } -void VKRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource*const* buffers, const UInt* strides, const UInt* offsets) +void VKRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, IBufferResource*const* buffers, const UInt* strides, const UInt* offsets) { { const Index num = Index(startSlot + slotCount); @@ -2135,7 +2199,7 @@ void VKRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(buffers[i]); if (buffer) { - assert(buffer->m_initialUsage == Resource::Usage::VertexBuffer); + assert(buffer->m_initialUsage == IResource::Usage::VertexBuffer); } BoundVertexBuffer& boundBuffer = m_boundVertexBuffers[startSlot + i]; @@ -2145,11 +2209,11 @@ void VKRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource } } -void VKRenderer::setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) +void VKRenderer::setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) { } -void VKRenderer::setDepthStencilTarget(ResourceView* depthStencilView) +void VKRenderer::setDepthStencilTarget(IResourceView* depthStencilView) { } @@ -2197,7 +2261,7 @@ void VKRenderer::setScissorRects(UInt count, ScissorRect const* rects) m_api.vkCmdSetScissor(commandBuffer, 0, uint32_t(count), vkRects); } -void VKRenderer::setPipelineState(PipelineType pipelineType, PipelineState* state) +void VKRenderer::setPipelineState(PipelineType pipelineType, IPipelineState* state) { m_currentPipeline = (PipelineStateImpl*)state; } @@ -2295,14 +2359,14 @@ void VKRenderer::dispatchCompute(int x, int y, int z) m_api.vkCmdDispatch(commandBuffer, x, y, z); } -static VkImageViewType _calcImageViewType(TextureResource::Type type, const TextureResource::Desc& desc) +static VkImageViewType _calcImageViewType(ITextureResource::Type type, const ITextureResource::Desc& desc) { switch (type) { - case Resource::Type::Texture1D: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_1D_ARRAY : VK_IMAGE_VIEW_TYPE_1D; - case Resource::Type::Texture2D: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D; - case Resource::Type::TextureCube: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_CUBE_ARRAY : VK_IMAGE_VIEW_TYPE_CUBE; - case Resource::Type::Texture3D: + case IResource::Type::Texture1D: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_1D_ARRAY : VK_IMAGE_VIEW_TYPE_1D; + case IResource::Type::Texture2D: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D; + case IResource::Type::TextureCube: return desc.arraySize > 1 ? VK_IMAGE_VIEW_TYPE_CUBE_ARRAY : VK_IMAGE_VIEW_TYPE_CUBE; + case IResource::Type::Texture3D: { // Can't have an array and 3d texture assert(desc.arraySize <= 1); @@ -2344,7 +2408,7 @@ static VkDescriptorType translateDescriptorType(DescriptorSlotType type) } } -Result VKRenderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) +Result VKRenderer::createDescriptorSetLayout(const IDescriptorSetLayout::Desc& desc, IDescriptorSetLayout** outLayout) { RefPtr<DescriptorSetLayoutImpl> descriptorSetLayoutImpl = new DescriptorSetLayoutImpl(m_api); @@ -2479,7 +2543,7 @@ Result VKRenderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& de return SLANG_OK; } -Result VKRenderer::createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) +Result VKRenderer::createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) { UInt descriptorSetCount = desc.descriptorSetCount; @@ -2542,7 +2606,7 @@ Result VKRenderer::createPipelineLayout(const PipelineLayout::Desc& desc, Pipeli return SLANG_OK; } -Result VKRenderer::createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) +Result VKRenderer::createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet** outDescriptorSet) { auto layoutImpl = (DescriptorSetLayoutImpl*)layout; @@ -2565,7 +2629,7 @@ Result VKRenderer::createDescriptorSet(DescriptorSetLayout* layout, DescriptorSe return SLANG_OK; } -void VKRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, BufferResource* buffer) +void VKRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, IBufferResource* buffer) { auto bufferImpl = (BufferResourceImpl*)buffer; @@ -2577,7 +2641,7 @@ void VKRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, Bu VkDescriptorBufferInfo bufferInfo = {}; bufferInfo.buffer = bufferImpl->m_buffer.m_buffer; bufferInfo.offset = 0; - bufferInfo.range = bufferImpl->getDesc().sizeInBytes; + bufferInfo.range = bufferImpl->getDesc()->sizeInBytes; VkWriteDescriptorSet writeInfo = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET }; writeInfo.dstSet = m_descriptorSet; @@ -2588,10 +2652,10 @@ void VKRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, Bu writeInfo.pBufferInfo = &bufferInfo; m_renderer->m_api.vkUpdateDescriptorSets(m_renderer->m_device, 1, &writeInfo, 0, nullptr); - m_boundObjects[boundObjectIndex] = buffer; + m_boundObjects[boundObjectIndex] = dynamic_cast<RefObject*>(buffer); } -void VKRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, ResourceView* view) +void VKRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, IResourceView* view) { SLANG_ASSERT(range < UInt(m_layout->m_ranges.getCount())); auto& rangeInfo = m_layout->m_ranges[range]; @@ -2660,10 +2724,10 @@ void VKRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, Resource break; } - m_boundObjects[boundObjectIndex] = view; + m_boundObjects[boundObjectIndex] = dynamic_cast<RefObject*>(view); } -void VKRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, SamplerState* sampler) +void VKRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, ISamplerState* sampler) { SLANG_ASSERT(range < UInt(m_layout->m_ranges.getCount())); auto& rangeInfo = m_layout->m_ranges[range]; @@ -2674,14 +2738,14 @@ void VKRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, SamplerSt // TODO: Actually bind it! - m_boundObjects[boundObjectIndex] = sampler; + m_boundObjects[boundObjectIndex] = dynamic_cast<RefObject*>(sampler); } void VKRenderer::DescriptorSetImpl::setCombinedTextureSampler( UInt range, UInt index, - ResourceView* textureView, - SamplerState* sampler) + IResourceView* textureView, + ISamplerState* sampler) { SLANG_ASSERT(range < UInt(m_layout->m_ranges.getCount())); auto& rangeInfo = m_layout->m_ranges[range]; @@ -2696,8 +2760,8 @@ void VKRenderer::DescriptorSetImpl::setCombinedTextureSampler( // to keep both the texture view and the sampler object live. // auto boundObjectIndex = rangeInfo.arrayIndex + 2 * index; - m_boundObjects[boundObjectIndex + 0] = textureView; - m_boundObjects[boundObjectIndex + 1] = sampler; + m_boundObjects[boundObjectIndex + 0] = dynamic_cast<RefObject*>(textureView); + m_boundObjects[boundObjectIndex + 1] = dynamic_cast<RefObject*>(sampler); } void VKRenderer::DescriptorSetImpl::setRootConstants( @@ -2725,7 +2789,7 @@ void VKRenderer::DescriptorSetImpl::setRootConstants( memcpy(m_rootConstantData.getBuffer() + rootConstantRangeInfo.offset + offset, data, size); } -void VKRenderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* layout, UInt index, DescriptorSet* descriptorSet) +void VKRenderer::setDescriptorSet(PipelineType pipelineType, IPipelineLayout* layout, UInt index, IDescriptorSet* descriptorSet) { // Ideally this should eventually be as simple as: // @@ -2749,7 +2813,7 @@ void VKRenderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* lay m_currentDescriptorSets[index] = descriptorSetImpl->m_descriptorSet; } -Result VKRenderer::createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) +Result VKRenderer::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) { RefPtr<ShaderProgramImpl> impl = new ShaderProgramImpl(m_api, desc.pipelineType); if( desc.pipelineType == PipelineType::Compute) @@ -2769,7 +2833,7 @@ Result VKRenderer::createProgram(const ShaderProgram::Desc& desc, ShaderProgram* return SLANG_OK; } -Result VKRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, PipelineState** outState) +Result VKRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; preparePipelineDesc(desc); @@ -2900,7 +2964,7 @@ Result VKRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& return SLANG_OK; } -Result VKRenderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, PipelineState** outState) +Result VKRenderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, IPipelineState** outState) { ComputePipelineStateDesc desc = inDesc; preparePipelineDesc(desc); |
