vktestbinding.h revision 3dee8087999562e0637326175a3cf6cab858158e
19cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// VK tests 29cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// 39cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// Copyright (C) 2014 LunarG, Inc. 49cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// 59cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// Permission is hereby granted, free of charge, to any person obtaining a 69cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// copy of this software and associated documentation files (the "Software"), 79cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// to deal in the Software without restriction, including without limitation 89cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// the rights to use, copy, modify, merge, publish, distribute, sublicense, 99cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// and/or sell copies of the Software, and to permit persons to whom the 109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// Software is furnished to do so, subject to the following conditions: 119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// 129cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// The above copyright notice and this permission notice shall be included 139cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// in all copies or substantial portions of the Software. 149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// 159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 169cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 189cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter// DEALINGS IN THE SOFTWARE. 229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#ifndef VKTESTBINDING_H 249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#define VKTESTBINDING_H 259cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include <vector> 27a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu#include <assert.h> 289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include "vulkan.h" 309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchternamespace vk_testing { 329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchtertypedef void (*ErrorCallback)(const char *expr, const char *file, unsigned int line, const char *function); 349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchtervoid set_error_callback(ErrorCallback callback); 359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 36f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wuclass PhysicalDevice; 379cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Device; 389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Queue; 39ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wuclass DeviceMemory; 409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Fence; 419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Semaphore; 429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Event; 439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass QueryPool; 449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Buffer; 459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass BufferView; 469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Image; 479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass ImageView; 489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DepthStencilView; 499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Shader; 509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Pipeline; 519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass PipelineDelta; 529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass Sampler; 539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSetLayout; 54556f721b927c7f8bf6f37dd502afe8ebf3b76719Mark Lobodzinskiclass PipelineLayout; 559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSetPool; 569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass DescriptorSet; 576b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wuclass DynamicViewportState; 58e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicLineWidthState; 59e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicDepthBiasState; 60e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicBlendState; 61e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicDepthBoundsState; 622605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northropclass DynamicStencilState; 639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterclass CmdBuffer; 64902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchterclass CmdPool; 659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6618061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkLayerProperties> GetGlobalLayers(); 6718061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkExtensionProperties> GetGlobalExtensions(); 6818061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchterstd::vector<VkExtensionProperties> GetGlobalExtensions(const char *pLayerName); 6918061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchter 70a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wunamespace internal { 71a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 72a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wutemplate<typename T> 73a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuclass Handle { 74a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wupublic: 75a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu const T &handle() const { return handle_; } 76a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu bool initialized() const { return (handle_ != VK_NULL_HANDLE); } 77a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 78a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuprotected: 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 84a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu void init(T handle) 85a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu { 86a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu assert(!initialized()); 87a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu handle_ = handle; 88a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu } 89a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 90a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuprivate: 91a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu // handles are non-copyable 92a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle(const Handle &); 93a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle &operator=(const Handle &); 94a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 95a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu T handle_; 96a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu}; 97a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 98a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 99a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wutemplate<typename T> 100a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuclass NonDispHandle : public Handle<T> { 101a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuprotected: 102a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu explicit NonDispHandle() : Handle<T>(), dev_handle_(VK_NULL_HANDLE) {} 103a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu explicit NonDispHandle(VkDevice dev, T handle) : Handle<T>(handle), dev_handle_(dev) {} 104a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 105a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu const VkDevice &device() const { return dev_handle_; } 106a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 107a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu void init(VkDevice dev, T handle) 108a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu { 109a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu assert(!Handle<T>::initialized() && dev_handle_ == VK_NULL_HANDLE); 110a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu Handle<T>::init(handle); 111a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu dev_handle_ = dev; 112a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu } 113a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 114a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wuprivate: 115a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu VkDevice dev_handle_; 116a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu}; 117a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 118a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu} // namespace internal 119a10be9d8a28a559a0de069fc590d550a0c101430Chia-I Wu 120f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wuclass PhysicalDevice : public internal::Handle<VkPhysicalDevice> { 1219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 122f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu explicit PhysicalDevice(VkPhysicalDevice phy) : Handle(phy) 123723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski { 124723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski memory_properties_ = memory_properties(); 125723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski } 1269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1278205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour VkPhysicalDeviceProperties properties() const; 1288205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour VkPhysicalDeviceMemoryProperties memory_properties() const; 129ef72e2a7cf4fa5708fdbfbc1c972a24ad0dbf809Cody Northrop std::vector<VkQueueFamilyProperties> queue_properties() const; 1309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 131d72da75739c3caab80fcb704f2ab353c5f223aa9Mike Stroyan VkResult set_memory_type(const uint32_t type_bits, VkMemoryAllocInfo *info, const VkMemoryPropertyFlags properties, 132d72da75739c3caab80fcb704f2ab353c5f223aa9Mike Stroyan const VkMemoryPropertyFlags forbid = 0) const; 1339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 13418061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchter // vkGetPhysicalDeviceExtensionProperties() 1351c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter std::vector<VkExtensionProperties> extensions() const; 13618061cdee54b19cd628178d2924a7a914c62a10bCourtney Goeltzenleuchter std::vector<VkExtensionProperties> extensions(const char * pLayerName) const; 1379cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkEnumerateLayers() 139f5c61951493d13d4fda80bce2d36fab7b6f449aaCourtney Goeltzenleuchter std::vector<VkLayerProperties> layers() const; 1409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterprivate: 1421c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter void add_extension_dependencies(uint32_t dependency_count, 1431c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter VkExtensionProperties *depencency_props, 1441c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter std::vector<VkExtensionProperties> &ext_list); 145f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu 146723462910ef2f9ed0255b74399c835020a75a0b1Mark Lobodzinski VkPhysicalDeviceMemoryProperties memory_properties_; 1479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 1489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 149a263629c001e522a146c68e253979c20482becfbChia-I Wuclass Device : public internal::Handle<VkDevice> { 1509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 151f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu explicit Device(VkPhysicalDevice phy) : phy_(phy) {} 1529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter ~Device(); 1539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDevice() 155ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init(const VkDeviceCreateInfo &info); 15661414dee66bbc720c72dce59da6db9f0d31ea24aCourtney Goeltzenleuchter void init(std::vector<const char*> &layers, std::vector<const char *> &extensions); // all queues, all extensions, etc 15761414dee66bbc720c72dce59da6db9f0d31ea24aCourtney Goeltzenleuchter void init() { std::vector<const char *> layers; std::vector<const char *> extensions; init(layers, extensions); }; 1589cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 159f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu const PhysicalDevice &phy() const { return phy_; } 1609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1611245cec54fd74fea87bc95913788726054a91518Jon Ashburn // vkGetDeviceProcAddr() 162a4c8c71cb37926b9cc4dd8e131b2ddd3f5de48d5Courtney Goeltzenleuchter PFN_vkVoidFunction get_proc(const char *name) const { return vkGetDeviceProcAddr(handle(), name); } 1631245cec54fd74fea87bc95913788726054a91518Jon Ashburn 1649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetDeviceQueue() 165cf26e07b83fc43011e939b75f0d393a48a5628d0Mark Lobodzinski const std::vector<Queue *> &graphics_queues() const { return queues_[GRAPHICS]; } 1669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Queue *> &compute_queues() { return queues_[COMPUTE]; } 1679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Queue *> &dma_queues() { return queues_[DMA]; } 1689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter uint32_t graphics_queue_node_index_; 1699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter struct Format { 171382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFormat format; 172382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageTiling tiling; 173382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFlags features; 1749cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter }; 1759cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetFormatInfo() 176382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFormatProperties format_properties(VkFormat format); 1779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const std::vector<Format> &formats() const { return formats_; } 1789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkDeviceWaitIdle() 1809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void wait(); 1819cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1829cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkWaitForFences() 183382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkResult wait(const std::vector<const Fence *> &fences, bool wait_all, uint64_t timeout); 184382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkResult wait(const Fence &fence) { return wait(std::vector<const Fence *>(1, &fence), true, (uint64_t) -1); } 1859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 1868cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu // vkUpdateDescriptorSets() 18767b42b7bde3163f662452cd8ed20e0b69e1afa4fMark Lobodzinski void update_descriptor_sets(const std::vector<VkWriteDescriptorSet> &writes, const std::vector<VkCopyDescriptorSet> &copies); 18867b42b7bde3163f662452cd8ed20e0b69e1afa4fMark Lobodzinski void update_descriptor_sets(const std::vector<VkWriteDescriptorSet> &writes) { return update_descriptor_sets(writes, std::vector<VkCopyDescriptorSet>()); } 1898cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu 1908cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element, 1918cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkDescriptorType type, uint32_t count, const VkDescriptorInfo *descriptors); 1928cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element, 1938cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkDescriptorType type, const std::vector<VkDescriptorInfo> &descriptors); 1948cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu 1958cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu static VkCopyDescriptorSet copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, uint32_t src_array_element, 1968cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu const DescriptorSet &dst_set, uint32_t dst_binding, uint32_t dst_array_element, 1978cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu uint32_t count); 1988cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu 1999cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterprivate: 2009cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter enum QueueIndex { 2019cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter GRAPHICS, 2029cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter COMPUTE, 2039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter DMA, 2049cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter QUEUE_COUNT, 2059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter }; 2069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void init_queues(); 2089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void init_formats(); 2099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 210f5fb1092e95a6d5d38ef65c4f9504e7ea4f9ce59Chia-I Wu PhysicalDevice phy_; 2119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2129cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter std::vector<Queue *> queues_[QUEUE_COUNT]; 2139cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter std::vector<Format> formats_; 2149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 216f2862c7fc1528f109583276ec4c92e131aa540b4Chia-I Wuclass Queue : public internal::Handle<VkQueue> { 2179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 2180caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour explicit Queue(VkQueue queue, int index) : Handle(queue) {family_index_ = index;} 2199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueSubmit() 2219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void submit(const std::vector<const CmdBuffer *> &cmds, Fence &fence); 2229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void submit(const CmdBuffer &cmd, Fence &fence); 2239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void submit(const CmdBuffer &cmd); 2249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2259cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueWaitIdle() 2269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void wait(); 2279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueSignalSemaphore() 2299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkQueueWaitSemaphore() 2309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void signal_semaphore(Semaphore &sem); 2319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void wait_semaphore(Semaphore &sem); 2320caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour 2330caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour int get_family_index() {return family_index_;} 2340caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour 2350caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbourprivate: 2360caa94f5c686c2b9eaf57594b72a67fb9f440df1Tony Barbour int family_index_; 2379cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 239ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wuclass DeviceMemory : public internal::NonDispHandle<VkDeviceMemory> { 2409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 241ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu ~DeviceMemory(); 2429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkAllocMemory() 244ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init(const Device &dev, const VkMemoryAllocInfo &info); 2459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkMapMemory() 247382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter const void *map(VkFlags flags) const; 248382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void *map(VkFlags flags); 2499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const void *map() const { return map(0); } 2509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void *map() { return map(0); } 2519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkUnmapMemory() 2539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void unmap() const; 2549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 255ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu static VkMemoryAllocInfo alloc_info(VkDeviceSize size, uint32_t memory_type_index); 2569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 258a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wuclass Fence : public internal::NonDispHandle<VkFence> { 2599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 260a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu ~Fence(); 261a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu 2629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateFence() 263382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkFenceCreateInfo &info); 2649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetFenceStatus() 266a49923427e634a6ba14c610861284b2aa2291cbaChia-I Wu VkResult status() const { return vkGetFenceStatus(device(), handle()); } 2679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 268382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkFenceCreateInfo create_info(VkFenceCreateFlags flags); 269382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkFenceCreateInfo create_info(); 2709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2722454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wuclass Semaphore : public internal::NonDispHandle<VkSemaphore> { 2739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 2742454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wu ~Semaphore(); 2752454b9236ddcc40638aec9ac33de3ab570621f64Chia-I Wu 2769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateSemaphore() 277382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkSemaphoreCreateInfo &info); 2789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 279864fd38da3f44dfe26e043f26f0cecad29a1cfd6Tony Barbour static VkSemaphoreCreateInfo create_info(VkFlags flags); 2809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2819cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2829b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wuclass Event : public internal::NonDispHandle<VkEvent> { 2839cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 2849b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu ~Event(); 2859b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu 2869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateEvent() 287382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkEventCreateInfo &info); 2889cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 2899cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetEventStatus() 2909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkSetEvent() 2919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetEvent() 2929b6db1d5d991a4f98a99e8510d9d85b67f117e04Chia-I Wu VkResult status() const { return vkGetEventStatus(device(), handle()); } 2939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void set(); 2949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void reset(); 2959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 296382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkEventCreateInfo create_info(VkFlags flags); 2979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 2989cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 299fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wuclass QueryPool : public internal::NonDispHandle<VkQueryPool> { 3009cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 301fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wu ~QueryPool(); 302fd0ce99eac2a9faa48c76702ec0a4c533389d435Chia-I Wu 3039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateQueryPool() 304382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkQueryPoolCreateInfo &info); 3059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkGetQueryPoolResults() 307382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkResult results(uint32_t start, uint32_t count, size_t size, void *data); 3089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 309382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkQueryPoolCreateInfo create_info(VkQueryType type, uint32_t slot_count); 3109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 312f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wuclass Buffer : public internal::NonDispHandle<VkBuffer> { 3139cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 314f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu explicit Buffer() : NonDispHandle() {} 315ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter explicit Buffer(const Device &dev, const VkBufferCreateInfo &info) { init(dev, info); } 3168205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour explicit Buffer(const Device &dev, VkDeviceSize size) { init(dev, size); } 3179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 318f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu ~Buffer(); 319f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 3209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateBuffer() 321f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, const VkBufferCreateInfo &info, VkMemoryPropertyFlags mem_props); 322f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, const VkBufferCreateInfo &info) { init(dev, info, 0); } 323f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags mem_props) { init(dev, create_info(size, 0), mem_props); } 324f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, VkDeviceSize size) { init(dev, size, 0); } 325d0e7d22a3ea3cc61de731011cc63b5e148e6667fCody Northrop void init_as_src(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT), reqs); } 326d0e7d22a3ea3cc61de731011cc63b5e148e6667fCody Northrop void init_as_dst(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT), reqs); } 327d0e7d22a3ea3cc61de731011cc63b5e148e6667fCody Northrop void init_as_src_and_dst(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT | VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT), reqs); } 328ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init_no_mem(const Device &dev, const VkBufferCreateInfo &info); 3299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 330f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // get the internal memory 331f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu const DeviceMemory &memory() const { return internal_mem_; } 332f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory &memory() { return internal_mem_; } 333f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 334f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkGetObjectMemoryRequirements() 335f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu VkMemoryRequirements memory_requirements() const; 336f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 337f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkBindObjectMemory() 338f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void bind_memory(const DeviceMemory &mem, VkDeviceSize mem_offset); 339fb9f5646a9f331a834d2e318d503a213cba490d7Mark Lobodzinski 3408205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour static VkBufferCreateInfo create_info(VkDeviceSize size, VkFlags usage); 3419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 342382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkBufferMemoryBarrier buffer_memory_barrier(VkFlags output_mask, VkFlags input_mask, 3438205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour VkDeviceSize offset, VkDeviceSize size) const 3449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter { 345382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkBufferMemoryBarrier barrier = {}; 3469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; 347f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu barrier.buffer = handle(); 3489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.outputMask = output_mask; 3499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.inputMask = input_mask; 3509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.offset = offset; 3519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.size = size; 3529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return barrier; 3539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter } 354f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 3559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterprivate: 356ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter VkBufferCreateInfo create_info_; 357f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 358f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory internal_mem_; 3599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 36176ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wuclass BufferView : public internal::NonDispHandle<VkBufferView> { 3629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 36376ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu ~BufferView(); 36476ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu 3659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateBufferView() 366ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter void init(const Device &dev, const VkBufferViewCreateInfo &info); 3679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 3689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 369f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wuclass Image : public internal::NonDispHandle<VkImage> { 3709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 371f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu explicit Image() : NonDispHandle(), format_features_(0) {} 372382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter explicit Image(const Device &dev, const VkImageCreateInfo &info) : format_features_(0) { init(dev, info); } 3739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 374f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu ~Image(); 375f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 3769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateImage() 377f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, const VkImageCreateInfo &info, VkMemoryPropertyFlags mem_props); 378f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void init(const Device &dev, const VkImageCreateInfo &info) { init(dev, info, 0); } 379382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init_no_mem(const Device &dev, const VkImageCreateInfo &info); 3809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 381f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // get the internal memory 382f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu const DeviceMemory &memory() const { return internal_mem_; } 383f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory &memory() { return internal_mem_; } 384f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 385f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkGetObjectMemoryRequirements() 386f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu VkMemoryRequirements memory_requirements() const; 387f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 388f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu // vkBindObjectMemory() 389f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu void bind_memory(const DeviceMemory &mem, VkDeviceSize mem_offset); 3909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 391426b90566abae5716741aade41184dc4dafe4aa4Tony Barbour // vkGetImageSubresourceLayout() 392382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkSubresourceLayout subresource_layout(const VkImageSubresource &subres) const; 3939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 3949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter bool transparent() const; 3958205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour bool copyable() const { return (format_features_ & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT); } 3969cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 397382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageSubresourceRange subresource_range(VkImageAspect aspect) const { return subresource_range(create_info_, aspect); } 398382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent3D extent() const { return create_info_.extent; } 399382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent3D extent(uint32_t mip_level) const { return extent(create_info_.extent, mip_level); } 400382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFormat format() const {return create_info_.format;} 4019cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 402382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageMemoryBarrier image_memory_barrier(VkFlags output_mask, VkFlags input_mask, 403382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageLayout old_layout, 404382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageLayout new_layout, 405382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter const VkImageSubresourceRange &range) const 4069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter { 407382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageMemoryBarrier barrier = {}; 4089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; 4099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.outputMask = output_mask; 4109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.inputMask = input_mask; 4119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.oldLayout = old_layout; 4129cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.newLayout = new_layout; 413f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu barrier.image = handle(); 4149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter barrier.subresourceRange = range; 4159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return barrier; 4169cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter } 4179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 418382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkImageCreateInfo create_info(); 4193dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter static VkImageSubresource subresource(VkImageAspect aspect, uint32_t mip_level, uint32_t array_layer); 4203dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter static VkImageSubresource subresource(const VkImageSubresourceRange &range, uint32_t mip_level, uint32_t array_layer); 421382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkImageSubresourceRange subresource_range(VkImageAspect aspect, uint32_t base_mip_level, uint32_t mip_levels, 4223dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter uint32_t base_array_layer, uint32_t array_size); 423382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkImageSubresourceRange subresource_range(const VkImageCreateInfo &info, VkImageAspect aspect); 424382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkImageSubresourceRange subresource_range(const VkImageSubresource &subres); 4259cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 426382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(int32_t width, int32_t height); 427382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(const VkExtent2D &extent, uint32_t mip_level); 428382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent2D extent(const VkExtent3D &extent); 4299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 430382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent3D extent(int32_t width, int32_t height, int32_t depth); 431382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter static VkExtent3D extent(const VkExtent3D &extent, uint32_t mip_level); 4329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 4339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterprivate: 434382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init_info(const Device &dev, const VkImageCreateInfo &info); 4359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 436382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageCreateInfo create_info_; 437382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFlags format_features_; 438f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu 439f4aed6c620084a7748e9d7be3897ae736f03d165Chia-I Wu DeviceMemory internal_mem_; 4409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 44276ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wuclass ImageView : public internal::NonDispHandle<VkImageView> { 4439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 44476ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu ~ImageView(); 44576ab1ff1f3572f5722b8c1108c9d8fa57a9a353bChia-I Wu 4469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateImageView() 447382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkImageViewCreateInfo &info); 4489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 450b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wuclass ShaderModule : public internal::NonDispHandle<VkShaderModule> { 4512d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchterpublic: 452b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu ~ShaderModule(); 453b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu 4542d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter // vkCreateShaderModule() 4552d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter void init(const Device &dev, const VkShaderModuleCreateInfo &info); 4562d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter VkResult init_try(const Device &dev, const VkShaderModuleCreateInfo &info); 4572d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter 4582d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter static VkShaderModuleCreateInfo create_info(size_t code_size, const void *code, VkFlags flags); 4592d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter}; 4602d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter 461b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wuclass Shader : public internal::NonDispHandle<VkShader> { 4629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 463b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu ~Shader(); 464b48eddb3bb67b48b7319f2752c4110f66e9dc4a3Chia-I Wu 4659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateShader() 466382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkShaderCreateInfo &info); 467382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkResult init_try(const Device &dev, const VkShaderCreateInfo &info); 4689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 46987ae5e14eeb6478f01fe31567cf07fd8bf8f0697Cody Northrop static VkShaderCreateInfo create_info(VkShaderModule module, const char *pName, VkFlags flags, VkShaderStage stage); 4709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 4722b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wuclass Pipeline : public internal::NonDispHandle<VkPipeline> { 4739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 4742b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wu ~Pipeline(); 4752b1d4d0666ed79101b5f5f0a228817fd97ac5c79Chia-I Wu 4769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateGraphicsPipeline() 477382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkGraphicsPipelineCreateInfo &info); 4789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateGraphicsPipelineDerivative() 479382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkGraphicsPipelineCreateInfo &info, const VkPipeline basePipeline); 4809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateComputePipeline() 481382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkComputePipelineCreateInfo &info); 4829cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkLoadPipeline() 4839cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void init(const Device&dev, size_t size, const void *data); 4849cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkLoadPipelineDerivative() 485382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device&dev, size_t size, const void *data, VkPipeline basePipeline); 4869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 487dc2188c58915eadd6e0cead54dacbfc00605c10dChris Forbes // vkCreateGraphicsPipeline with error return 488dc2188c58915eadd6e0cead54dacbfc00605c10dChris Forbes VkResult init_try(const Device &dev, const VkGraphicsPipelineCreateInfo &info); 489dc2188c58915eadd6e0cead54dacbfc00605c10dChris Forbes 4909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkStorePipeline() 4919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter size_t store(size_t size, void *data); 4929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 4939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 494deb9913579771b8f66442046ae778488e513856aChia-I Wuclass PipelineLayout : public internal::NonDispHandle<VkPipelineLayout> { 495deb9913579771b8f66442046ae778488e513856aChia-I Wupublic: 496deb9913579771b8f66442046ae778488e513856aChia-I Wu ~PipelineLayout(); 497deb9913579771b8f66442046ae778488e513856aChia-I Wu 498deb9913579771b8f66442046ae778488e513856aChia-I Wu // vCreatePipelineLayout() 499deb9913579771b8f66442046ae778488e513856aChia-I Wu void init(const Device &dev, VkPipelineLayoutCreateInfo &info, const std::vector<const DescriptorSetLayout *> &layouts); 500deb9913579771b8f66442046ae778488e513856aChia-I Wu}; 501deb9913579771b8f66442046ae778488e513856aChia-I Wu 5026abe35d79296718595d738f8b78a6487110fa861Chia-I Wuclass Sampler : public internal::NonDispHandle<VkSampler> { 5039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 5046abe35d79296718595d738f8b78a6487110fa861Chia-I Wu ~Sampler(); 5056abe35d79296718595d738f8b78a6487110fa861Chia-I Wu 5069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateSampler() 507382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkSamplerCreateInfo &info); 5089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 51055a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wuclass DescriptorSetLayout : public internal::NonDispHandle<VkDescriptorSetLayout> { 5119cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 51255a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorSetLayout(); 51355a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 5149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDescriptorSetLayout() 515382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkDescriptorSetLayoutCreateInfo &info); 5169cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 51855a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wuclass DescriptorPool : public internal::NonDispHandle<VkDescriptorPool> { 5199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 52055a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorPool(); 52155a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 5229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDescriptorPool() 523382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, VkDescriptorPoolUsage usage, 524382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter uint32_t max_sets, const VkDescriptorPoolCreateInfo &info); 5259cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 5269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetDescriptorPool() 5279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void reset(); 5289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 5299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkAllocDescriptorSets() 530cf26e07b83fc43011e939b75f0d393a48a5628d0Mark Lobodzinski std::vector<DescriptorSet *> alloc_sets(const Device &dev, VkDescriptorSetUsage usage, const std::vector<const DescriptorSetLayout *> &layouts); 531cf26e07b83fc43011e939b75f0d393a48a5628d0Mark Lobodzinski std::vector<DescriptorSet *> alloc_sets(const Device &dev, VkDescriptorSetUsage usage, const DescriptorSetLayout &layout, uint32_t count); 532cf26e07b83fc43011e939b75f0d393a48a5628d0Mark Lobodzinski DescriptorSet *alloc_sets(const Device &dev, VkDescriptorSetUsage usage, const DescriptorSetLayout &layout); 5339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 53555a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wuclass DescriptorSet : public internal::NonDispHandle<VkDescriptorSet> { 5369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 53755a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu ~DescriptorSet(); 53855a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu 53955a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu explicit DescriptorSet() : NonDispHandle() {} 540e84a8d680991b8fc0be0d666fb7dcb617b36acc5Tony Barbour explicit DescriptorSet(const Device &dev, VkDescriptorPool pool, VkDescriptorSet set) : NonDispHandle(dev.handle(), set) { pool_ = pool;} 541e84a8d680991b8fc0be0d666fb7dcb617b36acc5Tony Barbour 542e84a8d680991b8fc0be0d666fb7dcb617b36acc5Tony Barbourprivate: 543e84a8d680991b8fc0be0d666fb7dcb617b36acc5Tony Barbour VkDescriptorPool pool_; 5449cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 546de4124da4233d201bf1d7326acf0e8bf53d5bee5Tony Barbourclass DynamicViewportState : public internal::NonDispHandle<VkDynamicViewportState> { 5479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 5486b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wu ~DynamicViewportState(); 5496b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wu 5509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateDynamicViewportState() 551de4124da4233d201bf1d7326acf0e8bf53d5bee5Tony Barbour void init(const Device &dev, const VkDynamicViewportStateCreateInfo &info); 5529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 554e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicLineWidthState : public internal::NonDispHandle<VkDynamicLineWidthState> { 5559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 556e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop ~DynamicLineWidthState(); 5576b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wu 558e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop // vkCreateDynamicLineWidthState() 559e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop void init(const Device &dev, const VkDynamicLineWidthStateCreateInfo &info); 560f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northrop}; 561f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northrop 562e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicDepthBiasState : public internal::NonDispHandle<VkDynamicDepthBiasState> { 563f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northroppublic: 564e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop ~DynamicDepthBiasState(); 565f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northrop 566e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop // vkCreateDynamicDepthBiasState() 567e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop void init(const Device &dev, const VkDynamicDepthBiasStateCreateInfo &info); 5689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 570e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicBlendState : public internal::NonDispHandle<VkDynamicBlendState> { 5719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 572e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop ~DynamicBlendState(); 5736b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wu 574e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop // vkCreateDynamicBlendState() 575e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop void init(const Device &dev, const VkDynamicBlendStateCreateInfo &info); 5769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 578e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northropclass DynamicDepthBoundsState : public internal::NonDispHandle<VkDynamicDepthBoundsState> { 5799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 580e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop ~DynamicDepthBoundsState(); 5816b11e60997003c59ddfc3944bb24d0fb7a0473cdChia-I Wu 582e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop // vkCreateDynamicDepthBoundsState() 583e4bc6948ada94c7fe0b35a89dbc2542ec4f791a2Cody Northrop void init(const Device &dev, const VkDynamicDepthBoundsStateCreateInfo &info); 5842605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop}; 5852605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop 5862605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northropclass DynamicStencilState : public internal::NonDispHandle<VkDynamicStencilState> { 5872605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northroppublic: 5882605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop ~DynamicStencilState(); 5892605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop 5902605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop // vkCreateDynamicStencilState() 5912605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop void init(const Device &dev, const VkDynamicStencilStateCreateInfo &frontInfo, const VkDynamicStencilStateCreateInfo &backInfo); 5929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 5939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 594902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchterclass CmdPool : public internal::NonDispHandle<VkCmdPool> { 595902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchterpublic: 596902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter ~CmdPool(); 597902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 598902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter explicit CmdPool() : NonDispHandle() {} 599902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter explicit CmdPool(const Device &dev, const VkCmdPoolCreateInfo &info) { init(dev, info); } 600902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 601902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter void init(const Device &dev, const VkCmdPoolCreateInfo &info); 602902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 603902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter static VkCmdPoolCreateInfo create_info(uint32_t queue_family_index); 604902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter}; 605902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 606902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchterinline VkCmdPoolCreateInfo CmdPool::create_info(uint32_t queue_family_index) 607902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter{ 608902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter VkCmdPoolCreateInfo info = {}; 60973c22f4abf564e8d97d5addbf7d23adaa4b7dc77Tony Barbour info.sType = VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO; 610902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter info.queueFamilyIndex = queue_family_index; 611902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter return info; 612902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter} 613902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter 61478c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wuclass CmdBuffer : public internal::Handle<VkCmdBuffer> { 6159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchterpublic: 61678c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu ~CmdBuffer(); 61778c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu 61878c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu explicit CmdBuffer() : Handle() {} 619382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter explicit CmdBuffer(const Device &dev, const VkCmdBufferCreateInfo &info) { init(dev, info); } 6209cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkCreateCommandBuffer() 622382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void init(const Device &dev, const VkCmdBufferCreateInfo &info); 6239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkBeginCommandBuffer() 625382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter void begin(const VkCmdBufferBeginInfo *info); 6269cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void begin(); 6279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkEndCommandBuffer() 6299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter // vkResetCommandBuffer() 6309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter void end(); 631f02f9f8606b4b6b1604f7efd62ec5fc5bd6dfef8Cody Northrop void reset(VkCmdBufferResetFlags flags); 632f02f9f8606b4b6b1604f7efd62ec5fc5bd6dfef8Cody Northrop void reset() { reset(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES); } 6339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 634902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchter static VkCmdBufferCreateInfo create_info(VkCmdPool const &pool); 63578c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu 63678c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wuprivate: 63778c2a35016c72b92ce5d6fd705deb31736162607Chia-I Wu VkDevice dev_handle_; 6389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; 6399cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 640ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wuinline VkMemoryAllocInfo DeviceMemory::alloc_info(VkDeviceSize size, uint32_t memory_type_index) 6419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 642ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter VkMemoryAllocInfo info = {}; 6439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO; 644ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu info.allocationSize = size; 645ba0836f623e3a756bf0cac72d5a688430d2a3420Chia-I Wu info.memoryTypeIndex = memory_type_index; 6469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 6498205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbourinline VkBufferCreateInfo Buffer::create_info(VkDeviceSize size, VkFlags usage) 6509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 651ddcb6192458d696a106f48eeb12fd0390a3ca63fCourtney Goeltzenleuchter VkBufferCreateInfo info = {}; 6529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; 6539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.size = size; 6549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.usage = usage; 6559cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 658382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkFenceCreateInfo Fence::create_info(VkFenceCreateFlags flags) 6599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 660382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFenceCreateInfo info = {}; 6619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; 6629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 6639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 666382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkFenceCreateInfo Fence::create_info() 6679cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 668382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkFenceCreateInfo info = {}; 6699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; 6709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6729cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 673864fd38da3f44dfe26e043f26f0cecad29a1cfd6Tony Barbourinline VkSemaphoreCreateInfo Semaphore::create_info(VkFlags flags) 6749cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 675382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkSemaphoreCreateInfo info = {}; 6769cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; 6779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 6789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 681382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkEventCreateInfo Event::create_info(VkFlags flags) 6829cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 683382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkEventCreateInfo info = {}; 6849cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO; 6859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 6869cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6879cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6889cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 689382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkQueryPoolCreateInfo QueryPool::create_info(VkQueryType type, uint32_t slot_count) 6909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 691382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkQueryPoolCreateInfo info = {}; 6929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO; 6939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.queryType = type; 6949cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.slots = slot_count; 6959cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 6969cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 6979cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 698382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkImageCreateInfo Image::create_info() 6999cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 700382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageCreateInfo info = {}; 7019cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; 7029cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.width = 1; 7039cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.height = 1; 7049cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.extent.depth = 1; 7059cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.mipLevels = 1; 7069cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.arraySize = 1; 7079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.samples = 1; 7089cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7099cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7109cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 7113dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchterinline VkImageSubresource Image::subresource(VkImageAspect aspect, uint32_t mip_level, uint32_t array_layer) 7129cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 713382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageSubresource subres = {}; 7149cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter subres.aspect = aspect; 7159cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter subres.mipLevel = mip_level; 7163dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter subres.arrayLayer = array_layer; 7179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return subres; 7189cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7199cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 7203dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchterinline VkImageSubresource Image::subresource(const VkImageSubresourceRange &range, uint32_t mip_level, uint32_t array_layer) 7219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7223dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter return subresource(range.aspect, range.baseMipLevel + mip_level, range.baseArrayLayer + array_layer); 7239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 725382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkImageSubresourceRange Image::subresource_range(VkImageAspect aspect, uint32_t base_mip_level, uint32_t mip_levels, 7263dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter uint32_t base_array_layer, uint32_t array_size) 7279cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 728382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkImageSubresourceRange range = {}; 7299cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter range.aspect = aspect; 7309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter range.baseMipLevel = base_mip_level; 7319cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter range.mipLevels = mip_levels; 7323dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter range.baseArrayLayer = base_array_layer; 7339cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter range.arraySize = array_size; 7349cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return range; 7359cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7369cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 737382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkImageSubresourceRange Image::subresource_range(const VkImageCreateInfo &info, VkImageAspect aspect) 7389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7399cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return subresource_range(aspect, 0, info.mipLevels, 0, info.arraySize); 7409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 742382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkImageSubresourceRange Image::subresource_range(const VkImageSubresource &subres) 7439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7443dee8087999562e0637326175a3cf6cab858158eCourtney Goeltzenleuchter return subresource_range(subres.aspect, subres.mipLevel, 1, subres.arrayLayer, 1); 7459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7469cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 747382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkExtent2D Image::extent(int32_t width, int32_t height) 7489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 749382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent2D extent = {}; 7509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.width = width; 7519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.height = height; 7529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return extent; 7539cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7549cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 755382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkExtent2D Image::extent(const VkExtent2D &extent, uint32_t mip_level) 7569cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7579cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const int32_t width = (extent.width >> mip_level) ? extent.width >> mip_level : 1; 7589cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const int32_t height = (extent.height >> mip_level) ? extent.height >> mip_level : 1; 7599cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(width, height); 7609cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 762382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkExtent2D Image::extent(const VkExtent3D &extent) 7639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(extent.width, extent.height); 7659cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7669cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 767382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkExtent3D Image::extent(int32_t width, int32_t height, int32_t depth) 7689cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 769382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkExtent3D extent = {}; 7709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.width = width; 7719cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.height = height; 7729cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter extent.depth = depth; 7739cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return extent; 7749cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7759cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 776382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchterinline VkExtent3D Image::extent(const VkExtent3D &extent, uint32_t mip_level) 7779cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7789cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const int32_t width = (extent.width >> mip_level) ? extent.width >> mip_level : 1; 7799cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const int32_t height = (extent.height >> mip_level) ? extent.height >> mip_level : 1; 7809cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter const int32_t depth = (extent.depth >> mip_level) ? extent.depth >> mip_level : 1; 7819cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return Image::extent(width, height, depth); 7829cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7839cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 7842d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchterinline VkShaderModuleCreateInfo ShaderModule::create_info(size_t code_size, const void *code, VkFlags flags) 7859cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 7862d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter VkShaderModuleCreateInfo info = {}; 7872d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; 7889cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.codeSize = code_size; 7899cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.pCode = code; 7909cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.flags = flags; 7919cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 7929cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 7939cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 79487ae5e14eeb6478f01fe31567cf07fd8bf8f0697Cody Northropinline VkShaderCreateInfo Shader::create_info(VkShaderModule module, const char *pName, VkFlags flags, VkShaderStage stage) 7952d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter{ 7962d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter VkShaderCreateInfo info = {}; 7972d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO; 7982d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.module = module; 7992d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.pName = pName; 8002d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter info.flags = flags; 80187ae5e14eeb6478f01fe31567cf07fd8bf8f0697Cody Northrop info.stage = stage; 8022d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter return info; 8032d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter} 8042d034fd483f9181399561cf3207ddf12bf4e5b6aCourtney Goeltzenleuchter 8058cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wuinline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element, 8068cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkDescriptorType type, uint32_t count, const VkDescriptorInfo *descriptors) 8079cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 8088cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkWriteDescriptorSet write = {}; 8098cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; 81055a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu write.destSet = set.handle(); 8118cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.destBinding = binding; 8128cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.destArrayElement = array_element; 8138cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.count = count; 8148cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.descriptorType = type; 8158cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu write.pDescriptors = descriptors; 8168cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu return write; 8179cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8189cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 8198cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wuinline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element, 8208cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkDescriptorType type, const std::vector<VkDescriptorInfo> &descriptors) 8219cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 8228cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu return write_descriptor_set(set, binding, array_element, type, descriptors.size(), &descriptors[0]); 8239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8249cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 8258cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wuinline VkCopyDescriptorSet Device::copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, uint32_t src_array_element, 8268cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu const DescriptorSet &dst_set, uint32_t dst_binding, uint32_t dst_array_element, 8278cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu uint32_t count) 8289cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 8298cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu VkCopyDescriptorSet copy = {}; 8308cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.sType = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET; 83155a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu copy.srcSet = src_set.handle(); 8328cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.srcBinding = src_binding; 8338cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.srcArrayElement = src_array_element; 83455a871ff827f9b699a541c2f8bb479bba8aebf04Chia-I Wu copy.destSet = dst_set.handle(); 8358cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.destBinding = dst_binding; 8368cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.destArrayElement = dst_array_element; 8378cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu copy.count = count; 8389cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 8398cd8ecde19f154f1779a7bcc93cb1a3519b57dbfChia-I Wu return copy; 8409cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 842902d08122fca004bc59fecd27efe08a653ce31ecCourtney Goeltzenleuchterinline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool const &pool) 8439cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter{ 844382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter VkCmdBufferCreateInfo info = {}; 8459cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO; 846f02f9f8606b4b6b1604f7efd62ec5fc5bd6dfef8Cody Northrop info.cmdPool = pool; 8479cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return info; 8489cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter} 8499cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 8509cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter}; // namespace vk_testing 8519cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter 8529cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#endif // VKTESTBINDING_H 853