Add support for creating a shared vulkan test context

Bug: skia:
Change-Id: I997c6269e4676bf4cedddcd87e71d107053678bb
Reviewed-on: https://skia-review.googlesource.com/16905
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
This commit is contained in:
Greg Daniel 2017-05-15 13:50:35 -04:00 committed by Skia Commit-Bot
parent bca46e29e9
commit 604b197c6b
3 changed files with 21 additions and 11 deletions

View File

@ -189,16 +189,14 @@ ContextInfo GrContextFactory::getContextInfoInternal(ContextType type, ContextOv
break;
}
#ifdef SK_VULKAN
case kVulkan_GrBackend:
if (masterContext) {
// Shared contexts not supported yet
return ContextInfo();
}
case kVulkan_GrBackend: {
VkTestContext* vkSharedContext = masterContext
? static_cast<VkTestContext*>(masterContext->fTestContext) : nullptr;
SkASSERT(kVulkan_ContextType == type);
if (ContextOverrides::kRequireNVPRSupport & overrides) {
return ContextInfo();
}
testCtx.reset(CreatePlatformVkTestContext());
testCtx.reset(CreatePlatformVkTestContext(vkSharedContext));
if (!testCtx) {
return ContextInfo();
}
@ -214,6 +212,7 @@ ContextInfo GrContextFactory::getContextInfoInternal(ContextType type, ContextOv
}
backendContext = testCtx->backendContext();
break;
}
#endif
default:
return ContextInfo();

View File

@ -108,9 +108,14 @@ GR_STATIC_ASSERT(sizeof(VkFence) <= sizeof(sk_gpu_test::PlatformFence));
// TODO: Implement swap buffers and finish
class VkTestContextImpl : public sk_gpu_test::VkTestContext {
public:
static VkTestContext* Create() {
sk_sp<const GrVkBackendContext> backendContext(
GrVkBackendContext::Create(vkGetInstanceProcAddr, vkGetDeviceProcAddr));
static VkTestContext* Create(VkTestContext* sharedContext) {
sk_sp<const GrVkBackendContext> backendContext;
if (sharedContext) {
backendContext = sharedContext->getVkBackendContext();
} else {
backendContext.reset(GrVkBackendContext::Create(vkGetInstanceProcAddr,
vkGetDeviceProcAddr));
}
if (!backendContext) {
return nullptr;
}
@ -147,7 +152,9 @@ private:
} // anonymous namespace
namespace sk_gpu_test {
VkTestContext* CreatePlatformVkTestContext() { return VkTestContextImpl::Create(); }
VkTestContext* CreatePlatformVkTestContext(VkTestContext* sharedContext) {
return VkTestContextImpl::Create(sharedContext);
}
} // namespace sk_gpu_test
#endif

View File

@ -22,6 +22,10 @@ public:
return reinterpret_cast<GrBackendContext>(fVk.get());
}
sk_sp<const GrVkBackendContext> getVkBackendContext() {
return fVk;
}
bool isValid() const override { return NULL != this->vk(); }
const GrVkInterface* vk() const { return fVk->fInterface.get(); }
@ -38,7 +42,7 @@ private:
/**
* Creates Vk context object bound to the native Vk library.
*/
VkTestContext* CreatePlatformVkTestContext();
VkTestContext* CreatePlatformVkTestContext(VkTestContext*);
} // namespace sk_gpu_test