Commit b6328e87 authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

ExternalVkImageBacking: support on Windows

This CL enables the ExternalVkImageBacking on Windows platform, but it
only supports pixel copy code path for now, the vulkan external memory
extension is not used.

Bug: None
Change-Id: I44955572175d218ec613b41eddf40eb0655fac07
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2125705Reviewed-by: default avatarVasiliy Telezhnikov <vasilyt@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#755968}
parent a3fa9fb1
......@@ -328,7 +328,7 @@ target(link_target_type, "gles2_sources") {
"//gpu/vulkan",
]
if (is_linux || is_fuchsia || is_android) {
if (is_linux || is_fuchsia || is_android || is_win) {
sources += [
"external_vk_image_backing.cc",
"external_vk_image_backing.h",
......
......@@ -536,7 +536,8 @@ ExternalVkImageBacking::ProduceDawn(SharedImageManager* manager,
}
GLuint ExternalVkImageBacking::ProduceGLTextureInternal() {
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
defined(OS_WIN)
GrVkImageInfo image_info;
bool result = backend_texture_.getVkImageInfo(&image_info);
DCHECK(result);
......@@ -569,6 +570,10 @@ GLuint ExternalVkImageBacking::ProduceGLTextureInternal() {
api->glImportMemoryZirconHandleANGLEFn(
memory_object, image_info.fAlloc.fSize, GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE,
vmo.release());
#elif defined(OS_WIN)
// TODO(penghuang): support interop on Windows
NOTIMPLEMENTED();
return 0;
#else
#error Unsupported OS
#endif
......@@ -617,7 +622,8 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager,
return nullptr;
}
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
defined(OS_WIN)
if (!texture_) {
GLuint texture_service_id = ProduceGLTextureInternal();
if (!texture_service_id)
......@@ -645,7 +651,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager,
}
return std::make_unique<ExternalVkImageGLRepresentation>(
manager, this, tracker, texture_, texture_->service_id());
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
#else
#error Unsupported OS
#endif
}
......@@ -660,7 +666,8 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
return nullptr;
}
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
defined(OS_WIN)
if (!texture_passthrough_) {
GLuint texture_service_id = ProduceGLTextureInternal();
if (!texture_service_id)
......@@ -677,7 +684,7 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
return std::make_unique<ExternalVkImageGLPassthroughRepresentation>(
manager, this, tracker, texture_passthrough_->service_id());
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
#else
#error Unsupported OS
#endif
}
......
......@@ -4,8 +4,6 @@
#include "gpu/command_buffer/service/external_vk_image_factory.h"
#include <unistd.h>
#include "components/viz/common/gpu/vulkan_context_provider.h"
#include "components/viz/common/resources/resource_format_utils.h"
#include "gpu/command_buffer/service/external_vk_image_backing.h"
......
......@@ -217,7 +217,10 @@ GLuint ExternalVkImageGLRepresentationShared::ImportVkSemaphoreIntoGL(
api->glImportSemaphoreZirconHandleANGLEFn(
gl_semaphore, GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE, event.release());
return gl_semaphore;
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
#elif defined(OS_WIN)
NOTIMPLEMENTED();
return 0;
#else
#error Unsupported OS
#endif
}
......
......@@ -28,7 +28,8 @@
#include "ui/gl/gl_implementation.h"
#include "ui/gl/trace_util.h"
#if (defined(USE_X11) || defined(OS_FUCHSIA)) && BUILDFLAG(ENABLE_VULKAN)
#if (defined(USE_X11) || defined(OS_FUCHSIA) || defined(OS_WIN)) && \
BUILDFLAG(ENABLE_VULKAN)
#include "gpu/command_buffer/service/external_vk_image_factory.h"
#elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN)
#include "gpu/command_buffer/service/external_vk_image_factory.h"
......@@ -95,7 +96,8 @@ SharedImageFactory::SharedImageFactory(
}
// For X11
#if (defined(USE_X11) || defined(OS_FUCHSIA)) && BUILDFLAG(ENABLE_VULKAN)
#if (defined(USE_X11) || defined(OS_FUCHSIA) || defined(OS_WIN)) && \
BUILDFLAG(ENABLE_VULKAN)
if (using_vulkan_) {
interop_backing_factory_ =
std::make_unique<ExternalVkImageFactory>(context_state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment