kopper: Add support for OHOS

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
This commit is contained in:
Christian Gmeiner 2025-02-28 22:09:46 +01:00
parent cd5048db24
commit 375c838984
3 changed files with 39 additions and 6 deletions

View file

@ -18,7 +18,7 @@
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
#
# Authors:
# Hoe Hao Cheng <haochengho12907@gmail.com>
#
@ -49,6 +49,7 @@ EXTENSIONS = [
Extension("VK_KHR_xcb_surface"),
Extension("VK_KHR_win32_surface"),
Extension("VK_EXT_swapchain_colorspace"),
Extension("VK_OHOS_surface"),
]
if platform.system() == "Darwin":
@ -139,7 +140,7 @@ zink_create_instance(struct zink_screen *screen, struct zink_instance_info *inst
/* reserve one slot for MoltenVK */
const char *layers[${len(layers) + 1}] = {0};
uint32_t num_layers = 0;
const char *extensions[${len(extensions) + 1}] = {0};
uint32_t num_extensions = 0;
@ -361,7 +362,7 @@ zink_verify_instance_extensions(struct zink_screen *screen)
def replace_code(code: str, replacement: dict):
for (k, v) in replacement.items():
code = code.replace(k, v)
return code
@ -395,7 +396,7 @@ if __name__ == "__main__":
error_count += 1
print("The extension {} is not registered in vk.xml - a typo?".format(ext.name))
continue
entry = registry.get_registry_entry(ext.name)
if entry.ext_type != "instance":
@ -407,7 +408,7 @@ if __name__ == "__main__":
ext.core_since = Version((*entry.promoted_in, 0))
if entry.platform_guard:
ext.platform_guard = entry.platform_guard
ext.platform_guard = entry.platform_guard
if error_count > 0:
print("zink_instance.py: Found {} error(s) in total. Quitting.".format(error_count))

View file

@ -79,6 +79,11 @@ init_dt_type(struct kopper_displaytarget *cdt)
case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:
cdt->type = KOPPER_WIN32;
break;
#endif
#ifdef VK_USE_PLATFORM_OHOS
case VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS:
cdt->type = KOPPER_OHOS;
break;
#endif
default:
UNREACHABLE("unsupported!");
@ -118,6 +123,13 @@ kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cd
error = VKSCR(CreateWin32SurfaceKHR)(screen->instance, win32, NULL, &surface);
break;
}
#endif
#ifdef VK_USE_PLATFORM_OHOS
case VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS: {
VkSurfaceCreateInfoOHOS *sci = (VkSurfaceCreateInfoOHOS *)&cdt->info.bos;
error = VKSCR(CreateSurfaceOHOS)(screen->instance, sci, NULL, &surface);
break;
}
#endif
default:
UNREACHABLE("unsupported!");
@ -234,6 +246,13 @@ find_dt_entry(struct zink_screen *screen, const struct kopper_displaytarget *cdt
he = _mesa_hash_table_search(&screen->dts, win32->hwnd);
break;
}
#endif
#ifdef VK_USE_PLATFORM_OHOS
case KOPPER_OHOS: {
VkSurfaceCreateInfoOHOS *sci = (VkSurfaceCreateInfoOHOS *)&cdt->info.bos;
he = _mesa_hash_table_search(&screen->dts, sci->window);
break;
}
#endif
default:
UNREACHABLE("unsupported!");
@ -340,6 +359,10 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *
cswap->scci.imageExtent.width = w;
cswap->scci.imageExtent.height = h;
break;
case KOPPER_OHOS:
cswap->scci.imageExtent.width = w;
cswap->scci.imageExtent.height = h;
break;
default:
UNREACHABLE("unknown display platform");
}
@ -444,6 +467,7 @@ zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
break;
case KOPPER_WAYLAND:
case KOPPER_WIN32:
case KOPPER_OHOS:
_mesa_hash_table_init(&screen->dts, screen, _mesa_hash_pointer, _mesa_key_pointer_equal);
break;
default:
@ -515,6 +539,13 @@ zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
_mesa_hash_table_insert(&screen->dts, win32->hwnd, cdt);
break;
}
#endif
#ifdef VK_USE_PLATFORM_OHOS
case KOPPER_OHOS: {
VkSurfaceCreateInfoOHOS *sci = (VkSurfaceCreateInfoOHOS *)&cdt->info.bos;
_mesa_hash_table_insert(&screen->dts, sci->window, cdt);
break;
}
#endif
default:
UNREACHABLE("unsupported!");

View file

@ -74,7 +74,8 @@ struct kopper_swapchain {
enum kopper_type {
KOPPER_X11,
KOPPER_WAYLAND,
KOPPER_WIN32
KOPPER_WIN32,
KOPPER_OHOS,
};
struct kopper_displaytarget