dotexe.cf

VKD3D versions up to (and including) 2.6 can work in an unmodified Windows 7 system, as they only utilize Vulkan extensions implemented in the last official AMD or nVidia drivers for the OS. However, VKD3D will normally crash at startup. This can be fixed with a slight modification to the code:

BEFORE:

(libs\vkd3d\memory.c)

...
	if (FAILED(hr) && (type_flags & optional_flags))
	{
		if (vkd3d_memory_info_type_mask_covers_multiple_memory_heaps(&device->memory_properties, type_mask))
		{
			WARN("Memory allocation failed, falling back to system memory.\n");
			hr = vkd3d_try_allocate_device_memory(device, size,
					type_flags & ~optional_flags, type_mask, pNext, allocation);
		}
		else if (device->memory_properties.memoryHeapCount > 1)
		{
			/* It might be the case (NV with RT/DS heap) that we just cannot fall back in any meaningful way.
			 * E.g. there exists no memory type that is not DEVICE_LOCAL and covers both RT and DS.
			 * For this case, we have no choice but to not allocate,
			 * and defer actual memory allocation to CreatePlacedResource() time.
			 * NVIDIA bug reference for fixing this case: 2175829. */
			WARN("Memory allocation failed, but it is not possible to fallback to system memory here. Deferring allocation.\n");
			return hr;
		}

		/* If we fail to allocate, and only have one heap to work with (iGPU),
		 * falling back is meaningless, just fail. */
	}
...

AFTER:

(libs\vkd3d\memory.c)

...
	// Modified to fix crashing bug on Win7 ~ .exe $ 1337
	if (FAILED(hr) && (type_flags & optional_flags))
	{
		WARN("Memory allocation failed, but it is not possible to fallback to system memory here. Deferring allocation.\n");
		hr = vkd3d_try_allocate_device_memory(device, size, type_flags & ~optional_flags, type_mask, pNext, allocation);
	}
...