diff options
| author | Yong He <yonghe@outlook.com> | 2021-03-11 09:14:30 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-11 09:14:30 -0800 |
| commit | a07455c175db33d8d95bc5cd83738808d74cd105 (patch) | |
| tree | 02660537db912b7d48f34c751dc5731b88daa0db /tools/gfx | |
| parent | 6cbd9d68a03f0a22305d4e224a3da7633b23de38 (diff) | |
Add Linux support to `platform` and `gfx`. (#1744)
Diffstat (limited to 'tools/gfx')
| -rw-r--r-- | tools/gfx/immediate-renderer-base.cpp | 36 | ||||
| -rw-r--r-- | tools/gfx/render.cpp | 6 | ||||
| -rw-r--r-- | tools/gfx/vulkan/render-vk.cpp | 51 |
3 files changed, 55 insertions, 38 deletions
diff --git a/tools/gfx/immediate-renderer-base.cpp b/tools/gfx/immediate-renderer-base.cpp index 36d98f957..14c6cf217 100644 --- a/tools/gfx/immediate-renderer-base.cpp +++ b/tools/gfx/immediate-renderer-base.cpp @@ -57,8 +57,8 @@ public: *outObject = nullptr; return SLANG_E_NO_INTERFACE; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } public: CommandWriter* m_writer; @@ -99,13 +99,13 @@ public: m_writer->clearFrame(clearMask, clearDepth, clearStencil); } - virtual SLANG_NO_THROW void SLANG_MCALL setPipelineState(IPipelineState* state) + virtual SLANG_NO_THROW void SLANG_MCALL setPipelineState(IPipelineState* state) override { m_writer->setPipelineState(state); } virtual SLANG_NO_THROW void SLANG_MCALL - bindRootShaderObject(IShaderObject* object) + bindRootShaderObject(IShaderObject* object) override { m_writer->bindRootShaderObject(PipelineType::Graphics, object); } @@ -113,22 +113,22 @@ public: virtual SLANG_NO_THROW void SLANG_MCALL setDescriptorSet( IPipelineLayout* layout, UInt index, - IDescriptorSet* descriptorSet) + IDescriptorSet* descriptorSet) override { m_writer->setDescriptorSet(PipelineType::Graphics, layout, index, descriptorSet); } virtual SLANG_NO_THROW void SLANG_MCALL - setViewports(uint32_t count, const Viewport* viewports) + setViewports(uint32_t count, const Viewport* viewports) override { m_writer->setViewports(count, viewports); } virtual SLANG_NO_THROW void SLANG_MCALL - setScissorRects(uint32_t count, const ScissorRect* scissors) + setScissorRects(uint32_t count, const ScissorRect* scissors) override { m_writer->setScissorRects(count, scissors); } - virtual SLANG_NO_THROW void SLANG_MCALL setPrimitiveTopology(PrimitiveTopology topology) + virtual SLANG_NO_THROW void SLANG_MCALL setPrimitiveTopology(PrimitiveTopology topology) override { m_writer->setPrimitiveTopology(topology); } @@ -137,29 +137,29 @@ public: UInt slotCount, IBufferResource* const* buffers, const UInt* strides, - const UInt* offsets) + const UInt* offsets) override { m_writer->setVertexBuffers(startSlot, slotCount, buffers, strides, offsets); } virtual SLANG_NO_THROW void SLANG_MCALL - setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) + setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) override { m_writer->setIndexBuffer(buffer, indexFormat, offset); } - virtual SLANG_NO_THROW void SLANG_MCALL draw(UInt vertexCount, UInt startVertex) + virtual SLANG_NO_THROW void SLANG_MCALL draw(UInt vertexCount, UInt startVertex) override { m_writer->draw(vertexCount, startVertex); } virtual SLANG_NO_THROW void SLANG_MCALL - drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) + drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) override { m_writer->drawIndexed(indexCount, startIndex, baseVertex); } - virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference(uint32_t referenceValue) + virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference(uint32_t referenceValue) override { m_writer->setStencilReference(referenceValue); } @@ -193,8 +193,8 @@ public: *outObject = nullptr; return SLANG_E_NO_INTERFACE; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } public: CommandWriter* m_writer; @@ -255,8 +255,8 @@ public: *outObject = nullptr; return SLANG_E_NO_INTERFACE; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() { return 1; } - virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; } + virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; } public: CommandWriter* m_writer; @@ -278,7 +278,7 @@ public: } virtual SLANG_NO_THROW void SLANG_MCALL - uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data) + uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data) override { m_writer->uploadBufferData(dst, offset, size, data); } diff --git a/tools/gfx/render.cpp b/tools/gfx/render.cpp index 5ef2a454e..4ecb52287 100644 --- a/tools/gfx/render.cpp +++ b/tools/gfx/render.cpp @@ -90,6 +90,12 @@ extern "C" return SLANG_FAIL; } break; +#elif SLANG_LINUX_FAMILY + case DeviceType::Default: + case DeviceType::Vulkan: + { + return createVKDevice(desc, outDevice); + } #endif default: diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp index c0ece3e2f..ee494d4c8 100644 --- a/tools/gfx/vulkan/render-vk.cpp +++ b/tools/gfx/vulkan/render-vk.cpp @@ -30,6 +30,11 @@ # endif #endif +// Undef xlib macros +#ifdef Always +#undef Always +#endif + namespace gfx { using namespace Slang; @@ -1552,7 +1557,7 @@ public: size_t dstOffset, IBufferResource* src, size_t srcOffset, - size_t size) + size_t size) override { SLANG_UNUSED(dst); SLANG_UNUSED(srcOffset); @@ -1561,7 +1566,7 @@ public: SLANG_UNUSED(size); } virtual SLANG_NO_THROW void SLANG_MCALL - uploadBufferData(IBufferResource* buffer, size_t offset, size_t size, void* data) + uploadBufferData(IBufferResource* buffer, size_t offset, size_t size, void* data) override { _uploadBufferData( m_commandBuffer->m_commandBuffer, @@ -1850,9 +1855,7 @@ public: ::GetClientRect((HWND)m_windowHandle.handleValues[0], &rc); *widthOut = rc.right - rc.left; *heightOut = rc.bottom - rc.top; -#else - auto platformDesc = _getPlatformDesc<XPlatformDesc>(); - +#elif defined(SLANG_ENABLE_XLIB) XWindowAttributes winAttr = {}; XGetWindowAttributes( (Display*)m_windowHandle.handleValues[0], @@ -1861,6 +1864,9 @@ public: *widthOut = winAttr.width; *heightOut = winAttr.height; +#else + *widthOut = 0; + *heightOut = 0; #endif } @@ -2088,9 +2094,9 @@ public: return SLANG_OK; } - virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() { return m_desc; } + virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override { return m_desc; } virtual SLANG_NO_THROW Result - SLANG_MCALL getImage(uint32_t index, ITextureResource** outResource) + SLANG_MCALL getImage(uint32_t index, ITextureResource** outResource) override { if (m_images.getCount() <= (Index)index) return SLANG_FAIL; @@ -2098,14 +2104,14 @@ public: m_images[index]->addRef(); return SLANG_OK; } - virtual SLANG_NO_THROW Result SLANG_MCALL resize(uint32_t width, uint32_t height) + virtual SLANG_NO_THROW Result SLANG_MCALL resize(uint32_t width, uint32_t height) override { SLANG_UNUSED(width); SLANG_UNUSED(height); destroySwapchainAndImages(); return createSwapchainAndImages(); } - virtual SLANG_NO_THROW Result SLANG_MCALL present() + virtual SLANG_NO_THROW Result SLANG_MCALL present() override { uint32_t swapChainIndices[] = {uint32_t(m_currentImageIndex)}; @@ -2123,7 +2129,7 @@ public: m_queue->m_pendingWaitSemaphore = VK_NULL_HANDLE; return SLANG_OK; } - virtual SLANG_NO_THROW int SLANG_MCALL acquireNextImage() + virtual SLANG_NO_THROW int SLANG_MCALL acquireNextImage() override { if (!m_images.getCount()) return -1; @@ -2283,9 +2289,9 @@ VkBool32 VKDevice::handleDebugMessage(VkDebugReportFlagsEXT flags, VkDebugReport fprintf(stderr, "%s", buffer); fflush(stderr); - +#ifdef _WIN32 OutputDebugStringA(buffer); - +#endif return VK_FALSE; } @@ -2339,8 +2345,9 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer) applicationInfo.pApplicationName = "slang-render-test"; applicationInfo.pEngineName = "slang-render-test"; applicationInfo.apiVersion = VK_API_VERSION_1_0; - - char const* instanceExtensions[] = + applicationInfo.engineVersion = 1; + applicationInfo.applicationVersion = 1; + const char* instanceExtensions[] = { VK_KHR_SURFACE_EXTENSION_NAME, @@ -2348,8 +2355,8 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer) #if SLANG_WINDOWS_FAMILY VK_KHR_WIN32_SURFACE_EXTENSION_NAME, -#else - VK_KHR_XLIB_SURFACE_EXTENSION_NAME +#elif defined(SLANG_ENABLE_XLIB) + VK_KHR_XLIB_SURFACE_EXTENSION_NAME, #endif #if ENABLE_VALIDATION_LAYER @@ -2361,7 +2368,6 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer) VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; instanceCreateInfo.pApplicationInfo = &applicationInfo; - instanceCreateInfo.enabledExtensionCount = SLANG_COUNT_OF(instanceExtensions); instanceCreateInfo.ppEnabledExtensionNames = &instanceExtensions[0]; @@ -2414,9 +2420,7 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer) instanceCreateInfo.ppEnabledLayerNames = layerNames; } } - - if (m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance) != VK_SUCCESS) - return SLANG_FAIL; + SLANG_RETURN_ON_FAIL(m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance)); SLANG_RETURN_ON_FAIL(m_api.initInstanceProcs(instance)); if (useValidationLayer) @@ -2673,6 +2677,13 @@ Result VKDevice::createCommandQueue(const ICommandQueue::Desc& desc, ICommandQue Result VKDevice::createSwapchain( const ISwapchain::Desc& desc, WindowHandle window, ISwapchain** outSwapchain) { +#if !defined(SLANG_ENABLE_XLIB) + if (window.type == WindowHandle::Type::XLibHandle) + { + return SLANG_FAIL; + } +#endif + RefPtr<SwapchainImpl> sc = new SwapchainImpl(); SLANG_RETURN_ON_FAIL(sc->init(this, desc, window)); *outSwapchain = sc.detach(); |
