surface: Basic surface implementation 87/65687/1
authorTaekyun Kim <tkq.kim@samsung.com>
Mon, 11 Apr 2016 08:01:34 +0000 (17:01 +0900)
committerTaekyun Kim <tkq.kim@samsung.com>
Tue, 12 Apr 2016 05:56:02 +0000 (14:56 +0900)
Just simple memory allocation and initialization

Change-Id: I00966409bc83d0f8e8d5d0b611fa77214a5f0d8c

src/wsi/surface.c
src/wsi/wsi.h

index 2c52eb0..9f03c85 100644 (file)
@@ -29,7 +29,11 @@ vk_DestroySurfaceKHR(VkInstance                                               instance,
                                         VkSurfaceKHR                                    surface,
                                         const VkAllocationCallbacks    *allocator)
 {
+       vk_surface_t *sfc = (vk_surface_t *)surface;
+
        /* TODO: */
+
+       vk_free(&sfc->allocator, sfc);
 }
 
 #ifdef VK_USE_PLATFORM_XLIB_KHR
@@ -39,7 +43,22 @@ vk_CreateXlibSurfaceKHR(VkInstance                                                    instance,
                                                const VkAllocationCallbacks                     *allocator,
                                                VkSurfaceKHR                                            *surface)
 {
+       vk_surface_t    *sfc;
+
+       allocator = vk_get_allocator(instance, allocator);
+
+       sfc = vk_alloc(allocator, sizeof(vk_surface_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+       VK_CHECK(sfc, return VK_ERROR_OUT_OF_HOST_MEMORY, "vk_alloc() failed.\n");
+
+       sfc->allocator = *allocator;
+       sfc->platform.base.platform = VK_ICD_WSI_PLATFORM_XLIB;
+       sfc->platform.xlib.dpy = info->dpy;
+       sfc->platform.xlib.window = info->window;
+
+       *surface = (VkSurfaceKHR)sfc;
+
        /* TODO: */
+
        return VK_SUCCESS;
 }
 
@@ -61,7 +80,22 @@ vk_CreateXcbSurfaceKHR(VkInstance                                                     instance,
                                           const VkAllocationCallbacks                  *allocator,
                                           VkSurfaceKHR                                                 *surface)
 {
+       vk_surface_t    *sfc;
+
+       allocator = vk_get_allocator(instance, allocator);
+
+       sfc = vk_alloc(allocator, sizeof(vk_surface_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+       VK_CHECK(sfc, return VK_ERROR_OUT_OF_HOST_MEMORY, "vk_alloc() failed.\n");
+
+       sfc->allocator = *allocator;
+       sfc->platform.base.platform = VK_ICD_WSI_PLATFORM_XCB;
+       sfc->platform.xcb.connection = info->connection;
+       sfc->platform.xcb.window = info->window;
+
+       *surface = (VkSurfaceKHR)sfc;
+
        /* TODO: */
+
        return VK_SUCCESS;
 }
 
@@ -83,7 +117,22 @@ vk_CreateWaylandSurfaceKHR(VkInstance                                                        instance,
                                                   const VkAllocationCallbacks                  *allocator,
                                                   VkSurfaceKHR                                                 *surface)
 {
+       vk_surface_t    *sfc;
+
+       allocator = vk_get_allocator(instance, allocator);
+
+       sfc = vk_alloc(allocator, sizeof(vk_surface_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+       VK_CHECK(sfc, return VK_ERROR_OUT_OF_HOST_MEMORY, "vk_alloc() failed.\n");
+
+       sfc->allocator = *allocator;
+       sfc->platform.base.platform = VK_ICD_WSI_PLATFORM_WAYLAND;
+       sfc->platform.wayland.display = info->display;
+       sfc->platform.wayland.surface = info->surface;
+
+       *surface = (VkSurfaceKHR)sfc;
+
        /* TODO: */
+
        return VK_SUCCESS;
 }
 
@@ -98,6 +147,36 @@ vk_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice   pdev,
 #endif
 
 VKAPI_ATTR VkResult VKAPI_CALL
+vk_CreateDisplayPlaneSurfaceKHR(VkInstance                                                      instance,
+                                                               const VkDisplaySurfaceCreateInfoKHR     *info,
+                                                               const VkAllocationCallbacks                     *allocator,
+                                                               VkSurfaceKHR                                            *surface)
+{
+       vk_surface_t    *sfc;
+
+       allocator = vk_get_allocator(instance, allocator);
+
+       sfc = vk_alloc(allocator, sizeof(vk_surface_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+       VK_CHECK(sfc, return VK_ERROR_OUT_OF_HOST_MEMORY, "vk_alloc() failed.\n");
+
+       sfc->allocator = *allocator;
+       sfc->platform.base.platform = VK_ICD_WSI_PLATFORM_DISPLAY;
+       sfc->platform.display.displayMode = info->displayMode;
+       sfc->platform.display.planeIndex = info->planeIndex;
+       sfc->platform.display.planeStackIndex = info->planeStackIndex;
+       sfc->platform.display.transform = info->transform;
+       sfc->platform.display.globalAlpha = info->globalAlpha;
+       sfc->platform.display.alphaMode = info->alphaMode;
+       sfc->platform.display.imageExtent = info->imageExtent;
+
+       *surface = (VkSurfaceKHR)sfc;
+
+       /* TODO: */
+
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL
 vk_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice  pdev,
                                                                          uint32_t                       queue_family_index,
                                                                          VkSurfaceKHR           surface,
index 00d4c7b..a2228df 100644 (file)
 
 #include <config.h>
 #include <vulkan/vulkan.h>
+#include <stdbool.h>
+#include <vulkan/vk_icd.h>
 #include <utils.h>
 
+typedef struct vk_surface      vk_surface_t;
+
+struct vk_surface {
+       union {
+               VkIcdSurfaceBase        base;
+               VkIcdSurfaceDisplay     display;
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+               VkIcdSurfaceXlib        xlib;
+#endif
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+               VkIcdSurfaceXcb         xcb;
+#endif
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+               VkIcdSurfaceWayland     wayland;
+#endif
+       } platform;
+
+       VkAllocationCallbacks   allocator;
+};
+
 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
 vk_icdGetInstanceProcAddr(VkInstance instance, const char *name);