GrVkTexture.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright 2015 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. #ifndef GrVkTexture_DEFINED
  8. #define GrVkTexture_DEFINED
  9. #include "include/gpu/GrTexture.h"
  10. #include "include/gpu/vk/GrVkTypes.h"
  11. #include "src/gpu/vk/GrVkImage.h"
  12. class GrVkGpu;
  13. class GrVkImageView;
  14. struct GrVkImageInfo;
  15. class GrVkTexture : public GrTexture, public virtual GrVkImage {
  16. public:
  17. static sk_sp<GrVkTexture> MakeNewTexture(GrVkGpu*,
  18. SkBudgeted budgeted,
  19. const GrSurfaceDesc&,
  20. const GrVkImage::ImageDesc&,
  21. GrMipMapsStatus);
  22. static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&, GrWrapOwnership,
  23. GrWrapCacheable, GrIOType, const GrVkImageInfo&,
  24. sk_sp<GrVkImageLayout>);
  25. ~GrVkTexture() override;
  26. GrBackendTexture getBackendTexture() const override;
  27. GrBackendFormat backendFormat() const override { return this->getBackendFormat(); }
  28. void textureParamsModified() override {}
  29. const GrVkImageView* textureView();
  30. void addIdleProc(sk_sp<GrRefCntedCallback>, IdleState) override;
  31. void callIdleProcsOnBehalfOfResource();
  32. protected:
  33. GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, sk_sp<GrVkImageLayout>,
  34. const GrVkImageView*, GrMipMapsStatus, GrBackendObjectOwnership);
  35. GrVkGpu* getVkGpu() const;
  36. void onAbandon() override;
  37. void onRelease() override;
  38. bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) override {
  39. return false;
  40. }
  41. void willRemoveLastRefOrPendingIO() override;
  42. private:
  43. GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, const GrVkImageInfo&,
  44. sk_sp<GrVkImageLayout> layout, const GrVkImageView* imageView,
  45. GrMipMapsStatus);
  46. GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, sk_sp<GrVkImageLayout>,
  47. const GrVkImageView*, GrMipMapsStatus, GrBackendObjectOwnership, GrWrapCacheable,
  48. GrIOType);
  49. // In Vulkan we call the release proc after we are finished with the underlying
  50. // GrVkImage::Resource object (which occurs after the GPU has finished all work on it).
  51. void onSetRelease(sk_sp<GrRefCntedCallback> releaseHelper) override {
  52. // Forward the release proc on to GrVkImage
  53. this->setResourceRelease(std::move(releaseHelper));
  54. }
  55. void removeFinishIdleProcs();
  56. const GrVkImageView* fTextureView;
  57. typedef GrTexture INHERITED;
  58. };
  59. #endif