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