Home | History | Annotate | Download | only in gpu
      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 #ifdef SK_VULKAN
     11 #include "vk/GrVkTypes.h"
     12 #include "vk/GrVkUtil.h"
     13 #endif
     14 
     15 #ifdef SK_VULKAN
     16 GrBackendTexture::GrBackendTexture(int width,
     17                                    int height,
     18                                    const GrVkImageInfo& vkInfo)
     19         : fWidth(width)
     20         , fHeight(height)
     21         , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
     22         , fBackend(kVulkan_GrBackend)
     23         , fVkInfo(vkInfo) {}
     24 #endif
     25 
     26 GrBackendTexture::GrBackendTexture(int width,
     27                                    int height,
     28                                    GrPixelConfig config,
     29                                    const GrGLTextureInfo& glInfo)
     30         : fWidth(width)
     31         , fHeight(height)
     32         , fConfig(config)
     33         , fBackend(kOpenGL_GrBackend)
     34         , fGLInfo(glInfo) {}
     35 
     36 GrBackendTexture::GrBackendTexture(int width,
     37                                    int height,
     38                                    GrPixelConfig config,
     39                                    const GrMockTextureInfo& mockInfo)
     40         : fWidth(width)
     41         , fHeight(height)
     42         , fConfig(config)
     43         , fBackend(kMock_GrBackend)
     44         , fMockInfo(mockInfo) {}
     45 
     46 GrBackendTexture::GrBackendTexture(const GrBackendTextureDesc& desc, GrBackend backend)
     47         : fWidth(desc.fWidth)
     48         , fHeight(desc.fHeight)
     49         , fConfig(desc.fConfig)
     50         , fBackend(backend) {
     51     switch (backend) {
     52         case kOpenGL_GrBackend:
     53             fGLInfo = *reinterpret_cast<const GrGLTextureInfo*>(desc.fTextureHandle);
     54             break;
     55 #ifdef SK_VULKAN
     56         case kVulkan_GrBackend: {
     57             const GrVkImageInfo* vkInfo =
     58                     reinterpret_cast<const GrVkImageInfo*>(desc.fTextureHandle);
     59             fConfig = GrVkFormatToPixelConfig(vkInfo->fFormat);
     60             fVkInfo = *vkInfo;
     61             break;
     62         }
     63 #endif
     64         case kMock_GrBackend:
     65             fMockInfo = *reinterpret_cast<const GrMockTextureInfo*>(desc.fTextureHandle);
     66             break;
     67         default:
     68             fConfig = kUnknown_GrPixelConfig;
     69             break;
     70     }
     71 }
     72 
     73 #ifdef SK_VULKAN
     74 const GrVkImageInfo* GrBackendTexture::getVkImageInfo() const {
     75     if (this->isValid() && kVulkan_GrBackend == fBackend) {
     76         return &fVkInfo;
     77     }
     78     return nullptr;
     79 }
     80 #endif
     81 
     82 const GrGLTextureInfo* GrBackendTexture::getGLTextureInfo() const {
     83     if (this->isValid() && kOpenGL_GrBackend == fBackend) {
     84         return &fGLInfo;
     85     }
     86     return nullptr;
     87 }
     88 
     89 const GrMockTextureInfo* GrBackendTexture::getMockTextureInfo() const {
     90     if (this->isValid() && kMock_GrBackend == fBackend) {
     91         return &fMockInfo;
     92     }
     93     return nullptr;
     94 }
     95 
     96 ////////////////////////////////////////////////////////////////////////////////////////////////////
     97 
     98 #ifdef SK_VULKAN
     99 GrBackendRenderTarget::GrBackendRenderTarget(int width,
    100                                              int height,
    101                                              int sampleCnt,
    102                                              int stencilBits,
    103                                              const GrVkImageInfo& vkInfo)
    104         : fWidth(width)
    105         , fHeight(height)
    106         , fSampleCnt(sampleCnt)
    107         , fStencilBits(stencilBits)
    108         , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
    109         , fBackend(kVulkan_GrBackend)
    110         , fVkInfo(vkInfo) {}
    111 #endif
    112 
    113 GrBackendRenderTarget::GrBackendRenderTarget(int width,
    114                                              int height,
    115                                              int sampleCnt,
    116                                              int stencilBits,
    117                                              GrPixelConfig config,
    118                                              const GrGLFramebufferInfo& glInfo)
    119         : fWidth(width)
    120         , fHeight(height)
    121         , fSampleCnt(sampleCnt)
    122         , fStencilBits(stencilBits)
    123         , fConfig(config)
    124         , fBackend(kOpenGL_GrBackend)
    125         , fGLInfo(glInfo) {}
    126 
    127 GrBackendRenderTarget::GrBackendRenderTarget(const GrBackendRenderTargetDesc& desc,
    128                                              GrBackend backend)
    129         : fWidth(desc.fWidth)
    130         , fHeight(desc.fHeight)
    131         , fSampleCnt(desc.fSampleCnt)
    132         , fStencilBits(desc.fStencilBits)
    133         , fConfig(desc.fConfig)
    134         , fBackend(backend) {
    135     if (kOpenGL_GrBackend == backend) {
    136         fGLInfo.fFBOID = static_cast<GrGLuint>(desc.fRenderTargetHandle);
    137     } else {
    138         SkASSERT(kVulkan_GrBackend == backend);
    139 #ifdef SK_VULKAN
    140         const GrVkImageInfo* vkInfo =
    141                 reinterpret_cast<const GrVkImageInfo*>(desc.fRenderTargetHandle);
    142         fConfig = GrVkFormatToPixelConfig(vkInfo->fFormat);
    143         fVkInfo = *vkInfo;
    144 #else
    145         fConfig = kUnknown_GrPixelConfig;
    146 #endif
    147     }
    148 }
    149 
    150 #ifdef SK_VULKAN
    151 const GrVkImageInfo* GrBackendRenderTarget::getVkImageInfo() const {
    152     if (kVulkan_GrBackend == fBackend) {
    153         return &fVkInfo;
    154     }
    155     return nullptr;
    156 }
    157 #endif
    158 
    159 const GrGLFramebufferInfo* GrBackendRenderTarget::getGLFramebufferInfo() const {
    160     if (kOpenGL_GrBackend == fBackend) {
    161         return &fGLInfo;
    162     }
    163     return nullptr;
    164 }
    165 
    166