/* * GStreamer * Copyright (C) 2015 Matthew Waters * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef _VK_MACROS_H_ #define _VK_MACROS_H_ #include #include G_BEGIN_DECLS #define GST_VK_STRUCT_1(a) \ { a } #define GST_VK_STRUCT_2(a, b) \ { a, b } #define GST_VK_STRUCT_3(a, b, c) \ { a, b, c } #define GST_VK_STRUCT_4(a, b, c, d) \ { a, b, c, d } #define GST_VK_STRUCT_5(a, b, c, d, e) \ { a, b, c, d, e } #define GST_VK_STRUCT_6(a, b, c, d, e, f) \ { a, b, c, d, e, f } #define GST_VK_STRUCT_7(a, b, c, d, e, f, g) \ { a, b, c, d, e, f, g } #define GST_VK_STRUCT_8(a, b, c, d, e, f, g, h) \ { a, b, c, d, e, f, g, h } #define GST_VK_BUFFER_IMAGE_COPY_INIT GST_VK_STRUCT_6 #define GST_VK_BUFFER_IMAGE_COPY(info,bufferOffset_,bufferRowLength_,bufferImageHeight_,imageSubresourceLayers_,imageOffset_,imageExtent_) \ G_STMT_START { \ VkImageSubresourceLayers sub = imageSubresourceLayers_; \ VkOffset3D offset = imageOffset_; \ VkExtent3D extent = imageExtent_; \ VkBufferImageCopy tmp = GST_VK_BUFFER_IMAGE_COPY_INIT(bufferOffset_,bufferRowLength_,bufferImageHeight_,sub,offset,extent); \ (region) = tmp; \ } G_STMT_END #define GST_VK_COMPONENT_MAPPING_INIT GST_VK_STRUCT_4 #define GST_VK_COMPONENT_MAPPING(component, r_, g_, b_, a_) \ G_STMT_START { \ VkComponentMapping tmp = GST_VK_COMPONENT_MAPPING_INIT(r_, g_, b_, a_); \ (component) = tmp; \ } G_STMT_END #define GST_VK_EXTENT3D_INIT GST_VK_STRUCT_3 #define GST_VK_EXTENT3D(extent,w,h,d) \ G_STMT_START { \ VkExtent3D tmp = GST_VK_EXTENT3D_INIT(w,h,d); \ (extent) = tmp; \ } G_STMT_END #define GST_VK_IMAGE_COPY_INIT GST_VK_STRUCT_5 #define GST_VK_IMAGE_COPY(copy,srcSubresource_,srcOffset_,dstSubresource_,dstOffset_,extent_) \ G_STMT_START { \ VkImageSubresourceLayers src_res = srcSubresource_; \ VkOffset3D src_offset = srcOffset_; \ VkImageSubresourceLayers dst_res = dstSubresource_; \ VkOffset3D dst_offset = dstOffset_; \ VkExtent3D ext = extent_; \ VkImageCopy tmp = GST_VK_IMAGE_COPY_INIT(src_res,src_offset,dst_res,dst_offset,ext); \ (copy) = tmp; \ } G_STMT_END #define GST_VK_IMAGE_BLIT_INIT GST_VK_STRUCT_6 #define GST_VK_IMAGE_BLIT(blit,srcSubresource_,srcOffset_,srcExtent_,dstSubresource_,dstOffset_,dstExtent_) \ G_STMT_START { \ VkImageSubresourceLayers src_res = srcSubresource_; \ VkOffset3D src_offset = srcOffset; \ VkExtent3D src_ext = srcExtent_; \ VkImageSubresourceLayers dst_res = dstSubresource_; \ VkOffset3D dst_offset = dstSubresource_; \ VkExtent3D dst_ext = dstExtent_; \ VkImageBlit tmp = GST_VK_IMAGE_BLIT_INIT(src_res, src_offset, src_ext, dst_res, dst_offset, dst_ext); \ (blit) = tmp; \ } G_STMT_END #define GST_VK_IMAGE_SUBRESOURCE_INIT GST_VK_STRUCT_3 #define GST_VK_IMAGE_SUBRESOURCE(subresource,aspectMast,mipLevel,arrayLayer) \ G_STMT_START { \ VkImageSubresource tmp = GST_VK_IMAGE_SUBRESOURCE_INIT(aspectMast,mipLevel,arrayLayer); \ (subresource) = tmp; \ } G_STMT_END #define GST_VK_IMAGE_SUBRESOURCE_LAYERS_INIT GST_VK_STRUCT_4 #define GST_VK_IMAGE_SUBRESOURCE_LAYERS(res,aspect_,mip,base_layer,layer_count) \ G_STMT_START { \ VkImageSubresourceLayers tmp = GST_VK_IMAGE_SUBRESOURCE_LAYERS_INIT(aspect_,mip,base_layer,layer_count); \ (res) = tmp; \ } G_STMT_END #define GST_VK_IMAGE_SUBRESOURCE_RANGE_INIT GST_VK_STRUCT_5 #define GST_VK_IMAGE_SUBRESOURCE_RANGE(range, aspect, mip_lvl, mip_lvl_count, array, layer_count) \ G_STMT_START { \ VkImageSubresourceRange tmp = GST_VK_IMAGE_SUBRESOURCE_RANGE_INIT(aspect,mip_lvl,mip_lvl_count,array,layer_count); \ (range) = tmp; \ } G_STMT_END #define GST_VK_OFFSET3D_INIT GST_VK_STRUCT_3 #define GST_VK_OFFSET3D(offset,x_,y_,z_) \ G_STMT_START { \ VkOffset3D tmp = GST_VK_OFFSET3D_INIT (x_,y_,z_); \ (offset) = tmp; \ } G_STMT_END G_END_DECLS #endif /*_VK_MACROS_H_ */