Vulkan: Split VulkanBackend in Forward.h and DeviceVk
diff --git a/src/backend/CMakeLists.txt b/src/backend/CMakeLists.txt
index 08633c1..a93acbb 100644
--- a/src/backend/CMakeLists.txt
+++ b/src/backend/CMakeLists.txt
@@ -281,10 +281,13 @@
         ${VULKAN_DIR}/CommandBufferVk.h
         ${VULKAN_DIR}/ComputePipelineVk.cpp
         ${VULKAN_DIR}/ComputePipelineVk.h
+        ${VULKAN_DIR}/DeviceVk.cpp
+        ${VULKAN_DIR}/DeviceVk.h
         ${VULKAN_DIR}/DepthStencilStateVk.cpp
         ${VULKAN_DIR}/DepthStencilStateVk.h
         ${VULKAN_DIR}/FencedDeleter.cpp
         ${VULKAN_DIR}/FencedDeleter.h
+        ${VULKAN_DIR}/Forward.h
         ${VULKAN_DIR}/InputStateVk.cpp
         ${VULKAN_DIR}/InputStateVk.h
         ${VULKAN_DIR}/MemoryAllocator.cpp
@@ -309,8 +312,6 @@
         ${VULKAN_DIR}/SwapChainVk.h
         ${VULKAN_DIR}/TextureVk.cpp
         ${VULKAN_DIR}/TextureVk.h
-        ${VULKAN_DIR}/VulkanBackend.cpp
-        ${VULKAN_DIR}/VulkanBackend.h
         ${VULKAN_DIR}/VulkanFunctions.cpp
         ${VULKAN_DIR}/VulkanFunctions.h
         ${VULKAN_DIR}/VulkanInfo.cpp
diff --git a/src/backend/vulkan/BindGroupLayoutVk.cpp b/src/backend/vulkan/BindGroupLayoutVk.cpp
index 5a4c0b6..fe53ea5 100644
--- a/src/backend/vulkan/BindGroupLayoutVk.cpp
+++ b/src/backend/vulkan/BindGroupLayoutVk.cpp
@@ -14,7 +14,7 @@
 
 #include "backend/vulkan/BindGroupLayoutVk.h"
 
