Бранимир Караџић 6 rokov pred
rodič
commit
69a19c762c
1 zmenil súbory, kde vykonal 155 pridanie a 110 odobranie
  1. 155 110
      src/renderer_vk.cpp

+ 155 - 110
src/renderer_vk.cpp

@@ -13,7 +13,7 @@
 #	import <Foundation/Foundation.h>
 #	import <Foundation/Foundation.h>
 #	import <QuartzCore/QuartzCore.h>
 #	import <QuartzCore/QuartzCore.h>
 #	import <Metal/Metal.h>
 #	import <Metal/Metal.h>
-#endif
+#endif // BX_PLATFORM_OSX
 
 
 namespace bgfx { namespace vk
 namespace bgfx { namespace vk
 {
 {
@@ -913,15 +913,15 @@ VK_IMPORT
 				const char* enabledLayerNames[] =
 				const char* enabledLayerNames[] =
 				{
 				{
 #if BGFX_CONFIG_DEBUG
 #if BGFX_CONFIG_DEBUG
-//				"VK_LAYER_GOOGLE_threading",
-//				"VK_LAYER_GOOGLE_unique_objects",
+//					"VK_LAYER_GOOGLE_threading",
+//					"VK_LAYER_GOOGLE_unique_objects",
 //					"VK_LAYER_LUNARG_device_limits",
 //					"VK_LAYER_LUNARG_device_limits",
 //					"VK_LAYER_LUNARG_standard_validation",
 //					"VK_LAYER_LUNARG_standard_validation",
 //					"VK_LAYER_LUNARG_image",
 //					"VK_LAYER_LUNARG_image",
 //					"VK_LAYER_LUNARG_mem_tracker",
 //					"VK_LAYER_LUNARG_mem_tracker",
-//				"VK_LAYER_LUNARG_core_validation",
-//				"VK_LAYER_LUNARG_object_tracker",
-//				"VK_LAYER_LUNARG_parameter_validation",
+//					"VK_LAYER_LUNARG_core_validation",
+//					"VK_LAYER_LUNARG_object_tracker",
+//					"VK_LAYER_LUNARG_parameter_validation",
 //					"VK_LAYER_LUNARG_swapchain",
 //					"VK_LAYER_LUNARG_swapchain",
 //					"VK_LAYER_LUNARG_vktrace",
 //					"VK_LAYER_LUNARG_vktrace",
 //					"VK_LAYER_RENDERDOC_Capture",
 //					"VK_LAYER_RENDERDOC_Capture",
@@ -945,7 +945,7 @@ VK_IMPORT
 					&&  extension.m_initialize)
 					&&  extension.m_initialize)
 					{
 					{
 						enabledExtension[numEnabledExtensions++] = extension.m_name;
 						enabledExtension[numEnabledExtensions++] = extension.m_name;
-				BX_TRACE("%d: %s", numEnabledExtensions, extension.m_name);
+						BX_TRACE("%d: %s", numEnabledExtensions, extension.m_name);
 					}
 					}
 				}
 				}
 
 
@@ -1302,9 +1302,9 @@ VK_IMPORT_INSTANCE
 			errorState = ErrorState::DeviceCreated;
 			errorState = ErrorState::DeviceCreated;
 
 
 			BX_TRACE("Device functions:");
 			BX_TRACE("Device functions:");
-#define VK_IMPORT_DEVICE_FUNC(_optional, _func) \
+#define VK_IMPORT_DEVICE_FUNC(_optional, _func)                         \
 			_func = (PFN_##_func)vkGetDeviceProcAddr(m_device, #_func); \
 			_func = (PFN_##_func)vkGetDeviceProcAddr(m_device, #_func); \
-			BX_TRACE("\t%p " #_func, _func); \
+			BX_TRACE("\t%p " #_func, _func);                            \
 			imported &= _optional || NULL != _func
 			imported &= _optional || NULL != _func
 VK_IMPORT_DEVICE
 VK_IMPORT_DEVICE
 #undef VK_IMPORT_DEVICE_FUNC
 #undef VK_IMPORT_DEVICE_FUNC
@@ -1426,12 +1426,16 @@ VK_IMPORT_DEVICE
 					goto error;
 					goto error;
 				}
 				}
 
 
-				uint32_t width = bx::clamp<uint32_t>(_init.resolution.width,
-					surfaceCapabilities.minImageExtent.width,
-					surfaceCapabilities.maxImageExtent.width);
-				uint32_t height = bx::clamp<uint32_t>(_init.resolution.height,
-					surfaceCapabilities.minImageExtent.height,
-					surfaceCapabilities.maxImageExtent.height);
+				uint32_t width = bx::clamp<uint32_t>(
+					  _init.resolution.width
+					, surfaceCapabilities.minImageExtent.width
+					, surfaceCapabilities.maxImageExtent.width
+					);
+				uint32_t height = bx::clamp<uint32_t>(
+					  _init.resolution.height
+					, surfaceCapabilities.minImageExtent.height
+					, surfaceCapabilities.maxImageExtent.height
+					);
 
 
 				uint32_t numSurfaceFormats;
 				uint32_t numSurfaceFormats;
 				result = vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, NULL);
 				result = vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, NULL);
@@ -1447,26 +1451,35 @@ VK_IMPORT_DEVICE
 				vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, surfaceFormats);
 				vkGetPhysicalDeviceSurfaceFormatsKHR(m_physicalDevice, m_surface, &numSurfaceFormats, surfaceFormats);
 
 
 				// find the best match...
 				// find the best match...
-				VkFormat preferredSurfaceFormat[4] = {
+				VkFormat preferredSurfaceFormat[4] =
+				{
 					VK_FORMAT_R8G8B8A8_UNORM,
 					VK_FORMAT_R8G8B8A8_UNORM,
 					VK_FORMAT_B8G8R8A8_UNORM,
 					VK_FORMAT_B8G8R8A8_UNORM,
 					VK_FORMAT_R8G8B8A8_SRGB,
 					VK_FORMAT_R8G8B8A8_SRGB,
 					VK_FORMAT_B8G8R8A8_SRGB,
 					VK_FORMAT_B8G8R8A8_SRGB,
 				};
 				};
+
 				uint32_t surfaceFormatIdx = numSurfaceFormats;
 				uint32_t surfaceFormatIdx = numSurfaceFormats;
-				for (uint32_t jj = 0; jj < BX_COUNTOF(preferredSurfaceFormat); jj++) {
-					for (uint32_t ii = 0; ii < numSurfaceFormats; ii++) {
+
+				for (uint32_t jj = 0; jj < BX_COUNTOF(preferredSurfaceFormat); jj++)
+				{
+					for (uint32_t ii = 0; ii < numSurfaceFormats; ii++)
+					{
 						BX_TRACE("Supported surface format: %d", surfaceFormats[ii].format);
 						BX_TRACE("Supported surface format: %d", surfaceFormats[ii].format);
-						if (preferredSurfaceFormat[jj] == surfaceFormats[ii].format) {
+						if (preferredSurfaceFormat[jj] == surfaceFormats[ii].format)
+						{
 							surfaceFormatIdx = ii;
 							surfaceFormatIdx = ii;
 							break;
 							break;
 						}
 						}
 					}
 					}
-					if (surfaceFormatIdx < numSurfaceFormats) {// found
+
+					if (surfaceFormatIdx < numSurfaceFormats)
+					{ // found
 						BX_TRACE("Preferred surface format found: %d", surfaceFormats[surfaceFormatIdx].format);
 						BX_TRACE("Preferred surface format found: %d", surfaceFormats[surfaceFormatIdx].format);
 						break;
 						break;
 					}
 					}
 				}
 				}
+
 				BX_CHECK(surfaceFormatIdx < numSurfaceFormats, "cannot found preferred surface format from supported surface format");
 				BX_CHECK(surfaceFormatIdx < numSurfaceFormats, "cannot found preferred surface format from supported surface format");
 
 
 				uint32_t numPresentModes;
 				uint32_t numPresentModes;
@@ -1485,19 +1498,27 @@ VK_IMPORT_DEVICE
 				uint32_t presentModeIdx = 0;
 				uint32_t presentModeIdx = 0;
 
 
 				m_backBufferDepthStencilFormat =
 				m_backBufferDepthStencilFormat =
-//    				VK_FORMAT_D32_SFLOAT_S8_UINT
+//					VK_FORMAT_D32_SFLOAT_S8_UINT
 					VK_FORMAT_D24_UNORM_S8_UINT
 					VK_FORMAT_D24_UNORM_S8_UINT
 					;
 					;
 
 
 				VkCompositeAlphaFlagBitsKHR compositeAlpha = (VkCompositeAlphaFlagBitsKHR)0;
 				VkCompositeAlphaFlagBitsKHR compositeAlpha = (VkCompositeAlphaFlagBitsKHR)0;
 				if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
 				if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
-				    compositeAlpha = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
+				{
+					compositeAlpha = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
+				}
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
-				    compositeAlpha = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR;
+				{
+					compositeAlpha = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR;
+				}
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
-				    compositeAlpha = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR;
+				{
+					compositeAlpha = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR;
+				}
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
 				else if (surfaceCapabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
-				    compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
+				{
+					compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
+				}
 
 
 				m_sci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
 				m_sci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
 				m_sci.pNext = NULL;
 				m_sci.pNext = NULL;
@@ -1691,62 +1712,61 @@ VK_IMPORT_DEVICE
 
 
 			errorState = ErrorState::SwapchainCreated;
 			errorState = ErrorState::SwapchainCreated;
 
 
-
 			{
 			{
 				VkAttachmentDescription ad[2];
 				VkAttachmentDescription ad[2];
-				ad[0].flags = 0;
-				ad[0].format = m_sci.imageFormat;
-				ad[0].samples = VK_SAMPLE_COUNT_1_BIT;
-				ad[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
-				ad[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
-				ad[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+				ad[0].flags          = 0;
+				ad[0].format         = m_sci.imageFormat;
+				ad[0].samples        = VK_SAMPLE_COUNT_1_BIT;
+				ad[0].loadOp         = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+				ad[0].storeOp        = VK_ATTACHMENT_STORE_OP_STORE;
+				ad[0].stencilLoadOp  = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
 				ad[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
 				ad[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
-				ad[0].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-				ad[0].finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
-				ad[1].flags = 0;
-				ad[1].format = m_backBufferDepthStencilFormat;
-				ad[1].samples = VK_SAMPLE_COUNT_1_BIT;
-				ad[1].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
-				ad[1].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
-				ad[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+				ad[0].initialLayout  = VK_IMAGE_LAYOUT_UNDEFINED;
+				ad[0].finalLayout    = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+				ad[1].flags          = 0;
+				ad[1].format         = m_backBufferDepthStencilFormat;
+				ad[1].samples        = VK_SAMPLE_COUNT_1_BIT;
+				ad[1].loadOp         = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+				ad[1].storeOp        = VK_ATTACHMENT_STORE_OP_STORE;
+				ad[1].stencilLoadOp  = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
 				ad[1].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
 				ad[1].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
-				ad[1].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-				ad[1].finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
+				ad[1].initialLayout  = VK_IMAGE_LAYOUT_UNDEFINED;
+				ad[1].finalLayout    = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
 
 
 				VkAttachmentReference colorAr[1];
 				VkAttachmentReference colorAr[1];
 				colorAr[0].attachment = 0;
 				colorAr[0].attachment = 0;
-				colorAr[0].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+				colorAr[0].layout     = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
 
 				VkAttachmentReference resolveAr[1];
 				VkAttachmentReference resolveAr[1];
 				resolveAr[0].attachment = VK_ATTACHMENT_UNUSED;
 				resolveAr[0].attachment = VK_ATTACHMENT_UNUSED;
-				resolveAr[0].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+				resolveAr[0].layout     = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
 
 				VkAttachmentReference depthAr[1];
 				VkAttachmentReference depthAr[1];
 				depthAr[0].attachment = 1;
 				depthAr[0].attachment = 1;
 				depthAr[0].layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
 				depthAr[0].layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
 
 
 				VkSubpassDescription sd[1];
 				VkSubpassDescription sd[1];
-				sd[0].flags = 0;
-				sd[0].pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
-				sd[0].inputAttachmentCount = 0;
-				sd[0].pInputAttachments = NULL;
-				sd[0].colorAttachmentCount = BX_COUNTOF(colorAr);
-				sd[0].pColorAttachments = colorAr;
-				sd[0].pResolveAttachments = resolveAr;
+				sd[0].flags                   = 0;
+				sd[0].pipelineBindPoint       = VK_PIPELINE_BIND_POINT_GRAPHICS;
+				sd[0].inputAttachmentCount    = 0;
+				sd[0].pInputAttachments       = NULL;
+				sd[0].colorAttachmentCount    = BX_COUNTOF(colorAr);
+				sd[0].pColorAttachments       = colorAr;
+				sd[0].pResolveAttachments     = resolveAr;
 				sd[0].pDepthStencilAttachment = depthAr;
 				sd[0].pDepthStencilAttachment = depthAr;
 				sd[0].preserveAttachmentCount = 0;
 				sd[0].preserveAttachmentCount = 0;
-				sd[0].pPreserveAttachments = NULL;
+				sd[0].pPreserveAttachments    = NULL;
 
 
 				VkRenderPassCreateInfo rpi;
 				VkRenderPassCreateInfo rpi;
-				rpi.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
-				rpi.pNext = NULL;
-				rpi.flags = 0;
+				rpi.sType           = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+				rpi.pNext           = NULL;
+				rpi.flags           = 0;
 				rpi.attachmentCount = BX_COUNTOF(ad);
 				rpi.attachmentCount = BX_COUNTOF(ad);
-				rpi.pAttachments = ad;
-				rpi.subpassCount = BX_COUNTOF(sd);
-				rpi.pSubpasses = sd;
+				rpi.pAttachments    = ad;
+				rpi.subpassCount    = BX_COUNTOF(sd);
+				rpi.pSubpasses      = sd;
 				rpi.dependencyCount = 0;
 				rpi.dependencyCount = 0;
-				rpi.pDependencies = NULL;
+				rpi.pDependencies   = NULL;
 
 
 				result = vkCreateRenderPass(m_device, &rpi, m_allocatorCb, &m_renderPass);
 				result = vkCreateRenderPass(m_device, &rpi, m_allocatorCb, &m_renderPass);
 
 
@@ -1772,7 +1792,7 @@ VK_IMPORT_DEVICE
 				fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
 				fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
 				fci.pNext = NULL;
 				fci.pNext = NULL;
 				fci.flags = 0;
 				fci.flags = 0;
-				fci.renderPass = m_renderPass;
+				fci.renderPass      = m_renderPass;
 				fci.attachmentCount = BX_COUNTOF(attachments);
 				fci.attachmentCount = BX_COUNTOF(attachments);
 				fci.pAttachments    = attachments;
 				fci.pAttachments    = attachments;
 				fci.width  = m_sci.imageExtent.width;
 				fci.width  = m_sci.imageExtent.width;
@@ -1845,29 +1865,38 @@ VK_IMPORT_DEVICE
 				rpbi.clearValueCount = 0;
 				rpbi.clearValueCount = 0;
 				rpbi.pClearValues = NULL;
 				rpbi.pClearValues = NULL;
 
 
-				setImageMemoryBarrier(commandBuffer
+				setImageMemoryBarrier(
+					  commandBuffer
 					, m_backBufferDepthStencilImage
 					, m_backBufferDepthStencilImage
 					, VK_IMAGE_LAYOUT_UNDEFINED
 					, VK_IMAGE_LAYOUT_UNDEFINED
 					, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
 					, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
-					, 1, 1);
+					, 1
+					, 1
+					);
 
 
 				for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii)
 				for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii)
 				{
 				{
-					setImageMemoryBarrier(commandBuffer
+					setImageMemoryBarrier(
+						  commandBuffer
 						, m_backBufferColorImage[ii]
 						, m_backBufferColorImage[ii]
 						, VK_IMAGE_LAYOUT_UNDEFINED
 						, VK_IMAGE_LAYOUT_UNDEFINED
 						, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
 						, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-						, 1, 1);
+						, 1
+						, 1
+						);
 
 
 					rpbi.framebuffer = m_backBufferColor[ii];
 					rpbi.framebuffer = m_backBufferColor[ii];
 					vkCmdBeginRenderPass(commandBuffer, &rpbi, VK_SUBPASS_CONTENTS_INLINE);
 					vkCmdBeginRenderPass(commandBuffer, &rpbi, VK_SUBPASS_CONTENTS_INLINE);
 					vkCmdEndRenderPass(commandBuffer);
 					vkCmdEndRenderPass(commandBuffer);
 
 
-					setImageMemoryBarrier(commandBuffer
+					setImageMemoryBarrier(
+						  commandBuffer
 						, m_backBufferColorImage[ii]
 						, m_backBufferColorImage[ii]
 						, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
 						, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
 						, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
 						, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-						, 1, 1);
+						, 1
+						, 1
+						);
 				}
 				}
 
 
 				m_backBufferColorIdx = 0;
 				m_backBufferColorIdx = 0;
@@ -2662,8 +2691,8 @@ VK_IMPORT_DEVICE
 //			m_rtMsaa = _msaa;
 //			m_rtMsaa = _msaa;
 		}
 		}
 
 
-		void setBlendState(VkPipelineColorBlendStateCreateInfo& _desc, uint64_t _state, uint32_t _rgba = 0)
-		{
+          		void setBlendState(VkPipelineColorBlendStateCreateInfo& _desc, uint64_t _state, uint32_t _rgba = 0)
+          		{
 			VkPipelineColorBlendAttachmentState* bas = const_cast<VkPipelineColorBlendAttachmentState*>(_desc.pAttachments);
 			VkPipelineColorBlendAttachmentState* bas = const_cast<VkPipelineColorBlendAttachmentState*>(_desc.pAttachments);
 
 
 			uint8_t writeMask = 0;
 			uint8_t writeMask = 0;
@@ -2938,6 +2967,7 @@ VK_IMPORT_DEVICE
 				VK_DYNAMIC_STATE_BLEND_CONSTANTS,
 				VK_DYNAMIC_STATE_BLEND_CONSTANTS,
 				VK_DYNAMIC_STATE_STENCIL_REFERENCE,
 				VK_DYNAMIC_STATE_STENCIL_REFERENCE,
 			};
 			};
+
 			VkPipelineDynamicStateCreateInfo dynamicState;
 			VkPipelineDynamicStateCreateInfo dynamicState;
 			dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
 			dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
 			dynamicState.pNext = NULL;
 			dynamicState.pNext = NULL;
@@ -3095,12 +3125,12 @@ VK_IMPORT_DEVICE
 					data = (const char*)m_uniforms[handle.idx];
 					data = (const char*)m_uniforms[handle.idx];
 				}
 				}
 
 
-#define CASE_IMPLEMENT_UNIFORM(_uniform, _dxsuffix, _type) \
-				case UniformType::_uniform: \
-				case UniformType::_uniform|BGFX_UNIFORM_FRAGMENTBIT: \
-						{ \
+#define CASE_IMPLEMENT_UNIFORM(_uniform, _dxsuffix, _type)                   \
+				case UniformType::_uniform:                                  \
+				case UniformType::_uniform|BGFX_UNIFORM_FRAGMENTBIT:         \
+						{                                                    \
 							setShaderUniform(uint8_t(type), loc, data, num); \
 							setShaderUniform(uint8_t(type), loc, data, num); \
-						} \
+						}                                                    \
 						break;
 						break;
 
 
 				switch ( (uint32_t)type)
 				switch ( (uint32_t)type)
@@ -3316,7 +3346,6 @@ VK_IMPORT_DEVICE
 			vkFreeCommandBuffers(m_device, m_commandPool, 1, &commandBuffer);
 			vkFreeCommandBuffers(m_device, m_commandPool, 1, &commandBuffer);
 		}
 		}
 
 
-
 #define NUM_SWAPCHAIN_IMAGE 4
 #define NUM_SWAPCHAIN_IMAGE 4
 		VkAllocationCallbacks*   m_allocatorCb;
 		VkAllocationCallbacks*   m_allocatorCb;
 		VkDebugReportCallbackEXT m_debugReportCallback;
 		VkDebugReportCallbackEXT m_debugReportCallback;
@@ -3411,14 +3440,14 @@ VK_IMPORT_DEVICE
 		s_renderVK = NULL;
 		s_renderVK = NULL;
 	}
 	}
 
 
