From: Keith Packard <keithp@keithp.com>
To: mesa-dev@lists.freedesktop.org
Cc: Keith Packard <keithp@keithp.com>, dri-devel@lists.freedesktop.org
Subject: [PATCH 4/7] vulkan: Add VK_EXT_display_surface_counter [v4]
Date: Fri, 9 Feb 2018 20:45:13 -0800 [thread overview]
Message-ID: <20180210044516.16944-5-keithp@keithp.com> (raw)
In-Reply-To: <20180210044516.16944-1-keithp@keithp.com>
This extension is required to support EXT_display_control as it offers
a way to query whether the vblank counter is supported.
v2: Thanks to kisak
Fix spelling of VkSurfaceCapabilities2EXT in wsi_common_wayland.c,
it was using ext instead of EXT.
Fix spelling of VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
v3: Fix wayland WSI, regularize spelling
Misspelled 'surface' in get_capabilities2ext
Remove extra _ from get_capabilities_2ext in a couple of places
v4: Add anv support
Signed-off-by: Keith Packard <keithp@keithp.com>
---
src/amd/vulkan/radv_extensions.py | 1 +
src/amd/vulkan/radv_wsi.c | 12 ++++++++++++
src/intel/vulkan/anv_extensions.py | 1 +
src/intel/vulkan/anv_wsi.c | 12 ++++++++++++
src/vulkan/wsi/wsi_common.c | 11 +++++++++++
src/vulkan/wsi/wsi_common.h | 5 +++++
src/vulkan/wsi/wsi_common_display.c | 27 +++++++++++++++++++++++++++
src/vulkan/wsi/wsi_common_private.h | 2 ++
src/vulkan/wsi/wsi_common_wayland.c | 27 +++++++++++++++++++++++++++
src/vulkan/wsi/wsi_common_x11.c | 27 +++++++++++++++++++++++++++
10 files changed, 125 insertions(+)
diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py
index 2d804afed35..3f315e074b5 100644
--- a/src/amd/vulkan/radv_extensions.py
+++ b/src/amd/vulkan/radv_extensions.py
@@ -84,6 +84,7 @@ EXTENSIONS = [
Extension('VK_KHR_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
Extension('VK_EXT_direct_mode_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
Extension('VK_EXT_acquire_xlib_display', 1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'),
+ Extension('VK_EXT_display_surface_counter', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
Extension('VK_KHX_multiview', 1, '!ANDROID'),
Extension('VK_EXT_debug_report', 9, True),
Extension('VK_EXT_discard_rectangles', 1, True),
diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c
index 5ec872a63d0..2d2a30ebbb1 100644
--- a/src/amd/vulkan/radv_wsi.c
+++ b/src/amd/vulkan/radv_wsi.c
@@ -103,6 +103,18 @@ VkResult radv_GetPhysicalDeviceSurfaceCapabilities2KHR(
pSurfaceCapabilities);
}
+VkResult radv_GetPhysicalDeviceSurfaceCapabilities2EXT(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
+{
+ RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice);
+
+ return wsi_common_get_surface_capabilities2ext(&device->wsi_device,
+ surface,
+ pSurfaceCapabilities);
+}
+
VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface,
diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py
index 32a240acdcb..8265077d894 100644
--- a/src/intel/vulkan/anv_extensions.py
+++ b/src/intel/vulkan/anv_extensions.py
@@ -89,6 +89,7 @@ EXTENSIONS = [
Extension('VK_KHX_multiview', 1, True),
Extension('VK_EXT_debug_report', 8, True),
Extension('VK_EXT_external_memory_dma_buf', 1, True),
+ Extension('VK_EXT_display_surface_counter', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
]
class VkVersion:
diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
index f86d83589ea..52362adfb71 100644
--- a/src/intel/vulkan/anv_wsi.c
+++ b/src/intel/vulkan/anv_wsi.c
@@ -104,6 +104,18 @@ VkResult anv_GetPhysicalDeviceSurfaceCapabilities2KHR(
pSurfaceCapabilities);
}
+VkResult anv_GetPhysicalDeviceSurfaceCapabilities2EXT(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
+{
+ ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice);
+
+ return wsi_common_get_surface_capabilities2ext(&device->wsi_device,
+ surface,
+ pSurfaceCapabilities);
+}
+
VkResult anv_GetPhysicalDeviceSurfaceFormatsKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface,
diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c
index c0a285e5814..02abc9ef7fb 100644
--- a/src/vulkan/wsi/wsi_common.c
+++ b/src/vulkan/wsi/wsi_common.c
@@ -579,6 +579,17 @@ wsi_common_get_surface_capabilities2(struct wsi_device *wsi_device,
pSurfaceCapabilities);
}
+VkResult
+wsi_common_get_surface_capabilities2ext(struct wsi_device *wsi_device,
+ VkSurfaceKHR _surface,
+ VkSurfaceCapabilities2EXT *pSurfaceCapabilities)
+{
+ ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface);
+ struct wsi_interface *iface = wsi_device->wsi[surface->platform];
+
+ return iface->get_capabilities2ext(surface, pSurfaceCapabilities);
+}
+
VkResult
wsi_common_get_surface_formats(struct wsi_device *wsi_device,
VkSurfaceKHR _surface,
diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
index 1cb6aaebca0..124d096170a 100644
--- a/src/vulkan/wsi/wsi_common.h
+++ b/src/vulkan/wsi/wsi_common.h
@@ -155,6 +155,11 @@ wsi_common_get_surface_present_modes(struct wsi_device *wsi_device,
uint32_t *pPresentModeCount,
VkPresentModeKHR *pPresentModes);
+VkResult
+wsi_common_get_surface_capabilities2ext(struct wsi_device *wsi_device,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilities2EXT *pSurfaceCapabilities);
+
VkResult
wsi_common_get_images(VkSwapchainKHR _swapchain,
uint32_t *pSwapchainImageCount,
diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c
index 29d64b21aff..e63700e2e65 100644
--- a/src/vulkan/wsi/wsi_common_display.c
+++ b/src/vulkan/wsi/wsi_common_display.c
@@ -655,6 +655,32 @@ wsi_display_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface,
return wsi_display_surface_get_capabilities(icd_surface, &caps->surfaceCapabilities);
}
+static VkResult
+wsi_display_surface_get_capabilities2ext(VkIcdSurfaceBase *icd_surface,
+ VkSurfaceCapabilities2EXT *caps)
+{
+ VkSurfaceCapabilitiesKHR khr_caps;
+ VkResult ret;
+
+ assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT);
+ ret = wsi_display_surface_get_capabilities(icd_surface, &khr_caps);
+ if (ret)
+ return ret;
+
+ caps->minImageCount = khr_caps.minImageCount;
+ caps->maxImageCount = khr_caps.maxImageCount;
+ caps->currentExtent = khr_caps.currentExtent;
+ caps->minImageExtent = khr_caps.minImageExtent;
+ caps->maxImageExtent = khr_caps.maxImageExtent;
+ caps->maxImageArrayLayers = khr_caps.maxImageArrayLayers;
+ caps->supportedTransforms = khr_caps.supportedTransforms;
+ caps->currentTransform = khr_caps.currentTransform;
+ caps->supportedCompositeAlpha = khr_caps.supportedCompositeAlpha;
+ caps->supportedUsageFlags = khr_caps.supportedUsageFlags;
+ caps->supportedSurfaceCounters = 0;
+ return ret;
+}
+
static const VkFormat available_surface_formats[] = {
VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_B8G8R8A8_UNORM,
@@ -1323,6 +1349,7 @@ wsi_display_init_wsi(struct wsi_device *wsi_device,
wsi->base.get_support = wsi_display_surface_get_support;
wsi->base.get_capabilities = wsi_display_surface_get_capabilities;
wsi->base.get_capabilities2 = wsi_display_surface_get_capabilities2;
+ wsi->base.get_capabilities2ext = wsi_display_surface_get_capabilities2ext;
wsi->base.get_formats = wsi_display_surface_get_formats;
wsi->base.get_formats2 = wsi_display_surface_get_formats2;
wsi->base.get_present_modes = wsi_display_surface_get_present_modes;
diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h
index d38d2efa116..0d902846238 100644
--- a/src/vulkan/wsi/wsi_common_private.h
+++ b/src/vulkan/wsi/wsi_common_private.h
@@ -103,6 +103,8 @@ struct wsi_interface {
VkResult (*get_capabilities2)(VkIcdSurfaceBase *surface,
const void *info_next,
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+ VkResult (*get_capabilities2ext)(VkIcdSurfaceBase *surface,
+ VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
VkResult (*get_formats)(VkIcdSurfaceBase *surface,
struct wsi_device *wsi_device,
uint32_t* pSurfaceFormatCount,
diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c
index be7635bbf84..54b9449ab8c 100644
--- a/src/vulkan/wsi/wsi_common_wayland.c
+++ b/src/vulkan/wsi/wsi_common_wayland.c
@@ -457,6 +457,32 @@ wsi_wl_surface_get_capabilities2(VkIcdSurfaceBase *surface,
return wsi_wl_surface_get_capabilities(surface, &caps->surfaceCapabilities);
}
+static VkResult
+wsi_wl_surface_get_capabilities2ext(VkIcdSurfaceBase *surface,
+ VkSurfaceCapabilities2EXT* caps)
+{
+ VkSurfaceCapabilitiesKHR khr_caps;
+ VkResult ret;
+
+ assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT);
+ ret = wsi_wl_surface_get_capabilities(surface, &khr_caps);
+ if (ret)
+ return ret;
+
+ caps->minImageCount = khr_caps.minImageCount;
+ caps->maxImageCount = khr_caps.maxImageCount;
+ caps->currentExtent = khr_caps.currentExtent;
+ caps->minImageExtent = khr_caps.minImageExtent;
+ caps->maxImageExtent = khr_caps.maxImageExtent;
+ caps->maxImageArrayLayers = khr_caps.maxImageArrayLayers;
+ caps->supportedTransforms = khr_caps.supportedTransforms;
+ caps->currentTransform = khr_caps.currentTransform;
+ caps->supportedCompositeAlpha = khr_caps.supportedCompositeAlpha;
+ caps->supportedUsageFlags = khr_caps.supportedUsageFlags;
+ caps->supportedSurfaceCounters = 0;
+ return ret;
+}
+
static VkResult
wsi_wl_surface_get_formats(VkIcdSurfaceBase *icd_surface,
struct wsi_device *wsi_device,
@@ -891,6 +917,7 @@ wsi_wl_init_wsi(struct wsi_device *wsi_device,
wsi->base.get_support = wsi_wl_surface_get_support;
wsi->base.get_capabilities = wsi_wl_surface_get_capabilities;
wsi->base.get_capabilities2 = wsi_wl_surface_get_capabilities2;
+ wsi->base.get_capabilities2ext = wsi_wl_surface_get_capabilities2ext;
wsi->base.get_formats = wsi_wl_surface_get_formats;
wsi->base.get_formats2 = wsi_wl_surface_get_formats2;
wsi->base.get_present_modes = wsi_wl_surface_get_present_modes;
diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index c29e0a2d30d..714523678d4 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -516,6 +516,32 @@ x11_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface,
return x11_surface_get_capabilities(icd_surface, &caps->surfaceCapabilities);
}
+static VkResult
+x11_surface_get_capabilities2ext(VkIcdSurfaceBase *icd_surface,
+ VkSurfaceCapabilities2EXT *caps)
+{
+ VkSurfaceCapabilitiesKHR khr_caps;
+ VkResult ret;
+
+ assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT);
+ ret = x11_surface_get_capabilities(icd_surface, &khr_caps);
+ if (ret)
+ return ret;
+
+ caps->minImageCount = khr_caps.minImageCount;
+ caps->maxImageCount = khr_caps.maxImageCount;
+ caps->currentExtent = khr_caps.currentExtent;
+ caps->minImageExtent = khr_caps.minImageExtent;
+ caps->maxImageExtent = khr_caps.maxImageExtent;
+ caps->maxImageArrayLayers = khr_caps.maxImageArrayLayers;
+ caps->supportedTransforms = khr_caps.supportedTransforms;
+ caps->currentTransform = khr_caps.currentTransform;
+ caps->supportedCompositeAlpha = khr_caps.supportedCompositeAlpha;
+ caps->supportedUsageFlags = khr_caps.supportedUsageFlags;
+ caps->supportedSurfaceCounters = 0;
+ return ret;
+}
+
static VkResult
x11_surface_get_formats(VkIcdSurfaceBase *surface,
struct wsi_device *wsi_device,
@@ -1207,6 +1233,7 @@ wsi_x11_init_wsi(struct wsi_device *wsi_device,
wsi->base.get_support = x11_surface_get_support;
wsi->base.get_capabilities = x11_surface_get_capabilities;
wsi->base.get_capabilities2 = x11_surface_get_capabilities2;
+ wsi->base.get_capabilities2ext = x11_surface_get_capabilities2ext;
wsi->base.get_formats = x11_surface_get_formats;
wsi->base.get_formats2 = x11_surface_get_formats2;
wsi->base.get_present_modes = x11_surface_get_present_modes;
--
2.15.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-02-10 4:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-10 4:45 [PATCH 0/7] vulkan: Add direct display extensions Keith Packard
2018-02-10 4:45 ` [PATCH 1/7] vulkan: Add KHR_display extension to anv and radv using DRM Keith Packard
2018-02-12 15:27 ` Eric Engestrom
2018-02-12 22:16 ` Keith Packard
2018-02-12 16:18 ` [Mesa-dev] " Emil Velikov
2018-02-12 23:12 ` Keith Packard
2018-02-14 1:10 ` Jason Ekstrand
2018-02-15 17:46 ` Keith Packard
2018-02-23 23:00 ` Jason Ekstrand
2018-02-23 23:43 ` Keith Packard
2018-02-24 0:51 ` Jason Ekstrand
2018-03-12 23:02 ` Keith Packard
2018-03-29 6:59 ` Mao, David
2018-03-29 15:05 ` Keith Packard
2018-02-10 4:45 ` [PATCH 2/7] vulkan: Add EXT_direct_mode_display Keith Packard
2018-02-10 4:45 ` [PATCH 3/7] vulkan: Add EXT_acquire_xlib_display Keith Packard
2018-02-13 0:16 ` Dylan Baker
2018-02-10 4:45 ` Keith Packard [this message]
2018-02-10 4:45 ` [PATCH 5/7] vulkan: add VK_EXT_display_control [v4] Keith Packard
2018-02-10 4:45 ` [PATCH 6/7] vulkan: Add new VK_MESA_query_timestamp extension Keith Packard
2018-02-13 0:20 ` Dylan Baker
2018-02-13 10:49 ` [Mesa-dev] " Lionel Landwerlin
2018-02-13 21:11 ` Keith Packard
2018-02-10 4:45 ` [PATCH 7/7] vulkan: Add VK_GOOGLE_display_timing extension (x11 and display backends) Keith Packard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180210044516.16944-5-keithp@keithp.com \
--to=keithp@keithp.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=mesa-dev@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.