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") { ...@@ -328,7 +328,7 @@ target(link_target_type, "gles2_sources") {
"//gpu/vulkan", "//gpu/vulkan",
] ]
if (is_linux || is_fuchsia || is_android) { if (is_linux || is_fuchsia || is_android || is_win) {
sources += [ sources += [
"external_vk_image_backing.cc", "external_vk_image_backing.cc",
"external_vk_image_backing.h", "external_vk_image_backing.h",
......
...@@ -536,7 +536,8 @@ ExternalVkImageBacking::ProduceDawn(SharedImageManager* manager, ...@@ -536,7 +536,8 @@ ExternalVkImageBacking::ProduceDawn(SharedImageManager* manager,
} }
GLuint ExternalVkImageBacking::ProduceGLTextureInternal() { 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; GrVkImageInfo image_info;
bool result = backend_texture_.getVkImageInfo(&image_info); bool result = backend_texture_.getVkImageInfo(&image_info);
DCHECK(result); DCHECK(result);
...@@ -569,6 +570,10 @@ GLuint ExternalVkImageBacking::ProduceGLTextureInternal() { ...@@ -569,6 +570,10 @@ GLuint ExternalVkImageBacking::ProduceGLTextureInternal() {
api->glImportMemoryZirconHandleANGLEFn( api->glImportMemoryZirconHandleANGLEFn(
memory_object, image_info.fAlloc.fSize, GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, memory_object, image_info.fAlloc.fSize, GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE,
vmo.release()); vmo.release());
#elif defined(OS_WIN)
// TODO(penghuang): support interop on Windows
NOTIMPLEMENTED();
return 0;
#else #else
#error Unsupported OS #error Unsupported OS
#endif #endif
...@@ -617,7 +622,8 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager, ...@@ -617,7 +622,8 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager,
return nullptr; 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_) { if (!texture_) {
GLuint texture_service_id = ProduceGLTextureInternal(); GLuint texture_service_id = ProduceGLTextureInternal();
if (!texture_service_id) if (!texture_service_id)
...@@ -645,7 +651,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager, ...@@ -645,7 +651,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager,
} }
return std::make_unique<ExternalVkImageGLRepresentation>( return std::make_unique<ExternalVkImageGLRepresentation>(
manager, this, tracker, texture_, texture_->service_id()); manager, this, tracker, texture_, texture_->service_id());
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA) #else
#error Unsupported OS #error Unsupported OS
#endif #endif
} }
...@@ -660,7 +666,8 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough( ...@@ -660,7 +666,8 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
return nullptr; 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_) { if (!texture_passthrough_) {
GLuint texture_service_id = ProduceGLTextureInternal(); GLuint texture_service_id = ProduceGLTextureInternal();
if (!texture_service_id) if (!texture_service_id)
...@@ -677,7 +684,7 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough( ...@@ -677,7 +684,7 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
return std::make_unique<ExternalVkImageGLPassthroughRepresentation>( return std::make_unique<ExternalVkImageGLPassthroughRepresentation>(
manager, this, tracker, texture_passthrough_->service_id()); manager, this, tracker, texture_passthrough_->service_id());
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA) #else
#error Unsupported OS #error Unsupported OS
#endif #endif
} }
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
#include "gpu/command_buffer/service/external_vk_image_factory.h" #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/gpu/vulkan_context_provider.h"
#include "components/viz/common/resources/resource_format_utils.h" #include "components/viz/common/resources/resource_format_utils.h"
#include "gpu/command_buffer/service/external_vk_image_backing.h" #include "gpu/command_buffer/service/external_vk_image_backing.h"
......
...@@ -217,7 +217,10 @@ GLuint ExternalVkImageGLRepresentationShared::ImportVkSemaphoreIntoGL( ...@@ -217,7 +217,10 @@ GLuint ExternalVkImageGLRepresentationShared::ImportVkSemaphoreIntoGL(
api->glImportSemaphoreZirconHandleANGLEFn( api->glImportSemaphoreZirconHandleANGLEFn(
gl_semaphore, GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE, event.release()); gl_semaphore, GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE, event.release());
return gl_semaphore; return gl_semaphore;
#else // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA) #elif defined(OS_WIN)
NOTIMPLEMENTED();
return 0;
#else
#error Unsupported OS #error Unsupported OS
#endif #endif
} }
......
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
#include "ui/gl/gl_implementation.h" #include "ui/gl/gl_implementation.h"
#include "ui/gl/trace_util.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" #include "gpu/command_buffer/service/external_vk_image_factory.h"
#elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN) #elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN)
#include "gpu/command_buffer/service/external_vk_image_factory.h" #include "gpu/command_buffer/service/external_vk_image_factory.h"
...@@ -95,7 +96,8 @@ SharedImageFactory::SharedImageFactory( ...@@ -95,7 +96,8 @@ SharedImageFactory::SharedImageFactory(
} }
// For X11 // 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_) { if (using_vulkan_) {
interop_backing_factory_ = interop_backing_factory_ =
std::make_unique<ExternalVkImageFactory>(context_state); 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