void vkh_image_create_view (VkhImage img, VkImageViewType viewType, VkImageAspectFlags aspectFlags);
void vkh_image_create_sampler (VkhImage img, VkFilter magFilter, VkFilter minFilter,
VkSamplerMipmapMode mipmapMode, VkSamplerAddressMode addressMode);
-void vkh_image_set_layout (VkCommandBuffer cmdBuff, VkhImage image, VkImageAspectFlags aspectMask,
+void vkh_image_set_layout (VkCommandBuffer cmdBuff, VkhImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout,
VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages);
-void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImageSubresourceRange subresourceRange,
+void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImageSubresourceRange subresourceRange, VkImageLayout old_image_layout,
VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages);
void vkh_image_destroy (VkhImage img);
void* vkh_image_map (VkhImage img);
VkhImage img = (VkhImage)calloc(1,sizeof(vkh_image_t));
img->pDev = pDev;
- img->width = width;
- img->height = height;
- img->layout = VK_IMAGE_LAYOUT_UNDEFINED;
- img->format = format;
- img->layers = arrayLayers;
- img->mipLevels = mipLevels;
- img->imported = false;
- img->alloc = VK_NULL_HANDLE;
- img->image = VK_NULL_HANDLE;
-
- VkImageCreateInfo image_info = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
- .imageType = imageType,
- .tiling = tiling,
- .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
- .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
- .usage = usage,
- .format = format,
- .extent = {width,height,1},
- .mipLevels = mipLevels,
- .arrayLayers = arrayLayers,
- .samples = samples };
-
- VmaAllocationCreateInfo allocInfo = { .usage = memprops };
- VK_CHECK_RESULT(vmaCreateImage (pDev->allocator, &image_info, &allocInfo, &img->image, &img->alloc, &img->allocInfo));
- /*VK_CHECK_RESULT(vkCreateImage(pDev->dev, &image_info, NULL, &img->image));
+ VkImageCreateInfo* pInfo = &img->infos;
+ pInfo->sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+ pInfo->imageType = imageType;
+ pInfo->tiling = tiling;
+ pInfo->initialLayout = (tiling == VK_IMAGE_TILING_OPTIMAL) ? VK_IMAGE_LAYOUT_UNDEFINED : VK_IMAGE_LAYOUT_PREINITIALIZED;
+ pInfo->sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+ pInfo->usage = usage;
+ pInfo->format = format;
+ pInfo->extent.width = width;
+ pInfo->extent.height = height;
+ pInfo->extent.depth = 1;
+ pInfo->mipLevels = mipLevels;
+ pInfo->arrayLayers = arrayLayers;
+ pInfo->samples = samples;
- VkMemoryRequirements memReq;
- vkGetImageMemoryRequirements(pDev->dev, img->image, &memReq);
+ img->imported = false;
- VkMemoryAllocateInfo memAllocInfo = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
- .allocationSize = memReq.size };
- assert(vkh_memory_type_from_properties(&pDev->phyMemProps, memReq.memoryTypeBits, memprops,&memAllocInfo.memoryTypeIndex));
+ img->alloc = VK_NULL_HANDLE;
+ img->image = VK_NULL_HANDLE;
+ img->sampler= VK_NULL_HANDLE;
+ img->view = VK_NULL_HANDLE;
- VK_CHECK_RESULT(vkAllocateMemory(pDev->dev, &memAllocInfo, NULL, &img->memory));
- VK_CHECK_RESULT(vkBindImageMemory(pDev->dev, img->image, img->memory, offset));*/
+ VmaAllocationCreateInfo allocInfo = { .usage = memprops };
+ VK_CHECK_RESULT(vmaCreateImage (pDev->allocator, pInfo, &allocInfo, &img->image, &img->alloc, &img->allocInfo));
return img;
}
VkhImage img = (VkhImage)calloc(1,sizeof(vkh_image_t));
img->pDev = pDev;
img->image = vkImg;
- img->format = format;
- img->width = width;
- img->height = height;
img->imported = true;
+
+ VkImageCreateInfo* pInfo = &img->infos;
+ pInfo->imageType = VK_IMAGE_TYPE_2D;
+ pInfo->format = format;
+ pInfo->extent.width = width;
+ pInfo->extent.height = height;
+ pInfo->extent.depth = 1;
+ pInfo->mipLevels = 1;
+ pInfo->arrayLayers = 1;
+ //pInfo->samples = samples;
+
return img;
}
VkhImage vkh_image_ms_create(VkhDevice pDev,
VkImageViewCreateInfo viewInfo = { .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
.image = img->image,
.viewType = viewType,
- .format = img->format,
+ .format = img->infos.format,
.components = {VK_COMPONENT_SWIZZLE_R,VK_COMPONENT_SWIZZLE_G,VK_COMPONENT_SWIZZLE_B,VK_COMPONENT_SWIZZLE_A},
- .subresourceRange = {aspectFlags,0,1,0,img->layers}};
+ .subresourceRange = {aspectFlags,0,1,0,img->infos.arrayLayers}};
VK_CHECK_RESULT(vkCreateImageView(img->pDev->dev, &viewInfo, NULL, &img->view));
}
void vkh_image_create_sampler (VkhImage img, VkFilter magFilter, VkFilter minFilter,
return desc;
}
-void vkh_image_set_layout(VkCommandBuffer cmdBuff, VkhImage image, VkImageAspectFlags aspectMask, VkImageLayout new_image_layout,
+void vkh_image_set_layout(VkCommandBuffer cmdBuff, VkhImage image, VkImageAspectFlags aspectMask,
+ VkImageLayout old_image_layout, VkImageLayout new_image_layout,
VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
VkImageSubresourceRange subres = {aspectMask,0,1,0,1};
- vkh_image_set_layout_subres(cmdBuff, image, subres, new_image_layout, src_stages, dest_stages);
+ vkh_image_set_layout_subres(cmdBuff, image, subres, old_image_layout, new_image_layout, src_stages, dest_stages);
}
void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImageSubresourceRange subresourceRange,
- VkImageLayout new_image_layout,
+ VkImageLayout old_image_layout, VkImageLayout new_image_layout,
VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
VkImageMemoryBarrier image_memory_barrier = { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.oldLayout = image->layout,
.image = image->image,
.subresourceRange = subresourceRange};
- switch (image->layout) {
+ switch (old_image_layout) {
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
image_memory_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
break;
set_image_layout(cb, bltDstImage, VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
- VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
set_image_layout(cb, blitSource, VK_IMAGE_ASPECT_COLOR_BIT,
- VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
- VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
VkImageCopy cregion = { .srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1},
.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1},
set_image_layout(cb, bltDstImage, VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);
+ set_image_layout(cb, blitSource, VK_IMAGE_ASPECT_COLOR_BIT,
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+ VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
vkh_cmd_end(cb);
}