blob: bee82de22c96b6852e0467cfa3071f15e40b73a0 [file] [log] [blame]
#ifndef _VKWSIUTIL_HPP
#define _VKWSIUTIL_HPP
/*-------------------------------------------------------------------------
* Vulkan CTS Framework
* --------------------
*
* Copyright (c) 2016 Google Inc.
*
* 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.
*
*//*!
* \file
* \brief Windowing System Integration (WSI) Utilities.
*//*--------------------------------------------------------------------*/
#include "vkDefs.hpp"
#include "vkWsiPlatform.hpp"
#include "vkRef.hpp"
#include <vector>
namespace vk
{
namespace wsi
{
struct PlatformProperties
{
enum FeatureFlags
{
FEATURE_INITIAL_WINDOW_SIZE = (1<<0), //!< Platform honors initial window size request
FEATURE_RESIZE_WINDOW = (1<<1), //!< Platform supports resizing window
};
enum SwapchainExtent
{
SWAPCHAIN_EXTENT_MUST_MATCH_WINDOW_SIZE = 0, //!< Swapchain extent must match window size
SWAPCHAIN_EXTENT_SETS_WINDOW_SIZE, //!< Window will be resized to swapchain size when first image is presented
SWAPCHAIN_EXTENT_SCALED_TO_WINDOW_SIZE, //!< Presented image contents will be scaled to window size
SWAPCHAIN_EXTENT_LAST
};
deUint32 features;
SwapchainExtent swapchainExtent;
deUint32 maxDisplays;
deUint32 maxWindowsPerDisplay;
};
const char* getName (Type wsiType);
const char* getExtensionName (Type wsiType);
const PlatformProperties& getPlatformProperties (Type wsiType);
VkResult createSurface (const InstanceInterface& vki,
VkInstance instance,
Type wsiType,
const Display& nativeDisplay,
const Window& nativeWindow,
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface);
Move<VkSurfaceKHR> createSurface (const InstanceInterface& vki,
VkInstance instance,
Type wsiType,
const Display& nativeDisplay,
const Window& nativeWindow,
const VkAllocationCallbacks* pAllocator = DE_NULL);
VkBool32 getPhysicalDeviceSurfaceSupport (const InstanceInterface& vki,
VkPhysicalDevice physicalDevice,
deUint32 queueFamilyIndex,
VkSurfaceKHR surface);
VkSurfaceCapabilitiesKHR getPhysicalDeviceSurfaceCapabilities (const InstanceInterface& vki,
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface);
std::vector<VkSurfaceFormatKHR> getPhysicalDeviceSurfaceFormats (const InstanceInterface& vki,
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface);
std::vector<VkPresentModeKHR> getPhysicalDeviceSurfacePresentModes (const InstanceInterface& vki,
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface);
std::vector<VkImage> getSwapchainImages (const DeviceInterface& vkd,
VkDevice device,
VkSwapchainKHR swapchain);
} // wsi
} // vk
#endif // _VKWSIUTIL_HPP