199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz/* 299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 The Khronos Group Inc. 399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 Valve Corporation 499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 LunarG, Inc. 599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Permission is hereby granted, free of charge, to any person obtaining a copy 799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * of this software and/or associated documentation files (the "Materials"), to 899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * deal in the Materials without restriction, including without limitation the 999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 1099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * sell copies of the Materials, and to permit persons to whom the Materials are 1199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * furnished to do so, subject to the following conditions: 1299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 1399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * The above copyright notice(s) and this permission notice shall be included in 1499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * all copies or substantial portions of the Materials. 1599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 1699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 2099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 2199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE 2399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * USE OR OTHER DEALINGS IN THE MATERIALS. 2499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 2599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Courtney Goeltzenleuchter <courtney@LunarG.com> 2699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Cody Northrop <cody@lunarg.com> 2799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz */ 289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#ifndef VKTESTBINDING_H 309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#define VKTESTBINDING_H 319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include <vector> 33a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu#include <assert.h> 349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 35329ca9eb16cdbee7a7644fb08ade7b3d3bb32e23David Pinedo#include "vulkan/vulkan.h" 369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 379cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchternamespace vk_testing { 389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultztypedef void (*ErrorCallback)(const char *expr, const char *file, 4099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz unsigned int line, const char *function); 419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchtervoid set_error_callback(ErrorCallback callback); 429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 43f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wuclass PhysicalDevice; 449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Device; 459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Queue; 46ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wuclass DeviceMemory; 479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Fence; 489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Semaphore; 499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Event; 509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass QueryPool; 519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Buffer; 529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass BufferView; 539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Image; 549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass ImageView; 559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DepthStencilView; 569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Shader; 579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Pipeline; 589cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass PipelineDelta; 599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Sampler; 609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSetLayout; 61556f721b927c7f8bf6f37dd502afe8ebf3b76719Mark Lobodzinskiclass PipelineLayout; 629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSetPool; 639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSet; 641f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wuclass CommandBuffer; 651f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wuclass CommandPool; 669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6718061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkLayerProperties> GetGlobalLayers(); 6818061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkExtensionProperties> GetGlobalExtensions(); 6918061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkExtensionProperties> GetGlobalExtensions(const char *pLayerName); 7018061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchter 71a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wunamespace internal { 72a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 7399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultztemplate <typename T> class Handle { 7499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 75a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu const T &handle() const { return handle_; } 76a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu bool initialized() const { return (handle_ != VK_NULL_HANDLE); } 77a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 7899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz protected: 79a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu typedef T handle_type; 80a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 81a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu explicit Handle() : handle_(VK_NULL_HANDLE) {} 82a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu explicit Handle(T handle) : handle_(handle) {} 83a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 8499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(T handle) { 85a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu assert(!initialized()); 86a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu handle_ = handle; 87a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu } 88a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 8999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 90a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu // handles are non-copyable 91a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle(const Handle &); 92a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle &operator=(const Handle &); 93a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 94a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu T handle_; 95a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu}; 96a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 9799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultztemplate <typename T> class NonDispHandle : public Handle<T> { 9899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz protected: 99a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu explicit NonDispHandle() : Handle<T>(), dev_handle_(VK_NULL_HANDLE) {} 10099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit NonDispHandle(VkDevice dev, T handle) 10199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz : Handle<T>(handle), dev_handle_(dev) {} 102a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 103a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu const VkDevice &device() const { return dev_handle_; } 104a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 10599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(VkDevice dev, T handle) { 106a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu assert(!Handle<T>::initialized() && dev_handle_ == VK_NULL_HANDLE); 107a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle<T>::init(handle); 108a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu dev_handle_ = dev; 109a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu } 110a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 11199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 112a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu VkDevice dev_handle_; 113a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu}; 114a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 115a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu} // namespace internal 116a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 117f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wuclass PhysicalDevice : public internal::Handle<VkPhysicalDevice> { 11899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 11999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit PhysicalDevice(VkPhysicalDevice phy) : Handle(phy) { 120723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski memory_properties_ = memory_properties(); 121ddaecf8b7983676feae8a8c26faf2cceca4b2adeMark Lobodzinski device_properties_ = properties(); 122723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski } 1239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1248205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour VkPhysicalDeviceProperties properties() const; 1258205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour VkPhysicalDeviceMemoryProperties memory_properties() const; 126ef72e2a7cf4fa5708fdbfbc1c972a24ad0dbf809Cody Northrop std::vector<VkQueueFamilyProperties> queue_properties() const; 1279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 12899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz bool set_memory_type(const uint32_t type_bits, VkMemoryAllocateInfo *info, 12999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkMemoryPropertyFlags properties, 13099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkMemoryPropertyFlags forbid = 0) const; 1319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 13274c4ce9c4fa101c0989a29cf918e799fa67adcecCourtney Goeltzenleuchter // vkEnumerateDeviceExtensionProperties() 1331c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter std::vector<VkExtensionProperties> extensions() const; 13499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<VkExtensionProperties> extensions(const char *pLayerName) const; 1359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkEnumerateLayers() 137f5c61951493d13d4fda80bce2d36fab7b6f449aaCourtney Goeltzenleuchter std::vector<VkLayerProperties> layers() const; 1389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 13999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 14099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void 14199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz add_extension_dependencies(uint32_t dependency_count, 14299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkExtensionProperties *depencency_props, 14399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<VkExtensionProperties> &ext_list); 144f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu 145723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski VkPhysicalDeviceMemoryProperties memory_properties_; 146ddaecf8b7983676feae8a8c26faf2cceca4b2adeMark Lobodzinski 147ddaecf8b7983676feae8a8c26faf2cceca4b2adeMark Lobodzinski VkPhysicalDeviceProperties device_properties_; 1489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 1499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 150a263629c001e522a146c68e253979c20482becfbChia-I Wuclass Device : public internal::Handle<VkDevice> { 15199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 152f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu explicit Device(VkPhysicalDevice phy) : phy_(phy) {} 1539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter ~Device(); 1549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDevice() 156ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init(const VkDeviceCreateInfo &info); 15799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(std::vector<const char *> &layers, 15899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<const char *> & 15999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz extensions); // all queues, all extensions, etc 16099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init() { 16199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<const char *> layers; 16299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<const char *> extensions; 16399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(layers, extensions); 16499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz }; 1659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 166f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu const PhysicalDevice &phy() const { return phy_; } 1679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1681245cec54fd74fea87bc95913788726054a91518Jon Ashburn // vkGetDeviceProcAddr() 16999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz PFN_vkVoidFunction get_proc(const char *name) const { 17099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return vkGetDeviceProcAddr(handle(), name); 17199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 1721245cec54fd74fea87bc95913788726054a91518Jon Ashburn 1739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetDeviceQueue() 17499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<Queue *> &graphics_queues() const { 17599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return queues_[GRAPHICS]; 17699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 1779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Queue *> &compute_queues() { return queues_[COMPUTE]; } 1789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Queue *> &dma_queues() { return queues_[DMA]; } 1799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter uint32_t graphics_queue_node_index_; 1809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1819cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter struct Format { 182382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFormat format; 183382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageTiling tiling; 184382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFlags features; 1859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter }; 1869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetFormatInfo() 187382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFormatProperties format_properties(VkFormat format); 1889cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Format> &formats() const { return formats_; } 1899cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkDeviceWaitIdle() 1919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void wait(); 1929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkWaitForFences() 19499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkResult wait(const std::vector<const Fence *> &fences, bool wait_all, 19599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint64_t timeout); 19699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkResult wait(const Fence &fence) { 19799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return wait(std::vector<const Fence *>(1, &fence), true, (uint64_t)-1); 19899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 1999cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2008cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu // vkUpdateDescriptorSets() 20199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void update_descriptor_sets(const std::vector<VkWriteDescriptorSet> &writes, 20299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkCopyDescriptorSet> &copies); 20399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void 20499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz update_descriptor_sets(const std::vector<VkWriteDescriptorSet> &writes) { 20599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return update_descriptor_sets(writes, 20699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<VkCopyDescriptorSet>()); 20799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 20899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz 20999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet 21099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz write_descriptor_set(const DescriptorSet &set, uint32_t binding, 21199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 21299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, 21399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkDescriptorImageInfo *image_info); 21499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet 21599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz write_descriptor_set(const DescriptorSet &set, uint32_t binding, 21699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 21799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, 21899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkDescriptorBufferInfo *buffer_info); 21999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet 22099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz write_descriptor_set(const DescriptorSet &set, uint32_t binding, 22199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 22299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, const VkBufferView *buffer_views); 22399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet 22499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz write_descriptor_set(const DescriptorSet &set, uint32_t binding, 22599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 22699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkDescriptorImageInfo> &image_info); 22799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet write_descriptor_set( 22899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSet &set, uint32_t binding, uint32_t array_element, 22999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDescriptorType type, 23099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkDescriptorBufferInfo> &buffer_info); 23199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkWriteDescriptorSet 23299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz write_descriptor_set(const DescriptorSet &set, uint32_t binding, 23399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 23499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkBufferView> &buffer_views); 23599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz 23699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkCopyDescriptorSet 23799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, 23899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t src_array_element, 23999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSet &dst_set, uint32_t dst_binding, 24099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t dst_array_element, uint32_t count); 24199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz 24299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 2439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter enum QueueIndex { 2449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter GRAPHICS, 2459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter COMPUTE, 2469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter DMA, 2479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter QUEUE_COUNT, 2489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter }; 2499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void init_queues(); 2519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void init_formats(); 2529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 253f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu PhysicalDevice phy_; 2549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter std::vector<Queue *> queues_[QUEUE_COUNT]; 2569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter std::vector<Format> formats_; 2579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2589cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 259f2862c7fc1528f109583276ec4c92e131aa540b4Chia-I Wuclass Queue : public internal::Handle<VkQueue> { 26099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 26199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit Queue(VkQueue queue, int index) : Handle(queue) { 26299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz family_index_ = index; 26399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 2649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueSubmit() 2661f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void submit(const std::vector<const CommandBuffer *> &cmds, Fence &fence); 2671f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void submit(const CommandBuffer &cmd, Fence &fence); 2681f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void submit(const CommandBuffer &cmd); 2699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueWaitIdle() 2719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void wait(); 2729cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 27399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz int get_family_index() { return family_index_; } 2740caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour 27599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 2760caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour int family_index_; 2779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 279ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wuclass DeviceMemory : public internal::NonDispHandle<VkDeviceMemory> { 28099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 281ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu ~DeviceMemory(); 2829cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2831f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu // vkAllocateMemory() 2841f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void init(const Device &dev, const VkMemoryAllocateInfo &info); 2859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkMapMemory() 287382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter const void *map(VkFlags flags) const; 28899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void *map(VkFlags flags); 2899cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const void *map() const { return map(0); } 29099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void *map() { return map(0); } 2919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkUnmapMemory() 2939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void unmap() const; 2949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 29599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkMemoryAllocateInfo alloc_info(VkDeviceSize size, 29699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t memory_type_index); 2979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 299a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wuclass Fence : public internal::NonDispHandle<VkFence> { 30099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 301a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu ~Fence(); 302a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu 3039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateFence() 304382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkFenceCreateInfo &info); 3059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetFenceStatus() 307a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu VkResult status() const { return vkGetFenceStatus(device(), handle()); } 3089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 309382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkFenceCreateInfo create_info(VkFenceCreateFlags flags); 310382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkFenceCreateInfo create_info(); 3119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3129cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3132454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wuclass Semaphore : public internal::NonDispHandle<VkSemaphore> { 31499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 3152454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wu ~Semaphore(); 3162454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wu 3179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateSemaphore() 318382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkSemaphoreCreateInfo &info); 3199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 320864fd38da3f44dfe26e043f26f0cecad29a1cfd6Tony Barbour static VkSemaphoreCreateInfo create_info(VkFlags flags); 3219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3239b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wuclass Event : public internal::NonDispHandle<VkEvent> { 32499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 3259b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu ~Event(); 3269b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu 3279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateEvent() 328382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkEventCreateInfo &info); 3299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetEventStatus() 3319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkSetEvent() 3329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetEvent() 3339b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu VkResult status() const { return vkGetEventStatus(device(), handle()); } 3349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void set(); 3359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void reset(); 3369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 337382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkEventCreateInfo create_info(VkFlags flags); 3389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3399cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 340fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wuclass QueryPool : public internal::NonDispHandle<VkQueryPool> { 34199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 342fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wu ~QueryPool(); 343fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wu 3449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateQueryPool() 345382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkQueryPoolCreateInfo &info); 3469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetQueryPoolResults() 34899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkResult results(uint32_t first, uint32_t count, size_t size, void *data, 34999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz size_t stride); 3509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 35199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkQueryPoolCreateInfo create_info(VkQueryType type, 35299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t slot_count); 3539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 355f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wuclass Buffer : public internal::NonDispHandle<VkBuffer> { 35699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 357f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu explicit Buffer() : NonDispHandle() {} 35899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit Buffer(const Device &dev, const VkBufferCreateInfo &info) { 35999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info); 36099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 3618205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour explicit Buffer(const Device &dev, VkDeviceSize size) { init(dev, size); } 3629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 363f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu ~Buffer(); 364f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 3659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateBuffer() 36699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, const VkBufferCreateInfo &info, 36799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags mem_props); 36899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, const VkBufferCreateInfo &info) { 36999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info, 0); 37099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 37199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, VkDeviceSize size, 37299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags mem_props) { 37399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, create_info(size, 0), mem_props); 37499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 375f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, VkDeviceSize size) { init(dev, size, 0); } 37699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init_as_src(const Device &dev, VkDeviceSize size, 37799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags &reqs) { 37899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT), reqs); 37999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 38099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init_as_dst(const Device &dev, VkDeviceSize size, 38199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags &reqs) { 38299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_DST_BIT), reqs); 38399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 38499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init_as_src_and_dst(const Device &dev, VkDeviceSize size, 38599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags &reqs) { 38699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | 38799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VK_BUFFER_USAGE_TRANSFER_DST_BIT), 38899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz reqs); 38999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 390ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init_no_mem(const Device &dev, const VkBufferCreateInfo &info); 3919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 392f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // get the internal memory 393f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu const DeviceMemory &memory() const { return internal_mem_; } 39499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz DeviceMemory &memory() { return internal_mem_; } 395f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 396f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkGetObjectMemoryRequirements() 397f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu VkMemoryRequirements memory_requirements() const; 398f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 399f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkBindObjectMemory() 400f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void bind_memory(const DeviceMemory &mem, VkDeviceSize mem_offset); 401fb9f5646a9f331a834d2e318d503a213cba490d7Mark Lobodzinski 4028205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour static VkBufferCreateInfo create_info(VkDeviceSize size, VkFlags usage); 4039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 40499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkBufferMemoryBarrier buffer_memory_barrier(VkFlags output_mask, 40599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkFlags input_mask, 40699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDeviceSize offset, 40799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDeviceSize size) const { 408382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkBufferMemoryBarrier barrier = {}; 4099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; 410f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu barrier.buffer = handle(); 411989de845e6627fecee8dceef882955149b7538baChia-I Wu barrier.srcAccessMask = output_mask; 412989de845e6627fecee8dceef882955149b7538baChia-I Wu barrier.dstAccessMask = input_mask; 4139cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.offset = offset; 4149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.size = size; 4159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return barrier; 4169cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter } 417f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 41899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 419ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter VkBufferCreateInfo create_info_; 420f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 421f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory internal_mem_; 4229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 42476ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wuclass BufferView : public internal::NonDispHandle<VkBufferView> { 42599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 42676ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu ~BufferView(); 42776ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu 4289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateBufferView() 429ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init(const Device &dev, const VkBufferViewCreateInfo &info); 4309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 432f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wuclass Image : public internal::NonDispHandle<VkImage> { 43399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 434f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu explicit Image() : NonDispHandle(), format_features_(0) {} 43599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit Image(const Device &dev, const VkImageCreateInfo &info) 43699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz : format_features_(0) { 43799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info); 43899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 4399cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 440f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu ~Image(); 441f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 4429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateImage() 44399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, const VkImageCreateInfo &info, 44499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkMemoryPropertyFlags mem_props); 44599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, const VkImageCreateInfo &info) { 44699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info, 0); 44799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 448382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init_no_mem(const Device &dev, const VkImageCreateInfo &info); 4499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 450f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // get the internal memory 451f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu const DeviceMemory &memory() const { return internal_mem_; } 45299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz DeviceMemory &memory() { return internal_mem_; } 453f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 454f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkGetObjectMemoryRequirements() 455f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu VkMemoryRequirements memory_requirements() const; 456f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 457f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkBindObjectMemory() 458f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void bind_memory(const DeviceMemory &mem, VkDeviceSize mem_offset); 4599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 460426b90566abae5716741aade41184dc4dafe4aa4Tony Barbour // vkGetImageSubresourceLayout() 46199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkSubresourceLayout 46299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_layout(const VkImageSubresource &subres) const; 46399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkSubresourceLayout 46499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_layout(const VkImageSubresourceLayers &subres) const; 4659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 4669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter bool transparent() const; 46799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz bool copyable() const { 46899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return (format_features_ & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT); 46999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 4709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 47199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkImageSubresourceRange 47299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_range(VkImageAspectFlagBits aspect) const { 47399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return subresource_range(create_info_, aspect); 47499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 475382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent3D extent() const { return create_info_.extent; } 47699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkExtent3D extent(uint32_t mip_level) const { 47799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return extent(create_info_.extent, mip_level); 47899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 47999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkFormat format() const { return create_info_.format; } 48099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz 48199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkImageMemoryBarrier 48299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz image_memory_barrier(VkFlags output_mask, VkFlags input_mask, 48399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkImageLayout old_layout, VkImageLayout new_layout, 48499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkImageSubresourceRange &range) const { 485382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageMemoryBarrier barrier = {}; 4869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; 487989de845e6627fecee8dceef882955149b7538baChia-I Wu barrier.srcAccessMask = output_mask; 488989de845e6627fecee8dceef882955149b7538baChia-I Wu barrier.dstAccessMask = input_mask; 4899cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.oldLayout = old_layout; 4909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.newLayout = new_layout; 491f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu barrier.image = handle(); 4929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.subresourceRange = range; 4939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return barrier; 4949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter } 4959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 496382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkImageCreateInfo create_info(); 497ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter static VkImageAspectFlagBits image_aspect(VkImageAspectFlags flags); 49899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresource subresource(VkImageAspectFlagBits aspect, 49999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_level, 50099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer); 50199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresource subresource(const VkImageSubresourceRange &range, 50299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_level, 50399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer); 50499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresourceLayers subresource(VkImageAspectFlagBits aspect, 50599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_level, 50699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer, 50799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_size); 50899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresourceLayers 50999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource(const VkImageSubresourceRange &range, uint32_t mip_level, 51099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer, uint32_t array_size); 51199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresourceRange 51299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_range(VkImageAspectFlags aspect_mask, uint32_t base_mip_level, 51399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_levels, uint32_t base_array_layer, 51499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t num_layers); 51599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresourceRange 51699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_range(const VkImageCreateInfo &info, 51799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkImageAspectFlags aspect_mask); 51899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkImageSubresourceRange 51999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subresource_range(const VkImageSubresource &subres); 5209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 521382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(int32_t width, int32_t height); 522382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(const VkExtent2D &extent, uint32_t mip_level); 523382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(const VkExtent3D &extent); 5249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 525382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent3D extent(int32_t width, int32_t height, int32_t depth); 526382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent3D extent(const VkExtent3D &extent, uint32_t mip_level); 5279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 52899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 529382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init_info(const Device &dev, const VkImageCreateInfo &info); 5309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 531382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageCreateInfo create_info_; 532382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFlags format_features_; 533f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 534f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory internal_mem_; 5359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 53776ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wuclass ImageView : public internal::NonDispHandle<VkImageView> { 53899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 53976ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu ~ImageView(); 54076ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu 5419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateImageView() 542382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkImageViewCreateInfo &info); 5439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 545b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wuclass ShaderModule : public internal::NonDispHandle<VkShaderModule> { 54699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 547b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu ~ShaderModule(); 548b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu 5492d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter // vkCreateShaderModule() 5502d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter void init(const Device &dev, const VkShaderModuleCreateInfo &info); 5512d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter VkResult init_try(const Device &dev, const VkShaderModuleCreateInfo &info); 5522d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter 55399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static VkShaderModuleCreateInfo 55499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz create_info(size_t code_size, const uint32_t *code, VkFlags flags); 5552d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter}; 5562d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter 5572b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wuclass Pipeline : public internal::NonDispHandle<VkPipeline> { 55899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 5592b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wu ~Pipeline(); 5602b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wu 5619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateGraphicsPipeline() 562382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkGraphicsPipelineCreateInfo &info); 5639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateGraphicsPipelineDerivative() 56499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, const VkGraphicsPipelineCreateInfo &info, 56599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkPipeline basePipeline); 5669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateComputePipeline() 567382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkComputePipelineCreateInfo &info); 5689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkLoadPipeline() 56999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, size_t size, const void *data); 5709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkLoadPipelineDerivative() 57199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, size_t size, const void *data, 57299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkPipeline basePipeline); 5739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 574dc2188c58915eadd6e0cead54dacbfc00605c10dChris Forbes // vkCreateGraphicsPipeline with error return 57599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkResult init_try(const Device &dev, 57699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkGraphicsPipelineCreateInfo &info); 577dc2188c58915eadd6e0cead54dacbfc00605c10dChris Forbes 5789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkStorePipeline() 5799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter size_t store(size_t size, void *data); 5809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5819cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 582deb9913579771b8f66442046ae778488e513856aChia-I Wuclass PipelineLayout : public internal::NonDispHandle<VkPipelineLayout> { 58399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 584deb9913579771b8f66442046ae778488e513856aChia-I Wu ~PipelineLayout(); 585deb9913579771b8f66442046ae778488e513856aChia-I Wu 586deb9913579771b8f66442046ae778488e513856aChia-I Wu // vCreatePipelineLayout() 58799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void init(const Device &dev, VkPipelineLayoutCreateInfo &info, 58899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<const DescriptorSetLayout *> &layouts); 589deb9913579771b8f66442046ae778488e513856aChia-I Wu}; 590deb9913579771b8f66442046ae778488e513856aChia-I Wu 5916abe35d79296718595d738f8b78a6487110fa861Chia-I Wuclass Sampler : public internal::NonDispHandle<VkSampler> { 59299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 5936abe35d79296718595d738f8b78a6487110fa861Chia-I Wu ~Sampler(); 5946abe35d79296718595d738f8b78a6487110fa861Chia-I Wu 5959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateSampler() 596382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkSamplerCreateInfo &info); 5979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 59999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzclass DescriptorSetLayout 60099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz : public internal::NonDispHandle<VkDescriptorSetLayout> { 60199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 60255a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorSetLayout(); 60355a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 6049cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDescriptorSetLayout() 605382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkDescriptorSetLayoutCreateInfo &info); 6069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 6079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 60855a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wuclass DescriptorPool : public internal::NonDispHandle<VkDescriptorPool> { 60999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 61055a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorPool(); 61155a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 61299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz // Descriptor sets allocated from this pool will need access to the original 61399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz // object 61435ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop VkDescriptorPool GetObj() { return pool_; } 61535ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop 6169cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDescriptorPool() 617d9e966aac83c28e7f6ac6535f695c9a7c06f667dCourtney Goeltzenleuchter void init(const Device &dev, const VkDescriptorPoolCreateInfo &info); 6189cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetDescriptorPool() 6209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void reset(); 6219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 62235ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop // vkFreeDescriptorSet() 62335ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop void setDynamicUsage(bool isDynamic) { dynamic_usage_ = isDynamic; } 62435ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop bool getDynamicUsage() { return dynamic_usage_; } 62535ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop 6261f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu // vkAllocateDescriptorSets() 62799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<DescriptorSet *> 62899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz alloc_sets(const Device &dev, 62999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<const DescriptorSetLayout *> &layouts); 63099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz std::vector<DescriptorSet *> alloc_sets(const Device &dev, 63199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSetLayout &layout, 63299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count); 63399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz DescriptorSet *alloc_sets(const Device &dev, 63499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSetLayout &layout); 63599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz 63699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 63735ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop VkDescriptorPool pool_; 63835ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop 63935ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop // Track whether this pool's usage is VK_DESCRIPTOR_POOL_USAGE_DYNAMIC 64035ce7e6723ccc61952a5ee4eec49f2343a1a1dd4Cody Northrop bool dynamic_usage_; 6419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 6429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 64355a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wuclass DescriptorSet : public internal::NonDispHandle<VkDescriptorSet> { 64499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 64555a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorSet(); 64655a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 64755a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu explicit DescriptorSet() : NonDispHandle() {} 64899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit DescriptorSet(const Device &dev, DescriptorPool *pool, 64999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDescriptorSet set) 65099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz : NonDispHandle(dev.handle(), set) { 65199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz containing_pool_ = pool; 65299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 653e84a8d680991b8fc0be0d666fb7dcb617b36acc5Tony Barbour 65499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 65599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz DescriptorPool *containing_pool_; 6569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 6579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6581f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wuclass CommandPool : public internal::NonDispHandle<VkCommandPool> { 65999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 6601f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu ~CommandPool(); 661902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 6621f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu explicit CommandPool() : NonDispHandle() {} 66399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit CommandPool(const Device &dev, 66499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkCommandPoolCreateInfo &info) { 66599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info); 66699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 667902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 6681f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void init(const Device &dev, const VkCommandPoolCreateInfo &info); 669902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 6701f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu static VkCommandPoolCreateInfo create_info(uint32_t queue_family_index); 671902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter}; 672902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 67399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkCommandPoolCreateInfo 67499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzCommandPool::create_info(uint32_t queue_family_index) { 6751f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu VkCommandPoolCreateInfo info = {}; 6761f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; 677902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter info.queueFamilyIndex = queue_family_index; 6784c8381eb4ccab196a9b4bc3b3fe42cd23797e4d5Tobin Ehlis info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; 679902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter return info; 680902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter} 681902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 6821f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wuclass CommandBuffer : public internal::Handle<VkCommandBuffer> { 68399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 6841f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu ~CommandBuffer(); 68578c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu 6861f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu explicit CommandBuffer() : Handle() {} 68799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz explicit CommandBuffer(const Device &dev, 68899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkCommandBufferAllocateInfo &info) { 68999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz init(dev, info); 69099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz } 6919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6921f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu // vkAllocateCommandBuffers() 6931f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void init(const Device &dev, const VkCommandBufferAllocateInfo &info); 6949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkBeginCommandBuffer() 6961f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void begin(const VkCommandBufferBeginInfo *info); 6979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void begin(); 6989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6999cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkEndCommandBuffer() 7009cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetCommandBuffer() 7019cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void end(); 7021f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void reset(VkCommandBufferResetFlags flags); 7031f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu void reset() { reset(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT); } 7049cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 7051f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu static VkCommandBufferAllocateInfo create_info(VkCommandPool const &pool); 70678c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu 70799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 70878c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu VkDevice dev_handle_; 7091f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu VkCommandPool cmd_pool_; 7109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 7119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 71299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkMemoryAllocateInfo 71399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDeviceMemory::alloc_info(VkDeviceSize size, uint32_t memory_type_index) { 7141f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu VkMemoryAllocateInfo info = {}; 715c1f5e4068eab0504d4b68f78f88c55312ef96328Chia-I Wu info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; 716ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu info.allocationSize = size; 717ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu info.memoryTypeIndex = memory_type_index; 7189cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 72199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkBufferCreateInfo Buffer::create_info(VkDeviceSize size, 72299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkFlags usage) { 723ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter VkBufferCreateInfo info = {}; 7249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; 7259cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.size = size; 7269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.usage = usage; 7279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 73099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkFenceCreateInfo Fence::create_info(VkFenceCreateFlags flags) { 731382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFenceCreateInfo info = {}; 7329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; 7339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 7349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 73799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkFenceCreateInfo Fence::create_info() { 738382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFenceCreateInfo info = {}; 7399cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; 7409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 74399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkSemaphoreCreateInfo Semaphore::create_info(VkFlags flags) { 744382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkSemaphoreCreateInfo info = {}; 7459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; 7469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 7479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 75099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkEventCreateInfo Event::create_info(VkFlags flags) { 751382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkEventCreateInfo info = {}; 7529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO; 7539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 7549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 75799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkQueryPoolCreateInfo QueryPool::create_info(VkQueryType type, 75899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t slot_count) { 759382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkQueryPoolCreateInfo info = {}; 7609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO; 7619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.queryType = type; 762a4ae48bfd6f2e2a80e1f92e054a007cf90a4e218Jon Ashburn info.queryCount = slot_count; 7639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 76699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageCreateInfo Image::create_info() { 767382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageCreateInfo info = {}; 7689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; 7699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.width = 1; 7709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.height = 1; 7719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.depth = 1; 7729cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.mipLevels = 1; 7732ebc234580f41270585dfbbe2925358dd41b125eCourtney Goeltzenleuchter info.arrayLayers = 1; 7743138d6a7fafb314644a22a854267258769c6d6a0Chia-I Wu info.samples = VK_SAMPLE_COUNT_1_BIT; 7759cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 77899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresource Image::subresource(VkImageAspectFlagBits aspect, 77999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_level, 78099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer) { 781382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageSubresource subres = {}; 782195c9e1571bc33a143af6a1adf7f6083a3b41f8dChia-I Wu subres.aspectMask = aspect; 7839cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter subres.mipLevel = mip_level; 7843dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter subres.arrayLayer = array_layer; 7859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return subres; 7869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7879cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 78899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresource 78999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzImage::subresource(const VkImageSubresourceRange &range, uint32_t mip_level, 79099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer) { 79199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return subresource(image_aspect(range.aspectMask), 79299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz range.baseMipLevel + mip_level, 79399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz range.baseArrayLayer + array_layer); 7949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 79699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresourceLayers Image::subresource(VkImageAspectFlagBits aspect, 79799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t mip_level, 79899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer, 79999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_size) { 800c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu VkImageSubresourceLayers subres = {}; 8014291d8822ec2a685ef89ec2b210ff16857e25310Chia-I Wu subres.aspectMask = aspect; 802bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter subres.mipLevel = mip_level; 80363f0ead42f862f1c8ad815798c7cc6983cc413acCourtney Goeltzenleuchter subres.baseArrayLayer = array_layer; 8041f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu subres.layerCount = array_size; 805bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter return subres; 806bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter} 807bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter 80899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageAspectFlagBits Image::image_aspect(VkImageAspectFlags flags) { 809aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter /* 810aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter * This will map VkImageAspectFlags into a single VkImageAspect. 811aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter * If there is more than one bit defined we'll get an assertion. 812aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter */ 813aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter switch (flags) { 814aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter case VK_IMAGE_ASPECT_COLOR_BIT: 815ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter return VK_IMAGE_ASPECT_COLOR_BIT; 816aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter case VK_IMAGE_ASPECT_DEPTH_BIT: 817ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter return VK_IMAGE_ASPECT_DEPTH_BIT; 818aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter case VK_IMAGE_ASPECT_STENCIL_BIT: 819ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter return VK_IMAGE_ASPECT_STENCIL_BIT; 820aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter case VK_IMAGE_ASPECT_METADATA_BIT: 821ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter return VK_IMAGE_ASPECT_METADATA_BIT; 822aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter default: 823aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter assert(!"Invalid VkImageAspect"); 824aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter } 825ba11ebe8763601875a5a0c925610088ab317ef06Courtney Goeltzenleuchter return VK_IMAGE_ASPECT_COLOR_BIT; 826aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter} 827aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter 82899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresourceLayers 82999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzImage::subresource(const VkImageSubresourceRange &range, uint32_t mip_level, 83099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_layer, uint32_t array_size) { 83199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return subresource(image_aspect(range.aspectMask), 83299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz range.baseMipLevel + mip_level, 83399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz range.baseArrayLayer + array_layer, array_size); 834bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter} 835bd7f592c081094082ecb22ae30beaef079f437d0Courtney Goeltzenleuchter 83699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresourceRange 83799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzImage::subresource_range(VkImageAspectFlags aspect_mask, 83899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t base_mip_level, uint32_t mip_levels, 83999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t base_array_layer, uint32_t num_layers) { 840382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageSubresourceRange range = {}; 841aeffeae6128137520f85be7c81d67cb305929a10Courtney Goeltzenleuchter range.aspectMask = aspect_mask; 8429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter range.baseMipLevel = base_mip_level; 8431f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu range.levelCount = mip_levels; 8443dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter range.baseArrayLayer = base_array_layer; 8451f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu range.layerCount = num_layers; 8469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return range; 8479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 84999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresourceRange 85099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzImage::subresource_range(const VkImageCreateInfo &info, 85199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkImageAspectFlags aspect_mask) { 85299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return subresource_range(aspect_mask, 0, info.mipLevels, 0, 85399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz info.arrayLayers); 8549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 85699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkImageSubresourceRange 85799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzImage::subresource_range(const VkImageSubresource &subres) { 85899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return subresource_range(subres.aspectMask, subres.mipLevel, 1, 85999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz subres.arrayLayer, 1); 8609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 86299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkExtent2D Image::extent(int32_t width, int32_t height) { 863382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent2D extent = {}; 8649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.width = width; 8659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.height = height; 8669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return extent; 8679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 86999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkExtent2D Image::extent(const VkExtent2D &extent, uint32_t mip_level) { 87099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const int32_t width = 87199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz (extent.width >> mip_level) ? extent.width >> mip_level : 1; 87299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const int32_t height = 87399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz (extent.height >> mip_level) ? extent.height >> mip_level : 1; 8749cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(width, height); 8759cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 87799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkExtent2D Image::extent(const VkExtent3D &extent) { 8789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(extent.width, extent.height); 8799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 88199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkExtent3D Image::extent(int32_t width, int32_t height, int32_t depth) { 882382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent3D extent = {}; 8839cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.width = width; 8849cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.height = height; 8859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.depth = depth; 8869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return extent; 8879cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8889cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 88999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkExtent3D Image::extent(const VkExtent3D &extent, uint32_t mip_level) { 89099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const int32_t width = 89199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz (extent.width >> mip_level) ? extent.width >> mip_level : 1; 89299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const int32_t height = 89399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz (extent.height >> mip_level) ? extent.height >> mip_level : 1; 89499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const int32_t depth = 89599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz (extent.depth >> mip_level) ? extent.depth >> mip_level : 1; 8969cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(width, height, depth); 8979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 89999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkShaderModuleCreateInfo ShaderModule::create_info(size_t code_size, 90099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const uint32_t *code, 90199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkFlags flags) { 9022d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter VkShaderModuleCreateInfo info = {}; 9032d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; 9049cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.codeSize = code_size; 9059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.pCode = code; 9069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 9079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 9089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 9099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 91099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet 91199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDevice::write_descriptor_set(const DescriptorSet &set, uint32_t binding, 91299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 91399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, 91499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkDescriptorImageInfo *image_info) { 91534aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter VkWriteDescriptorSet write = {}; 91634aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; 9171f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstSet = set.handle(); 9181f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstBinding = binding; 9191f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstArrayElement = array_element; 920763a749795bb4827efbbf19cbc87b959511496ddChia-I Wu write.descriptorCount = count; 92134aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.descriptorType = type; 92234aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.pImageInfo = image_info; 92334aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter return write; 92434aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter} 92534aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter 92699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet 92799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDevice::write_descriptor_set(const DescriptorSet &set, uint32_t binding, 92899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 92999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, 93099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const VkDescriptorBufferInfo *buffer_info) { 93134aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter VkWriteDescriptorSet write = {}; 93234aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; 9331f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstSet = set.handle(); 9341f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstBinding = binding; 9351f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstArrayElement = array_element; 936763a749795bb4827efbbf19cbc87b959511496ddChia-I Wu write.descriptorCount = count; 93734aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.descriptorType = type; 93834aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.pBufferInfo = buffer_info; 93934aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter return write; 94034aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter} 94134aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter 94299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet 94399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDevice::write_descriptor_set(const DescriptorSet &set, uint32_t binding, 94499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 94599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t count, const VkBufferView *buffer_views) { 9468cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkWriteDescriptorSet write = {}; 9478cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; 9481f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstSet = set.handle(); 9491f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstBinding = binding; 9501f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu write.dstArrayElement = array_element; 951763a749795bb4827efbbf19cbc87b959511496ddChia-I Wu write.descriptorCount = count; 9528cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.descriptorType = type; 95334aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter write.pTexelBufferView = buffer_views; 9548cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu return write; 9559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 9569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 95799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet Device::write_descriptor_set( 95899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSet &set, uint32_t binding, uint32_t array_element, 95999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDescriptorType type, 96099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkDescriptorImageInfo> &image_info) { 96199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return write_descriptor_set(set, binding, array_element, type, 96299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz image_info.size(), &image_info[0]); 96334aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter} 96434aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter 96599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet Device::write_descriptor_set( 96699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSet &set, uint32_t binding, uint32_t array_element, 96799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz VkDescriptorType type, 96899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkDescriptorBufferInfo> &buffer_info) { 96999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return write_descriptor_set(set, binding, array_element, type, 97099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz buffer_info.size(), &buffer_info[0]); 97134aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter} 97234aa5c8bb02340240969d574d69dad0f68dbcb42Courtney Goeltzenleuchter 97399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkWriteDescriptorSet 97499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDevice::write_descriptor_set(const DescriptorSet &set, uint32_t binding, 97599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t array_element, VkDescriptorType type, 97699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const std::vector<VkBufferView> &buffer_views) { 97799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz return write_descriptor_set(set, binding, array_element, type, 97899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz buffer_views.size(), &buffer_views[0]); 9799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 9809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 98199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkCopyDescriptorSet 98299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzDevice::copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, 98399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t src_array_element, 98499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz const DescriptorSet &dst_set, uint32_t dst_binding, 98599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz uint32_t dst_array_element, uint32_t count) { 9868cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkCopyDescriptorSet copy = {}; 9878cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.sType = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET; 98855a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu copy.srcSet = src_set.handle(); 9898cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.srcBinding = src_binding; 9908cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.srcArrayElement = src_array_element; 9911f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu copy.dstSet = dst_set.handle(); 9921f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu copy.dstBinding = dst_binding; 9931f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu copy.dstArrayElement = dst_array_element; 994763a749795bb4827efbbf19cbc87b959511496ddChia-I Wu copy.descriptorCount = count; 9959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 9968cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu return copy; 9979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 9989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 99999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzinline VkCommandBufferAllocateInfo 100099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl SchultzCommandBuffer::create_info(VkCommandPool const &pool) { 10011f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu VkCommandBufferAllocateInfo info = {}; 1002c1f5e4068eab0504d4b68f78f88c55312ef96328Chia-I Wu info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; 10031f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu info.commandPool = pool; 1004a4ae48bfd6f2e2a80e1f92e054a007cf90a4e218Jon Ashburn info.commandBufferCount = 1; 10059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 10069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 10079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 10089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; // namespace vk_testing 10099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 10109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#endif // VKTESTBINDING_H 1011