summaryrefslogtreecommitdiffstats
path: root/tools/gfx
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-03-11 09:14:30 -0800
committerGitHub <noreply@github.com>2021-03-11 09:14:30 -0800
commita07455c175db33d8d95bc5cd83738808d74cd105 (patch)
tree02660537db912b7d48f34c751dc5731b88daa0db /tools/gfx
parent6cbd9d68a03f0a22305d4e224a3da7633b23de38 (diff)
Add Linux support to `platform` and `gfx`. (#1744)
Diffstat (limited to 'tools/gfx')
-rw-r--r--tools/gfx/immediate-renderer-base.cpp36
-rw-r--r--tools/gfx/render.cpp6
-rw-r--r--tools/gfx/vulkan/render-vk.cpp51
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();