-#include "backend/vulkan/VulkanBackend.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "common/BitSetIterator.h"
 
 namespace backend { namespace vulkan {
diff --git a/src/backend/vulkan/BindGroupVk.cpp b/src/backend/vulkan/BindGroupVk.cpp
index b38efac..b66fd0f 100644
--- a/src/backend/vulkan/BindGroupVk.cpp
+++ b/src/backend/vulkan/BindGroupVk.cpp
@@ -16,10 +16,10 @@
 
 #include "backend/vulkan/BindGroupLayoutVk.h"
 #include "backend/vulkan/BufferVk.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/SamplerVk.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include "common/BitSetIterator.h"
 
diff --git a/src/backend/vulkan/BufferUploader.cpp b/src/backend/vulkan/BufferUploader.cpp
index 48938e1..947e753 100644
--- a/src/backend/vulkan/BufferUploader.cpp
+++ b/src/backend/vulkan/BufferUploader.cpp
@@ -14,9 +14,9 @@
 
 #include "backend/vulkan/BufferUploader.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/MemoryAllocator.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include <cstring>
 
diff --git a/src/backend/vulkan/BufferVk.cpp b/src/backend/vulkan/BufferVk.cpp
index 63d8619..b181cd6 100644
--- a/src/backend/vulkan/BufferVk.cpp
+++ b/src/backend/vulkan/BufferVk.cpp
@@ -15,8 +15,8 @@
 #include "backend/vulkan/BufferVk.h"
 
 #include "backend/vulkan/BufferUploader.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include <cstring>
 
diff --git a/src/backend/vulkan/CommandBufferVk.cpp b/src/backend/vulkan/CommandBufferVk.cpp
index f465827..3116e6d 100644
--- a/src/backend/vulkan/CommandBufferVk.cpp
+++ b/src/backend/vulkan/CommandBufferVk.cpp
@@ -18,11 +18,11 @@
 #include "backend/vulkan/BindGroupVk.h"
 #include "backend/vulkan/BufferVk.h"
 #include "backend/vulkan/ComputePipelineVk.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/RenderPipelineVk.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/ComputePipelineVk.cpp b/src/backend/vulkan/ComputePipelineVk.cpp
index aaa3aa4..b418bdc 100644
--- a/src/backend/vulkan/ComputePipelineVk.cpp
+++ b/src/backend/vulkan/ComputePipelineVk.cpp
@@ -14,10 +14,10 @@
 
 #include "backend/vulkan/ComputePipelineVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/ShaderModuleVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/VulkanBackend.cpp b/src/backend/vulkan/DeviceVk.cpp
similarity index 99%
rename from src/backend/vulkan/VulkanBackend.cpp
rename to src/backend/vulkan/DeviceVk.cpp
index 03a738f..632c29b 100644
--- a/src/backend/vulkan/VulkanBackend.cpp
+++ b/src/backend/vulkan/DeviceVk.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "backend/vulkan/VulkanBackend.h"
+#include "backend/vulkan/DeviceVk.h"
 
 #include "backend/Commands.h"
 #include "backend/vulkan/BindGroupLayoutVk.h"
diff --git a/src/backend/vulkan/VulkanBackend.h b/src/backend/vulkan/DeviceVk.h
similarity index 77%
rename from src/backend/vulkan/VulkanBackend.h
rename to src/backend/vulkan/DeviceVk.h
index 2458c2c..14cbcf3 100644
--- a/src/backend/vulkan/VulkanBackend.h
+++ b/src/backend/vulkan/DeviceVk.h
@@ -1,4 +1,4 @@
-// Copyright 2017 The NXT Authors
+// Copyright 2018 The NXT Authors
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef BACKEND_VULKAN_VULKANBACKEND_H_
-#define BACKEND_VULKAN_VULKANBACKEND_H_
+#ifndef BACKEND_VULKAN_DEVICEVK_H_
+#define BACKEND_VULKAN_DEVICEVK_H_
 
 #include "nxt/nxtcpp.h"
 
 #include "backend/Device.h"
-#include "backend/ToBackend.h"
+#include "backend/vulkan/Forward.h"
 #include "backend/vulkan/VulkanFunctions.h"
 #include "backend/vulkan/VulkanInfo.h"
 #include "common/DynamicLib.h"
@@ -27,65 +27,14 @@
 
 #include <queue>
 
-namespace backend {
-    class BufferViewBase;
-}
-
 namespace backend { namespace vulkan {
 
-    class BindGroup;
-    class BindGroupLayout;
-    class BlendState;
-    class Buffer;
-    using BufferView = BufferViewBase;
-    class CommandBuffer;
-    class ComputePipeline;
-    class DepthStencilState;
-    class Device;
-    class InputState;
-    class PipelineLayout;
-    class Queue;
-    class RenderPassDescriptor;
-    class RenderPipeline;
-    class Sampler;
-    class ShaderModule;
-    class SwapChain;
-    class Texture;
-    class TextureView;
-
     class BufferUploader;
     class FencedDeleter;
     class MapRequestTracker;
     class MemoryAllocator;
     class RenderPassCache;
 
-    struct VulkanBackendTraits {
-        using BindGroupType = BindGroup;
-        using BindGroupLayoutType = BindGroupLayout;
-        using BlendStateType = BlendState;
-        using BufferType = Buffer;
-        using BufferViewType = BufferView;
-        using CommandBufferType = CommandBuffer;
-        using ComputePipelineType = ComputePipeline;
-        using DepthStencilStateType = DepthStencilState;
-        using DeviceType = Device;
-        using InputStateType = InputState;
-        using PipelineLayoutType = PipelineLayout;
-        using QueueType = Queue;
-        using RenderPassDescriptorType = RenderPassDescriptor;
-        using RenderPipelineType = RenderPipeline;
-        using SamplerType = Sampler;
-        using ShaderModuleType = ShaderModule;
-        using SwapChainType = SwapChain;
-        using TextureType = Texture;
-        using TextureViewType = TextureView;
-    };
-
-    template <typename T>
-    auto ToBackend(T&& common) -> decltype(ToBackendBase<VulkanBackendTraits>(common)) {
-        return ToBackendBase<VulkanBackendTraits>(common);
-    }
-
     class Device : public DeviceBase {
       public:
         Device(const std::vector<const char*>& requiredInstanceExtensions);
@@ -206,4 +155,4 @@
 
 }}  // namespace backend::vulkan
 
-#endif  // BACKEND_VULKAN_VULKANBACKEND_H_
+#endif  // BACKEND_VULKAN_DEVICEVK_H_
diff --git a/src/backend/vulkan/FencedDeleter.cpp b/src/backend/vulkan/FencedDeleter.cpp
index 1e2b7a0..c3cb1ce 100644
--- a/src/backend/vulkan/FencedDeleter.cpp
+++ b/src/backend/vulkan/FencedDeleter.cpp
@@ -14,7 +14,7 @@
 
 #include "backend/vulkan/FencedDeleter.h"
 
-#include "backend/vulkan/VulkanBackend.h"
+#include "backend/vulkan/DeviceVk.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/Forward.h b/src/backend/vulkan/Forward.h
new file mode 100644
index 0000000..047512b
--- /dev/null
+++ b/src/backend/vulkan/Forward.h
@@ -0,0 +1,75 @@
+// Copyright 2018 The NXT Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef BACKEND_VULKAN_FORWARD_H_
+#define BACKEND_VULKAN_FORWARD_H_
+
+#include "backend/ToBackend.h"
+
+namespace backend {
+    class BufferViewBase;
+}
+
+namespace backend { namespace vulkan {
+
+    class BindGroup;
+    class BindGroupLayout;
+    class BlendState;
+    class Buffer;
+    using BufferView = BufferViewBase;
+    class CommandBuffer;
+    class ComputePipeline;
+    class DepthStencilState;
+    class Device;
+    class InputState;
+    class PipelineLayout;
+    class Queue;
+    class RenderPassDescriptor;
+    class RenderPipeline;
+    class Sampler;
+    class ShaderModule;
+    class SwapChain;
+    class Texture;
+    class TextureView;
+
+    struct VulkanBackendTraits {
+        using BindGroupType = BindGroup;
+        using BindGroupLayoutType = BindGroupLayout;
+        using BlendStateType = BlendState;
+        using BufferType = Buffer;
+        using BufferViewType = BufferView;
+        using CommandBufferType = CommandBuffer;
+        using ComputePipelineType = ComputePipeline;
+        using DepthStencilStateType = DepthStencilState;
+        using DeviceType = Device;
+        using InputStateType = InputState;
+        using PipelineLayoutType = PipelineLayout;
+        using QueueType = Queue;
+        using RenderPassDescriptorType = RenderPassDescriptor;
+        using RenderPipelineType = RenderPipeline;
+        using SamplerType = Sampler;
+        using ShaderModuleType = ShaderModule;
+        using SwapChainType = SwapChain;
+        using TextureType = Texture;
+        using TextureViewType = TextureView;
+    };
+
+    template <typename T>
+    auto ToBackend(T&& common) -> decltype(ToBackendBase<VulkanBackendTraits>(common)) {
+        return ToBackendBase<VulkanBackendTraits>(common);
+    }
+
+}}  // namespace backend::vulkan
+
+#endif  // BACKEND_VULKAN_FORWARD_H_
diff --git a/src/backend/vulkan/GeneratedCodeIncludes.h b/src/backend/vulkan/GeneratedCodeIncludes.h
index 90243f6..07e76da 100644
--- a/src/backend/vulkan/GeneratedCodeIncludes.h
+++ b/src/backend/vulkan/GeneratedCodeIncludes.h
@@ -19,6 +19,7 @@
 #include "backend/vulkan/CommandBufferVk.h"
 #include "backend/vulkan/ComputePipelineVk.h"
 #include "backend/vulkan/DepthStencilStateVk.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/InputStateVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/QueueVk.h"
@@ -28,4 +29,3 @@
 #include "backend/vulkan/ShaderModuleVk.h"
 #include "backend/vulkan/SwapChainVk.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
diff --git a/src/backend/vulkan/MemoryAllocator.cpp b/src/backend/vulkan/MemoryAllocator.cpp
index 37e1d99..24476b9 100644
--- a/src/backend/vulkan/MemoryAllocator.cpp
+++ b/src/backend/vulkan/MemoryAllocator.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/MemoryAllocator.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/NativeSwapChainImplVk.cpp b/src/backend/vulkan/NativeSwapChainImplVk.cpp
index a595ff0..d623012 100644
--- a/src/backend/vulkan/NativeSwapChainImplVk.cpp
+++ b/src/backend/vulkan/NativeSwapChainImplVk.cpp
@@ -14,9 +14,9 @@
 
 #include "backend/vulkan/NativeSwapChainImplVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include <limits>
 
diff --git a/src/backend/vulkan/PipelineLayoutVk.cpp b/src/backend/vulkan/PipelineLayoutVk.cpp
index d59b2b6..21fb38f 100644
--- a/src/backend/vulkan/PipelineLayoutVk.cpp
+++ b/src/backend/vulkan/PipelineLayoutVk.cpp
@@ -15,8 +15,8 @@
 #include "backend/vulkan/PipelineLayoutVk.h"
 
 #include "backend/vulkan/BindGroupLayoutVk.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include "common/BitSetIterator.h"
 
diff --git a/src/backend/vulkan/QueueVk.cpp b/src/backend/vulkan/QueueVk.cpp
index b0004a0..58f0385 100644
--- a/src/backend/vulkan/QueueVk.cpp
+++ b/src/backend/vulkan/QueueVk.cpp
@@ -15,7 +15,7 @@
 #include "backend/vulkan/QueueVk.h"
 
 #include "backend/vulkan/CommandBufferVk.h"
-#include "backend/vulkan/VulkanBackend.h"
+#include "backend/vulkan/DeviceVk.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/RenderPassCache.cpp b/src/backend/vulkan/RenderPassCache.cpp
index 0d9e63e..5d313da 100644
--- a/src/backend/vulkan/RenderPassCache.cpp
+++ b/src/backend/vulkan/RenderPassCache.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/RenderPassCache.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 #include "common/BitSetIterator.h"
 #include "common/HashUtils.h"
 
diff --git a/src/backend/vulkan/RenderPassDescriptorVk.cpp b/src/backend/vulkan/RenderPassDescriptorVk.cpp
index 02d4337..6c06b0d 100644
--- a/src/backend/vulkan/RenderPassDescriptorVk.cpp
+++ b/src/backend/vulkan/RenderPassDescriptorVk.cpp
@@ -14,10 +14,10 @@
 
 #include "backend/vulkan/RenderPassDescriptorVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/RenderPassCache.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 #include "common/BitSetIterator.h"
 
 namespace backend { namespace vulkan {
diff --git a/src/backend/vulkan/RenderPipelineVk.cpp b/src/backend/vulkan/RenderPipelineVk.cpp
index 37add1e..764179f 100644
--- a/src/backend/vulkan/RenderPipelineVk.cpp
+++ b/src/backend/vulkan/RenderPipelineVk.cpp
@@ -16,13 +16,13 @@
 
 #include "backend/vulkan/BlendStateVk.h"
 #include "backend/vulkan/DepthStencilStateVk.h"
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/InputStateVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/RenderPassCache.h"
 #include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/ShaderModuleVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/SamplerVk.cpp b/src/backend/vulkan/SamplerVk.cpp
index f45fe13..2a7653d 100644
--- a/src/backend/vulkan/SamplerVk.cpp
+++ b/src/backend/vulkan/SamplerVk.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/SamplerVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/ShaderModuleVk.cpp b/src/backend/vulkan/ShaderModuleVk.cpp
index 8df4ea3..9b4b1ce 100644
--- a/src/backend/vulkan/ShaderModuleVk.cpp
+++ b/src/backend/vulkan/ShaderModuleVk.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/ShaderModuleVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 #include <spirv-cross/spirv_cross.hpp>
 
diff --git a/src/backend/vulkan/SwapChainVk.cpp b/src/backend/vulkan/SwapChainVk.cpp
index 60f1a2e..91d0baf 100644
--- a/src/backend/vulkan/SwapChainVk.cpp
+++ b/src/backend/vulkan/SwapChainVk.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/SwapChainVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/TextureVk.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/TextureVk.cpp b/src/backend/vulkan/TextureVk.cpp
index bd24d14..9d52f5c 100644
--- a/src/backend/vulkan/TextureVk.cpp
+++ b/src/backend/vulkan/TextureVk.cpp
@@ -14,8 +14,8 @@
 
 #include "backend/vulkan/TextureVk.h"
 
+#include "backend/vulkan/DeviceVk.h"
 #include "backend/vulkan/FencedDeleter.h"
-#include "backend/vulkan/VulkanBackend.h"
 
 namespace backend { namespace vulkan {
 
diff --git a/src/backend/vulkan/VulkanInfo.cpp b/src/backend/vulkan/VulkanInfo.cpp
index 99efca1..b94c67a 100644
--- a/src/backend/vulkan/VulkanInfo.cpp
+++ b/src/backend/vulkan/VulkanInfo.cpp
@@ -14,7 +14,7 @@
 
 #include "backend/vulkan/VulkanInfo.h"
 
-#include "backend/vulkan/VulkanBackend.h"
+#include "backend/vulkan/DeviceVk.h"
 
 #include <cstring>