aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/gpu/GrBackendSurface.h11
-rw-r--r--src/gpu/GrBackendSurface.cpp8
-rw-r--r--src/gpu/gl/GrGLGpu.cpp8
-rw-r--r--src/gpu/gl/GrGLRenderTarget.cpp12
-rw-r--r--src/gpu/gl/GrGLTexture.cpp10
-rw-r--r--src/gpu/gl/GrGLUtil.cpp35
-rw-r--r--src/gpu/gl/GrGLUtil.h2
-rw-r--r--src/gpu/vk/GrVkGpu.cpp10
-rw-r--r--src/gpu/vk/GrVkRenderTarget.cpp12
-rw-r--r--src/gpu/vk/GrVkTexture.cpp9
-rw-r--r--src/gpu/vk/GrVkUtil.cpp34
-rw-r--r--src/gpu/vk/GrVkUtil.h5
-rw-r--r--src/image/SkImage_Gpu.cpp7
-rw-r--r--tests/ProxyTest.cpp10
-rw-r--r--tests/SurfaceTest.cpp2
-rw-r--r--tests/VkWrapTests.cpp21
-rw-r--r--tools/gpu/GrTest.cpp22
17 files changed, 96 insertions, 122 deletions
diff --git a/include/gpu/GrBackendSurface.h b/include/gpu/GrBackendSurface.h
index 0145dc44c0..7bab31d0dd 100644
--- a/include/gpu/GrBackendSurface.h
+++ b/include/gpu/GrBackendSurface.h
@@ -138,7 +138,10 @@ public:
// Returns true if the backend texture has been initialized.
bool isValid() const { return fConfig != kUnknown_GrPixelConfig; }
- GrPixelConfig testingOnly_getPixelConfig() const;
+#if GR_TEST_UTILS
+ GrPixelConfig getPixelConfig() const { return fConfig; }
+ void setPixelConfig(GrPixelConfig config) { fConfig = config; }
+#endif
private:
// Friending for access to the GrPixelConfig
@@ -149,6 +152,7 @@ private:
friend class GrGpu;
friend class GrGLGpu;
friend class GrVkGpu;
+ friend class PromiseImageHelper;
GrPixelConfig config() const { return fConfig; }
int fWidth; //<! width in pixels
@@ -224,7 +228,10 @@ public:
// Returns true if the backend texture has been initialized.
bool isValid() const { return fConfig != kUnknown_GrPixelConfig; }
- GrPixelConfig testingOnly_getPixelConfig() const;
+#if GR_TEST_UTILS
+ GrPixelConfig getPixelConfig() const { return fConfig; }
+ void setPixelConfig(GrPixelConfig config) { fConfig = config; }
+#endif
private:
// Friending for access to the GrPixelConfig
diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp
index fa2582a18e..49a8c5f762 100644
--- a/src/gpu/GrBackendSurface.cpp
+++ b/src/gpu/GrBackendSurface.cpp
@@ -69,7 +69,7 @@ GrBackendTexture::GrBackendTexture(int width,
const GrVkImageInfo& vkInfo)
: fWidth(width)
, fHeight(height)
- , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
+ , fConfig(kUnknown_GrPixelConfig)
, fMipMapped(GrMipMapped(vkInfo.fLevelCount > 1))
, fBackend(kVulkan_GrBackend)
, fVkInfo(vkInfo) {}
@@ -99,7 +99,7 @@ GrBackendTexture::GrBackendTexture(int width,
const GrGLTextureInfo& glInfo)
: fWidth(width)
, fHeight(height)
- , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat))
+ , fConfig(kUnknown_GrPixelConfig)
, fMipMapped(mipMapped)
, fBackend(kOpenGL_GrBackend)
, fGLInfo(glInfo) {}
@@ -159,7 +159,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width,
, fHeight(height)
, fSampleCnt(SkTMax(1, sampleCnt))
, fStencilBits(0) // We always create stencil buffers internally for vulkan
- , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat))
+ , fConfig(kUnknown_GrPixelConfig)
, fBackend(kVulkan_GrBackend)
, fVkInfo(vkInfo) {}
#endif
@@ -187,7 +187,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width,
, fHeight(height)
, fSampleCnt(SkTMax(1, sampleCnt))
, fStencilBits(stencilBits)
- , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat))
+ , fConfig(kUnknown_GrPixelConfig)
, fBackend(kOpenGL_GrBackend)
, fGLInfo(glInfo) {}
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 9023554b6b..bcea5160e3 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -4410,7 +4410,9 @@ GrBackendTexture GrGLGpu::createTestingOnlyBackendTexture(const void* pixels, in
// unbind the texture from the texture unit to avoid asserts
GL_CALL(BindTexture(info.fTarget, 0));
- return GrBackendTexture(w, h, mipMapped, info);
+ GrBackendTexture beTex = GrBackendTexture(w, h, mipMapped, info);
+ beTex.setPixelConfig(config);
+ return beTex;
}
bool GrGLGpu::isTestingOnlyBackendTexture(const GrBackendTexture& tex) const {
@@ -4499,7 +4501,9 @@ GrBackendRenderTarget GrGLGpu::createTestingOnlyBackendRenderTarget(int w, int h
return {};
}
auto stencilBits = SkToInt(this->glCaps().stencilFormats()[sFormatIdx].fStencilBits);
- return {w, h, 1, stencilBits, config, info};
+ GrBackendRenderTarget beRT = {w, h, 1, stencilBits, info};
+ beRT.setPixelConfig(config);
+ return beRT;
}
void GrGLGpu::deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget& backendRT) {
diff --git a/src/gpu/gl/GrGLRenderTarget.cpp b/src/gpu/gl/GrGLRenderTarget.cpp
index de7399bd92..73c5fdf4b3 100644
--- a/src/gpu/gl/GrGLRenderTarget.cpp
+++ b/src/gpu/gl/GrGLRenderTarget.cpp
@@ -91,8 +91,16 @@ GrBackendRenderTarget GrGLRenderTarget::getBackendRenderTarget() const {
numStencilBits = stencil->bits();
}
- return GrBackendRenderTarget(this->width(), this->height(), this->numColorSamples(),
- numStencilBits, fbi);
+ GrBackendRenderTarget beRT = GrBackendRenderTarget(this->width(), this->height(),
+ this->numColorSamples(), numStencilBits,
+ fbi);
+#if GR_TEST_UTILS
+ // We shouldn't have to set this since the client can't access it and we will handle the config
+ // correctly if we go through our public SkSurface APIs. However, some of our tests bypass the
+ // public APIs so we need to set this manually here.
+ beRT.setPixelConfig(this->config());
+#endif
+ return beRT;
}
size_t GrGLRenderTarget::onGpuMemorySize() const {
diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp
index 0f36dd0f32..771006919b 100644
--- a/src/gpu/gl/GrGLTexture.cpp
+++ b/src/gpu/gl/GrGLTexture.cpp
@@ -98,7 +98,15 @@ GrBackendObject GrGLTexture::getTextureHandle() const {
}
GrBackendTexture GrGLTexture::getBackendTexture() const {
- return GrBackendTexture(this->width(), this->height(), this->texturePriv().mipMapped(), fInfo);
+ GrBackendTexture beTex = GrBackendTexture(this->width(), this->height(),
+ this->texturePriv().mipMapped(), fInfo);
+#if GR_TEST_UTILS
+ // We shouldn't have to set this since the client can't access it and we will handle the config
+ // correctly if we go through our public SkSurface and SkImage APIs. However, some of our tests
+ // bypass the public APIs so we need to set this manually here.
+ beTex.setPixelConfig(this->config());
+#endif
+ return beTex;
}
void GrGLTexture::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp
index 6b44402c1b..a268827e23 100644
--- a/src/gpu/gl/GrGLUtil.cpp
+++ b/src/gpu/gl/GrGLUtil.cpp
@@ -486,38 +486,3 @@ GrGLenum GrToGLStencilFunc(GrStencilTest test) {
return gTable[(int)test];
}
-GrPixelConfig GrGLSizedFormatToPixelConfig(GrGLenum sizedFormat) {
- switch (sizedFormat) {
- case GR_GL_R8:
- return kAlpha_8_as_Red_GrPixelConfig;
- case GR_GL_ALPHA8:
- return kAlpha_8_as_Alpha_GrPixelConfig;
- case GR_GL_RGBA8:
- return kRGBA_8888_GrPixelConfig;
- case GR_GL_BGRA8:
- return kBGRA_8888_GrPixelConfig;
- case GR_GL_SRGB8_ALPHA8:
- return kSRGBA_8888_GrPixelConfig;
- case GR_GL_RGB565:
- return kRGB_565_GrPixelConfig;
- case GR_GL_RGB5:
- return kRGB_565_GrPixelConfig;
- case GR_GL_RGBA4:
- return kRGBA_4444_GrPixelConfig;
- case GR_GL_RGB10_A2:
- return kRGBA_1010102_GrPixelConfig;
- case GR_GL_LUMINANCE8:
- return kGray_8_GrPixelConfig;
- case GR_GL_RGBA32F:
- return kRGBA_float_GrPixelConfig;
- case GR_GL_RG32F:
- return kRG_float_GrPixelConfig;
- case GR_GL_R16F:
- return kAlpha_half_as_Red_GrPixelConfig;
- case GR_GL_RGBA16F:
- return kRGBA_half_GrPixelConfig;
- default:
- return kUnknown_GrPixelConfig;
- }
-}
-
diff --git a/src/gpu/gl/GrGLUtil.h b/src/gpu/gl/GrGLUtil.h
index 9905d75ef1..88e8901047 100644
--- a/src/gpu/gl/GrGLUtil.h
+++ b/src/gpu/gl/GrGLUtil.h
@@ -248,6 +248,4 @@ void GrGLClearErr(const GrGLInterface* gl);
GrGLenum GrToGLStencilFunc(GrStencilTest test);
-GrPixelConfig GrGLSizedFormatToPixelConfig(GrGLenum sizedFormat);
-
#endif
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 5e6473e3a4..a7daf39790 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -1422,7 +1422,6 @@ bool GrVkGpu::createTestingOnlyVkImage(GrPixelConfig config, int w, int h, bool
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.image = image;
barrier.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, mipLevels, 0, 1};
- initialLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
VK_CALL(CmdPipelineBarrier(cmdBuffer,
GrVkMemory::LayoutToPipelineStageFlags(initialLayout),
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
@@ -1430,6 +1429,7 @@ bool GrVkGpu::createTestingOnlyVkImage(GrPixelConfig config, int w, int h, bool
0, nullptr,
0, nullptr,
1, &barrier));
+ initialLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
}
// End CommandBuffer
@@ -1498,7 +1498,9 @@ GrBackendTexture GrVkGpu::createTestingOnlyBackendTexture(const void* srcData, i
&info)) {
return {};
}
- return GrBackendTexture(w, h, info);
+ GrBackendTexture beTex = GrBackendTexture(w, h, info);
+ beTex.setPixelConfig(config);
+ return beTex;
}
bool GrVkGpu::isTestingOnlyBackendTexture(const GrBackendTexture& tex) const {
@@ -1541,7 +1543,9 @@ GrBackendRenderTarget GrVkGpu::createTestingOnlyBackendRenderTarget(int w, int h
&info)) {
return {};
}
- return {w, h, 1, 0, info};
+ GrBackendRenderTarget beRT = {w, h, 1, 0, info};
+ beRT.setPixelConfig(config);
+ return beRT;
}
void GrVkGpu::deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget& rt) {
diff --git a/src/gpu/vk/GrVkRenderTarget.cpp b/src/gpu/vk/GrVkRenderTarget.cpp
index 99b6b7632c..9c57ec01bd 100644
--- a/src/gpu/vk/GrVkRenderTarget.cpp
+++ b/src/gpu/vk/GrVkRenderTarget.cpp
@@ -352,8 +352,16 @@ GrBackendRenderTarget GrVkRenderTarget::getBackendRenderTarget() const {
if (GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment()) {
numStencilBits = stencil->bits();
}
- return GrBackendRenderTarget(this->width(), this->height(), this->numColorSamples(),
- numStencilBits, fInfo);
+ GrBackendRenderTarget beRT = GrBackendRenderTarget(this->width(), this->height(),
+ this->numColorSamples(), numStencilBits,
+ fInfo);
+#if GR_TEST_UTILS
+ // We shouldn't have to set this since the client can't access it and we will handle the config
+ // correctly if we go through our public SkSurface APIs. However, some of our tests bypass the
+ // public APIs so we need to set this manually here.
+ beRT.setPixelConfig(this->config());
+#endif
+ return beRT;
}
const GrVkResource* GrVkRenderTarget::stencilImageResource() const {
diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp
index 109b10638d..6668b8f4c1 100644
--- a/src/gpu/vk/GrVkTexture.cpp
+++ b/src/gpu/vk/GrVkTexture.cpp
@@ -162,7 +162,14 @@ GrBackendObject GrVkTexture::getTextureHandle() const {
}
GrBackendTexture GrVkTexture::getBackendTexture() const {
- return GrBackendTexture(this->width(), this->height(), fInfo);
+ GrBackendTexture beTex = GrBackendTexture(this->width(), this->height(), fInfo);
+#if GR_TEST_UTILS
+ // We shouldn't have to set this since the client can't access it and we will handle the config
+ // correctly if we go through our public SkSurface and SkImage APIs. However, some of our tests
+ // bypass the public APIs so we need to set this manually here.
+ beTex.setPixelConfig(this->config());
+#endif
+ return beTex;
}
GrVkGpu* GrVkTexture::getVkGpu() const {
diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp
index 4f0acdb8f4..5edb2e3818 100644
--- a/src/gpu/vk/GrVkUtil.cpp
+++ b/src/gpu/vk/GrVkUtil.cpp
@@ -72,40 +72,6 @@ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format) {
return false;
}
-GrPixelConfig GrVkFormatToPixelConfig(VkFormat format) {
- switch (format) {
- case VK_FORMAT_R8G8B8A8_UNORM:
- return kRGBA_8888_GrPixelConfig;
- case VK_FORMAT_B8G8R8A8_UNORM:
- return kBGRA_8888_GrPixelConfig;
- case VK_FORMAT_R8G8B8A8_SRGB:
- return kSRGBA_8888_GrPixelConfig;
- case VK_FORMAT_B8G8R8A8_SRGB:
- return kSBGRA_8888_GrPixelConfig;
- case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
- return kRGBA_1010102_GrPixelConfig;
- case VK_FORMAT_R5G6B5_UNORM_PACK16:
- return kRGB_565_GrPixelConfig;
- break;
- case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
- // R4G4B4A4 is not required to be supported so we actually
- // store RGBA_4444 data as B4G4R4A4.
- return kRGBA_4444_GrPixelConfig;
- case VK_FORMAT_R8_UNORM:
- return kAlpha_8_GrPixelConfig;
- case VK_FORMAT_R32G32B32A32_SFLOAT:
- return kRGBA_float_GrPixelConfig;
- case VK_FORMAT_R32G32_SFLOAT:
- return kRG_float_GrPixelConfig;
- case VK_FORMAT_R16G16B16A16_SFLOAT:
- return kRGBA_half_GrPixelConfig;
- case VK_FORMAT_R16_SFLOAT:
- return kAlpha_half_GrPixelConfig;
- default:
- return kUnknown_GrPixelConfig;
- }
-}
-
bool GrVkFormatPixelConfigPairIsValid(VkFormat format, GrPixelConfig config) {
switch (format) {
case VK_FORMAT_R8G8B8A8_UNORM:
diff --git a/src/gpu/vk/GrVkUtil.h b/src/gpu/vk/GrVkUtil.h
index 01688c8486..b0d118adb5 100644
--- a/src/gpu/vk/GrVkUtil.h
+++ b/src/gpu/vk/GrVkUtil.h
@@ -32,11 +32,6 @@ class GrVkGpu;
*/
bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format);
-/**
-* Returns the GrPixelConfig for the given vulkan texture format
-*/
-GrPixelConfig GrVkFormatToPixelConfig(VkFormat format);
-
bool GrVkFormatIsSupported(VkFormat);
/**
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 7c842f69c0..45906009f8 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -589,7 +589,7 @@ public:
this->resetReleaseHelper();
}
- sk_sp<GrTexture> getTexture(GrResourceProvider* resourceProvider) {
+ sk_sp<GrTexture> getTexture(GrResourceProvider* resourceProvider, GrPixelConfig config) {
// Releases the promise helper if there are no outstanding hard refs. This means that we
// don't have any ReleaseProcs waiting to be called so we will need to do a fulfill.
if (fReleaseHelper && fReleaseHelper->weak_expired()) {
@@ -599,6 +599,7 @@ public:
sk_sp<GrTexture> tex;
if (!fReleaseHelper) {
fFulfillProc(fContext, &fBackendTex);
+ fBackendTex.fConfig = config;
if (!fBackendTex.isValid()) {
// Even though the GrBackendTexture is not valid, we must call the release
// proc to keep our contract of always calling Fulfill and Release in pairs.
@@ -700,13 +701,13 @@ sk_sp<SkImage> SkImage_Gpu::MakePromiseTexture(GrContext* context,
PromiseImageHelper promiseHelper(textureFulfillProc, textureReleaseProc, textureContext);
sk_sp<GrTextureProxy> proxy = proxyProvider->createLazyProxy(
- [promiseHelper] (GrResourceProvider* resourceProvider) mutable {
+ [promiseHelper, config] (GrResourceProvider* resourceProvider) mutable {
if (!resourceProvider) {
promiseHelper.reset();
return sk_sp<GrTexture>();
}
- return promiseHelper.getTexture(resourceProvider);
+ return promiseHelper.getTexture(resourceProvider, config);
}, desc, origin, mipMapped, GrRenderTargetFlags::kNone, SkBackingFit::kExact,
SkBudgeted::kNo, GrSurfaceProxy::LazyInstantiationType::kUninstantiate);
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index 4970e43a20..5092abebe6 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -215,7 +215,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
sk_sp<GrSurfaceProxy> sProxy(
proxyProvider->wrapBackendRenderTarget(backendRT, origin));
check_surface(reporter, sProxy.get(), origin, kWidthHeight, kWidthHeight,
- backendRT.testingOnly_getPixelConfig(), SkBudgeted::kNo);
+ backendRT.getPixelConfig(), SkBudgeted::kNo);
static constexpr int kExpectedNumSamples = 1;
check_rendertarget(reporter, caps, resourceProvider, sProxy->asRenderTargetProxy(),
kExpectedNumSamples, SkBackingFit::kExact,
@@ -244,7 +244,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
proxyProvider->wrapBackendRenderTarget(backendRT, origin));
check_surface(reporter, sProxy.get(), origin,
kWidthHeight, kWidthHeight,
- backendRT.testingOnly_getPixelConfig(), SkBudgeted::kNo);
+ backendRT.getPixelConfig(), SkBudgeted::kNo);
check_rendertarget(reporter, caps, resourceProvider,
sProxy->asRenderTargetProxy(),
supportedNumSamples, SkBackingFit::kExact, 0);
@@ -265,7 +265,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
check_surface(reporter, sProxy.get(), origin,
kWidthHeight, kWidthHeight,
- backendTex.testingOnly_getPixelConfig(), SkBudgeted::kNo);
+ backendTex.getPixelConfig(), SkBudgeted::kNo);
check_rendertarget(reporter, caps, resourceProvider,
sProxy->asRenderTargetProxy(),
supportedNumSamples, SkBackingFit::kExact,
@@ -290,7 +290,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
check_surface(reporter, sProxy.get(), origin,
kWidthHeight, kWidthHeight,
- backendTex.testingOnly_getPixelConfig(), SkBudgeted::kNo);
+ backendTex.getPixelConfig(), SkBudgeted::kNo);
check_rendertarget(reporter, caps, resourceProvider,
sProxy->asRenderTargetProxy(),
supportedNumSamples, SkBackingFit::kExact,
@@ -316,7 +316,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
check_surface(reporter, sProxy.get(), origin,
kWidthHeight, kWidthHeight,
- backendTex.testingOnly_getPixelConfig(), SkBudgeted::kNo);
+ backendTex.getPixelConfig(), SkBudgeted::kNo);
check_texture(reporter, resourceProvider, sProxy->asTextureProxy(),
SkBackingFit::kExact);
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index bd3090cc8e..955a5c550a 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -205,6 +205,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrContext_maxSurfaceSamplesForColorType, repo
->accessRenderTargetContext()
->numStencilSamples();
REPORTER_ASSERT(reporter, sampleCnt == max, "Exected: %d, actual: %d", max, sampleCnt);
+
+ gpu->deleteTestingOnlyBackendTexture(backendTex);
}
}
#endif
diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp
index 367fdb5c53..58270cd7da 100644
--- a/tests/VkWrapTests.cpp
+++ b/tests/VkWrapTests.cpp
@@ -46,6 +46,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkImageInfo backendCopy = *imageInfo;
backendCopy.fImage = VK_NULL_HANDLE;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership);
REPORTER_ASSERT(reporter, !tex);
tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
@@ -57,6 +58,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkImageInfo backendCopy = *imageInfo;
backendCopy.fAlloc = GrVkAlloc();
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership);
REPORTER_ASSERT(reporter, !tex);
tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
@@ -67,6 +69,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
{
GrVkImageInfo backendCopy = *imageInfo;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
REPORTER_ASSERT(reporter, tex);
@@ -76,12 +79,11 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkGpu* gpu = static_cast<GrVkGpu*>(context->contextPriv().getGpu());
- GrBackendTexture origBackendTex = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH,
- kPixelConfig, true,
- GrMipMapped::kNo);
- const GrVkImageInfo* imageInfo = origBackendTex.getVkImageInfo();
+ GrBackendRenderTarget origBackendRT = gpu->createTestingOnlyBackendRenderTarget(
+ kW, kH, GrColorType::kRGBA_8888, GrSRGBEncoded::kNo);
- GrBackendRenderTarget origBackendRT(kW, kH, 1, 0, *imageInfo);
+ const GrVkImageInfo* imageInfo = origBackendRT.getVkImageInfo();
+ GrPixelConfig pixelConfig = origBackendRT.getPixelConfig();
sk_sp<GrRenderTarget> rt = gpu->wrapBackendRenderTarget(origBackendRT);
REPORTER_ASSERT(reporter, rt);
@@ -91,6 +93,7 @@ void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkImageInfo backendCopy = *imageInfo;
backendCopy.fImage = VK_NULL_HANDLE;
GrBackendRenderTarget backendRT(kW, kH, 1, 0, backendCopy);
+ backendRT.setPixelConfig(pixelConfig);
rt = gpu->wrapBackendRenderTarget(backendRT);
REPORTER_ASSERT(reporter, !rt);
}
@@ -101,13 +104,12 @@ void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) {
backendCopy.fAlloc = GrVkAlloc();
// can wrap null alloc
GrBackendRenderTarget backendRT(kW, kH, 1, 0, backendCopy);
+ backendRT.setPixelConfig(pixelConfig);
rt = gpu->wrapBackendRenderTarget(backendRT);
REPORTER_ASSERT(reporter, rt);
}
- // When we wrapBackendRenderTarget it is always borrowed, so we must make sure to free the
- // resource when we're done.
- gpu->deleteTestingOnlyBackendTexture(origBackendTex);
+ gpu->deleteTestingOnlyBackendRenderTarget(origBackendRT);
}
void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
@@ -127,6 +129,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkImageInfo backendCopy = *imageInfo;
backendCopy.fImage = VK_NULL_HANDLE;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kBorrow_GrWrapOwnership);
REPORTER_ASSERT(reporter, !tex);
tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
@@ -138,6 +141,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
GrVkImageInfo backendCopy = *imageInfo;
backendCopy.fAlloc = GrVkAlloc();
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kBorrow_GrWrapOwnership);
REPORTER_ASSERT(reporter, !tex);
tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
@@ -148,6 +152,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
{
GrVkImageInfo backendCopy = *imageInfo;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
+ backendTex.setPixelConfig(kPixelConfig);
tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
REPORTER_ASSERT(reporter, tex);
}
diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp
index e1a7924062..dfb8c2d4f6 100644
--- a/tools/gpu/GrTest.cpp
+++ b/tools/gpu/GrTest.cpp
@@ -56,26 +56,32 @@ void SetupAlwaysEvictAtlas(GrContext* context, int dim) {
GrBackendTexture CreateBackendTexture(GrBackend backend, int width, int height,
GrPixelConfig config, GrMipMapped mipMapped,
GrBackendObject handle) {
+ GrBackendTexture beTex;
switch (backend) {
#ifdef SK_VULKAN
case kVulkan_GrBackend: {
GrVkImageInfo* vkInfo = (GrVkImageInfo*)(handle);
SkASSERT((GrMipMapped::kYes == mipMapped) == (vkInfo->fLevelCount > 1));
- return GrBackendTexture(width, height, *vkInfo);
+ beTex = GrBackendTexture(width, height, *vkInfo);
+ break;
}
#endif
case kOpenGL_GrBackend: {
GrGLTextureInfo* glInfo = (GrGLTextureInfo*)(handle);
SkASSERT(glInfo->fFormat);
- return GrBackendTexture(width, height, mipMapped, *glInfo);
+ beTex = GrBackendTexture(width, height, mipMapped, *glInfo);
+ break;
}
case kMock_GrBackend: {
GrMockTextureInfo* mockInfo = (GrMockTextureInfo*)(handle);
- return GrBackendTexture(width, height, mipMapped, *mockInfo);
+ beTex = GrBackendTexture(width, height, mipMapped, *mockInfo);
+ break;
}
default:
return GrBackendTexture();
}
+ beTex.setPixelConfig(config);
+ return beTex;
}
GrBackendFormat CreateBackendFormatFromTexture(const GrBackendTexture& tex) {
@@ -338,16 +344,6 @@ void GrDrawingManager::testingOnly_removeOnFlushCallbackObject(GrOnFlushCallback
//////////////////////////////////////////////////////////////////////////////
-GrPixelConfig GrBackendTexture::testingOnly_getPixelConfig() const {
- return fConfig;
-}
-
-GrPixelConfig GrBackendRenderTarget::testingOnly_getPixelConfig() const {
- return fConfig;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
#define DRAW_OP_TEST_EXTERN(Op) \
extern std::unique_ptr<GrDrawOp> Op##__Test(GrPaint&&, SkRandom*, GrContext*, GrFSAAType)
#define DRAW_OP_TEST_ENTRY(Op) Op##__Test