void createDeviceAndQueue(GR_DEVICE& device, GR_QUEUE& universalQueue) { // Find Mantle compatible GPU handles GR_APPLICATION_INFO appInfo = {}; appInfo.apiVersion = GR_API_VERSION; GR_PHYSICAL_GPU gpus[GR_MAX_PHYSICAL_GPUS] = {}; GR_UINT gpuCount = 0; grInitAndEnumerateGpus(&appInfo, nullptr, &gpuCount, gpus); // Create device from first compatible GPU GR_DEVICE_QUEUE_CREATE_INFO queueInfo = {}; queueInfo.queueType = GR_QUEUE_UNIVERSAL; queueInfo.queueCount = 1; assert(grGetExtensionSupport(gpus[0], "GR_WSI_WINDOWS") == GR_SUCCESS); static const GR_CHAR* const ppExtensions[] = { "GR_WSI_WINDOWS", }; GR_DEVICE_CREATE_INFO deviceInfo = {}; deviceInfo.queueRecordCount = 1; deviceInfo.pRequestedQueues = &queueInfo; deviceInfo.extensionCount = 1; deviceInfo.ppEnabledExtensionNames = ppExtensions; deviceInfo.flags |= GR_DEVICE_CREATE_VALIDATION; deviceInfo.maxValidationLevel = GR_VALIDATION_LEVEL_4; grCreateDevice(gpus[0], &deviceInfo, &device); grGetDeviceQueue(device, GR_QUEUE_UNIVERSAL, 0, &universalQueue); }
int main() { SetConsoleTitle(L"Mantle Example"); GR_APPLICATION_INFO appInfo = {}; appInfo.pAppName = "Example"; appInfo.apiVersion = GR_API_VERSION; GR_UINT32 gpuCount; GR_PYSICAL_GPU gpus[GR_MAX_PHYSICAL_GPUS]; GR_RESULT result = grInitAndEnumerateGpus(&appInfo, &gpuCount, &gpuCount, &gpus[0]); if(result == GR_SUCCESS) { printf("GPU Count: %d\n", gpuCount); } else { printf("Error: %d", result); } getchar(); return 0; }