venus: init renderer_info at renderer creation (part 2)

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14658>
This commit is contained in:
Yiwei Zhang 2022-01-29 00:09:14 +00:00 committed by Marge Bot
parent ddba7337c7
commit a76d1e0e74
5 changed files with 34 additions and 48 deletions

View File

@ -104,7 +104,7 @@ vn_instance_init_renderer_versions(struct vn_instance *instance)
/* instance version for internal use is capped */
instance_version = MIN3(instance_version, instance->renderer_api_version,
instance->renderer_info.vk_xml_version);
instance->renderer->info.vk_xml_version);
assert(instance_version >= VN_MIN_RENDERER_VERSION);
instance->renderer_version = instance_version;
@ -177,7 +177,7 @@ vn_instance_get_reply_shmem_locked(struct vn_instance *instance,
static VkResult
vn_instance_init_experimental_features(struct vn_instance *instance)
{
if (instance->renderer_info.vk_mesa_venus_protocol_spec_version !=
if (instance->renderer->info.vk_mesa_venus_protocol_spec_version !=
100000) {
if (VN_DEBUG(INIT))
vn_log(instance, "renderer supports no experimental features");
@ -240,26 +240,25 @@ vn_instance_init_renderer(struct vn_instance *instance)
if (result != VK_SUCCESS)
return result;
vn_renderer_get_info(instance->renderer, &instance->renderer_info);
struct vn_renderer_info *renderer_info = &instance->renderer->info;
uint32_t version = vn_info_wire_format_version();
if (instance->renderer_info.wire_format_version != version) {
if (renderer_info->wire_format_version != version) {
if (VN_DEBUG(INIT)) {
vn_log(instance, "wire format version %d != %d",
instance->renderer_info.wire_format_version, version);
renderer_info->wire_format_version, version);
}
return VK_ERROR_INITIALIZATION_FAILED;
}
version = vn_info_vk_xml_version();
if (instance->renderer_info.vk_xml_version > version)
instance->renderer_info.vk_xml_version = version;
if (instance->renderer_info.vk_xml_version < VN_MIN_RENDERER_VERSION) {
if (renderer_info->vk_xml_version > version)
renderer_info->vk_xml_version = version;
if (renderer_info->vk_xml_version < VN_MIN_RENDERER_VERSION) {
if (VN_DEBUG(INIT)) {
vn_log(instance, "vk xml version %d.%d.%d < %d.%d.%d",
VK_VERSION_MAJOR(instance->renderer_info.vk_xml_version),
VK_VERSION_MINOR(instance->renderer_info.vk_xml_version),
VK_VERSION_PATCH(instance->renderer_info.vk_xml_version),
VK_VERSION_MAJOR(renderer_info->vk_xml_version),
VK_VERSION_MINOR(renderer_info->vk_xml_version),
VK_VERSION_PATCH(renderer_info->vk_xml_version),
VK_VERSION_MAJOR(VN_MIN_RENDERER_VERSION),
VK_VERSION_MINOR(VN_MIN_RENDERER_VERSION),
VK_VERSION_PATCH(VN_MIN_RENDERER_VERSION));
@ -269,34 +268,30 @@ vn_instance_init_renderer(struct vn_instance *instance)
const struct vn_info_extension *ext =
vn_info_extension_get("VK_EXT_command_serialization");
if (instance->renderer_info.vk_ext_command_serialization_spec_version >
if (renderer_info->vk_ext_command_serialization_spec_version >
ext->spec_version) {
instance->renderer_info.vk_ext_command_serialization_spec_version =
renderer_info->vk_ext_command_serialization_spec_version =
ext->spec_version;
}
ext = vn_info_extension_get("VK_MESA_venus_protocol");
if (instance->renderer_info.vk_mesa_venus_protocol_spec_version >
ext->spec_version) {
instance->renderer_info.vk_mesa_venus_protocol_spec_version =
ext->spec_version;
}
if (renderer_info->vk_mesa_venus_protocol_spec_version > ext->spec_version)
renderer_info->vk_mesa_venus_protocol_spec_version = ext->spec_version;
if (VN_DEBUG(INIT)) {
vn_log(instance, "connected to renderer");
vn_log(instance, "wire format version %d",
instance->renderer_info.wire_format_version);
renderer_info->wire_format_version);
vn_log(instance, "vk xml version %d.%d.%d",
VK_VERSION_MAJOR(instance->renderer_info.vk_xml_version),
VK_VERSION_MINOR(instance->renderer_info.vk_xml_version),
VK_VERSION_PATCH(instance->renderer_info.vk_xml_version));
vn_log(
instance, "VK_EXT_command_serialization spec version %d",
instance->renderer_info.vk_ext_command_serialization_spec_version);
VK_VERSION_MAJOR(renderer_info->vk_xml_version),
VK_VERSION_MINOR(renderer_info->vk_xml_version),
VK_VERSION_PATCH(renderer_info->vk_xml_version));
vn_log(instance, "VK_EXT_command_serialization spec version %d",
renderer_info->vk_ext_command_serialization_spec_version);
vn_log(instance, "VK_MESA_venus_protocol spec version %d",
instance->renderer_info.vk_mesa_venus_protocol_spec_version);
renderer_info->vk_mesa_venus_protocol_spec_version);
vn_log(instance, "supports blob id 0: %d",
instance->renderer_info.supports_blob_id_0);
renderer_info->supports_blob_id_0);
}
return VK_SUCCESS;

View File

@ -38,7 +38,6 @@ struct vn_instance {
struct driOptionCache available_dri_options;
struct vn_renderer *renderer;
struct vn_renderer_info renderer_info;
struct vn_renderer_shmem_pool reply_shmem_pool;

View File

@ -669,7 +669,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev)
} else {
/* cap the advertised api version */
uint32_t version = MIN3(props->apiVersion, VN_MAX_API_VERSION,
instance->renderer_info.vk_xml_version);
instance->renderer->info.vk_xml_version);
if (VK_VERSION_PATCH(version) > VK_VERSION_PATCH(props->apiVersion)) {
version = version - VK_VERSION_PATCH(version) +
VK_VERSION_PATCH(props->apiVersion);
@ -745,7 +745,7 @@ vn_physical_device_init_memory_properties(
instance, vn_physical_device_to_handle(physical_dev),
&physical_dev->memory_properties);
if (!instance->renderer_info.has_cache_management) {
if (!instance->renderer->info.has_cache_management) {
VkPhysicalDeviceMemoryProperties *props =
&physical_dev->memory_properties.memoryProperties;
const uint32_t host_flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
@ -781,7 +781,7 @@ vn_physical_device_init_external_memory(
* the extension.
*/
if (!physical_dev->instance->renderer_info.has_dma_buf_import)
if (!physical_dev->instance->renderer->info.has_dma_buf_import)
return;
/* TODO We assume the renderer uses dma-bufs here. This should be
@ -870,7 +870,6 @@ vn_physical_device_get_native_extensions(
struct vk_device_extension_table *exts)
{
const struct vn_instance *instance = physical_dev->instance;
const struct vn_renderer_info *renderer_info = &instance->renderer_info;
const struct vk_device_extension_table *renderer_exts =
&physical_dev->renderer_extensions;
@ -878,7 +877,7 @@ vn_physical_device_get_native_extensions(
/* see vn_physical_device_init_external_memory */
const bool can_external_mem = renderer_exts->EXT_external_memory_dma_buf &&
renderer_info->has_dma_buf_import;
instance->renderer->info.has_dma_buf_import;
#ifdef ANDROID
if (can_external_mem && renderer_exts->EXT_image_drm_format_modifier &&
@ -1102,7 +1101,7 @@ vn_physical_device_init_renderer_version(
/* device version for internal use is capped */
physical_dev->renderer_version =
MIN3(props.apiVersion, instance->renderer_api_version,
instance->renderer_info.vk_xml_version);
instance->renderer->info.vk_xml_version);
return VK_SUCCESS;
}
@ -2027,15 +2026,15 @@ vn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
/* this is used by WSI */
if (physical_dev->instance->renderer_info.pci.has_bus_info) {
if (physical_dev->instance->renderer->info.pci.has_bus_info) {
u.pci_bus_info->pciDomain =
physical_dev->instance->renderer_info.pci.domain;
physical_dev->instance->renderer->info.pci.domain;
u.pci_bus_info->pciBus =
physical_dev->instance->renderer_info.pci.bus;
physical_dev->instance->renderer->info.pci.bus;
u.pci_bus_info->pciDevice =
physical_dev->instance->renderer_info.pci.device;
physical_dev->instance->renderer->info.pci.device;
u.pci_bus_info->pciFunction =
physical_dev->instance->renderer_info.pci.function;
physical_dev->instance->renderer->info.pci.function;
}
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:

View File

@ -377,7 +377,7 @@ vn_QueueSubmit(VkQueue _queue,
if (wsi_mem) {
/* XXX this is always false and kills the performance */
if (dev->instance->renderer_info.has_implicit_fencing) {
if (dev->instance->renderer->info.has_implicit_fencing) {
vn_renderer_submit(dev->renderer, &(const struct vn_renderer_submit){
.bos = &wsi_mem->base_bo,
.bo_count = 1,

View File

@ -251,13 +251,6 @@ vn_renderer_destroy(struct vn_renderer *renderer,
renderer->ops.destroy(renderer, alloc);
}
static inline void
vn_renderer_get_info(struct vn_renderer *renderer,
struct vn_renderer_info *info)
{
*info = renderer->info;
}
static inline VkResult
vn_renderer_submit(struct vn_renderer *renderer,
const struct vn_renderer_submit *submit)