1/*
2 * Copyright 2017 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 "GrBackendSurface.h"
9
10#include "gl/GrGLUtil.h"
11
12#ifdef SK_VULKAN
13#include "vk/GrVkTypes.h"
14#include "vk/GrVkUtil.h"
15#endif
16
17GrBackendFormat::GrBackendFormat(GrGLenum format, GrGLenum target)
18        : fBackend(kOpenGL_GrBackend)
19        , fValid(true) {
20    fGL.fTarget = target;
21    fGL.fFormat = format;
22}
23
24const GrGLenum* GrBackendFormat::getGLFormat() const {
25    if (this->isValid() && kOpenGL_GrBackend == fBackend) {
26        return &fGL.fFormat;
27    }
28    return nullptr;
29}
30
31const GrGLenum* GrBackendFormat::getGLTarget() const {
32    if (this->isValid() && kOpenGL_GrBackend == fBackend) {
33        return &fGL.fTarget;
34    }
35    return nullptr;
36}
37
38#ifdef SK_VULKAN
39GrBackendFormat::GrBackendFormat(VkFormat vkFormat)
40        : fBackend(kVulkan_GrBackend)
41        , fValid(true)
42        , fVkFormat(vkFormat) {
43}
44
45const VkFormat* GrBackendFormat::getVkFormat() const {
46    if (this->isValid() && kVulkan_GrBackend == fBackend) {
47        return &fVkFormat;
48    }
49    return nullptr;
50}
51#endif
52
53GrBackendFormat::GrBackendFormat(GrPixelConfig config)
54        : fBackend(kMock_GrBackend)
55        , fValid(true)
56        , fMockFormat(config) {
57}
58
59const GrPixelConfig* GrBackendFormat::getMockFormat() const {
60    if (this->isValid() && kMock_GrBackend == fBackend) {
61        return &fMockFormat;
62    }
63    return nullptr;
64}
65
66#ifdef SK_VULKAN
67GrBackendTexture::GrBackendTexture(int width,
68                                   int height,
69                                   const GrVkImageInfo& vkInfo)
70        : fWidth(width)
71        , fHeight(height)
72        , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
73        , fMipMapped(GrMipMapped(vkInfo.fLevelCount > 1))
74        , fBackend(kVulkan_GrBackend)
75        , fVkInfo(vkInfo) {}
76#endif
77
78GrBackendTexture::GrBackendTexture(int width,
79                                   int height,
80                                   GrPixelConfig config,
81                                   const GrGLTextureInfo& glInfo)
82        : GrBackendTexture(width, height, config, GrMipMapped::kNo, glInfo) {}
83
84GrBackendTexture::GrBackendTexture(int width,
85                                   int height,
86                                   GrPixelConfig config,
87                                   GrMipMapped mipMapped,
88                                   const GrGLTextureInfo& glInfo)
89        : fWidth(width)
90        , fHeight(height)
91        , fConfig(config)
92        , fMipMapped(mipMapped)
93        , fBackend(kOpenGL_GrBackend)
94        , fGLInfo(glInfo) {}
95
96GrBackendTexture::GrBackendTexture(int width,
97                                   int height,
98                                   GrMipMapped mipMapped,
99                                   const GrGLTextureInfo& glInfo)
100        : fWidth(width)
101        , fHeight(height)
102        , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat))
103        , fMipMapped(mipMapped)
104        , fBackend(kOpenGL_GrBackend)
105        , fGLInfo(glInfo) {}
106
107GrBackendTexture::GrBackendTexture(int width,
108                                   int height,
109                                   GrPixelConfig config,
110                                   const GrMockTextureInfo& mockInfo)
111        : GrBackendTexture(width, height, config, GrMipMapped::kNo, mockInfo) {}
112
113GrBackendTexture::GrBackendTexture(int width,
114                                   int height,
115                                   GrPixelConfig config,
116                                   GrMipMapped mipMapped,
117                                   const GrMockTextureInfo& mockInfo)
118        : fWidth(width)
119        , fHeight(height)
120        , fConfig(config)
121        , fMipMapped(mipMapped)
122        , fBackend(kMock_GrBackend)
123        , fMockInfo(mockInfo) {}
124
125#ifdef SK_VULKAN
126const GrVkImageInfo* GrBackendTexture::getVkImageInfo() const {
127    if (this->isValid() && kVulkan_GrBackend == fBackend) {
128        return &fVkInfo;
129    }
130    return nullptr;
131}
132#endif
133
134const GrGLTextureInfo* GrBackendTexture::getGLTextureInfo() const {
135    if (this->isValid() && kOpenGL_GrBackend == fBackend) {
136        return &fGLInfo;
137    }
138    return nullptr;
139}
140
141const GrMockTextureInfo* GrBackendTexture::getMockTextureInfo() const {
142    if (this->isValid() && kMock_GrBackend == fBackend) {
143        return &fMockInfo;
144    }
145    return nullptr;
146}
147
148////////////////////////////////////////////////////////////////////////////////////////////////////
149
150#ifdef SK_VULKAN
151GrBackendRenderTarget::GrBackendRenderTarget(int width,
152                                             int height,
153                                             int sampleCnt,
154                                             int stencilBits,
155                                             const GrVkImageInfo& vkInfo)
156        : fWidth(width)
157        , fHeight(height)
158        , fSampleCnt(SkTMax(1, sampleCnt))
159        , fStencilBits(stencilBits)
160        , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
161        , fBackend(kVulkan_GrBackend)
162        , fVkInfo(vkInfo) {}
163#endif
164
165GrBackendRenderTarget::GrBackendRenderTarget(int width,
166                                             int height,
167                                             int sampleCnt,
168                                             int stencilBits,
169                                             GrPixelConfig config,
170                                             const GrGLFramebufferInfo& glInfo)
171        : fWidth(width)
172        , fHeight(height)
173        , fSampleCnt(SkTMax(1, sampleCnt))
174        , fStencilBits(stencilBits)
175        , fConfig(config)
176        , fBackend(kOpenGL_GrBackend)
177        , fGLInfo(glInfo) {}
178
179GrBackendRenderTarget::GrBackendRenderTarget(int width,
180                                             int height,
181                                             int sampleCnt,
182                                             int stencilBits,
183                                             const GrGLFramebufferInfo& glInfo)
184        : fWidth(width)
185        , fHeight(height)
186        , fSampleCnt(SkTMax(1, sampleCnt))
187        , fStencilBits(stencilBits)
188        , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat))
189        , fBackend(kOpenGL_GrBackend)
190        , fGLInfo(glInfo) {}
191
192#ifdef SK_VULKAN
193const GrVkImageInfo* GrBackendRenderTarget::getVkImageInfo() const {
194    if (kVulkan_GrBackend == fBackend) {
195        return &fVkInfo;
196    }
197    return nullptr;
198}
199#endif
200
201const GrGLFramebufferInfo* GrBackendRenderTarget::getGLFramebufferInfo() const {
202    if (kOpenGL_GrBackend == fBackend) {
203        return &fGLInfo;
204    }
205    return nullptr;
206}
207
208