#include "src/gpu/ganesh/GrResourceProvider.h"
#include "include/core/SkAlphaType.h"
#include "include/core/SkColorSpace.h"
#include "include/core/SkData.h"
#include "include/core/SkRect.h"
#include "include/core/SkSize.h"
#include "include/gpu/GpuTypes.h"
#include "include/gpu/ganesh/GrBackendSurface.h"
#include "include/gpu/ganesh/GrTypes.h"
#include "include/private/base/SingleOwner.h"
#include "include/private/base/SkTemplates.h"
#include "src/base/SkMathPriv.h"
#include "src/core/SkMipmap.h"
#include "src/gpu/BufferWriter.h"
#include "src/gpu/ResourceKey.h"
#include "src/gpu/SkBackingFit.h"
#include "src/gpu/ganesh/GrAttachment.h"
#include "src/gpu/ganesh/GrCaps.h"
#include "src/gpu/ganesh/GrDataUtils.h"
#include "src/gpu/ganesh/GrGpu.h"
#include "src/gpu/ganesh/GrGpuBuffer.h"
#include "src/gpu/ganesh/GrGpuResourcePriv.h"
#include "src/gpu/ganesh/GrImageInfo.h"
#include "src/gpu/ganesh/GrPixmap.h"
#include "src/gpu/ganesh/GrRenderTarget.h"
#include "src/gpu/ganesh/GrResourceCache.h"
#include "src/gpu/ganesh/GrSemaphore.h"
#include "src/gpu/ganesh/GrSurface.h"
#include "src/gpu/ganesh/GrTexture.h"
#include <algorithm>
#include <utility>
struct SkImageInfo;
usingnamespaceskia_private;
#define ASSERT_SINGLE_OWNER …
GrResourceProvider::GrResourceProvider(GrGpu* gpu,
GrResourceCache* cache,
skgpu::SingleOwner* owner)
: … { … }
sk_sp<GrTexture> GrResourceProvider::createTexture(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrColorType colorType,
GrRenderable renderable,
int renderTargetSampleCnt,
skgpu::Budgeted budgeted,
skgpu::Mipmapped mipmapped,
GrProtected isProtected,
const GrMipLevel texels[],
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::getExactScratch(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrRenderable renderable,
int renderTargetSampleCnt,
skgpu::Budgeted budgeted,
skgpu::Mipmapped mipmapped,
GrProtected isProtected,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::createTexture(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrColorType colorType,
GrRenderable renderable,
int renderTargetSampleCnt,
skgpu::Budgeted budgeted,
SkBackingFit fit,
GrProtected isProtected,
const GrMipLevel& mipLevel,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::createCompressedTexture(SkISize dimensions,
const GrBackendFormat& format,
skgpu::Budgeted budgeted,
skgpu::Mipmapped mipmapped,
GrProtected isProtected,
SkData* data,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::createTexture(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrRenderable renderable,
int renderTargetSampleCnt,
skgpu::Mipmapped mipmapped,
skgpu::Budgeted budgeted,
GrProtected isProtected,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::createApproxTexture(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrRenderable renderable,
int renderTargetSampleCnt,
GrProtected isProtected,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::findAndRefScratchTexture(const skgpu::ScratchKey& key,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::findAndRefScratchTexture(SkISize dimensions,
const GrBackendFormat& format,
GrTextureType textureType,
GrRenderable renderable,
int renderTargetSampleCnt,
skgpu::Mipmapped mipmapped,
GrProtected isProtected,
std::string_view label) { … }
sk_sp<GrTexture> GrResourceProvider::wrapBackendTexture(const GrBackendTexture& tex,
GrWrapOwnership ownership,
GrWrapCacheable cacheable,
GrIOType ioType) { … }
sk_sp<GrTexture> GrResourceProvider::wrapCompressedBackendTexture(const GrBackendTexture& tex,
GrWrapOwnership ownership,
GrWrapCacheable cacheable) { … }
sk_sp<GrTexture> GrResourceProvider::wrapRenderableBackendTexture(const GrBackendTexture& tex,
int sampleCnt,
GrWrapOwnership ownership,
GrWrapCacheable cacheable) { … }
sk_sp<GrRenderTarget> GrResourceProvider::wrapBackendRenderTarget(
const GrBackendRenderTarget& backendRT) { … }
sk_sp<GrRenderTarget> GrResourceProvider::wrapVulkanSecondaryCBAsRenderTarget(
const SkImageInfo& imageInfo, const GrVkDrawableInfo& vkInfo) { … }
void GrResourceProvider::assignUniqueKeyToResource(const skgpu::UniqueKey& key,
GrGpuResource* resource) { … }
sk_sp<GrGpuResource> GrResourceProvider::findResourceByUniqueKey(const skgpu::UniqueKey& key) { … }
sk_sp<const GrGpuBuffer> GrResourceProvider::findOrMakeStaticBuffer(GrGpuBufferType intendedType,
size_t size,
const void* staticData,
const skgpu::UniqueKey& key) { … }
sk_sp<const GrGpuBuffer> GrResourceProvider::findOrMakeStaticBuffer(
GrGpuBufferType intendedType,
size_t size,
const skgpu::UniqueKey& uniqueKey,
InitializeBufferFn initializeBufferFn) { … }
sk_sp<const GrGpuBuffer> GrResourceProvider::createPatternedIndexBuffer(
const uint16_t* pattern,
int patternSize,
int reps,
int vertCount,
const skgpu::UniqueKey* key) { … }
static constexpr int kMaxNumNonAAQuads = …;
static const int kVertsPerNonAAQuad = …;
static const int kIndicesPerNonAAQuad = …;
sk_sp<const GrGpuBuffer> GrResourceProvider::createNonAAQuadIndexBuffer() { … }
int GrResourceProvider::MaxNumNonAAQuads() { … }
int GrResourceProvider::NumVertsPerNonAAQuad() { … }
int GrResourceProvider::NumIndicesPerNonAAQuad() { … }
static constexpr int kMaxNumAAQuads = …;
static const int kVertsPerAAQuad = …;
static const int kIndicesPerAAQuad = …;
sk_sp<const GrGpuBuffer> GrResourceProvider::createAAQuadIndexBuffer() { … }
int GrResourceProvider::MaxNumAAQuads() { … }
int GrResourceProvider::NumVertsPerAAQuad() { … }
int GrResourceProvider::NumIndicesPerAAQuad() { … }
sk_sp<GrGpuBuffer> GrResourceProvider::createBuffer(size_t size,
GrGpuBufferType intendedType,
GrAccessPattern accessPattern,
ZeroInit zeroInit) { … }
sk_sp<GrGpuBuffer> GrResourceProvider::createBuffer(const void* data,
size_t size,
GrGpuBufferType type,
GrAccessPattern pattern) { … }
static int num_stencil_samples(const GrRenderTarget* rt, bool useMSAASurface, const GrCaps& caps) { … }
bool GrResourceProvider::attachStencilAttachment(GrRenderTarget* rt, bool useMSAASurface) { … }
sk_sp<GrAttachment> GrResourceProvider::getDiscardableMSAAAttachment(SkISize dimensions,
const GrBackendFormat& format,
int sampleCnt,
GrProtected isProtected,
GrMemoryless memoryless) { … }
sk_sp<GrAttachment> GrResourceProvider::makeMSAAAttachment(SkISize dimensions,
const GrBackendFormat& format,
int sampleCnt,
GrProtected isProtected,
GrMemoryless memoryless) { … }
sk_sp<GrAttachment> GrResourceProvider::refScratchMSAAAttachment(SkISize dimensions,
const GrBackendFormat& format,
int sampleCnt,
GrProtected isProtected,
GrMemoryless memoryless,
std::string_view label) { … }
[[nodiscard]] std::unique_ptr<GrSemaphore> GrResourceProvider::makeSemaphore(bool isOwned) { … }
std::unique_ptr<GrSemaphore> GrResourceProvider::wrapBackendSemaphore(
const GrBackendSemaphore& semaphore,
GrSemaphoreWrapType wrapType,
GrWrapOwnership ownership) { … }
static bool prepare_level(const GrMipLevel& inLevel,
SkISize dimensions,
bool rowBytesSupport,
GrColorType origColorType,
GrColorType allowedColorType,
GrMipLevel* outLevel,
std::unique_ptr<char[]>* data) { … }
GrColorType GrResourceProvider::prepareLevels(const GrBackendFormat& format,
GrColorType colorType,
SkISize baseSize,
const GrMipLevel texels[],
int mipLevelCount,
TempLevels* tempLevels,
TempLevelDatas* tempLevelDatas) const { … }
sk_sp<GrTexture> GrResourceProvider::writePixels(sk_sp<GrTexture> texture,
GrColorType colorType,
SkISize baseSize,
const GrMipLevel texels[],
int mipLevelCount) const { … }