1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc.
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrVkTypes_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrVkTypes_DEFINED
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrTypes.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "vk/GrVkDefines.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * KHR_debug
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*typedef void (GR_GL_FUNCTION_TYPE* GrVkDEBUGPROC)(GrVkenum source,
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  GrVkenum type,
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  GrVkuint id,
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  GrVkenum severity,
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  GrVksizei length,
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  const GrVkchar* message,
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                  const void* userParam);*/
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot///////////////////////////////////////////////////////////////////////////////
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Types for interacting with Vulkan resources created externally to Skia. GrBackendObjects for
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Vulkan textures are really const GrVkImageInfo*
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct GrVkAlloc {
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrVkAlloc()
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            : fMemory(VK_NULL_HANDLE)
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fOffset(0)
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fSize(0)
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fFlags(0)
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fUsesSystemHeap(false) {}
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrVkAlloc(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, uint32_t flags)
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            : fMemory(memory)
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fOffset(offset)
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fSize(size)
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fFlags(flags)
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            , fUsesSystemHeap(false) {}
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkDeviceMemory fMemory;  // can be VK_NULL_HANDLE iff is an RT and is borrowed
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkDeviceSize   fOffset;
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkDeviceSize   fSize;    // this can be indeterminate iff Tex uses borrow semantics
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t       fFlags;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Flag {
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kNoncoherent_Flag = 0x1,   // memory must be flushed to device after mapping
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrVkHeap; // For access to usesSystemHeap
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fUsesSystemHeap;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct GrVkImageInfo {
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * If the image's format is sRGB (GrVkFormatIsSRGB returns true), then the image must have
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * been created with VkImageCreateFlags containing VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT.
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkImage        fImage;
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrVkAlloc      fAlloc;
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkImageTiling  fImageTiling;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkImageLayout  fImageLayout;
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    VkFormat       fFormat;
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t       fLevelCount;
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t       fInitialQueueFamily = VK_QUEUE_FAMILY_IGNORED;
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t       fCurrentQueueFamily = VK_QUEUE_FAMILY_IGNORED;
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // This gives a way for a client to update the layout of the Image if they change the layout
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // while we're still holding onto the wrapped texture. They will first need to get a handle
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // to our internal GrVkImageInfo by calling getTextureHandle on a GrVkTexture.
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void updateImageLayout(VkImageLayout layout) { fImageLayout = layout; }
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkImageInfo*));
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
83