Mesa (master): d3d12: Use ID3D12Device9::CreateCommandQueue1 when available

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Mar 23 22:19:23 UTC 2021


Module: Mesa
Branch: master
Commit: c022c9603d500b59ff5e6f93c8a214d1785ab20a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c022c9603d500b59ff5e6f93c8a214d1785ab20a

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Tue Mar 23 11:00:37 2021 -0700

d3d12: Use ID3D12Device9::CreateCommandQueue1 when available

This lets us provide a creator ID, which lets us tag GLOn12 work
and separate it from other D3D12 work on the same singleton device.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3859
Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9776>

---

 src/gallium/drivers/d3d12/d3d12_screen.cpp | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp
index 4f5af7939df..186a87d6f4b 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp
@@ -45,6 +45,7 @@
 #include <directx/d3d12sdklayers.h>
 
 #include <dxguids/dxguids.h>
+static GUID OpenGLOn12CreatorID = { 0x6bb3cd34, 0x0d19, 0x45ab, 0x97, 0xed, 0xd7, 0x20, 0xba, 0x3d, 0xfc, 0x80 };
 
 static const struct debug_named_value
 d3d12_debug_options[] = {
@@ -965,9 +966,18 @@ d3d12_init_screen(struct d3d12_screen *screen, struct sw_winsys *winsys, IUnknow
    queue_desc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL;
    queue_desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
    queue_desc.NodeMask = 0;
-   if (FAILED(screen->dev->CreateCommandQueue(&queue_desc,
+
+   ID3D12Device9 *device9;
+   if (SUCCEEDED(screen->dev->QueryInterface(&device9))) {
+      if (FAILED(device9->CreateCommandQueue1(&queue_desc, OpenGLOn12CreatorID,
                                               IID_PPV_ARGS(&screen->cmdqueue))))
-      goto failed;
+         goto failed;
+      device9->Release();
+   } else {
+      if (FAILED(screen->dev->CreateCommandQueue(&queue_desc,
+                                                 IID_PPV_ARGS(&screen->cmdqueue))))
+         goto failed;
+   }
 
    UINT64 timestamp_freq;
    if (FAILED(screen->cmdqueue->GetTimestampFrequency(&timestamp_freq)))



More information about the mesa-commit mailing list