I have been using EXT_external_objects extension to do texture sharing cross process. Everything seems working fine until 430.39 on Windows
Our scenario
- GL application renders, and use a Vulcan texture as a bridge with this extension to share the rendered image to another GL application.
This case, it works fine
- Vulkan application renders, and use a Vulcan texture as a bridge with this extension to share the rendered image to another GL application.
In this case, broken image appears on the GL application.
To me, it looks like the memory layout are not agreed with the vulkan/gl.
Thank for the help!
the image configuration on the vulkan bridge image
VkExternalMemoryImageCreateInfoKHR external{};
external.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR;
external.pNext = nullptr;
external.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR;
VkImageCreateInfo image{};
image.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
image.pNext = &externalImageInfo;
image.imageType = VK_IMAGE_TYPE_2D;
image.format = VK_FORMAT_R8G8B8A8_SRGB;
image.extent.width = 1280;
image.extent.height = 960;
image.extent.depth = 1;
image.mipLevels = 1;
image.arrayLayers = 2;
image.samples = VK_SAMPLE_COUNT_1_BIT;
image.tiling = VK_IMAGE_TILING_OPTIMAL;
image.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
image.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
image.queueFamilyIndexCount = 0;
image.pQueueFamilyIndices = nullptr;
image.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
image.flags = 0;
… gl side
glTexStorageMem2DEXT(GL_TEXTURE_2D_ARRAY, 1, GL_SRGB8_ALPHA8, 1280, 960, handle_from_vk_expored, 0);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_TILING_EXT, GL_OPTIMAL_TILING_EXT);