All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH libdrm] xf86drm.c: Use integer logarithm.
@ 2020-10-26 13:11 Paul Gofman
  2020-10-27 23:24 ` Dave Airlie
  2020-10-28  8:18 ` Pekka Paalanen
  0 siblings, 2 replies; 6+ messages in thread
From: Paul Gofman @ 2020-10-26 13:11 UTC (permalink / raw)
  To: dri-devel; +Cc: Paul Gofman

log() is affected by FP control word and can provide inaccurate result.

Fixes Killer Instinct under Wine not being able to find AMD vulkan
device.

Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
---
    With the rounding mode the application sets (unsigned int)log2(4) is 1.
    The log2_int() implemetation is copied from radeon/radeon_surface.c.

 xf86drm.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/xf86drm.c b/xf86drm.c
index 50a6f092..dbb7c14b 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -124,6 +124,22 @@ static drmServerInfoPtr drm_server_info;
 static bool drmNodeIsDRM(int maj, int min);
 static char *drmGetMinorNameForFD(int fd, int type);
 
+static unsigned log2_int(unsigned x)
+{
+    unsigned l;
+
+    if (x < 2) {
+        return 0;
+    }
+    for (l = 2; ; l++) {
+        if ((unsigned)(1 << l) > x) {
+            return l - 1;
+        }
+    }
+    return 0;
+}
+
+
 drm_public void drmSetServerInfo(drmServerInfoPtr info)
 {
     drm_server_info = info;
@@ -4001,7 +4017,7 @@ static void drmFoldDuplicatedDevices(drmDevicePtr local_devices[], int count)
         for (j = i + 1; j < count; j++) {
             if (drmDevicesEqual(local_devices[i], local_devices[j])) {
                 local_devices[i]->available_nodes |= local_devices[j]->available_nodes;
-                node_type = log2(local_devices[j]->available_nodes);
+                node_type = log2_int(local_devices[j]->available_nodes);
                 memcpy(local_devices[i]->nodes[node_type],
                        local_devices[j]->nodes[node_type], drmGetMaxNodeName());
                 drmFreeDevice(&local_devices[j]);
-- 
2.26.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-10-28 10:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-26 13:11 [PATCH libdrm] xf86drm.c: Use integer logarithm Paul Gofman
2020-10-27 23:24 ` Dave Airlie
2020-10-28  8:18 ` Pekka Paalanen
2020-10-28 10:09   ` Paul Gofman
2020-10-28 10:30     ` Michel Dänzer
2020-10-28 10:36       ` Paul Gofman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.