-#define VK_DESTROY_FUNC(_name) \
-			void vkDestroy(Vk##_name& _obj) \
-			{ \
-				if (VK_NULL_HANDLE != _obj) \
-				{ \
+#define VK_DESTROY_FUNC(_name)                                                               \
+			void vkDestroy(Vk##_name& _obj)                                                  \
+			{                                                                                \
+				if (VK_NULL_HANDLE != _obj)                                                  \
+				{                                                                            \
 					vkDestroy##_name(s_renderVK->m_device, _obj, s_renderVK->m_allocatorCb); \
 					vkDestroy##_name(s_renderVK->m_device, _obj, s_renderVK->m_allocatorCb); \
-					_obj = VK_NULL_HANDLE; \
-				} \
+					_obj = VK_NULL_HANDLE;                                                   \
+				}                                                                            \
 			}
 			}
 VK_DESTROY
 VK_DESTROY
 #undef VK_DESTROY_FUNC
 #undef VK_DESTROY_FUNC
@@ -4092,7 +4121,9 @@ VK_DESTROY
 
 
 		// create exact pipeline layout
 		// create exact pipeline layout
 		VkDescriptorSetLayout dsl = VK_NULL_HANDLE;
 		VkDescriptorSetLayout dsl = VK_NULL_HANDLE;
-		if (m_vsh->m_numBindings + m_fsh->m_numBindings > 0) {
+
+		if (m_vsh->m_numBindings + m_fsh->m_numBindings > 0)
+		{
 			// generate descriptor set layout hash
 			// generate descriptor set layout hash
 			bx::HashMurmur2A murmur;
 			bx::HashMurmur2A murmur;
 			murmur.begin();
 			murmur.begin();
@@ -4101,6 +4132,7 @@ VK_DESTROY
 			m_descriptorSetLayoutHash = murmur.end();
 			m_descriptorSetLayoutHash = murmur.end();
 
 
 			dsl = s_renderVK->m_descriptorSetLayoutCache.find(m_descriptorSetLayoutHash);
 			dsl = s_renderVK->m_descriptorSetLayoutCache.find(m_descriptorSetLayoutHash);
+
 			if (NULL == dsl)
 			if (NULL == dsl)
 			{
 			{
 				VkDescriptorSetLayoutBinding bindings[64];
 				VkDescriptorSetLayoutBinding bindings[64];
@@ -4153,28 +4185,35 @@ VK_DESTROY
 
 
 			bimg::TextureInfo ti;
 			bimg::TextureInfo ti;
 			bimg::imageGetSize(
 			bimg::imageGetSize(
-				&ti,
-				uint16_t(imageContainer.m_width >> startLod),
-				uint16_t(imageContainer.m_height >> startLod),
-				uint16_t(imageContainer.m_depth >> startLod),
-				imageContainer.m_cubeMap,
-				1 < imageContainer.m_numMips,
-				imageContainer.m_numLayers,
-				imageContainer.m_format
-			);
+				  &ti
+				, uint16_t(imageContainer.m_width >> startLod)
+				, uint16_t(imageContainer.m_height >> startLod)
+				, uint16_t(imageContainer.m_depth >> startLod)
+				, imageContainer.m_cubeMap
+				, 1 < imageContainer.m_numMips
+				, imageContainer.m_numLayers
+				, imageContainer.m_format
+				);
+
 			ti.numMips = bx::min<uint8_t>(imageContainer.m_numMips - startLod, ti.numMips);
 			ti.numMips = bx::min<uint8_t>(imageContainer.m_numMips - startLod, ti.numMips);
 
 
-			m_flags = _flags;
-			m_width = ti.width;
-			m_height = ti.height;
-			m_depth = ti.depth;
+			m_flags     = _flags;
+			m_width     = ti.width;
+			m_height    = ti.height;
+			m_depth     = ti.depth;
 			m_numLayers = ti.numLayers;
 			m_numLayers = ti.numLayers;
 			m_requestedFormat = uint8_t(imageContainer.m_format);
 			m_requestedFormat = uint8_t(imageContainer.m_format);
 			m_textureFormat = uint8_t(getViableTextureFormat(imageContainer));
 			m_textureFormat = uint8_t(getViableTextureFormat(imageContainer));
 			const bool convert = m_textureFormat != m_requestedFormat;
 			const bool convert = m_textureFormat != m_requestedFormat;
 			const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat));
 			const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat));
-			VkImageAspectFlags aspectFlag = bimg::isDepth((bimg::TextureFormat::Enum)m_textureFormat) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT;
-			VkFormat textureFormat = bimg::isDepth((bimg::TextureFormat::Enum)m_textureFormat) ? s_textureFormat[m_textureFormat].m_fmtDsv : s_textureFormat[m_textureFormat].m_fmt;
+			VkImageAspectFlags aspectFlag = bimg::isDepth((bimg::TextureFormat::Enum)m_textureFormat)
+				? VK_IMAGE_ASPECT_DEPTH_BIT
+				: VK_IMAGE_ASPECT_COLOR_BIT
+				;
+			VkFormat textureFormat = bimg::isDepth((bimg::TextureFormat::Enum)m_textureFormat)
+				? s_textureFormat[m_textureFormat].m_fmtDsv
+				: s_textureFormat[m_textureFormat].m_fmt
+				;
 
 
 			if (imageContainer.m_cubeMap)
 			if (imageContainer.m_cubeMap)
 			{
 			{
@@ -4192,7 +4231,6 @@ VK_DESTROY
 			m_numMips = ti.numMips;
 			m_numMips = ti.numMips;
 			const uint16_t numSides = ti.numLayers * (imageContainer.m_cubeMap ? 6 : 1);
 			const uint16_t numSides = ti.numLayers * (imageContainer.m_cubeMap ? 6 : 1);
 			const uint32_t numSrd = numSides * ti.numMips;
 			const uint32_t numSrd = numSides * ti.numMips;
-			//            D3D12_SUBRESOURCE_DATA* srd = (D3D12_SUBRESOURCE_DATA*)alloca(numSrd * sizeof(D3D12_SUBRESOURCE_DATA));
 
 
 			uint32_t kk = 0;
 			uint32_t kk = 0;
 
 
@@ -4214,7 +4252,8 @@ VK_DESTROY
 			);
 			);
 
 
 			// decode images
 			// decode images
-			struct ImageInfo {
+			struct ImageInfo
+			{
 				uint8_t* data;
 				uint8_t* data;
 				uint32_t width;
 				uint32_t width;
 				uint32_t height;
 				uint32_t height;
@@ -4526,30 +4565,34 @@ VK_DESTROY
 		bci.pQueueFamilyIndices = NULL;
 		bci.pQueueFamilyIndices = NULL;
 		bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
 		bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
 		bci.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
 		bci.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
-		VK_CHECK(vkCreateBuffer(device
+		VK_CHECK(vkCreateBuffer(
+			  device
 			, &bci
 			, &bci
 			, &s_allocationCb
 			, &s_allocationCb
 			, &stagingBuffer
 			, &stagingBuffer
-		));
+			));
 
 
 		VkMemoryRequirements mr;
 		VkMemoryRequirements mr;
-		vkGetBufferMemoryRequirements(device
+		vkGetBufferMemoryRequirements(
+			  device
 			, stagingBuffer
 			, stagingBuffer
 			, &mr
 			, &mr
-		);
+			);
 
 
 		VkMemoryAllocateInfo ma;
 		VkMemoryAllocateInfo ma;
 		ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
 		ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
 		ma.pNext = NULL;
 		ma.pNext = NULL;
 		ma.allocationSize = mr.size;
 		ma.allocationSize = mr.size;
-		ma.memoryTypeIndex = s_renderVK->selectMemoryType(mr.memoryTypeBits
+		ma.memoryTypeIndex = s_renderVK->selectMemoryType(
+			  mr.memoryTypeBits
 			, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
 			, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
-		);
-		VK_CHECK(vkAllocateMemory(device
+			);
+		VK_CHECK(vkAllocateMemory(
+			  device
 			, &ma
 			, &ma
 			, &s_allocationCb
 			, &s_allocationCb
 			, &stagingDeviceMem
 			, &stagingDeviceMem
-		));
+			));
 
 
 		void* directAccessPtr = NULL;
 		void* directAccessPtr = NULL;
 		VK_CHECK(vkBindBufferMemory(device, stagingBuffer, stagingDeviceMem, 0));
 		VK_CHECK(vkBindBufferMemory(device, stagingBuffer, stagingDeviceMem, 0));
@@ -4690,7 +4733,6 @@ VK_DESTROY
 		const uint64_t f0 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_FACTOR);
 		const uint64_t f0 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_FACTOR);
 		const uint64_t f1 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_FACTOR, BGFX_STATE_BLEND_INV_FACTOR);
 		const uint64_t f1 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_FACTOR, BGFX_STATE_BLEND_INV_FACTOR);
 
 
-
 		ScratchBufferVK& scratchBuffer = m_scratchBuffer[m_backBufferColorIdx];
 		ScratchBufferVK& scratchBuffer = m_scratchBuffer[m_backBufferColorIdx];
 		scratchBuffer.reset();
 		scratchBuffer.reset();
 
 
@@ -5347,6 +5389,7 @@ BX_UNUSED(currentSamplerStateIdx);
 						{
 						{
 							uint32_t vsUniformBinding = 0;
 							uint32_t vsUniformBinding = 0;
 							uint32_t fsUniformBinding = 0;
 							uint32_t fsUniformBinding = 0;
+
 							for (uint32_t ii = 0; ii < program.m_vsh->m_numBindings; ++ii)
 							for (uint32_t ii = 0; ii < program.m_vsh->m_numBindings; ++ii)
 							{
 							{
 								if (program.m_vsh->m_bindings[ii].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
 								if (program.m_vsh->m_bindings[ii].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
@@ -5355,6 +5398,7 @@ BX_UNUSED(currentSamplerStateIdx);
 									break;
 									break;
 								}
 								}
 							}
 							}
+
 							for (uint32_t ii = 0; ii < program.m_fsh->m_numBindings; ++ii)
 							for (uint32_t ii = 0; ii < program.m_fsh->m_numBindings; ++ii)
 							{
 							{
 								if (program.m_fsh->m_bindings[ii].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
 								if (program.m_fsh->m_bindings[ii].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
@@ -5416,7 +5460,8 @@ BX_UNUSED(currentSamplerStateIdx);
 
 
 
 
 						vkUpdateDescriptorSets(m_device, wdsCount, wds, 0, NULL);
 						vkUpdateDescriptorSets(m_device, wdsCount, wds, 0, NULL);
-						vkCmdBindDescriptorSets(m_commandBuffer
+						vkCmdBindDescriptorSets(
+							  m_commandBuffer
 							, VK_PIPELINE_BIND_POINT_GRAPHICS
 							, VK_PIPELINE_BIND_POINT_GRAPHICS
 							, program.m_pipelineLayout
 							, program.m_pipelineLayout
 							, 0
 							, 0
@@ -5424,7 +5469,7 @@ BX_UNUSED(currentSamplerStateIdx);
 							, &sb.m_descriptorSet[sb.m_currentDs]
 							, &sb.m_descriptorSet[sb.m_currentDs]
 							, 0
 							, 0
 							, NULL
 							, NULL
-						);
+							);
 
 
 						sb.m_currentDs++;
 						sb.m_currentDs++;
 					}
 					}