Commit d00375a6 by Hernan Liatis

Implement vkGetSwapchainImagesKHR

dEQP tests passing: dEQP-VK.wsi.xlib.swapchain.get_images Bug: b/124265819 Change-Id: I4e2dc8dd48b93bbddba44654c72afb8f43bc3561 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/25789Tested-by: 's avatarHernan Liatis <hliatis@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 65366a86
...@@ -250,6 +250,7 @@ static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionP ...@@ -250,6 +250,7 @@ static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionP
MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupportKHR), MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
MAKE_VULKAN_DEVICE_ENTRY(vkCreateSwapchainKHR), MAKE_VULKAN_DEVICE_ENTRY(vkCreateSwapchainKHR),
MAKE_VULKAN_DEVICE_ENTRY(vkDestroySwapchainKHR), MAKE_VULKAN_DEVICE_ENTRY(vkDestroySwapchainKHR),
MAKE_VULKAN_DEVICE_ENTRY(vkGetSwapchainImagesKHR),
}; };
#undef MAKE_VULKAN_DEVICE_ENTRY #undef MAKE_VULKAN_DEVICE_ENTRY
......
...@@ -2168,10 +2168,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(VkDevice device, const VkSwa ...@@ -2168,10 +2168,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(VkDevice device, const VkSwa
VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator)
{ {
TRACE("(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator)", TRACE("(VkDevice device = 0x%X, VkSwapchainKHR swapchain = 0x%X, const VkAllocationCallbacks* pAllocator = 0x%X)",
device, swapchain, pAllocator); device, swapchain, pAllocator);
vk::destroy(swapchain, pAllocator); vk::destroy(swapchain, pAllocator);
} }
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages)
{
TRACE("(VkDevice device = 0x%X, VkSwapchainKHR swapchain = 0x%X, uint32_t* pSwapchainImageCount = 0x%X, VkImage* pSwapchainImages = 0x%X)",
device, swapchain, pSwapchainImageCount, pSwapchainImages);
if(!pSwapchainImages)
{
*pSwapchainImageCount = vk::Cast(swapchain)->getImageCount();
return VK_SUCCESS;
}
return vk::Cast(swapchain)->getImages(pSwapchainImageCount, pSwapchainImages);
}
} }
...@@ -18,12 +18,13 @@ ...@@ -18,12 +18,13 @@
#include "Vulkan/VkDeviceMemory.hpp" #include "Vulkan/VkDeviceMemory.hpp"
#include "Vulkan/VkDestroy.h" #include "Vulkan/VkDestroy.h"
#include <algorithm>
namespace vk namespace vk
{ {
SwapchainKHR::SwapchainKHR(const VkSwapchainCreateInfoKHR *pCreateInfo, void *mem) : SwapchainKHR::SwapchainKHR(const VkSwapchainCreateInfoKHR *pCreateInfo, void *mem) :
createInfo(*pCreateInfo), createInfo(*pCreateInfo)
imageCount(0)
{ {
images.resize(pCreateInfo->minImageCount); images.resize(pCreateInfo->minImageCount);
resetImages(); resetImages();
...@@ -120,4 +121,29 @@ VkResult SwapchainKHR::createImages(VkDevice device) ...@@ -120,4 +121,29 @@ VkResult SwapchainKHR::createImages(VkDevice device)
return VK_SUCCESS; return VK_SUCCESS;
} }
uint32_t SwapchainKHR::getImageCount() const
{
return static_cast<uint32_t >(images.size());
}
VkResult SwapchainKHR::getImages(uint32_t *pSwapchainImageCount, VkImage *pSwapchainImages) const
{
uint32_t count = getImageCount();
uint32_t i;
for (i = 0; i < std::min(*pSwapchainImageCount, count); i++)
{
pSwapchainImages[i] = images[i].image;
}
*pSwapchainImageCount = i;
if (*pSwapchainImageCount < count)
{
return VK_INCOMPLETE;
}
return VK_SUCCESS;
}
} }
\ No newline at end of file
...@@ -15,7 +15,9 @@ ...@@ -15,7 +15,9 @@
#ifndef SWIFTSHADER_VKSWAPCHAINKHR_HPP #ifndef SWIFTSHADER_VKSWAPCHAINKHR_HPP
#define SWIFTSHADER_VKSWAPCHAINKHR_HPP #define SWIFTSHADER_VKSWAPCHAINKHR_HPP
#include "Vulkan/VkObject.hpp" #include "Vulkan/VkObject.hpp"
#include "Vulkan/VkImage.hpp"
#include <vector> #include <vector>
...@@ -49,10 +51,12 @@ public: ...@@ -49,10 +51,12 @@ public:
VkResult createImages(VkDevice device); VkResult createImages(VkDevice device);
uint32_t getImageCount() const;
VkResult getImages(uint32_t *pSwapchainImageCount, VkImage *pSwapchainImages) const;
private: private:
VkSwapchainCreateInfoKHR createInfo; VkSwapchainCreateInfoKHR createInfo;
std::vector<PresentImage> images; std::vector<PresentImage> images;
uint32_t imageCount;
void resetImages(); void resetImages();
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment