blob: b737df5f961902f132a1cbb1d6a6d1dec30de4cf [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
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
jvanverth62340062016-04-26 08:01:44 -070012const GrVkImageView* GrVkImageView::Create(const GrVkGpu* gpu, VkImage image, VkFormat format,
13 Type viewType, uint32_t miplevels) {
Greg Daniel164a9f02016-02-22 09:56:40 -050014 VkImageView imageView;
halcanary9d524f22016-03-29 09:03:52 -070015
Greg Daniel164a9f02016-02-22 09:56:40 -050016 // 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
egdaniele7f2fe42016-07-01 08:03:02 -070024 { VK_COMPONENT_SWIZZLE_IDENTITY,
25 VK_COMPONENT_SWIZZLE_IDENTITY,
26 VK_COMPONENT_SWIZZLE_IDENTITY,
27 VK_COMPONENT_SWIZZLE_IDENTITY }, // components
jvanverth62340062016-04-26 08:01:44 -070028 { VK_IMAGE_ASPECT_COLOR_BIT, 0, miplevels, 0, 1 }, // subresourceRange
Greg Daniel164a9f02016-02-22 09:56:40 -050029 };
30 if (kStencil_Type == viewType) {
Greg Daniel164a9f02016-02-22 09:56:40 -050031 viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT;
32 }
halcanary9d524f22016-03-29 09:03:52 -070033
Greg Daniel164a9f02016-02-22 09:56:40 -050034 VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateImageView(gpu->device(), &viewInfo,
35 nullptr, &imageView));
36 if (err) {
37 return nullptr;
38 }
halcanary9d524f22016-03-29 09:03:52 -070039
Greg Daniel164a9f02016-02-22 09:56:40 -050040 return new GrVkImageView(imageView);
41}
42
43void GrVkImageView::freeGPUData(const GrVkGpu* gpu) const {
44 GR_VK_CALL(gpu->vkInterface(), DestroyImageView(gpu->device(), fImageView, nullptr));
45}