blob: 339826a98230bc6d267578e8d6da156472de2fa9 [file] [log] [blame]
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "gfxstream_vk_entrypoints.h"
#include "gfxstream_vk_private.h"
#include "wsi_common.h"
static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
gfxstream_vk_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char* pName) {
VK_FROM_HANDLE(gfxstream_vk_physical_device, pdevice, physicalDevice);
return vk_instance_get_proc_addr_unchecked(&pdevice->instance->vk, pName);
}
VkResult gfxstream_vk_wsi_init(struct gfxstream_vk_physical_device* physical_device) {
VkResult result = (VkResult)0;
const struct wsi_device_options options = {.sw_device = false};
result = wsi_device_init(
&physical_device->wsi_device, gfxstream_vk_physical_device_to_handle(physical_device),
gfxstream_vk_wsi_proc_addr, &physical_device->instance->vk.alloc, -1, NULL, &options);
if (result != VK_SUCCESS) return result;
// Allow guest-side modifier code paths
physical_device->wsi_device.supports_modifiers = true;
// Support wsi_image_create_info::scanout
physical_device->wsi_device.supports_scanout = true;
physical_device->vk.wsi_device = &physical_device->wsi_device;
return result;
}
void gfxstream_vk_wsi_finish(struct gfxstream_vk_physical_device* physical_device) {
physical_device->vk.wsi_device = NULL;
wsi_device_finish(&physical_device->wsi_device, &physical_device->instance->vk.alloc);
}