Home | History | Annotate | Download | only in clipping
      1 #ifndef _VKTCLIPPINGUTIL_HPP
      2 #define _VKTCLIPPINGUTIL_HPP
      3 /*------------------------------------------------------------------------
      4  * Vulkan Conformance Tests
      5  * ------------------------
      6  *
      7  * Copyright (c) 2016 The Khronos Group Inc.
      8  *
      9  * Licensed under the Apache License, Version 2.0 (the "License");
     10  * you may not use this file except in compliance with the License.
     11  * You may obtain a copy of the License at
     12  *
     13  *      http://www.apache.org/licenses/LICENSE-2.0
     14  *
     15  * Unless required by applicable law or agreed to in writing, software
     16  * distributed under the License is distributed on an "AS IS" BASIS,
     17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     18  * See the License for the specific language governing permissions and
     19  * limitations under the License.
     20  *
     21  *//*!
     22  * \file
     23  * \brief Clipping tests utilities
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "vkDefs.hpp"
     27 #include "vkQueryUtil.hpp"
     28 #include "vkMemUtil.hpp"
     29 #include "vkRefUtil.hpp"
     30 #include "vkPrograms.hpp"
     31 #include "tcuVector.hpp"
     32 
     33 namespace vkt
     34 {
     35 namespace clipping
     36 {
     37 
     38 class Buffer
     39 {
     40 public:
     41 										Buffer			(const vk::DeviceInterface&		vk,
     42 														 const vk::VkDevice				device,
     43 														 vk::Allocator&					allocator,
     44 														 const vk::VkBufferCreateInfo&	bufferCreateInfo,
     45 														 const vk::MemoryRequirement	memoryRequirement)
     46 
     47 											: m_buffer		(createBuffer(vk, device, &bufferCreateInfo))
     48 											, m_allocation	(allocator.allocate(getBufferMemoryRequirements(vk, device, *m_buffer), memoryRequirement))
     49 										{
     50 											VK_CHECK(vk.bindBufferMemory(device, *m_buffer, m_allocation->getMemory(), m_allocation->getOffset()));
     51 										}
     52 
     53 	const vk::VkBuffer&					get				(void) const { return *m_buffer; }
     54 	const vk::VkBuffer&					operator*		(void) const { return get(); }
     55 	vk::Allocation&						getAllocation	(void) const { return *m_allocation; }
     56 
     57 private:
     58 	const vk::Unique<vk::VkBuffer>		m_buffer;
     59 	const de::UniquePtr<vk::Allocation>	m_allocation;
     60 
     61 	// "deleted"
     62 										Buffer			(const Buffer&);
     63 	Buffer&								operator=		(const Buffer&);
     64 };
     65 
     66 class Image
     67 {
     68 public:
     69 										Image			(const vk::DeviceInterface&		vk,
     70 														 const vk::VkDevice				device,
     71 														 vk::Allocator&					allocator,
     72 														 const vk::VkImageCreateInfo&	imageCreateInfo,
     73 														 const vk::MemoryRequirement	memoryRequirement)
     74 
     75 											: m_image		(createImage(vk, device, &imageCreateInfo))
     76 											, m_allocation	(allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement))
     77 										{
     78 											VK_CHECK(vk.bindImageMemory(device, *m_image, m_allocation->getMemory(), m_allocation->getOffset()));
     79 										}
     80 
     81 	const vk::VkImage&					get				(void) const { return *m_image; }
     82 	const vk::VkImage&					operator*		(void) const { return get(); }
     83 	vk::Allocation&						getAllocation	(void) const { return *m_allocation; }
     84 
     85 private:
     86 	const vk::Unique<vk::VkImage>		m_image;
     87 	const de::UniquePtr<vk::Allocation>	m_allocation;
     88 
     89 	// "deleted"
     90 										Image			(const Image&);
     91 	Image&								operator=		(const Image&);
     92 };
     93 
     94 enum FeatureFlagBits
     95 {
     96 	FEATURE_TESSELLATION_SHADER							= 1u << 0,
     97 	FEATURE_GEOMETRY_SHADER								= 1u << 1,
     98 	FEATURE_SHADER_FLOAT_64								= 1u << 2,
     99 	FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS			= 1u << 3,
    100 	FEATURE_FRAGMENT_STORES_AND_ATOMICS					= 1u << 4,
    101 	FEATURE_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE	= 1u << 5,
    102 	FEATURE_DEPTH_CLAMP									= 1u << 6,
    103 	FEATURE_LARGE_POINTS								= 1u << 7,
    104 	FEATURE_WIDE_LINES									= 1u << 8,
    105 	FEATURE_SHADER_CLIP_DISTANCE						= 1u << 9,
    106 	FEATURE_SHADER_CULL_DISTANCE						= 1u << 10,
    107 };
    108 typedef deUint32 FeatureFlags;
    109 
    110 vk::VkBufferCreateInfo			makeBufferCreateInfo						(const vk::VkDeviceSize bufferSize, const vk::VkBufferUsageFlags usage);
    111 vk::Move<vk::VkCommandPool>		makeCommandPool								(const vk::DeviceInterface& vk, const vk::VkDevice device, const deUint32 queueFamilyIndex);
    112 vk::Move<vk::VkCommandBuffer>	makeCommandBuffer							(const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkCommandPool commandPool);
    113 vk::Move<vk::VkDescriptorSet>	makeDescriptorSet							(const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorPool descriptorPool, const vk::VkDescriptorSetLayout setLayout);
    114 vk::Move<vk::VkPipelineLayout>	makePipelineLayout							(const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkDescriptorSetLayout descriptorSetLayout);
    115 vk::Move<vk::VkPipelineLayout>	makePipelineLayoutWithoutDescriptors		(const vk::DeviceInterface& vk, const vk::VkDevice device);
    116 vk::Move<vk::VkImageView>		makeImageView								(const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkImage image, const vk::VkImageViewType viewType, const vk::VkFormat format, const vk::VkImageSubresourceRange subresourceRange);
    117 vk::VkBufferImageCopy			makeBufferImageCopy							(const vk::VkImageSubresourceLayers subresourceLayers, const vk::VkExtent3D extent);
    118 vk::VkBufferMemoryBarrier		makeBufferMemoryBarrier						(const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkBuffer buffer, const vk::VkDeviceSize offset, const vk::VkDeviceSize bufferSizeBytes);
    119 vk::VkImageMemoryBarrier		makeImageMemoryBarrier						(const vk::VkAccessFlags srcAccessMask, const vk::VkAccessFlags dstAccessMask, const vk::VkImageLayout oldLayout, const vk::VkImageLayout newLayout, const vk::VkImage image, const vk::VkImageSubresourceRange subresourceRange);
    120 
    121 void							beginCommandBuffer							(const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
    122 void							endCommandBuffer							(const vk::DeviceInterface& vk, const vk::VkCommandBuffer commandBuffer);
    123 void							submitCommandsAndWait						(const vk::DeviceInterface& vk, const vk::VkDevice device, const vk::VkQueue queue, const vk::VkCommandBuffer commandBuffer);
    124 void							requireFeatures								(const vk::InstanceInterface& vki, const vk::VkPhysicalDevice physDevice, const FeatureFlags flags);
    125 
    126 std::string						getPrimitiveTopologyShortName				(const vk::VkPrimitiveTopology topology);
    127 
    128 } // clipping
    129 } // vkt
    130 
    131 #endif // _VKTCLIPPINGUTIL_HPP
    132