diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index 509c79f1758..bdd657f044d 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -547,7 +547,7 @@ static void set_custom_cu_en_mask(struct radeon_info *info) } } -bool ac_query_pci_bus_info(int fd, struct radeon_info *info) +static bool ac_query_pci_bus_info(int fd, struct radeon_info *info) { drmDevicePtr devinfo; @@ -568,7 +568,8 @@ bool ac_query_pci_bus_info(int fd, struct radeon_info *info) return true; } -bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) +bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, + bool require_pci_bus_info) { struct amdgpu_gpu_info amdinfo; struct drm_amdgpu_info_device device_info = {0}; @@ -587,6 +588,11 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) STATIC_ASSERT(AMDGPU_HW_IP_VCN_ENC == AMD_IP_VCN_ENC); STATIC_ASSERT(AMDGPU_HW_IP_VCN_JPEG == AMD_IP_VCN_JPEG); + if (!ac_query_pci_bus_info(fd, info)) { + if (require_pci_bus_info) + return false; + } + assert(info->drm_major == 3); info->is_amdgpu = true; diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h index 0ab58fa951a..41924531bb2 100644 --- a/src/amd/common/ac_gpu_info.h +++ b/src/amd/common/ac_gpu_info.h @@ -274,8 +274,8 @@ struct radeon_info { bool has_fw_based_shadowing; }; -bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info); -bool ac_query_pci_bus_info(int fd, struct radeon_info *info); +bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, + bool require_pci_bus_info); void ac_compute_driver_uuid(char *uuid, size_t size); diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index 8884c13d9fe..b028db7eed9 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -42,7 +42,7 @@ static bool do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) { - if (!ac_query_gpu_info(fd, ws->dev, &ws->info)) + if (!ac_query_gpu_info(fd, ws->dev, &ws->info, true)) return false; /* @@ -57,9 +57,6 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) for (enum amd_ip_type ip_type = AMD_IP_UVD; ip_type <= AMD_IP_VCN_ENC; ip_type++) ws->info.max_submitted_ibs[ip_type] = 1; - if (!ac_query_pci_bus_info(fd, &ws->info)) - return false; - if (ws->info.drm_minor < 27) { fprintf(stderr, "radv/amdgpu: DRM 3.27+ is required (Linux kernel 4.20+)\n"); return false; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index f563b185f76..ca7de277d03 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -75,11 +75,9 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, const struct pipe_screen_config *config, int fd) { - if (!ac_query_gpu_info(fd, ws->dev, &ws->info)) + if (!ac_query_gpu_info(fd, ws->dev, &ws->info, false)) goto fail; - ac_query_pci_bus_info(fd, &ws->info); - /* TODO: Enable this once the kernel handles it efficiently. */ if (ws->info.has_dedicated_vram) ws->info.has_local_buffers = false;