skia2/include/gpu/GrBackendSurface.h

587 lines
19 KiB
C
Raw Normal View History

/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrBackendSurface_DEFINED
#define GrBackendSurface_DEFINED
#include "include/gpu/GrBackendSurfaceMutableState.h"
#include "include/gpu/GrTypes.h"
#include "include/gpu/gl/GrGLTypes.h"
#include "include/gpu/mock/GrMockTypes.h"
#include "include/gpu/vk/GrVkTypes.h"
#include "include/private/GrGLTypesPriv.h"
#include "include/private/GrVkTypesPriv.h"
#ifdef SK_DAWN
#include "include/gpu/dawn/GrDawnTypes.h"
#endif
class GrBackendSurfaceMutableStateImpl;
class GrVkImageLayout;
class GrGLTextureParameters;
#ifdef SK_DAWN
#include "dawn/webgpu_cpp.h"
#endif
#ifdef SK_METAL
#include "include/gpu/mtl/GrMtlTypes.h"
#endif
#ifdef SK_DIRECT3D
#include "include/gpu/d3d/GrD3DTypesMinimal.h"
#include "include/private/GrD3DTypesPriv.h"
class GrD3DResourceState;
#endif
#if GR_TEST_UTILS
class SkString;
#endif
#if !SK_SUPPORT_GPU
// SkSurfaceCharacterization always needs a minimal version of this
class SK_API GrBackendFormat {
public:
bool isValid() const { return false; }
};
// SkSurface and SkImage rely on a minimal version of these always being available
class SK_API GrBackendTexture {
public:
GrBackendTexture() {}
bool isValid() const { return false; }
};
class SK_API GrBackendRenderTarget {
public:
GrBackendRenderTarget() {}
bool isValid() const { return false; }
bool isFramebufferOnly() const { return false; }
};
#else
enum class GrGLFormat;
class SK_API GrBackendFormat {
public:
// Creates an invalid backend format.
GrBackendFormat() {}
Add back deprecated warnings. Unfortunately in clang 'deprecated' is both a set of warnings (at least one of which we don't want) and a group of warnings (most of which we do want). Leave the top level disabled, but re-enable all the warnings in the group. Most of the code changes are for the deprecated-copy diagnostic. In C++11 implementing a copy constructor xor copy assignment operator the default implementation of the other is still required to be the default but is deprecated (the compiler can warn against doing this). The idea is that if there was a need for a non-default copy constructor or copy assignment operator then both should be implemented explicitly, since it is unlikely that the default will do what is expected. Note that the deprecated-copy-dtor has not yet been enabled as there will need to be a lot more work to enable this diagnostic. Similar to deprecated-copy, in C++11 when implementing a destructor the copy constructor and copy assignment operator are still defaulted if not declared, but this is also deprecated. The idea here is that if some special handling is needed to destroy the object there is probably some need to do something non-trivial when copying the object (or copying should be disallowed). Also, there are still some deprecated-declarations to clean up on Android and Mac. Change-Id: I5fc4b62713220e6f7d3724fd7342b4c8c74a3c67 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278916 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
2020-03-23 21:22:24 +00:00
GrBackendFormat(const GrBackendFormat&);
GrBackendFormat& operator=(const GrBackendFormat&);
static GrBackendFormat MakeGL(GrGLenum format, GrGLenum target) {
return GrBackendFormat(format, target);
}
static GrBackendFormat MakeVk(VkFormat format) {
return GrBackendFormat(format, GrVkYcbcrConversionInfo());
}
static GrBackendFormat MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo);
#ifdef SK_DAWN
static GrBackendFormat MakeDawn(wgpu::TextureFormat format) {
return GrBackendFormat(format);
}
#endif
#ifdef SK_METAL
static GrBackendFormat MakeMtl(GrMTLPixelFormat format) {
return GrBackendFormat(format);
}
#endif
#ifdef SK_DIRECT3D
static GrBackendFormat MakeDxgi(DXGI_FORMAT format) {
return GrBackendFormat(format);
}
#endif
static GrBackendFormat MakeMock(GrColorType colorType, SkImage::CompressionType compression);
bool operator==(const GrBackendFormat& that) const;
bool operator!=(const GrBackendFormat& that) const { return !(*this == that); }
Reland "Reland "Have a GrBackendFormat be stored on gpu proxies."" This is a reland of 2f9a5ea639925f38785f4d3a0af237822007cfd6 Original change's description: > Reland "Have a GrBackendFormat be stored on gpu proxies." > > This reverts commit 919c9e77c3492af766ff5982acda76ee49da3168. > > Reason for revert: Flutter change has landed and fixed memory issue. > > Original change's description: > > Revert "Have a GrBackendFormat be stored on gpu proxies." > > > > This reverts commit 51b1c12bbc2fa3f8d4faa29ad19c6f3cb34837ce. > > > > Reason for revert: reverting till flutter gets to 1.1 to fix build issues. > > > > Original change's description: > > > Have a GrBackendFormat be stored on gpu proxies. > > > > > > Bug: skia: > > > Change-Id: Iaf1fb24ab29a61d44e5fa59a5e0867ed02dcda90 > > > Reviewed-on: https://skia-review.googlesource.com/c/168021 > > > Reviewed-by: Brian Osman <brianosman@google.com> > > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > > > Change-Id: I574fdc084ef5994596c51fb0d60423b5dc01b885 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: chromium:903701 chromium:903756 > > Reviewed-on: https://skia-review.googlesource.com/c/169835 > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > Reviewed-by: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > Change-Id: Ifd9b6b8e194af9fb9258fa626644e76e6ecf090d > Bug: chromium:903701 chromium:903756 > Reviewed-on: https://skia-review.googlesource.com/c/170104 > Commit-Queue: Greg Daniel <egdaniel@google.com> > Reviewed-by: Greg Daniel <egdaniel@google.com> > Reviewed-by: Brian Osman <brianosman@google.com> Bug: chromium:903701 chromium:903756 Change-Id: Id1360067d8e928b0a4e1848dae8bc1e7f1994403 Reviewed-on: https://skia-review.googlesource.com/c/171660 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
2018-11-16 20:43:41 +00:00
GrBackendApi backend() const { return fBackend; }
GrTextureType textureType() const { return fTextureType; }
/**
* Gets the channels present in the format as a bitfield of SkColorChannelFlag values.
* Luminance channels are reported as kGray_SkColorChannelFlag.
*/
uint32_t channelMask() const;
/**
* If the backend API is GL this gets the format as a GrGLFormat. Otherwise, returns
* GrGLFormat::kUnknown.
*/
GrGLFormat asGLFormat() const;
/**
* If the backend API is Vulkan this gets the format as a VkFormat and returns true. Otherwise,
* returns false.
*/
bool asVkFormat(VkFormat*) const;
const GrVkYcbcrConversionInfo* getVkYcbcrConversionInfo() const;
#ifdef SK_DAWN
/**
* If the backend API is Dawn this gets the format as a wgpu::TextureFormat and returns true.
* Otherwise, returns false.
*/
bool asDawnFormat(wgpu::TextureFormat*) const;
#endif
#ifdef SK_METAL
/**
* If the backend API is Metal this gets the format as a GrMtlPixelFormat. Otherwise,
* Otherwise, returns MTLPixelFormatInvalid.
*/
GrMTLPixelFormat asMtlFormat() const;
#endif
#ifdef SK_DIRECT3D
/**
* If the backend API is Direct3D this gets the format as a DXGI_FORMAT and returns true.
* Otherwise, returns false.
*/
bool asDxgiFormat(DXGI_FORMAT*) const;
#endif
/**
* If the backend API is not Mock these two calls will return kUnknown and kNone, respectively.
* Otherwise, if the compression type is kNone then the GrColorType will be valid. If the
* compression type is anything other then kNone than the GrColorType will be kUnknown.
*/
GrColorType asMockColorType() const;
SkImage::CompressionType asMockCompressionType() const;
// If possible, copies the GrBackendFormat and forces the texture type to be Texture2D. If the
// GrBackendFormat was for Vulkan and it originally had a GrVkYcbcrConversionInfo, we will
// remove the conversion and set the format to be VK_FORMAT_R8G8B8A8_UNORM.
Reland "Reland "Have a GrBackendFormat be stored on gpu proxies."" This is a reland of 2f9a5ea639925f38785f4d3a0af237822007cfd6 Original change's description: > Reland "Have a GrBackendFormat be stored on gpu proxies." > > This reverts commit 919c9e77c3492af766ff5982acda76ee49da3168. > > Reason for revert: Flutter change has landed and fixed memory issue. > > Original change's description: > > Revert "Have a GrBackendFormat be stored on gpu proxies." > > > > This reverts commit 51b1c12bbc2fa3f8d4faa29ad19c6f3cb34837ce. > > > > Reason for revert: reverting till flutter gets to 1.1 to fix build issues. > > > > Original change's description: > > > Have a GrBackendFormat be stored on gpu proxies. > > > > > > Bug: skia: > > > Change-Id: Iaf1fb24ab29a61d44e5fa59a5e0867ed02dcda90 > > > Reviewed-on: https://skia-review.googlesource.com/c/168021 > > > Reviewed-by: Brian Osman <brianosman@google.com> > > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > > > Change-Id: I574fdc084ef5994596c51fb0d60423b5dc01b885 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: chromium:903701 chromium:903756 > > Reviewed-on: https://skia-review.googlesource.com/c/169835 > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > Reviewed-by: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > Change-Id: Ifd9b6b8e194af9fb9258fa626644e76e6ecf090d > Bug: chromium:903701 chromium:903756 > Reviewed-on: https://skia-review.googlesource.com/c/170104 > Commit-Queue: Greg Daniel <egdaniel@google.com> > Reviewed-by: Greg Daniel <egdaniel@google.com> > Reviewed-by: Brian Osman <brianosman@google.com> Bug: chromium:903701 chromium:903756 Change-Id: Id1360067d8e928b0a4e1848dae8bc1e7f1994403 Reviewed-on: https://skia-review.googlesource.com/c/171660 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
2018-11-16 20:43:41 +00:00
GrBackendFormat makeTexture2D() const;
// Returns true if the backend format has been initialized.
bool isValid() const { return fValid; }
#if GR_TEST_UTILS
SkString toStr() const;
#endif
private:
GrBackendFormat(GrGLenum format, GrGLenum target);
GrBackendFormat(const VkFormat vkFormat, const GrVkYcbcrConversionInfo&);
#ifdef SK_DAWN
GrBackendFormat(wgpu::TextureFormat format);
#endif
#ifdef SK_METAL
GrBackendFormat(const GrMTLPixelFormat mtlFormat);
#endif
#ifdef SK_DIRECT3D
GrBackendFormat(DXGI_FORMAT dxgiFormat);
#endif
GrBackendFormat(GrColorType, SkImage::CompressionType);
GrBackendApi fBackend = GrBackendApi::kMock;
bool fValid = false;
union {
Reland "Reland "Have a GrBackendFormat be stored on gpu proxies."" This is a reland of 2f9a5ea639925f38785f4d3a0af237822007cfd6 Original change's description: > Reland "Have a GrBackendFormat be stored on gpu proxies." > > This reverts commit 919c9e77c3492af766ff5982acda76ee49da3168. > > Reason for revert: Flutter change has landed and fixed memory issue. > > Original change's description: > > Revert "Have a GrBackendFormat be stored on gpu proxies." > > > > This reverts commit 51b1c12bbc2fa3f8d4faa29ad19c6f3cb34837ce. > > > > Reason for revert: reverting till flutter gets to 1.1 to fix build issues. > > > > Original change's description: > > > Have a GrBackendFormat be stored on gpu proxies. > > > > > > Bug: skia: > > > Change-Id: Iaf1fb24ab29a61d44e5fa59a5e0867ed02dcda90 > > > Reviewed-on: https://skia-review.googlesource.com/c/168021 > > > Reviewed-by: Brian Osman <brianosman@google.com> > > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > > > Change-Id: I574fdc084ef5994596c51fb0d60423b5dc01b885 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: chromium:903701 chromium:903756 > > Reviewed-on: https://skia-review.googlesource.com/c/169835 > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > Reviewed-by: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,bsalomon@google.com,brianosman@google.com > > Change-Id: Ifd9b6b8e194af9fb9258fa626644e76e6ecf090d > Bug: chromium:903701 chromium:903756 > Reviewed-on: https://skia-review.googlesource.com/c/170104 > Commit-Queue: Greg Daniel <egdaniel@google.com> > Reviewed-by: Greg Daniel <egdaniel@google.com> > Reviewed-by: Brian Osman <brianosman@google.com> Bug: chromium:903701 chromium:903756 Change-Id: Id1360067d8e928b0a4e1848dae8bc1e7f1994403 Reviewed-on: https://skia-review.googlesource.com/c/171660 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
2018-11-16 20:43:41 +00:00
GrGLenum fGLFormat; // the sized, internal format of the GL resource
struct {
VkFormat fFormat;
GrVkYcbcrConversionInfo fYcbcrConversionInfo;
} fVk;
#ifdef SK_DAWN
wgpu::TextureFormat fDawnFormat;
#endif
#ifdef SK_METAL
GrMTLPixelFormat fMtlFormat;
#endif
#ifdef SK_DIRECT3D
DXGI_FORMAT fDxgiFormat;
#endif
struct {
GrColorType fColorType;
SkImage::CompressionType fCompressionType;
} fMock;
};
GrTextureType fTextureType = GrTextureType::kNone;
};
class SK_API GrBackendTexture {
public:
// Creates an invalid backend texture.
GrBackendTexture();
// The GrGLTextureInfo must have a valid fFormat.
GrBackendTexture(int width,
int height,
GrMipmapped,
const GrGLTextureInfo& glInfo);
#ifdef SK_VULKAN
GrBackendTexture(int width,
int height,
Revert "Revert "Update skia to use ifdefs for Vulkan code instead of dummy header"" This reverts commit fad9e3f54112ea8c8bb6bb72384f47b9759578f5. Reason for revert: Can't find the error message anymore (?!?) Let's try again shall we Original change's description: > Revert "Update skia to use ifdefs for Vulkan code instead of dummy header" > > This reverts commit c0f8e426c59eec6c720b8e1329dcb966cf1b6800. > > Reason for revert: Experiment to see if this will unblock the Android roll > > Original change's description: > > Update skia to use ifdefs for Vulkan code instead of dummy header > > > > Bug: skia:6721 > > Change-Id: I80a4c9f2acc09c174497f625c50ed12a8bb76505 > > Reviewed-on: https://skia-review.googlesource.com/19547 > > Reviewed-by: Mike Klein <mtklein@google.com> > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com > > Change-Id: Ib51c1672570f2071a17b6fbde692a5174b0358ce > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:6721 > Reviewed-on: https://skia-review.googlesource.com/19724 > Reviewed-by: Robert Phillips <robertphillips@google.com> > Commit-Queue: Robert Phillips <robertphillips@google.com> TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: Iecef7ddcfe31d82938336120a4193525ac6693be No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:6721 Reviewed-on: https://skia-review.googlesource.com/19782 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
2017-06-14 01:43:29 +00:00
const GrVkImageInfo& vkInfo);
#endif
#ifdef SK_METAL
GrBackendTexture(int width,
int height,
GrMipmapped,
const GrMtlTextureInfo& mtlInfo);
#endif
#ifdef SK_DIRECT3D
GrBackendTexture(int width,
int height,
const GrD3DTextureResourceInfo& d3dInfo);
#endif
#ifdef SK_DAWN
GrBackendTexture(int width,
int height,
const GrDawnTextureInfo& dawnInfo);
#endif
GrBackendTexture(int width,
int height,
GrMipmapped,
const GrMockTextureInfo& mockInfo);
GrBackendTexture(const GrBackendTexture& that);
~GrBackendTexture();
GrBackendTexture& operator=(const GrBackendTexture& that);
SkISize dimensions() const { return {fWidth, fHeight}; }
int width() const { return fWidth; }
int height() const { return fHeight; }
bool hasMipmaps() const { return fMipmapped == GrMipmapped::kYes; }
/** deprecated alias of hasMipmaps(). */
bool hasMipMaps() const { return this->hasMipmaps(); }
GrBackendApi backend() const {return fBackend; }
// If the backend API is GL, copies a snapshot of the GrGLTextureInfo struct into the passed in
// pointer and returns true. Otherwise returns false if the backend API is not GL.
bool getGLTextureInfo(GrGLTextureInfo*) const;
// Call this to indicate that the texture parameters have been modified in the GL context
// externally to GrContext.
void glTextureParametersModified();
#ifdef SK_DAWN
// If the backend API is Dawn, copies a snapshot of the GrDawnTextureInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
bool getDawnTextureInfo(GrDawnTextureInfo*) const;
#endif
// If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
// in pointer and returns true. This snapshot will set the fImageLayout to the current layout
// state. Otherwise returns false if the backend API is not Vulkan.
bool getVkImageInfo(GrVkImageInfo*) const;
// Anytime the client changes the VkImageLayout of the VkImage captured by this
// GrBackendTexture, they must call this function to notify Skia of the changed layout.
void setVkImageLayout(VkImageLayout);
Revert "Revert "Update skia to use ifdefs for Vulkan code instead of dummy header"" This reverts commit fad9e3f54112ea8c8bb6bb72384f47b9759578f5. Reason for revert: Can't find the error message anymore (?!?) Let's try again shall we Original change's description: > Revert "Update skia to use ifdefs for Vulkan code instead of dummy header" > > This reverts commit c0f8e426c59eec6c720b8e1329dcb966cf1b6800. > > Reason for revert: Experiment to see if this will unblock the Android roll > > Original change's description: > > Update skia to use ifdefs for Vulkan code instead of dummy header > > > > Bug: skia:6721 > > Change-Id: I80a4c9f2acc09c174497f625c50ed12a8bb76505 > > Reviewed-on: https://skia-review.googlesource.com/19547 > > Reviewed-by: Mike Klein <mtklein@google.com> > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com > > Change-Id: Ib51c1672570f2071a17b6fbde692a5174b0358ce > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:6721 > Reviewed-on: https://skia-review.googlesource.com/19724 > Reviewed-by: Robert Phillips <robertphillips@google.com> > Commit-Queue: Robert Phillips <robertphillips@google.com> TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: Iecef7ddcfe31d82938336120a4193525ac6693be No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:6721 Reviewed-on: https://skia-review.googlesource.com/19782 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
2017-06-14 01:43:29 +00:00
#ifdef SK_METAL
// If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not Metal.
bool getMtlTextureInfo(GrMtlTextureInfo*) const;
#endif
#ifdef SK_DIRECT3D
// If the backend API is Direct3D, copies a snapshot of the GrD3DTextureResourceInfo struct into
// the passed in pointer and returns true. This snapshot will set the fResourceState to the
// current resource state. Otherwise returns false if the backend API is not D3D.
bool getD3DTextureResourceInfo(GrD3DTextureResourceInfo*) const;
// Anytime the client changes the D3D12_RESOURCE_STATES of the D3D12_RESOURCE captured by this
// GrBackendTexture, they must call this function to notify Skia of the changed layout.
void setD3DResourceState(GrD3DResourceStateEnum);
#endif
// Get the GrBackendFormat for this texture (or an invalid format if this is not valid).
GrBackendFormat getBackendFormat() const;
// If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not Mock.
bool getMockTextureInfo(GrMockTextureInfo*) const;
// If the client changes any of the mutable backend of the GrBackendTexture they should call
// this function to inform Skia that those values have changed. The backend API specific state
// that can be set from this function are:
//
// Vulkan: VkImageLayout and QueueFamilyIndex
void setMutableState(const GrBackendSurfaceMutableState&);
// Returns true if we are working with protected content.
bool isProtected() const;
// Returns true if the backend texture has been initialized.
bool isValid() const { return fIsValid; }
// Returns true if both textures are valid and refer to the same API texture.
bool isSameTexture(const GrBackendTexture&);
#if GR_TEST_UTILS
static bool TestingOnly_Equals(const GrBackendTexture& , const GrBackendTexture&);
#endif
private:
friend class GrVkGpu; // for getMutableState
sk_sp<GrBackendSurfaceMutableStateImpl> getMutableState() const;
#ifdef SK_GL
friend class GrGLTexture;
friend class GrGLGpu; // for getGLTextureParams
GrBackendTexture(int width,
int height,
GrMipmapped,
const GrGLTextureInfo,
sk_sp<GrGLTextureParameters>);
sk_sp<GrGLTextureParameters> getGLTextureParams() const;
#endif
Reland "Reland "Always include public/include headers for vulkan and just guard src files with SK_VULKAN."" This reverts commit a55e214bbe3942a098d97906a0f008d59dd1fafb. Reason for revert:google3 should be fixed now Original change's description: > Revert "Reland "Always include public/include headers for vulkan and just guard src files with SK_VULKAN."" > > This reverts commit 55aea84baa53f2d7e7e876b09fd590f046ff9ab9. > > Reason for revert: Google3 roll failing like > > third_party/skia/HEAD/include/gpu/vk/GrVkDefines.h:15:10: fatal error: '../../../third_party/vulkan/SkiaVulkan.h' file not found > #include "../../../third_party/vulkan/SkiaVulkan.h" > > > Original change's description: > > Reland "Always include public/include headers for vulkan and just guard src files with SK_VULKAN." > > > > This reverts commit 684b506f3589ecc78eebe8d92082be31a5fbe348. > > > > Reason for revert: Chrome change has landed to fix broken chrome roll. > > > > Original change's description: > > > Revert "Always include public/include headers for vulkan and just guard src files with SK_VULKAN." > > > > > > This reverts commit 6e2d607334cc57c22e3a52179743763828ea84b2. > > > > > > Reason for revert: chrome roll > > > > > > Original change's description: > > > > Always include public/include headers for vulkan and just guard src files with SK_VULKAN. > > > > > > > > This should allow a client to build a skia library that doesn't use vulkan but still > > > > has all the public headers defined so that they don't have to build two versions of > > > > their code. > > > > > > > > Bug: chromium:862144 > > > > Change-Id: I0eecbe0bc48123619f217e2cf318eb9a8c77ccb2 > > > > Reviewed-on: https://skia-review.googlesource.com/158661 > > > > Reviewed-by: Brian Salomon <bsalomon@google.com> > > > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > > > > > TBR=egdaniel@google.com,bsalomon@google.com,cblume@chromium.org > > > > > > Change-Id: I76ae6f435333755fa5d546fc1e5999a324b4fd05 > > > No-Presubmit: true > > > No-Tree-Checks: true > > > No-Try: true > > > Bug: chromium:862144 > > > Reviewed-on: https://skia-review.googlesource.com/c/159000 > > > Reviewed-by: Mike Klein <mtklein@google.com> > > > Commit-Queue: Mike Klein <mtklein@google.com> > > > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,cblume@chromium.org > > > > Change-Id: Id019b428f880efbd7ead8dee4178c6190469a290 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: chromium:862144 > > Reviewed-on: https://skia-review.googlesource.com/c/159145 > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > Reviewed-by: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,cblume@chromium.org > > Change-Id: I0e5c72e2d79dac28021b02168a9e11ac08db765c > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: chromium:862144 > Reviewed-on: https://skia-review.googlesource.com/c/159155 > Reviewed-by: Mike Klein <mtklein@google.com> > Commit-Queue: Mike Klein <mtklein@google.com> TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,cblume@chromium.org Change-Id: I58f7f8ca5281cd5fe0c145c01e9b9465c9b9ec31 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:862144 Reviewed-on: https://skia-review.googlesource.com/159260 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
2018-10-03 18:44:49 +00:00
#ifdef SK_VULKAN
friend class GrVkTexture;
GrBackendTexture(int width,
int height,
const GrVkImageInfo& vkInfo,
sk_sp<GrBackendSurfaceMutableStateImpl> mutableState);
#endif
#ifdef SK_DIRECT3D
friend class GrD3DTexture;
friend class GrD3DGpu; // for getGrD3DResourceState
GrBackendTexture(int width,
int height,
const GrD3DTextureResourceInfo& vkInfo,
sk_sp<GrD3DResourceState> state);
sk_sp<GrD3DResourceState> getGrD3DResourceState() const;
#endif
// Free and release and resources being held by the GrBackendTexture.
void cleanup();
bool fIsValid;
int fWidth; //<! width in pixels
int fHeight; //<! height in pixels
GrMipmapped fMipmapped;
GrBackendApi fBackend;
union {
#ifdef SK_GL
GrGLBackendTextureInfo fGLInfo;
#endif
GrVkBackendSurfaceInfo fVkInfo;
Revert "Change Metal to not take ownership of objects" This reverts commit 186a2951113c2e5b88adb95534f962e2b49cbeee. Reason for revert: Metal bots failing Original change's description: > Change Metal to not take ownership of objects > > Prior to this change, Skia/Metal interfaces take ownership of the Metal > objects passed in (that is, the caller should count passing the object > to Skia as "freeing" the object). > > Change this behavior so that Skia/Metal retains its own separate > ownership of the Metal objects. > > Make GrBackendTexture and GrBackendRenderTarget maintain their own > references to the underlying MTLTexture by using the CFRetain/CFRelease > interfaces. Do this by adding a private GrMtlBackendSurfaceInfo. > > Move GrMtlBackendSurfaceInfo (formerly GrMtlTextureInfo) out of the > union in GrBackendTexture and GrBackendRenderTarget because unions > cannot have nontrivial constructors and destructors (how fVkInfo isn't > causing a compile error is unclear). > > Change-Id: Iae3719c0715825d86503d03c766e47f0f6015bdf > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215685 > Commit-Queue: Jim Van Verth <jvanverth@google.com> > Reviewed-by: Jim Van Verth <jvanverth@google.com> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,ccameron@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ie569fe1938857706b5413876a9480ef1eb3314ea Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216221 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
2019-05-28 03:03:45 +00:00
GrMockTextureInfo fMockInfo;
#ifdef SK_DIRECT3D
GrD3DBackendSurfaceInfo fD3DInfo;
#endif
Revert "Change Metal to not take ownership of objects" This reverts commit 186a2951113c2e5b88adb95534f962e2b49cbeee. Reason for revert: Metal bots failing Original change's description: > Change Metal to not take ownership of objects > > Prior to this change, Skia/Metal interfaces take ownership of the Metal > objects passed in (that is, the caller should count passing the object > to Skia as "freeing" the object). > > Change this behavior so that Skia/Metal retains its own separate > ownership of the Metal objects. > > Make GrBackendTexture and GrBackendRenderTarget maintain their own > references to the underlying MTLTexture by using the CFRetain/CFRelease > interfaces. Do this by adding a private GrMtlBackendSurfaceInfo. > > Move GrMtlBackendSurfaceInfo (formerly GrMtlTextureInfo) out of the > union in GrBackendTexture and GrBackendRenderTarget because unions > cannot have nontrivial constructors and destructors (how fVkInfo isn't > causing a compile error is unclear). > > Change-Id: Iae3719c0715825d86503d03c766e47f0f6015bdf > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215685 > Commit-Queue: Jim Van Verth <jvanverth@google.com> > Reviewed-by: Jim Van Verth <jvanverth@google.com> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,ccameron@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ie569fe1938857706b5413876a9480ef1eb3314ea Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216221 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
2019-05-28 03:03:45 +00:00
};
#ifdef SK_METAL
GrMtlTextureInfo fMtlInfo;
#endif
#ifdef SK_DAWN
GrDawnTextureInfo fDawnInfo;
#endif
sk_sp<GrBackendSurfaceMutableStateImpl> fMutableState;
};
class SK_API GrBackendRenderTarget {
public:
// Creates an invalid backend texture.
GrBackendRenderTarget();
// The GrGLTextureInfo must have a valid fFormat.
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
int stencilBits,
const GrGLFramebufferInfo& glInfo);
#ifdef SK_DAWN
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
int stencilBits,
const GrDawnRenderTargetInfo& dawnInfo);
#endif
#ifdef SK_VULKAN
/** Deprecated, use version that does not take stencil bits. */
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
int stencilBits,
Revert "Revert "Update skia to use ifdefs for Vulkan code instead of dummy header"" This reverts commit fad9e3f54112ea8c8bb6bb72384f47b9759578f5. Reason for revert: Can't find the error message anymore (?!?) Let's try again shall we Original change's description: > Revert "Update skia to use ifdefs for Vulkan code instead of dummy header" > > This reverts commit c0f8e426c59eec6c720b8e1329dcb966cf1b6800. > > Reason for revert: Experiment to see if this will unblock the Android roll > > Original change's description: > > Update skia to use ifdefs for Vulkan code instead of dummy header > > > > Bug: skia:6721 > > Change-Id: I80a4c9f2acc09c174497f625c50ed12a8bb76505 > > Reviewed-on: https://skia-review.googlesource.com/19547 > > Reviewed-by: Mike Klein <mtklein@google.com> > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com > > Change-Id: Ib51c1672570f2071a17b6fbde692a5174b0358ce > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:6721 > Reviewed-on: https://skia-review.googlesource.com/19724 > Reviewed-by: Robert Phillips <robertphillips@google.com> > Commit-Queue: Robert Phillips <robertphillips@google.com> TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: Iecef7ddcfe31d82938336120a4193525ac6693be No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:6721 Reviewed-on: https://skia-review.googlesource.com/19782 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
2017-06-14 01:43:29 +00:00
const GrVkImageInfo& vkInfo);
GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo);
#endif
#ifdef SK_METAL
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
const GrMtlTextureInfo& mtlInfo);
#endif
#ifdef SK_DIRECT3D
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
const GrD3DTextureResourceInfo& d3dInfo);
#endif
GrBackendRenderTarget(int width,
int height,
int sampleCnt,
int stencilBits,
const GrMockRenderTargetInfo& mockInfo);
~GrBackendRenderTarget();
GrBackendRenderTarget(const GrBackendRenderTarget& that);
GrBackendRenderTarget& operator=(const GrBackendRenderTarget&);
SkISize dimensions() const { return {fWidth, fHeight}; }
int width() const { return fWidth; }
int height() const { return fHeight; }
int sampleCnt() const { return fSampleCnt; }
int stencilBits() const { return fStencilBits; }
GrBackendApi backend() const {return fBackend; }
bool isFramebufferOnly() const { return fFramebufferOnly; }
// If the backend API is GL, copies a snapshot of the GrGLFramebufferInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not GL.
bool getGLFramebufferInfo(GrGLFramebufferInfo*) const;
#ifdef SK_DAWN
// If the backend API is Dawn, copies a snapshot of the GrDawnRenderTargetInfo struct into the
// passed-in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
bool getDawnRenderTargetInfo(GrDawnRenderTargetInfo*) const;
#endif
// If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
// in pointer and returns true. This snapshot will set the fImageLayout to the current layout
// state. Otherwise returns false if the backend API is not Vulkan.
bool getVkImageInfo(GrVkImageInfo*) const;
// Anytime the client changes the VkImageLayout of the VkImage captured by this
// GrBackendRenderTarget, they must call this function to notify Skia of the changed layout.
void setVkImageLayout(VkImageLayout);
Revert "Revert "Update skia to use ifdefs for Vulkan code instead of dummy header"" This reverts commit fad9e3f54112ea8c8bb6bb72384f47b9759578f5. Reason for revert: Can't find the error message anymore (?!?) Let's try again shall we Original change's description: > Revert "Update skia to use ifdefs for Vulkan code instead of dummy header" > > This reverts commit c0f8e426c59eec6c720b8e1329dcb966cf1b6800. > > Reason for revert: Experiment to see if this will unblock the Android roll > > Original change's description: > > Update skia to use ifdefs for Vulkan code instead of dummy header > > > > Bug: skia:6721 > > Change-Id: I80a4c9f2acc09c174497f625c50ed12a8bb76505 > > Reviewed-on: https://skia-review.googlesource.com/19547 > > Reviewed-by: Mike Klein <mtklein@google.com> > > Commit-Queue: Greg Daniel <egdaniel@google.com> > > TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com > > Change-Id: Ib51c1672570f2071a17b6fbde692a5174b0358ce > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:6721 > Reviewed-on: https://skia-review.googlesource.com/19724 > Reviewed-by: Robert Phillips <robertphillips@google.com> > Commit-Queue: Robert Phillips <robertphillips@google.com> TBR=egdaniel@google.com,mtklein@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: Iecef7ddcfe31d82938336120a4193525ac6693be No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:6721 Reviewed-on: https://skia-review.googlesource.com/19782 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
2017-06-14 01:43:29 +00:00
#ifdef SK_METAL
// If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not Metal.
bool getMtlTextureInfo(GrMtlTextureInfo*) const;
#endif
#ifdef SK_DIRECT3D
// If the backend API is Direct3D, copies a snapshot of the GrMtlTextureInfo struct into the
// passed in pointer and returns true. Otherwise returns false if the backend API is not D3D.
bool getD3DTextureResourceInfo(GrD3DTextureResourceInfo*) const;
// Anytime the client changes the D3D12_RESOURCE_STATES of the D3D12_RESOURCE captured by this
// GrBackendTexture, they must call this function to notify Skia of the changed layout.
void setD3DResourceState(GrD3DResourceStateEnum);
#endif
// Get the GrBackendFormat for this render target (or an invalid format if this is not valid).
GrBackendFormat getBackendFormat() const;
// If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
// in pointer and returns true. Otherwise returns false if the backend API is not Mock.
bool getMockRenderTargetInfo(GrMockRenderTargetInfo*) const;
// If the client changes any of the mutable backend of the GrBackendTexture they should call
// this function to inform Skia that those values have changed. The backend API specific state
// that can be set from this function are:
//
// Vulkan: VkImageLayout and QueueFamilyIndex
void setMutableState(const GrBackendSurfaceMutableState&);
// Returns true if we are working with protected content.
bool isProtected() const;
// Returns true if the backend texture has been initialized.
bool isValid() const { return fIsValid; }
#if GR_TEST_UTILS
static bool TestingOnly_Equals(const GrBackendRenderTarget&, const GrBackendRenderTarget&);
#endif
private:
friend class GrVkGpu; // for getMutableState
sk_sp<GrBackendSurfaceMutableStateImpl> getMutableState() const;
#ifdef SK_VULKAN
friend class GrVkRenderTarget;
GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo,
sk_sp<GrBackendSurfaceMutableStateImpl> mutableState);
#endif
#ifdef SK_DIRECT3D
friend class GrD3DGpu;
friend class GrD3DRenderTarget;
GrBackendRenderTarget(int width, int height, int sampleCnt,
const GrD3DTextureResourceInfo& d3dInfo, sk_sp<GrD3DResourceState> state);
sk_sp<GrD3DResourceState> getGrD3DResourceState() const;
#endif
// Free and release and resources being held by the GrBackendTexture.
void cleanup();
bool fIsValid;
bool fFramebufferOnly = false;
int fWidth; //<! width in pixels
int fHeight; //<! height in pixels
int fSampleCnt;
int fStencilBits;
Revert "Change Metal to not take ownership of objects" This reverts commit 186a2951113c2e5b88adb95534f962e2b49cbeee. Reason for revert: Metal bots failing Original change's description: > Change Metal to not take ownership of objects > > Prior to this change, Skia/Metal interfaces take ownership of the Metal > objects passed in (that is, the caller should count passing the object > to Skia as "freeing" the object). > > Change this behavior so that Skia/Metal retains its own separate > ownership of the Metal objects. > > Make GrBackendTexture and GrBackendRenderTarget maintain their own > references to the underlying MTLTexture by using the CFRetain/CFRelease > interfaces. Do this by adding a private GrMtlBackendSurfaceInfo. > > Move GrMtlBackendSurfaceInfo (formerly GrMtlTextureInfo) out of the > union in GrBackendTexture and GrBackendRenderTarget because unions > cannot have nontrivial constructors and destructors (how fVkInfo isn't > causing a compile error is unclear). > > Change-Id: Iae3719c0715825d86503d03c766e47f0f6015bdf > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215685 > Commit-Queue: Jim Van Verth <jvanverth@google.com> > Reviewed-by: Jim Van Verth <jvanverth@google.com> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,ccameron@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ie569fe1938857706b5413876a9480ef1eb3314ea Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216221 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
2019-05-28 03:03:45 +00:00
GrBackendApi fBackend;
union {
#ifdef SK_GL
GrGLFramebufferInfo fGLInfo;
#endif
GrVkBackendSurfaceInfo fVkInfo;
Revert "Change Metal to not take ownership of objects" This reverts commit 186a2951113c2e5b88adb95534f962e2b49cbeee. Reason for revert: Metal bots failing Original change's description: > Change Metal to not take ownership of objects > > Prior to this change, Skia/Metal interfaces take ownership of the Metal > objects passed in (that is, the caller should count passing the object > to Skia as "freeing" the object). > > Change this behavior so that Skia/Metal retains its own separate > ownership of the Metal objects. > > Make GrBackendTexture and GrBackendRenderTarget maintain their own > references to the underlying MTLTexture by using the CFRetain/CFRelease > interfaces. Do this by adding a private GrMtlBackendSurfaceInfo. > > Move GrMtlBackendSurfaceInfo (formerly GrMtlTextureInfo) out of the > union in GrBackendTexture and GrBackendRenderTarget because unions > cannot have nontrivial constructors and destructors (how fVkInfo isn't > causing a compile error is unclear). > > Change-Id: Iae3719c0715825d86503d03c766e47f0f6015bdf > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215685 > Commit-Queue: Jim Van Verth <jvanverth@google.com> > Reviewed-by: Jim Van Verth <jvanverth@google.com> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,ccameron@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ie569fe1938857706b5413876a9480ef1eb3314ea Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216221 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
2019-05-28 03:03:45 +00:00
GrMockRenderTargetInfo fMockInfo;
#ifdef SK_DIRECT3D
GrD3DBackendSurfaceInfo fD3DInfo;
#endif
Revert "Change Metal to not take ownership of objects" This reverts commit 186a2951113c2e5b88adb95534f962e2b49cbeee. Reason for revert: Metal bots failing Original change's description: > Change Metal to not take ownership of objects > > Prior to this change, Skia/Metal interfaces take ownership of the Metal > objects passed in (that is, the caller should count passing the object > to Skia as "freeing" the object). > > Change this behavior so that Skia/Metal retains its own separate > ownership of the Metal objects. > > Make GrBackendTexture and GrBackendRenderTarget maintain their own > references to the underlying MTLTexture by using the CFRetain/CFRelease > interfaces. Do this by adding a private GrMtlBackendSurfaceInfo. > > Move GrMtlBackendSurfaceInfo (formerly GrMtlTextureInfo) out of the > union in GrBackendTexture and GrBackendRenderTarget because unions > cannot have nontrivial constructors and destructors (how fVkInfo isn't > causing a compile error is unclear). > > Change-Id: Iae3719c0715825d86503d03c766e47f0f6015bdf > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215685 > Commit-Queue: Jim Van Verth <jvanverth@google.com> > Reviewed-by: Jim Van Verth <jvanverth@google.com> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,ccameron@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ie569fe1938857706b5413876a9480ef1eb3314ea Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216221 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
2019-05-28 03:03:45 +00:00
};
#ifdef SK_METAL
GrMtlTextureInfo fMtlInfo;
#endif
#ifdef SK_DAWN
GrDawnRenderTargetInfo fDawnInfo;
#endif
sk_sp<GrBackendSurfaceMutableStateImpl> fMutableState;
};
#endif
#endif