1164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel/*
2164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel * Copyright 2015 Google Inc.
3164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel *
4164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel * Use of this source code is governed by a BSD-style license that can be
5164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel * found in the LICENSE file.
6164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel */
7164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
8164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#ifndef GrVkTexture_DEFINED
9164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#define GrVkTexture_DEFINED
10164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
11164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "GrGpu.h"
12164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "GrTexture.h"
13164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "GrVkImage.h"
14164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
15164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkGpu;
16164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkImageView;
17b2df0c2702329be6380a943d548e7377a51d8565egdanielstruct GrVkImageInfo;
18164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
19164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkTexture : public GrTexture, public virtual GrVkImage {
20164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielpublic:
212e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen    static GrVkTexture* CreateNewTexture(GrVkGpu*, SkBudgeted budgeted, const GrSurfaceDesc&,
22164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel                                         const GrVkImage::ImageDesc&);
239d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
246bd5284415bd983b0628c4941dff5def40018f5abungeman    static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&,
256bd5284415bd983b0628c4941dff5def40018f5abungeman                                                 GrWrapOwnership, const GrVkImageInfo*);
26164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
27164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    ~GrVkTexture() override;
28164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
29164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    GrBackendObject getTextureHandle() const override;
30164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
31164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    void textureParamsModified() override {}
32164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
33f05ab1b820b482fa633544579ab4d4c6bfcdb433brianosman    const GrVkImageView* textureView(bool allowSRGB);
34164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
3550ead53ac97deb23310916e3736c3f5e2d8f7f4begdaniel    bool reallocForMipmap(GrVkGpu* gpu, uint32_t mipLevels);
3662340067270c5c3365afa6b40b8e995ae6a6c1ecjvanverth
37164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielprotected:
38b2df0c2702329be6380a943d548e7377a51d8565egdaniel    GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, const GrVkImageView*,
39b2df0c2702329be6380a943d548e7377a51d8565egdaniel                GrVkImage::Wrapped wrapped);
40164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
419d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary    GrVkGpu* getVkGpu() const;
42164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
43164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    void onAbandon() override;
44164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    void onRelease() override;
452c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman    std::unique_ptr<GrExternalTextureData> detachBackendTexture() override;
46164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
47164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielprivate:
482e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen    enum Wrapped { kWrapped };
492e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen    GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&,
50b2df0c2702329be6380a943d548e7377a51d8565egdaniel                const GrVkImageInfo&, const GrVkImageView* imageView);
512e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen    GrVkTexture(GrVkGpu*, Wrapped, const GrSurfaceDesc&,
52b2df0c2702329be6380a943d548e7377a51d8565egdaniel                const GrVkImageInfo&, const GrVkImageView* imageView, GrVkImage::Wrapped wrapped);
532e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen
54900bd4a0463bc6471ef07a77120b413bd8f472b2jvanverth    const GrVkImageView*     fTextureView;
55f05ab1b820b482fa633544579ab4d4c6bfcdb433brianosman    const GrVkImageView*     fLinearTextureView;
56164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
57164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel    typedef GrTexture INHERITED;
58164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel};
59164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel
60164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#endif
61