Home | History | Annotate | Download | only in vk
      1 /*
      2 * Copyright 2016 Google Inc.
      3 *
      4 * Use of this source code is governed by a BSD-style license that can be
      5 * found in the LICENSE file.
      6 */
      7 
      8 #include "GrVkImageView.h"
      9 #include "GrVkGpu.h"
     10 #include "GrVkUtil.h"
     11 
     12 const GrVkImageView* GrVkImageView::Create(const GrVkGpu* gpu, VkImage image, VkFormat format,
     13                                            Type viewType, uint32_t miplevels) {
     14     VkImageView imageView;
     15 
     16     // Create the VkImageView
     17     VkImageViewCreateInfo viewInfo = {
     18         VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,               // sType
     19         NULL,                                                   // pNext
     20         0,                                                      // flags
     21         image,                                                  // image
     22         VK_IMAGE_VIEW_TYPE_2D,                                  // viewType
     23         format,                                                 // format
     24         { VK_COMPONENT_SWIZZLE_IDENTITY,
     25           VK_COMPONENT_SWIZZLE_IDENTITY,
     26           VK_COMPONENT_SWIZZLE_IDENTITY,
     27           VK_COMPONENT_SWIZZLE_IDENTITY },                      // components
     28         { VK_IMAGE_ASPECT_COLOR_BIT, 0, miplevels, 0, 1 },      // subresourceRange
     29     };
     30     if (kStencil_Type == viewType) {
     31         viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT;
     32     }
     33 
     34     VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateImageView(gpu->device(), &viewInfo,
     35                                                                   nullptr, &imageView));
     36     if (err) {
     37         return nullptr;
     38     }
     39 
     40     return new GrVkImageView(imageView);
     41 }
     42 
     43 void GrVkImageView::freeGPUData(const GrVkGpu* gpu) const {
     44     GR_VK_CALL(gpu->vkInterface(), DestroyImageView(gpu->device(), fImageView, nullptr));
     45 }
     46