mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-18 13:54:16 +01:00
[dxvk] Use global user config for backend options
This commit is contained in:
parent
10f7e4d91b
commit
b2c4855490
@ -8,12 +8,13 @@ namespace dxvk {
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const DxvkDeviceExtensions& extensions,
|
||||
const DxvkDeviceFeatures& features)
|
||||
: m_adapter (adapter),
|
||||
: m_options (adapter->instance()->config()),
|
||||
m_adapter (adapter),
|
||||
m_vkd (vkd),
|
||||
m_extensions (extensions),
|
||||
m_features (features),
|
||||
m_properties (adapter->deviceProperties()),
|
||||
m_memory (new DxvkMemoryAllocator (adapter, vkd)),
|
||||
m_memory (new DxvkMemoryAllocator (this)),
|
||||
m_renderPassPool (new DxvkRenderPassPool (vkd)),
|
||||
m_pipelineManager (new DxvkPipelineManager (this)),
|
||||
m_metaClearObjects (new DxvkMetaClearObjects (vkd)),
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "dxvk_image.h"
|
||||
#include "dxvk_memory.h"
|
||||
#include "dxvk_meta_clear.h"
|
||||
#include "dxvk_options.h"
|
||||
#include "dxvk_pipecache.h"
|
||||
#include "dxvk_pipemanager.h"
|
||||
#include "dxvk_queue.h"
|
||||
@ -84,6 +85,14 @@ namespace dxvk {
|
||||
VkDevice handle() const {
|
||||
return m_vkd->device();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Device options
|
||||
* \returns Device options
|
||||
*/
|
||||
const DxvkOptions& config() const {
|
||||
return m_options;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Graphics queue properties
|
||||
@ -371,6 +380,8 @@ namespace dxvk {
|
||||
|
||||
private:
|
||||
|
||||
DxvkOptions m_options;
|
||||
|
||||
Rc<DxvkAdapter> m_adapter;
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
DxvkDeviceExtensions m_extensions;
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include "dxvk_device.h"
|
||||
#include "dxvk_memory.h"
|
||||
|
||||
namespace dxvk {
|
||||
@ -141,12 +142,11 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
DxvkMemoryAllocator::DxvkMemoryAllocator(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd (vkd),
|
||||
m_devProps(adapter->deviceProperties()),
|
||||
m_memProps(adapter->memoryProperties()) {
|
||||
DxvkMemoryAllocator::DxvkMemoryAllocator(const DxvkDevice* device)
|
||||
: m_vkd (device->vkd()),
|
||||
m_devProps (device->adapter()->deviceProperties()),
|
||||
m_memProps (device->adapter()->memoryProperties()),
|
||||
m_allowOvercommit (device->config().allowMemoryOvercommit) {
|
||||
for (uint32_t i = 0; i < m_memProps.memoryHeapCount; i++) {
|
||||
VkDeviceSize heapSize = m_memProps.memoryHeaps[i].size;
|
||||
|
||||
@ -269,7 +269,8 @@ namespace dxvk {
|
||||
VkDeviceSize size,
|
||||
const VkMemoryDedicatedAllocateInfoKHR* dedAllocInfo) {
|
||||
if ((type->memType.propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
|
||||
&& (type->heap->stats.memoryAllocated + size > type->heap->properties.size))
|
||||
&& (type->heap->stats.memoryAllocated + size > type->heap->properties.size)
|
||||
&& (!m_allowOvercommit))
|
||||
return DxvkDeviceMemory();
|
||||
|
||||
DxvkDeviceMemory result;
|
||||
|
@ -213,9 +213,7 @@ namespace dxvk {
|
||||
friend class DxvkMemoryChunk;
|
||||
public:
|
||||
|
||||
DxvkMemoryAllocator(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd);
|
||||
DxvkMemoryAllocator(const DxvkDevice* device);
|
||||
~DxvkMemoryAllocator();
|
||||
|
||||
/**
|
||||
@ -256,6 +254,7 @@ namespace dxvk {
|
||||
const Rc<vk::DeviceFn> m_vkd;
|
||||
const VkPhysicalDeviceProperties m_devProps;
|
||||
const VkPhysicalDeviceMemoryProperties m_memProps;
|
||||
const bool m_allowOvercommit;
|
||||
|
||||
std::mutex m_mutex;
|
||||
std::array<DxvkMemoryHeap, VK_MAX_MEMORY_HEAPS> m_memHeaps;
|
||||
|
10
src/dxvk/dxvk_options.cpp
Normal file
10
src/dxvk/dxvk_options.cpp
Normal file
@ -0,0 +1,10 @@
|
||||
#include "dxvk_options.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkOptions::DxvkOptions(const Config& config) {
|
||||
allowMemoryOvercommit = config.getOption<bool>("dxvk.allowMemoryOvercommit", false);
|
||||
useAsyncPipeCompiler = config.getOption<bool>("dxvk.useAsyncPipeCompiler", false);
|
||||
}
|
||||
|
||||
}
|
18
src/dxvk/dxvk_options.h
Normal file
18
src/dxvk/dxvk_options.h
Normal file
@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "../util/config/config.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
struct DxvkOptions {
|
||||
DxvkOptions(const Config& config);
|
||||
|
||||
/// Allow allocating more memory from
|
||||
/// a heap than the device supports.
|
||||
bool allowMemoryOvercommit;
|
||||
|
||||
/// Enable asynchronous pipeline compilation.
|
||||
bool useAsyncPipeCompiler;
|
||||
};
|
||||
|
||||
}
|
@ -42,8 +42,7 @@ namespace dxvk {
|
||||
: m_device (device),
|
||||
m_cache (new DxvkPipelineCache(device->vkd())),
|
||||
m_compiler(nullptr) {
|
||||
// Async shader compilation is opt-in for now
|
||||
if (env::getEnvVar(L"DXVK_USE_PIPECOMPILER") == "1")
|
||||
if (m_device->config().useAsyncPipeCompiler)
|
||||
m_compiler = new DxvkPipelineCompiler();
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,7 @@ dxvk_src = files([
|
||||
'dxvk_meta_mipgen.cpp',
|
||||
'dxvk_meta_resolve.cpp',
|
||||
'dxvk_openvr.cpp',
|
||||
'dxvk_options.cpp',
|
||||
'dxvk_pipecache.cpp',
|
||||
'dxvk_pipecompiler.cpp',
|
||||
'dxvk_pipelayout.cpp',
|
||||
|
Loading…
x
Reference in New Issue
Block a user