diff options
Diffstat (limited to 'tools/gfx/open-gl/render-gl.cpp')
| -rw-r--r-- | tools/gfx/open-gl/render-gl.cpp | 293 |
1 files changed, 193 insertions, 100 deletions
diff --git a/tools/gfx/open-gl/render-gl.cpp b/tools/gfx/open-gl/render-gl.cpp index 4874c4c69..826192e8d 100644 --- a/tools/gfx/open-gl/render-gl.cpp +++ b/tools/gfx/open-gl/render-gl.cpp @@ -4,7 +4,7 @@ #include "../nvapi/nvapi-util.h" //WORKING:#include "options.h" -#include "../render.h" +#include "../renderer-shared.h" #include "../render-graphics-common.h" #include <stdio.h> @@ -83,82 +83,78 @@ 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 ITextureResource::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; + const GraphicsPipelineStateDesc& desc, IPipelineState** outState) override; virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState( - const ComputePipelineStateDesc& desc, PipelineState** outState) override; + const ComputePipelineStateDesc& desc, IPipelineState** outState) override; virtual SLANG_NO_THROW SlangResult SLANG_MCALL captureScreenSurface(Surface& surfaceOut) 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 void SLANG_MCALL drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) override; @@ -193,8 +189,16 @@ public: GLsizei offset; }; - 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: VertexAttributeDesc m_attributes[kMaxVertexStreams]; UInt m_attributeCount = 0; @@ -254,14 +258,30 @@ public: GLuint m_handle; }; - 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: GLuint m_samplerID; }; - 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; + } }; class TextureViewImpl : public ResourceViewImpl @@ -286,9 +306,17 @@ public: CountOf, }; - 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: struct RangeInfo { GLDescriptorSlotType type; @@ -298,9 +326,19 @@ public: Int m_counts[int(GLDescriptorSlotType::CountOf)]; }; - 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: struct DescriptorSetInfo { RefPtr<DescriptorSetLayoutImpl> layout; @@ -310,18 +348,30 @@ public: List<DescriptorSetInfo> m_sets; }; - class DescriptorSetImpl : public DescriptorSet + class DescriptorSetImpl : public IDescriptorSet, public RefObject { 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( + 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: + 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, @@ -333,8 +383,16 @@ public: List<RefPtr<SamplerStateImpl>> m_samplers; }; - class ShaderProgramImpl : public ShaderProgram - { + class ShaderProgramImpl : public IShaderProgram, public RefObject + { + 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(WeakSink<GLRenderer>* renderer, GLuint id): m_renderer(renderer), @@ -353,9 +411,17 @@ public: RefPtr<WeakSink<GLRenderer> > m_renderer; }; - 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: RefPtr<ShaderProgramImpl> m_program; RefPtr<PipelineLayoutImpl> m_pipelineLayout; RefPtr<InputLayoutImpl> m_inputLayout; @@ -438,7 +504,7 @@ public: SLANG_COMPILE_TIME_ASSERT(SLANG_COUNT_OF(s_pixelFormatInfos) == int(GlPixelFormat::CountOf)); } -SlangResult createGLRenderer(IRenderer** outRenderer) +SlangResult SLANG_MCALL createGLRenderer(IRenderer** outRenderer) { *outRenderer = new GLRenderer(); (*outRenderer)->addRef(); @@ -727,7 +793,7 @@ void GLRenderer::destroyBindingEntries(const BindingState::Desc& desc, const Bin // !!!!!!!!!!!!!!!!!!!!!!!!!!!! Renderer interface !!!!!!!!!!!!!!!!!!!!!!!!!! -SlangResult GLRenderer::initialize(const Desc& desc, void* inWindowHandle) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::initialize(const Desc& desc, void* inWindowHandle) { auto windowHandle = (HWND)inWindowHandle; m_desc = desc; @@ -751,9 +817,9 @@ SlangResult GLRenderer::initialize(const Desc& desc, void* inWindowHandle) auto renderer = glGetString(GL_RENDERER); - if (renderer && desc.adapter.getLength() > 0) + if (renderer && desc.adapter) { - String lowerAdapter = desc.adapter.toLower(); + String lowerAdapter = String(desc.adapter).toLower(); String lowerRenderer = String((const char*)renderer).toLower(); // The adapter is not available @@ -793,30 +859,30 @@ SlangResult GLRenderer::initialize(const Desc& desc, void* inWindowHandle) return SLANG_OK; } -void GLRenderer::setClearColor(const float color[4]) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setClearColor(const float color[4]) { glClearColor(color[0], color[1], color[2], color[3]); } -void GLRenderer::clearFrame() +SLANG_NO_THROW void SLANG_MCALL GLRenderer::clearFrame() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } -void GLRenderer::presentFrame() +SLANG_NO_THROW void SLANG_MCALL GLRenderer::presentFrame() { glFlush(); ::SwapBuffers(m_hdc); } -TextureResource::Desc GLRenderer::getSwapChainTextureDesc() +SLANG_NO_THROW TextureResource::Desc SLANG_MCALL GLRenderer::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; } -SlangResult GLRenderer::captureScreenSurface(Surface& surfaceOut) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::captureScreenSurface(Surface& surfaceOut) { SLANG_RETURN_ON_FAIL(surfaceOut.allocate(m_desc.width, m_desc.height, Format::RGBA_Unorm_UInt8, 1, SurfaceAllocator::getMallocAllocator())); glReadPixels(0, 0, m_desc.width, m_desc.height, GL_RGBA, GL_UNSIGNED_BYTE, surfaceOut.m_data); @@ -824,7 +890,11 @@ SlangResult GLRenderer::captureScreenSurface(Surface& surfaceOut) return SLANG_OK; } -Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const TextureResource::Desc& descIn, const TextureResource::Data* initData, TextureResource** outResource) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createTextureResource( + IResource::Usage initialUsage, + const ITextureResource::Desc& descIn, + const ITextureResource::Data* initData, + ITextureResource** outResource) { TextureResource::Desc srcDesc(descIn); srcDesc.setDefaults(initialUsage); @@ -858,7 +928,7 @@ Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const Tex switch (srcDesc.type) { - case Resource::Type::Texture1D: + case IResource::Type::Texture1D: { if (srcDesc.arraySize > 0) { @@ -885,12 +955,12 @@ Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const Tex } break; } - case Resource::Type::TextureCube: - case Resource::Type::Texture2D: + case IResource::Type::TextureCube: + case IResource::Type::Texture2D: { if (srcDesc.arraySize > 0) { - if (srcDesc.type == Resource::Type::TextureCube) + if (srcDesc.type == IResource::Type::TextureCube) { target = GL_TEXTURE_CUBE_MAP_ARRAY; } @@ -912,7 +982,7 @@ Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const Tex } else { - if (srcDesc.type == Resource::Type::TextureCube) + if (srcDesc.type == IResource::Type::TextureCube) { target = GL_TEXTURE_CUBE_MAP; glBindTexture(target, handle); @@ -938,7 +1008,7 @@ Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const Tex } break; } - case Resource::Type::Texture3D: + case IResource::Type::Texture3D: { target = GL_TEXTURE_3D; glBindTexture(target, handle); @@ -967,9 +1037,9 @@ Result GLRenderer::createTextureResource(Resource::Usage initialUsage, const Tex return SLANG_OK; } -static GLenum _calcUsage(Resource::Usage usage) +static GLenum _calcUsage(IResource::Usage usage) { - typedef Resource::Usage Usage; + typedef IResource::Usage Usage; switch (usage) { case Usage::ConstantBuffer: return GL_DYNAMIC_DRAW; @@ -977,9 +1047,9 @@ static GLenum _calcUsage(Resource::Usage usage) } } -static GLenum _calcTarget(Resource::Usage usage) +static GLenum _calcTarget(IResource::Usage usage) { - typedef Resource::Usage Usage; + typedef IResource::Usage Usage; switch (usage) { case Usage::ConstantBuffer: return GL_UNIFORM_BUFFER; @@ -987,7 +1057,11 @@ static GLenum _calcTarget(Resource::Usage usage) } } -Result GLRenderer::createBufferResource(Resource::Usage initialUsage, const BufferResource::Desc& descIn, const void* initData, BufferResource** outResource) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferResource( + IResource::Usage initialUsage, + const IBufferResource::Desc& descIn, + const void* initData, + IBufferResource** outResource) { BufferResource::Desc desc(descIn); desc.setDefaults(initialUsage); @@ -1007,7 +1081,8 @@ Result GLRenderer::createBufferResource(Resource::Usage initialUsage, const Buff return SLANG_OK; } -Result GLRenderer::createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) +SLANG_NO_THROW Result SLANG_MCALL + GLRenderer::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) { GLuint samplerID; glCreateSamplers(1, &samplerID); @@ -1018,7 +1093,8 @@ Result GLRenderer::createSamplerState(SamplerState::Desc const& desc, SamplerSta return SLANG_OK; } -Result GLRenderer::createTextureView(TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createTextureView( + ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (TextureResourceImpl*) texture; @@ -1031,7 +1107,8 @@ Result GLRenderer::createTextureView(TextureResource* texture, ResourceView::Des return SLANG_OK; } -Result GLRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferView( + IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (BufferResourceImpl*) buffer; @@ -1044,7 +1121,8 @@ Result GLRenderer::createBufferView(BufferResource* buffer, ResourceView::Desc c return SLANG_OK; } -Result GLRenderer::createInputLayout(const InputElementDesc* inputElements, UInt inputElementCount, InputLayout** outLayout) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createInputLayout( + const InputElementDesc* inputElements, UInt inputElementCount, IInputLayout** outLayout) { RefPtr<InputLayoutImpl> inputLayout = new InputLayoutImpl; @@ -1063,7 +1141,7 @@ Result GLRenderer::createInputLayout(const InputElementDesc* inputElements, UInt return SLANG_OK; } -void* GLRenderer::map(BufferResource* bufferIn, MapFlavor flavor) +SLANG_NO_THROW void* SLANG_MCALL GLRenderer::map(IBufferResource* bufferIn, MapFlavor flavor) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); @@ -1086,13 +1164,13 @@ void* GLRenderer::map(BufferResource* bufferIn, MapFlavor flavor) return glMapBuffer(buffer->m_target, access); } -void GLRenderer::unmap(BufferResource* bufferIn) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::unmap(IBufferResource* bufferIn) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); glUnmapBuffer(buffer->m_target); } -void GLRenderer::setPrimitiveTopology(PrimitiveTopology topology) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setPrimitiveTopology(PrimitiveTopology topology) { GLenum glTopology = 0; switch (topology) @@ -1106,7 +1184,12 @@ void GLRenderer::setPrimitiveTopology(PrimitiveTopology topology) m_boundPrimitiveTopology = glTopology; } -void GLRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource*const* buffers, const UInt* strides, const UInt* offsets) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setVertexBuffers( + UInt startSlot, + UInt slotCount, + IBufferResource* const* buffers, + const UInt* strides, + const UInt* offsets) { for (UInt ii = 0; ii < slotCount; ++ii) { @@ -1121,15 +1204,16 @@ void GLRenderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource } } -void GLRenderer::setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) +SLANG_NO_THROW void SLANG_MCALL + GLRenderer::setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) { } -void GLRenderer::setDepthStencilTarget(ResourceView* depthStencilView) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setDepthStencilTarget(IResourceView* depthStencilView) { } -void GLRenderer::setViewports(UInt count, Viewport const* viewports) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setViewports(UInt count, Viewport const* viewports) { assert(count == 1); auto viewport = viewports[0]; @@ -1141,7 +1225,7 @@ void GLRenderer::setViewports(UInt count, Viewport const* viewports) glDepthRange(viewport.minZ, viewport.maxZ); } -void GLRenderer::setScissorRects(UInt count, ScissorRect const* rects) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setScissorRects(UInt count, ScissorRect const* rects) { assert(count <= 1); if( count ) @@ -1169,7 +1253,8 @@ void GLRenderer::setScissorRects(UInt count, ScissorRect const* rects) } } -void GLRenderer::setPipelineState(PipelineType pipelineType, PipelineState* state) +SLANG_NO_THROW void SLANG_MCALL + GLRenderer::setPipelineState(PipelineType pipelineType, IPipelineState* state) { auto pipelineStateImpl = (PipelineStateImpl*) state; @@ -1180,24 +1265,26 @@ void GLRenderer::setPipelineState(PipelineType pipelineType, PipelineState* stat glUseProgram(programID); } -void GLRenderer::draw(UInt vertexCount, UInt startVertex = 0) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::draw(UInt vertexCount, UInt startVertex = 0) { flushStateForDraw(); glDrawArrays(m_boundPrimitiveTopology, (GLint)startVertex, (GLsizei)vertexCount); } -void GLRenderer::drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) +SLANG_NO_THROW void SLANG_MCALL + GLRenderer::drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) { assert(!"unimplemented"); } -void GLRenderer::dispatchCompute(int x, int y, int z) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::dispatchCompute(int x, int y, int z) { glDispatchCompute(x, y, z); } -void GLRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, BufferResource* buffer) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setConstantBuffer( + UInt range, UInt index, IBufferResource* buffer) { auto resourceImpl = (BufferResourceImpl*) buffer; @@ -1208,7 +1295,8 @@ void GLRenderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, Bu m_constantBuffers[arrayIndex] = resourceImpl; } -void GLRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, ResourceView* view) +SLANG_NO_THROW void SLANG_MCALL + GLRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, IResourceView* view) { auto viewImpl = (ResourceViewImpl*) view; @@ -1219,16 +1307,17 @@ void GLRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, Resource assert(!"unimplemented"); } -void GLRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, SamplerState* sampler) +SLANG_NO_THROW void SLANG_MCALL + GLRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, ISamplerState* sampler) { assert(!"unsupported"); } -void GLRenderer::DescriptorSetImpl::setCombinedTextureSampler( +SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setCombinedTextureSampler( UInt range, UInt index, - ResourceView* textureView, - SamplerState* sampler) + IResourceView* textureView, + ISamplerState* sampler) { auto viewImpl = (TextureViewImpl*) textureView; auto samplerImpl = (SamplerStateImpl*) sampler; @@ -1241,7 +1330,7 @@ void GLRenderer::DescriptorSetImpl::setCombinedTextureSampler( m_samplers[arrayIndex] = samplerImpl; } -void GLRenderer::DescriptorSetImpl::setRootConstants( +SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setRootConstants( UInt range, UInt offset, UInt size, @@ -1250,7 +1339,8 @@ void GLRenderer::DescriptorSetImpl::setRootConstants( SLANG_UNEXPECTED("unimplemented: setRootConstants for GlRenderer"); } -void GLRenderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* layout, UInt index, DescriptorSet* descriptorSet) +SLANG_NO_THROW void SLANG_MCALL GLRenderer::setDescriptorSet( + PipelineType pipelineType, IPipelineLayout* layout, UInt index, IDescriptorSet* descriptorSet) { auto descriptorSetImpl = (DescriptorSetImpl*)descriptorSet; @@ -1259,7 +1349,8 @@ void GLRenderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* lay m_boundDescriptorSets[index] = descriptorSetImpl; } -Result GLRenderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) +SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createDescriptorSetLayout( + const IDescriptorSetLayout::Desc& desc, IDescriptorSetLayout** outLayout) { RefPtr<DescriptorSetLayoutImpl> layoutImpl = new DescriptorSetLayoutImpl(); @@ -1309,7 +1400,8 @@ Result GLRenderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& de return SLANG_OK; } -Result GLRenderer::createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) +SLANG_NO_THROW Result SLANG_MCALL + GLRenderer::createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) { RefPtr<PipelineLayoutImpl> layoutImpl = new PipelineLayoutImpl(); @@ -1337,7 +1429,8 @@ Result GLRenderer::createPipelineLayout(const PipelineLayout::Desc& desc, Pipeli return SLANG_OK; } -Result GLRenderer::createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) +SLANG_NO_THROW Result SLANG_MCALL + GLRenderer::createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet** outDescriptorSet) { auto layoutImpl = (DescriptorSetLayoutImpl*) layout; @@ -1367,7 +1460,7 @@ Result GLRenderer::createDescriptorSet(DescriptorSetLayout* layout, DescriptorSe return SLANG_OK; } -Result GLRenderer::createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) +Result GLRenderer::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) { auto programID = glCreateProgram(); if(desc.pipelineType == PipelineType::Compute ) @@ -1422,7 +1515,7 @@ Result GLRenderer::createProgram(const ShaderProgram::Desc& desc, ShaderProgram* return SLANG_OK; } -Result GLRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, PipelineState** outState) +Result GLRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; preparePipelineDesc(desc); @@ -1439,7 +1532,7 @@ Result GLRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& return SLANG_OK; } -Result GLRenderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, PipelineState** outState) +Result GLRenderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, IPipelineState** outState) { ComputePipelineStateDesc desc = inDesc; preparePipelineDesc(desc); |
