[Mesa-dev] [PATCH 6/6] anv: do not open random render node(s)

Emil Velikov emil.l.velikov at gmail.com
Fri Dec 2 18:31:48 UTC 2016


On 2 December 2016 at 17:33, Eric Engestrom <eric.engestrom at imgtec.com> wrote:
> On Friday, 2016-12-02 16:31:49 +0000, Emil Velikov wrote:
>> From: Emil Velikov <emil.velikov at collabora.com>
>>
>> drmGetDevices2() provides us with enough flexibility to build heuristics
>> upon. Opening a random node on the other hand will wake up the device,
>> regardless if it's the one we're intereseted or not.
>
> "interested"
> (same in the previous patch)
>
>>
>> Cc: Jason Ekstrand <jason.ekstrand at intel.com>
>> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
>> ---
>>  src/intel/vulkan/Makefile.am  |  3 ++-
>>  src/intel/vulkan/anv_device.c | 53 +++++++++++++++++++++++++++++++------------
>>  2 files changed, 40 insertions(+), 16 deletions(-)
>>
>> diff --git a/src/intel/vulkan/Makefile.am b/src/intel/vulkan/Makefile.am
>> index df7645f..e309491 100644
>> --- a/src/intel/vulkan/Makefile.am
>> +++ b/src/intel/vulkan/Makefile.am
>> @@ -66,7 +66,7 @@ AM_CPPFLAGS += \
>>  endif
>>
>>  AM_CPPFLAGS += \
>> -     $(INTEL_CFLAGS) \
>> +     $(LIBDRM_CFLAGS) \
>>       $(VALGRIND_CFLAGS) \
>>       $(DEFINES)
>>
>> @@ -131,6 +131,7 @@ VULKAN_LIB_DEPS += \
>>       $(top_builddir)/src/intel/isl/libisl.la \
>>       $(top_builddir)/src/intel/blorp/libblorp.la \
>>       $(PER_GEN_LIBS) \
>> +     $(LIBDRM_LIBS) \
>>       $(PTHREAD_LIBS) \
>>       $(DLOPEN_LIBS) \
>>       -lm
>
> Unrelated -> separate patch?
>
It's related: libvulkan_intel.so does not pull libdrm.so as dependency
(up-to this patch). As we use it below, we ought to add the link here.
Otherwise we'll end up with interment breakage.

Note: libvulkan_radeon.so already depends on libdrm, which is why the
hunk is missing from that patch.

>> diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
>> index d594df7..9927ac2 100644
>> --- a/src/intel/vulkan/anv_device.c
>> +++ b/src/intel/vulkan/anv_device.c
>> @@ -29,6 +29,7 @@
>>  #include <sys/stat.h>
>>  #include <unistd.h>
>>  #include <fcntl.h>
>> +#include <xf86drm.h>
>>
>>  #include "anv_private.h"
>>  #include "util/strtod.h"
>> @@ -375,6 +376,40 @@ void anv_DestroyInstance(
>>     vk_free(&instance->alloc, instance);
>>  }
>>
>> +static VkResult
>> +anv_enumerate_devices(struct anv_instance *instance)
>> +{
>> +   /* TODO: Check for more devices ? */
>> +   drmDevicePtr devices[8];
>> +   VkResult result = VK_SUCCESS;
>> +   int max_devices;
>> +
>> +   max_devices = drmGetDevices2(0, devices, sizeof(devices));
>> +   if (max_devices < 1)
>> +      return VK_ERROR_INCOMPATIBLE_DRIVER;
>> +
>> +   for (unsigned i = 0; i < (unsigned)max_devices; i++) {
>> +      if (devices[i]->available_nodes & 1 << DRM_NODE_RENDER &&
>> +          devices[i]->bustype == DRM_BUS_PCI &&
>> +          devices[i]->deviceinfo.pci->vendor_id == 0x8086) {
>
> Yay, magic values!
> I feel like we should replace all those with PCI_VENDOR_INTEL or something.
>
We have another three instances of these for each Vulkan driver.
Barring any objections I'll do that as cleanup on top ?

Thanks
Emil


More information about the mesa-dev mailing list