#include "vkh_buffer.h"
-#include "vkhelpers.h"
+#include "vkh_device.h"
-void vkh_buffer_create(vkh_device *pDev, VkBufferUsageFlags usage, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size, vkh_buffer* buff){
+VkhBuffer vkh_buffer_create(VkhDevice pDev, VkBufferUsageFlags usage, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size){
+ VkhBuffer buff = (VkhBuffer)malloc(sizeof(vkh_buffer_t));
buff->pDev = pDev;
VkBufferCreateInfo bufCreateInfo = {
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
buff->memoryPropertyFlags = memoryPropertyFlags;
VK_CHECK_RESULT(vkh_buffer_bind(buff));
+ return buff;
}
-void vkh_buffer_destroy(vkh_buffer* buff){
+void vkh_buffer_destroy(VkhBuffer buff){
if (buff->buffer)
vkDestroyBuffer(buff->pDev->vkDev, buff->buffer, NULL);
if (buff->memory)
vkFreeMemory(buff->pDev->vkDev, buff->memory, NULL);
+ free(buff);
+ buff = NULL;
}
-VkResult vkh_buffer_map(vkh_buffer* buff){
+VkResult vkh_buffer_map(VkhBuffer buff){
return vkMapMemory(buff->pDev->vkDev, buff->memory, 0, VK_WHOLE_SIZE, 0, &buff->mapped);
}
-void vkh_buffer_unmap(vkh_buffer* buff){
+void vkh_buffer_unmap(VkhBuffer buff){
if (!buff->mapped)
return;
vkUnmapMemory(buff->pDev->vkDev, buff->memory);
buff->mapped = NULL;
}
-VkResult vkh_buffer_bind(vkh_buffer* buff)
+VkResult vkh_buffer_bind(VkhBuffer buff)
{
return vkBindBufferMemory(buff->pDev->vkDev, buff->buffer, buff->memory, 0);
}
#define VKH_BUFFER_H
#include <vulkan/vulkan.h>
-#include "vkh_device.h"
+#include "vkhelpers.h"
-typedef struct vkh_buffer_t {
- vkh_device* pDev;
- VkBuffer buffer;
- VkDeviceMemory memory;
- VkDescriptorBufferInfo descriptor;
- VkDeviceSize size;
- VkDeviceSize alignment;
+typedef struct _vkh_buffer_t {
+ VkhDevice pDev;
+ VkBuffer buffer;
+ VkDeviceMemory memory;
+ VkDescriptorBufferInfo descriptor;
+ VkDeviceSize size;
+ VkDeviceSize alignment;
- VkBufferUsageFlags usageFlags;
- VkMemoryPropertyFlags memoryPropertyFlags;
-
- void* mapped;
-}vkh_buffer;
-
-void vkh_buffer_create (vkh_device *pDev, VkBufferUsageFlags usage,
- VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size, vkh_buffer* buff);
-void vkh_buffer_destroy (vkh_buffer* buff);
-VkResult vkh_buffer_map (vkh_buffer* buff);
-void vkh_buffer_unmap (vkh_buffer* buff);
-VkResult vkh_buffer_bind (vkh_buffer* buff);
+ VkBufferUsageFlags usageFlags;
+ VkMemoryPropertyFlags memoryPropertyFlags;
+ void* mapped;
+}vkh_buffer_t;
#endif
#include "vkhelpers.h"
-typedef struct vkh_device_t{
- VkDevice vkDev;
- VkPhysicalDeviceMemoryProperties phyMemProps;
- VkRenderPass renderPass;
-}vkh_device;
+typedef struct _vkh_device_t{
+ VkDevice vkDev;
+ VkPhysicalDeviceMemoryProperties phyMemProps;
+ VkRenderPass renderPass;
+}vkh_device_t;
#endif
#include "vkh_image.h"
+#include "vkh_device.h"
-void _vkh_image_create (vkh_device *pDev, VkImageType imageType,
+VkhImage _vkh_image_create (VkhDevice pDev, VkImageType imageType,
VkFormat format, uint32_t width, uint32_t height,
VkMemoryPropertyFlags memprops, VkImageUsageFlags usage,
VkSampleCountFlagBits samples, VkImageTiling tiling,
uint32_t mipLevels, uint32_t arrayLayers,
- VkImageLayout layout, vkh_image* img){
+ VkImageLayout layout){
+ VkhImage img = (VkhImage)malloc(sizeof(vkh_image_t));
+
img->pDev = pDev;
img->width = width;
img->height = height;
assert(memory_type_from_properties(&pDev->phyMemProps, memReq.memoryTypeBits, memprops,&memAllocInfo.memoryTypeIndex));
VK_CHECK_RESULT(vkAllocateMemory(pDev->vkDev, &memAllocInfo, NULL, &img->memory));
VK_CHECK_RESULT(vkBindImageMemory(pDev->vkDev, img->image, img->memory, 0));
+ return img;
}
-void vkh_tex2d_array_create (vkh_device *pDev,
+VkhImage vkh_tex2d_array_create (VkhDevice pDev,
VkFormat format, uint32_t width, uint32_t height, uint32_t layers,
- VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout, vkh_image* img){
- _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
- VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_TILING_OPTIMAL, 1, layers, layout, img);
+ VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout){
+ return _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
+ VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_TILING_OPTIMAL, 1, layers, layout);
}
-void vkh_image_create (vkh_device *pDev,
+VkhImage vkh_image_create (VkhDevice pDev,
VkFormat format, uint32_t width, uint32_t height, VkImageTiling tiling,
VkMemoryPropertyFlags memprops,
- VkImageUsageFlags usage, VkImageLayout layout, vkh_image* img)
+ VkImageUsageFlags usage, VkImageLayout layout)
{
- _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
- VK_SAMPLE_COUNT_1_BIT, tiling, 1, 1, layout, img);
+ return _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
+ VK_SAMPLE_COUNT_1_BIT, tiling, 1, 1, layout);
}
-void vkh_image_ms_create (vkh_device *pDev,
+VkhImage vkh_image_ms_create(VkhDevice pDev,
VkFormat format, VkSampleCountFlagBits num_samples, uint32_t width, uint32_t height,
VkMemoryPropertyFlags memprops,
- VkImageUsageFlags usage, VkImageLayout layout, vkh_image* img){
- _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
- num_samples, VK_IMAGE_TILING_OPTIMAL, 1, 1, layout, img);
+ VkImageUsageFlags usage, VkImageLayout layout){
+ return _vkh_image_create (pDev, VK_IMAGE_TYPE_2D, format, width, height, memprops,usage,
+ num_samples, VK_IMAGE_TILING_OPTIMAL, 1, 1, layout);
}
-void vkh_image_create_descriptor(vkh_image* img, VkImageViewType viewType, VkImageAspectFlags aspectFlags, VkFilter magFilter,
+void vkh_image_create_descriptor(VkhImage img, VkImageViewType viewType, VkImageAspectFlags aspectFlags, VkFilter magFilter,
VkFilter minFilter, VkSamplerMipmapMode mipmapMode)
{
img->pDescriptor = (VkDescriptorImageInfo*)malloc(sizeof(VkDescriptorImageInfo));
VK_CHECK_RESULT(vkCreateSampler(img->pDev->vkDev, &samplerCreateInfo, NULL, &img->pDescriptor->sampler));
}
-void vkh_image_destroy(vkh_image* img)
+void vkh_image_destroy(VkhImage img)
{
if (img->pDescriptor != NULL){
vkDestroyImageView(img->pDev->vkDev,img->pDescriptor->imageView,NULL);
free(img->pDescriptor);
vkDestroyImage(img->pDev->vkDev,img->image,NULL);
vkFreeMemory(img->pDev->vkDev, img->memory, NULL);
+ free(img);
+ img = NULL;
}
#define VKH_IMAGE_H
#include "vkhelpers.h"
-#include "vkh_device.h"
-typedef struct vkh_image_t {
- vkh_device* pDev;
+typedef struct _vkh_image_t {
+ VkhDevice pDev;
VkImageCreateInfo infos;
uint32_t width, height;
VkImage image;
VkDeviceMemory memory;
VkDescriptorImageInfo* pDescriptor;
VkImageLayout layout;//used for descriptor creation
-}vkh_image;
-
-void vkh_image_create (vkh_device* pDev, VkFormat format, uint32_t width, uint32_t height, VkImageTiling tiling,
- VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout, vkh_image *img);
-void vkh_image_ms_create (vkh_device *pDev, VkFormat format, VkSampleCountFlagBits num_samples, uint32_t width, uint32_t height,
- VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout, vkh_image *img);
-
-void vkh_tex2d_array_create (vkh_device *pDev, VkFormat format, uint32_t width, uint32_t height, uint32_t layers,
- VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout, vkh_image* img);
-
-void vkh_image_create_descriptor(vkh_image* img, VkImageViewType viewType, VkImageAspectFlags aspectFlags, VkFilter magFilter, VkFilter minFilter,
- VkSamplerMipmapMode mipmapMode);
-void vkh_image_destroy(vkh_image* img);
+}vkh_image_t;
#endif
} \
}
+typedef struct _vkh_device_t* VkhDevice;
+typedef struct _vkh_image_t* VkhImage;
+typedef struct _vkh_buffer_t* VkhBuffer;
+
+///////////////////////////////
+VkhImage vkh_image_create (VkhDevice pDev, VkFormat format, uint32_t width, uint32_t height, VkImageTiling tiling,
+ VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout);
+VkhImage vkh_image_ms_create (VkhDevice pDev, VkFormat format, VkSampleCountFlagBits num_samples, uint32_t width, uint32_t height,
+ VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout);
+VkhImage vkh_tex2d_array_create (VkhDevice pDev, VkFormat format, uint32_t width, uint32_t height, uint32_t layers,
+ VkMemoryPropertyFlags memprops, VkImageUsageFlags usage, VkImageLayout layout);
+void vkh_image_create_descriptor(VkhImage img, VkImageViewType viewType, VkImageAspectFlags aspectFlags, VkFilter magFilter, VkFilter minFilter,
+ VkSamplerMipmapMode mipmapMode);
+void vkh_image_destroy (VkhImage img);
+
+////////////////////////////////
+VkhBuffer vkh_buffer_create (VkhDevice pDev, VkBufferUsageFlags usage,
+ VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size);
+void vkh_buffer_destroy (VkhBuffer buff);
+VkResult vkh_buffer_map (VkhBuffer buff);
+void vkh_buffer_unmap (VkhBuffer buff);
+VkResult vkh_buffer_bind (VkhBuffer buff);
+///////////////////////////////
VkPhysicalDevice vkh_find_phy (VkInstance inst, VkPhysicalDeviceType phyType);
VkFence vkh_fence_create (VkDevice dev);
VkSemaphore vkh_semaphore_create (VkDevice dev);
VkCommandPool vkh_cmd_pool_create (VkDevice dev, uint32_t qFamIndex, VkCommandPoolCreateFlags flags);
VkCommandBuffer vkh_cmd_buff_create (VkDevice dev, VkCommandPool cmdPool, VkCommandBufferLevel level);
-void vkh_cmd_begin(VkCommandBuffer cmdBuff, VkCommandBufferUsageFlags flags);
-void vkh_cmd_end(VkCommandBuffer cmdBuff);
-void vkh_cmd_submit(VkQueue queue, VkCommandBuffer *pCmdBuff, VkFence fence);
+
+void vkh_cmd_begin (VkCommandBuffer cmdBuff, VkCommandBufferUsageFlags flags);
+void vkh_cmd_end (VkCommandBuffer cmdBuff);
+void vkh_cmd_submit (VkQueue queue, VkCommandBuffer *pCmdBuff, VkFence fence);
void vkh_cmd_submit_with_semaphores(VkQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore waitSemaphore,
VkSemaphore signalSemaphore, VkFence fence);
void vkcrow_cmd_copy_submit(VkQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore* pWaitSemaphore, VkSemaphore* pSignalSemaphore);