Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link to list of supported games is outdated. #5

Closed
Vinjul1704 opened this issue Oct 18, 2020 · 5 comments · Fixed by #6
Closed

Link to list of supported games is outdated. #5

Vinjul1704 opened this issue Oct 18, 2020 · 5 comments · Fixed by #6

Comments

@Vinjul1704
Copy link

The link ("a few games")
https://en.wikipedia.org/wiki/Category:Video_games_that_support_Mantle
in the readme does not exist anymore and has been changed to
https://en.wikipedia.org/wiki/Category:Video_games_that_support_Mantle_(API)

@oscarbg
Copy link

oscarbg commented Jan 28, 2021

would be nice to start offering eventually a list of which of this Mantle games work with GRVK..
I would love to be able to run Battlefield 4 and Thief via GRVK as these were the ones I tried Mantle on a 7950 GPU few years ago :-)..

@sehraf
Copy link

sehraf commented Jan 28, 2021

At time I can say that the following crash with the same error (can't remember it right now, something with wsi if I'm not mistaken)

  • Thief
  • Sniper Elite 3
  • Star Swarm benchmark

EDIT:

=== GRVK 0.2.0 ===
I/grInitAndEnumerateGpus: app "Star Swarm" (00000002), engine "Nitrous by Oxide Games" (00000002), api 00000001
W/grInitAndEnumerateGpus: unhandled alloc callbacks
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
W/grGetExtensionSupport: STUB
I/grCreateDevice: 10DE:1F08 "GeForce RTX 2060" (Vulkan 1.2.155, driver 460.39.0)
W/grWsiWinGetDisplays: STUB
wine: Unhandled page fault on read access to FFFFFFFFFFFFFFFF at address 0000000070BC8981 (thread 00f8), starting debugger...

@oscarbg
Copy link

oscarbg commented Jan 28, 2021

thanks for sharing current status..
hope wsi issue can be resolved without much work and guess then unmerged features of #7 may help also, right?

@libcg
Copy link
Owner

libcg commented Jan 28, 2021

No games are expected to work at this moment. I'm working towards getting Star Swarm to run first, but it could take months.

@sehraf
Copy link

sehraf commented Feb 9, 2021

(off topic)

FWIW you can stop Star Swarm from crashing by returning 0 displays in grWsiWinGetDisplays. Additionally it tries to access a weird (and invalid) address in grGetMemoryHeapInfo once.

With this dirty hack it stops crashing on my system. It doesn't render anything (obvious).

diff --git a/src/mantle/mantle_memory_man.c b/src/mantle/mantle_memory_man.c
index 744d575..1d0d056 100644
--- a/src/mantle/mantle_memory_man.c
+++ b/src/mantle/mantle_memory_man.c
@@ -34,7 +34,7 @@ GR_RESULT grGetMemoryHeapInfo(
     LOGT("%p %u 0x%X %p %p\n", device, heapId, infoType, pDataSize, pData);
     GrDevice* grDevice = (GrDevice*)device;
 
-    if (grDevice == NULL) {
+    if (grDevice == NULL || grDevice == (GrDevice *)0x0000000001182b60) {
         return GR_ERROR_INVALID_HANDLE;
     } else if (grDevice->sType != GR_STRUCT_TYPE_DEVICE) {
         return GR_ERROR_INVALID_OBJECT_TYPE;
diff --git a/src/mantle/mantle_wsi.c b/src/mantle/mantle_wsi.c
index c43fa23..eb7b2b3 100644
--- a/src/mantle/mantle_wsi.c
+++ b/src/mantle/mantle_wsi.c
@@ -484,3 +484,59 @@ fail_present:
     }
     return GR_ERROR_UNKNOWN;
 }
+
+GR_RESULT grWsiWinGetDisplays(
+    GR_DEVICE device,
+    GR_UINT *pDisplayCount,
+    GR_WSI_WIN_DISPLAY *pDisplayList)
+{
+    LOGT("%p %p %p\n", device, pDisplayCount, pDisplayList);
+
+    GrDevice *grDevice = (GrDevice *)device;
+    VkResult vkRes;
+
+    if (grDevice == NULL)
+        return GR_ERROR_INVALID_HANDLE;
+    if (grDevice->sType != GR_STRUCT_TYPE_DEVICE)
+        return GR_ERROR_INVALID_OBJECT_TYPE;
+    if (pDisplayCount == NULL)
+        return GR_ERROR_INVALID_POINTER;
+    if (*pDisplayCount != 0 && !pDisplayList)
+        return GR_ERROR_INVALID_MEMORY_SIZE;
+
+    // uint32_t pPropertyCount;
+    // vkRes = vki.vkGetPhysicalDeviceDisplayPropertiesKHR(grDevice->physicalDevice, &pPropertyCount, NULL);
+    // if (vkRes != VK_SUCCESS)
+    //     return GR_ERROR_INVALID_HANDLE;
+    // // LOGW("got %d / %d displays\n", pPropertyCount, *pDisplayCount);
+
+    // VkDisplayPropertiesKHR *pProperties = malloc(sizeof(VkDisplayPropertiesKHR) * pPropertyCount);
+    // vkRes = vki.vkGetPhysicalDeviceDisplayPropertiesKHR(grDevice->physicalDevice, &pPropertyCount, pProperties);
+    // if (vkRes != VK_SUCCESS)
+    //     return GR_ERROR_INVALID_HANDLE;
+
+    // for (int i = 0; i < *pDisplayCount; i++)
+    // {
+    //     LOGW(" - %s\n", pProperties[i].displayName);
+    // }
+
+    // VkDisplayPropertiesKHR *pProperties = malloc(sizeof(VkDisplayPropertiesKHR));
+    // memset(pProperties, 0xdeadbeef, sizeof(VkDisplayPropertiesKHR));
+    // pProperties->displayName = malloc(5);
+    // memcpy(pProperties->displayName, "fake\0", 5);
+    // pProperties->physicalDimensions.height = 100;
+    // pProperties->physicalDimensions.width = 100;
+    // pProperties->physicalResolution.width = 1920;
+    // pProperties->physicalResolution.height = 1080;
+
+    // LOGW("%p\n", pProperties);
+
+    // *pDisplayCount = 1;
+    // pDisplayList[0] = (GR_WSI_WIN_DISPLAY *)pProperties;
+
+    *pDisplayCount = 0;
+    pDisplayList[0] = 0;
+    return GR_SUCCESS;
+
+    // return GR_UNSUPPORTED;
+}
\ No newline at end of file
diff --git a/src/mantle/stub.c b/src/mantle/stub.c
index fdf4e25..eb66f73 100644
--- a/src/mantle/stub.c
+++ b/src/mantle/stub.c
@@ -340,14 +340,14 @@ GR_VOID GR_STDCALL grCmdDbgMarkerEnd(
 
 // WSI Functions
 
-GR_RESULT grWsiWinGetDisplays(
-    GR_DEVICE device,
-    GR_UINT* pDisplayCount,
-    GR_WSI_WIN_DISPLAY* pDisplayList)
-{
-    LOGW("STUB\n");
-    return GR_UNSUPPORTED;
-}
+// GR_RESULT grWsiWinGetDisplays(
+//     GR_DEVICE device,
+//     GR_UINT* pDisplayCount,
+//     GR_WSI_WIN_DISPLAY* pDisplayList)
+// {
+//     LOGW("STUB\n");
+//     return GR_UNSUPPORTED;
+// }
 
 GR_RESULT grWsiWinGetDisplayModeList(
     GR_WSI_WIN_DISPLAY display,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants