From 08ef9819c8b6e7fa21f5acccc57a4e6692b1dcc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Mathisen?= Date: Sun, 13 Nov 2016 03:00:36 +0100 Subject: [PATCH 1/4] Vulkan example: Fix validation layer warnings and errors and redeclare gl_PerVertex. --- examples/vulkan_example/glsl_shader.vert | 4 + .../vulkan_example/imgui_impl_glfw_vulkan.cpp | 83 +++++++++---------- examples/vulkan_example/main.cpp | 44 +++++++++- 3 files changed, 82 insertions(+), 49 deletions(-) diff --git a/examples/vulkan_example/glsl_shader.vert b/examples/vulkan_example/glsl_shader.vert index c4e4e216b..20b290827 100644 --- a/examples/vulkan_example/glsl_shader.vert +++ b/examples/vulkan_example/glsl_shader.vert @@ -8,6 +8,10 @@ layout(push_constant) uniform uPushConstant{ vec2 uTranslate; } pc; +out gl_PerVertex{ + vec4 gl_Position; +}; + layout(location = 0) out struct{ vec4 Color; vec2 UV; diff --git a/examples/vulkan_example/imgui_impl_glfw_vulkan.cpp b/examples/vulkan_example/imgui_impl_glfw_vulkan.cpp index 838e75e91..ef9da8954 100644 --- a/examples/vulkan_example/imgui_impl_glfw_vulkan.cpp +++ b/examples/vulkan_example/imgui_impl_glfw_vulkan.cpp @@ -61,58 +61,52 @@ static VkBuffer g_IndexBuffer[IMGUI_VK_QUEUED_FRAMES] = {}; static VkDeviceMemory g_UploadBufferMemory = VK_NULL_HANDLE; static VkBuffer g_UploadBuffer = VK_NULL_HANDLE; -static uint32_t __glsl_shader_vert_spv[] = +static uint32_t __glsl_shader_vert_spv[] = { - 0x07230203,0x00010000,0x00080001,0x00000031,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, - 0x0000001e,0x0000001f,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, - 0x0000001c,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000001c,0x00000000, - 0x505f6c67,0x7469736f,0x006e6f69,0x00070006,0x0000001c,0x00000001,0x505f6c67,0x746e696f, - 0x657a6953,0x00000000,0x00070006,0x0000001c,0x00000002,0x435f6c67,0x4470696c,0x61747369, - 0x0065636e,0x00070006,0x0000001c,0x00000003,0x435f6c67,0x446c6c75,0x61747369,0x0065636e, - 0x00030005,0x0000001e,0x00000000,0x00040005,0x0000001f,0x736f5061,0x00000000,0x00060005, - 0x00000021,0x73755075,0x6e6f4368,0x6e617473,0x00000074,0x00050006,0x00000021,0x00000000, - 0x61635375,0x0000656c,0x00060006,0x00000021,0x00000001,0x61725475,0x616c736e,0x00006574, - 0x00030005,0x00000023,0x00006370,0x00040047,0x0000000b,0x0000001e,0x00000000,0x00040047, - 0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015,0x0000001e,0x00000001,0x00050048, - 0x0000001c,0x00000000,0x0000000b,0x00000000,0x00050048,0x0000001c,0x00000001,0x0000000b, - 0x00000001,0x00050048,0x0000001c,0x00000002,0x0000000b,0x00000003,0x00050048,0x0000001c, - 0x00000003,0x0000000b,0x00000004,0x00030047,0x0000001c,0x00000002,0x00040047,0x0000001f, - 0x0000001e,0x00000000,0x00050048,0x00000021,0x00000000,0x00000023,0x00000000,0x00050048, - 0x00000021,0x00000001,0x00000023,0x00000008,0x00030047,0x00000021,0x00000002,0x00020013, - 0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017, - 0x00000007,0x00000006,0x00000004,0x00040017,0x00000008,0x00000006,0x00000002,0x0004001e, - 0x00000009,0x00000007,0x00000008,0x00040020,0x0000000a,0x00000003,0x00000009,0x0004003b, - 0x0000000a,0x0000000b,0x00000003,0x00040015,0x0000000c,0x00000020,0x00000001,0x0004002b, - 0x0000000c,0x0000000d,0x00000000,0x00040020,0x0000000e,0x00000001,0x00000007,0x0004003b, - 0x0000000e,0x0000000f,0x00000001,0x00040020,0x00000011,0x00000003,0x00000007,0x0004002b, - 0x0000000c,0x00000013,0x00000001,0x00040020,0x00000014,0x00000001,0x00000008,0x0004003b, - 0x00000014,0x00000015,0x00000001,0x00040020,0x00000017,0x00000003,0x00000008,0x00040015, - 0x00000019,0x00000020,0x00000000,0x0004002b,0x00000019,0x0000001a,0x00000001,0x0004001c, - 0x0000001b,0x00000006,0x0000001a,0x0006001e,0x0000001c,0x00000007,0x00000006,0x0000001b, - 0x0000001b,0x00040020,0x0000001d,0x00000003,0x0000001c,0x0004003b,0x0000001d,0x0000001e, - 0x00000003,0x0004003b,0x00000014,0x0000001f,0x00000001,0x0004001e,0x00000021,0x00000008, - 0x00000008,0x00040020,0x00000022,0x00000009,0x00000021,0x0004003b,0x00000022,0x00000023, - 0x00000009,0x00040020,0x00000024,0x00000009,0x00000008,0x0004002b,0x00000006,0x0000002b, - 0x00000000,0x0004002b,0x00000006,0x0000002c,0x3f800000,0x00050036,0x00000002,0x00000004, - 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f, - 0x00050041,0x00000011,0x00000012,0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010, - 0x0004003d,0x00000008,0x00000016,0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b, - 0x00000013,0x0003003e,0x00000018,0x00000016,0x0004003d,0x00000008,0x00000020,0x0000001f, - 0x00050041,0x00000024,0x00000025,0x00000023,0x0000000d,0x0004003d,0x00000008,0x00000026, - 0x00000025,0x00050085,0x00000008,0x00000027,0x00000020,0x00000026,0x00050041,0x00000024, - 0x00000028,0x00000023,0x00000013,0x0004003d,0x00000008,0x00000029,0x00000028,0x00050081, - 0x00000008,0x0000002a,0x00000027,0x00000029,0x00050051,0x00000006,0x0000002d,0x0000002a, - 0x00000000,0x00050051,0x00000006,0x0000002e,0x0000002a,0x00000001,0x00070050,0x00000007, - 0x0000002f,0x0000002d,0x0000002e,0x0000002b,0x0000002c,0x00050041,0x00000011,0x00000030, - 0x0000001e,0x0000000d,0x0003003e,0x00000030,0x0000002f,0x000100fd,0x00010038 + 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, + 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, + 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, + 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, + 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, + 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, + 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, + 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, + 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, + 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, + 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, + 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, + 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, + 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, + 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, + 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, + 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, + 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, + 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, + 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, + 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, + 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, + 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, + 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, + 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, + 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, + 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, + 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, + 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, + 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, + 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, + 0x0000002d,0x0000002c,0x000100fd,0x00010038 }; -static uint32_t __glsl_shader_frag_spv[] = +static uint32_t __glsl_shader_frag_spv[] = { 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, @@ -406,7 +400,6 @@ bool ImGui_ImplGlfwVulkan_CreateFontsTexture(VkCommandBuffer command_buffer) // Create the Image View: { - VkResult err; VkImageViewCreateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; info.image = g_FontImage; diff --git a/examples/vulkan_example/main.cpp b/examples/vulkan_example/main.cpp index 1893e0338..7107c1f58 100644 --- a/examples/vulkan_example/main.cpp +++ b/examples/vulkan_example/main.cpp @@ -49,7 +49,7 @@ static void check_vk_result(VkResult err) { if (err == 0) return; printf("VkResult %d\n", err); - if (err < 0) + if (err < 0) abort(); } @@ -204,14 +204,48 @@ static void setup_vulkan(GLFWwindow* window) err = glfwCreateWindowSurface(g_Instance, window, g_Allocator, &g_Surface); check_vk_result(err); } - - // Get GPU + + // Get GPU (WARNING here we assume the first gpu is one we can use) { uint32_t count = 1; err = vkEnumeratePhysicalDevices(g_Instance, &count, &g_Gpu); check_vk_result(err); } + // Get queue + { + uint32_t count; + vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, nullptr); + VkQueueFamilyProperties *queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties)*count); + vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, queues); + for(uint32_t i=0; i Date: Sun, 13 Nov 2016 04:28:26 +0100 Subject: [PATCH 2/4] Vulkan example: Fix gamma for some implementations. --- examples/vulkan_example/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/vulkan_example/main.cpp b/examples/vulkan_example/main.cpp index 7107c1f58..f1efd8b8a 100644 --- a/examples/vulkan_example/main.cpp +++ b/examples/vulkan_example/main.cpp @@ -24,6 +24,7 @@ static uint32_t g_QueueFamily = 0; static VkQueue g_Queue = VK_NULL_HANDLE; static VkFormat g_Format = VK_FORMAT_B8G8R8A8_UNORM; +static VkFormat g_ViewFormat = VK_FORMAT_B8G8R8A8_UNORM; static VkColorSpaceKHR g_ColorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; static VkImageSubresourceRange g_ImageRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; @@ -119,7 +120,7 @@ static void resize_vulkan(GLFWwindow* /*window*/, int w, int h) // Create the Render Pass: { VkAttachmentDescription attachment = {}; - attachment.format = g_Format; + attachment.format = g_ViewFormat; attachment.samples = VK_SAMPLE_COUNT_1_BIT; attachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; @@ -149,7 +150,7 @@ static void resize_vulkan(GLFWwindow* /*window*/, int w, int h) VkImageViewCreateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; info.viewType = VK_IMAGE_VIEW_TYPE_2D; - info.format = g_Format; + info.format = g_ViewFormat; info.components.r = VK_COMPONENT_SWIZZLE_R; info.components.g = VK_COMPONENT_SWIZZLE_G; info.components.b = VK_COMPONENT_SWIZZLE_B; From a5600b6e5904c19cbfe752806778bb9122388cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Mathisen?= Date: Sun, 13 Nov 2016 05:23:33 +0100 Subject: [PATCH 3/4] Vulkan example: Proper surface format search. --- examples/vulkan_example/main.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/examples/vulkan_example/main.cpp b/examples/vulkan_example/main.cpp index f1efd8b8a..b0535e84a 100644 --- a/examples/vulkan_example/main.cpp +++ b/examples/vulkan_example/main.cpp @@ -23,7 +23,7 @@ static VkRenderPass g_RenderPass = VK_NULL_HANDLE; static uint32_t g_QueueFamily = 0; static VkQueue g_Queue = VK_NULL_HANDLE; -static VkFormat g_Format = VK_FORMAT_B8G8R8A8_UNORM; +static VkFormat g_ImageFormat = VK_FORMAT_B8G8R8A8_UNORM; static VkFormat g_ViewFormat = VK_FORMAT_B8G8R8A8_UNORM; static VkColorSpaceKHR g_ColorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; static VkImageSubresourceRange g_ImageRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; @@ -76,7 +76,7 @@ static void resize_vulkan(GLFWwindow* /*window*/, int w, int h) VkSwapchainCreateInfoKHR info = {}; info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; info.surface = g_Surface; - info.imageFormat = g_Format; + info.imageFormat = g_ImageFormat; info.imageColorSpace = g_ColorSpace; info.imageArrayLayers = 1; info.imageUsage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; @@ -216,7 +216,7 @@ static void setup_vulkan(GLFWwindow* window) // Get queue { uint32_t count; - vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, nullptr); + vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, NULL); VkQueueFamilyProperties *queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties)*count); vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, queues); for(uint32_t i=0; i Date: Sun, 13 Nov 2016 17:57:43 +0100 Subject: [PATCH 4/4] Examples: Vulkan: Coding style fixes (#910) --- examples/vulkan_example/main.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/examples/vulkan_example/main.cpp b/examples/vulkan_example/main.cpp index b0535e84a..8116e08c2 100644 --- a/examples/vulkan_example/main.cpp +++ b/examples/vulkan_example/main.cpp @@ -217,10 +217,12 @@ static void setup_vulkan(GLFWwindow* window) { uint32_t count; vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, NULL); - VkQueueFamilyProperties *queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties)*count); + VkQueueFamilyProperties* queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties) * count); vkGetPhysicalDeviceQueueFamilyProperties(g_Gpu, &count, queues); - for(uint32_t i=0; i