Add initial support for creating a vulkan secondary command buffer drawing context.
This sets up the context and adds support for creating RTContexts, RTProxies, RTs,
and GrVkRenderPass's that wrap the external secondary command buffer.
Bug: skia:
Change-Id: I80ebbb690a5fe464f775c5fcad651dfe2a150418
Reviewed-on: https://skia-review.googlesource.com/c/178926
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp
index 0e9616a..0a45d60 100644
--- a/src/gpu/GrProxyProvider.cpp
+++ b/src/gpu/GrProxyProvider.cpp
@@ -515,12 +515,41 @@
}
SkASSERT(!rt->asTexture()); // A GrRenderTarget that's not textureable
SkASSERT(!rt->getUniqueKey().isValid());
- // Make sure we match how we created the proxy with SkBudgeted::kNo
+ // This proxy should be unbudgeted because we're just wrapping an external resource
SkASSERT(SkBudgeted::kNo == rt->resourcePriv().isBudgeted());
return sk_sp<GrSurfaceProxy>(new GrRenderTargetProxy(std::move(rt), origin));
}
+sk_sp<GrRenderTargetProxy> GrProxyProvider::wrapVulkanSecondaryCBAsRenderTarget(
+ const SkImageInfo& imageInfo, const GrVkDrawableInfo& vkInfo) {
+ if (this->isAbandoned()) {
+ return nullptr;
+ }
+
+ // This is only supported on a direct GrContext.
+ if (!fResourceProvider) {
+ return nullptr;
+ }
+
+ sk_sp<GrRenderTarget> rt = fResourceProvider->wrapVulkanSecondaryCBAsRenderTarget(imageInfo,
+ vkInfo);
+
+ if (!rt) {
+ return nullptr;
+ }
+ SkASSERT(!rt->asTexture()); // A GrRenderTarget that's not textureable
+ SkASSERT(!rt->getUniqueKey().isValid());
+ // This proxy should be unbudgeted because we're just wrapping an external resource
+ SkASSERT(SkBudgeted::kNo == rt->resourcePriv().isBudgeted());
+
+ // All Vulkan surfaces uses top left origins.
+ return sk_sp<GrRenderTargetProxy>(
+ new GrRenderTargetProxy(std::move(rt),
+ kTopLeft_GrSurfaceOrigin,
+ GrRenderTargetProxy::WrapsVkSecondaryCB::kYes));
+}
+
sk_sp<GrTextureProxy> GrProxyProvider::createLazyProxy(LazyInstantiateCallback&& callback,
const GrBackendFormat& format,
const GrSurfaceDesc& desc,