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:
parent
bca46e29e9
commit
604b197c6b
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user