Merge branch 'jekstrand_renderpass_transfer_bit_fix' into 'master'
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / framework / vulkan / vkRefUtil.cpp
1 /*-------------------------------------------------------------------------
2  * Vulkan CTS Framework
3  * --------------------
4  *
5  * Copyright (c) 2015 Google Inc.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and/or associated documentation files (the
9  * "Materials"), to deal in the Materials without restriction, including
10  * without limitation the rights to use, copy, modify, merge, publish,
11  * distribute, sublicense, and/or sell copies of the Materials, and to
12  * permit persons to whom the Materials are furnished to do so, subject to
13  * the following conditions:
14  *
15  * The above copyright notice(s) and this permission notice shall be
16  * included in all copies or substantial portions of the Materials.
17  *
18  * The Materials are Confidential Information as defined by the
19  * Khronos Membership Agreement until designated non-confidential by
20  * Khronos, at which point this condition clause shall be removed.
21  *
22  * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28  * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
29  *
30  *//*!
31  * \file
32  * \brief Vulkan object reference holder utilities.
33  *//*--------------------------------------------------------------------*/
34
35 #include "vkRefUtil.hpp"
36
37 namespace vk
38 {
39
40 #include "vkRefUtilImpl.inl"
41
42 Move<VkPipeline> createGraphicsPipeline (const DeviceInterface&                                 vk,
43                                                                                  VkDevice                                                               device,
44                                                                                  VkPipelineCache                                                pipelineCache,
45                                                                                  const VkGraphicsPipelineCreateInfo*    pCreateInfo,
46                                                                                  const VkAllocationCallbacks*                   pAllocator)
47 {
48         VkPipeline object = 0;
49         VK_CHECK(vk.createGraphicsPipelines(device, pipelineCache, 1u, pCreateInfo, pAllocator, &object));
50         return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
51 }
52
53 Move<VkPipeline> createComputePipeline (const DeviceInterface&                          vk,
54                                                                                 VkDevice                                                        device,
55                                                                                 VkPipelineCache                                         pipelineCache,
56                                                                                 const VkComputePipelineCreateInfo*      pCreateInfo,
57                                                                                 const VkAllocationCallbacks*            pAllocator)
58 {
59         VkPipeline object = 0;
60         VK_CHECK(vk.createComputePipelines(device, pipelineCache, 1u, pCreateInfo, pAllocator, &object));
61         return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
62 }
63
64 Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface& vk, VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo)
65 {
66         VkCommandBuffer object = 0;
67         DE_ASSERT(pAllocateInfo->commandBufferCount == 1u);
68         VK_CHECK(vk.allocateCommandBuffers(device, pAllocateInfo, &object));
69         return Move<VkCommandBuffer>(check<VkCommandBuffer>(object), Deleter<VkCommandBuffer>(vk, device, pAllocateInfo->commandPool));
70 }
71
72 Move<VkDescriptorSet> allocateDescriptorSet (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo)
73 {
74         VkDescriptorSet object = 0;
75         DE_ASSERT(pAllocateInfo->descriptorSetCount == 1u);
76         VK_CHECK(vk.allocateDescriptorSets(device, pAllocateInfo, &object));
77         return Move<VkDescriptorSet>(check<VkDescriptorSet>(object), Deleter<VkDescriptorSet>(vk, device, pAllocateInfo->descriptorPool));
78 }
79
80 } // vk