Browse Source

Vulkan example: Fix validation layer warnings and errors and redeclare gl_PerVertex.

Håvard Mathisen 8 years ago
parent
commit
08ef9819c8

+ 4 - 0
examples/vulkan_example/glsl_shader.vert

@@ -8,6 +8,10 @@ layout(push_constant) uniform uPushConstant{
     vec2 uTranslate;
     vec2 uTranslate;
 } pc;
 } pc;
 
 
+out gl_PerVertex{
+    vec4 gl_Position;
+};
+
 layout(location = 0) out struct{
 layout(location = 0) out struct{
     vec4 Color;
     vec4 Color;
     vec2 UV;
     vec2 UV;

+ 38 - 45
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 VkDeviceMemory         g_UploadBufferMemory = VK_NULL_HANDLE;
 static VkBuffer               g_UploadBuffer = 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,
     0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
     0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015,
     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,
     0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43,
     0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f,
     0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f,
     0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005,
     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,
     0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b,
     0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
     0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
@@ -406,7 +400,6 @@ bool ImGui_ImplGlfwVulkan_CreateFontsTexture(VkCommandBuffer command_buffer)
 
 
     // Create the Image View:
     // Create the Image View:
     {
     {
-        VkResult err;
         VkImageViewCreateInfo info = {};
         VkImageViewCreateInfo info = {};
         info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
         info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
         info.image = g_FontImage;
         info.image = g_FontImage;

+ 40 - 4
examples/vulkan_example/main.cpp

@@ -49,7 +49,7 @@ static void check_vk_result(VkResult err)
 {
 {
     if (err == 0) return;
     if (err == 0) return;
     printf("VkResult %d\n", err);
     printf("VkResult %d\n", err);
-    if (err < 0) 
+    if (err < 0)
         abort();
         abort();
 }
 }
 
 
@@ -204,14 +204,48 @@ static void setup_vulkan(GLFWwindow* window)
         err = glfwCreateWindowSurface(g_Instance, window, g_Allocator, &g_Surface);
         err = glfwCreateWindowSurface(g_Instance, window, g_Allocator, &g_Surface);
         check_vk_result(err);
         check_vk_result(err);
     }
     }
-    
-    // Get GPU
+
+    // Get GPU (WARNING here we assume the first gpu is one we can use)
     {
     {
         uint32_t count = 1;
         uint32_t count = 1;
         err = vkEnumeratePhysicalDevices(g_Instance, &count, &g_Gpu);
         err = vkEnumeratePhysicalDevices(g_Instance, &count, &g_Gpu);
         check_vk_result(err);
         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<count; i++){
+            if(queues[i].queueFlags & VK_QUEUE_GRAPHICS_BIT){
+                g_QueueFamily = i;
+                break;
+            }
+        }
+        free(queues);
+    }
+
+    // Check for WSI support
+    {
+        VkBool32 res;
+        vkGetPhysicalDeviceSurfaceSupportKHR(g_Gpu, g_QueueFamily, g_Surface, &res);
+        if(res != VK_TRUE){
+            fprintf(stderr, "Error no WSI support on physical device 0\n");
+            exit(-1);
+        }
+    }
+
+    // Get Surface Format (WARNING here we assume the first format is the one we want)
+    {
+        uint32_t count = 1;
+        VkSurfaceFormatKHR format;
+        vkGetPhysicalDeviceSurfaceFormatsKHR(g_Gpu, g_Surface, &count, &format);
+        g_Format = format.format;
+        g_ColorSpace = format.colorSpace;
+    }
+
     // Create Logical Device
     // Create Logical Device
     {
     {
         int device_extension_count = 1;
         int device_extension_count = 1;
@@ -280,7 +314,7 @@ static void setup_vulkan(GLFWwindow* window)
 
 
     // Create Descriptor Pool
     // Create Descriptor Pool
     {
     {
-        VkDescriptorPoolSize pool_size[11] = 
+        VkDescriptorPoolSize pool_size[11] =
         {
         {
             { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 },
             { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 },
             { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 },
             { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 },
@@ -381,10 +415,12 @@ static void frame_end()
         vkCmdPipelineBarrier(g_CommandBuffer[g_FrameIndex], VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, NULL, 0, NULL, 1, &barrier);
         vkCmdPipelineBarrier(g_CommandBuffer[g_FrameIndex], VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, NULL, 0, NULL, 1, &barrier);
     }
     }
     {
     {
+        VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
         VkSubmitInfo info = {};
         VkSubmitInfo info = {};
         info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
         info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
         info.waitSemaphoreCount = 1;
         info.waitSemaphoreCount = 1;
         info.pWaitSemaphores = &g_Semaphore[g_FrameIndex];
         info.pWaitSemaphores = &g_Semaphore[g_FrameIndex];
+        info.pWaitDstStageMask = &wait_stage;
         info.commandBufferCount = 1;
         info.commandBufferCount = 1;
         info.pCommandBuffers = &g_CommandBuffer[g_FrameIndex];
         info.pCommandBuffers = &g_CommandBuffer[g_FrameIndex];