mirror of https://github.com/doitsujin/dxvk
Compare commits
20 Commits
Author | SHA1 | Date |
---|---|---|
Philip Rebohle | 40e4ea1fce | |
Philip Rebohle | 7d2c2207fa | |
Robin Kertels | 2c40d49337 | |
Blisto91 | 5f67d0fc89 | |
Philip Rebohle | 05416c3731 | |
Philip Rebohle | 8513ab4d77 | |
Matej Dian | 74abd7b525 | |
Blisto91 | 6a33c5d4f0 | |
Philip Rebohle | 310d70bbf8 | |
Blisto91 | e37bdcf348 | |
Philip Rebohle | aaf0db4c79 | |
Trevonn | 653f00d846 | |
Georg Lehmann | 96b3897fd9 | |
Georg Lehmann | b40a4286e4 | |
Georg Lehmann | cb76b02675 | |
Georg Lehmann | 33f83e9561 | |
Georg Lehmann | 11b94088ad | |
WinterSnowfall | 7ae6564e0d | |
Philip Rebohle | 2f6306815e | |
Philip Rebohle | d1f57e13b7 |
10
dxvk.conf
10
dxvk.conf
|
@ -548,6 +548,16 @@
|
|||
|
||||
# d3d9.apitraceMode = False
|
||||
|
||||
# Seamless Cubes
|
||||
#
|
||||
# Don't use non seamless cube maps even if they are supported.
|
||||
# Non seamless cubes are correct d3d9 behavior, but can produce worse looking edges.
|
||||
#
|
||||
# Supported values:
|
||||
# - True/False
|
||||
|
||||
# d3d9.seamlessCubes = False
|
||||
|
||||
# Debug Utils
|
||||
#
|
||||
# Enables debug utils as this is off by default, this enables user annotations like BeginEvent()/EndEvent().
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
project('dxvk', ['c', 'cpp'], version : 'v1.10.1', meson_version : '>= 0.49', default_options : [ 'cpp_std=c++17' ])
|
||||
project('dxvk', ['c', 'cpp'], version : 'v1.10.2', meson_version : '>= 0.49', default_options : [ 'cpp_std=c++17' ])
|
||||
|
||||
cpu_family = target_machine.cpu_family()
|
||||
|
||||
|
|
|
@ -4434,6 +4434,13 @@ namespace dxvk {
|
|||
if (curView->imageInfo().sampleCount
|
||||
!= refView->imageInfo().sampleCount)
|
||||
return false;
|
||||
|
||||
VkExtent3D curExtent = curView->mipLevelExtent(0);
|
||||
VkExtent3D refExtent = refView->mipLevelExtent(0);
|
||||
|
||||
if (curExtent.width != refExtent.width
|
||||
|| curExtent.height != refExtent.height)
|
||||
return false;
|
||||
} else {
|
||||
// Set reference view. All remaining views
|
||||
// must be compatible to the reference view.
|
||||
|
|
|
@ -38,6 +38,7 @@ namespace dxvk {
|
|||
info.borderColor.float32[i] = desc.BorderColor[i];
|
||||
|
||||
info.usePixelCoord = VK_FALSE; // Not supported in D3D11
|
||||
info.nonSeamless = VK_FALSE;
|
||||
|
||||
// Make sure to use a valid anisotropy value
|
||||
if (desc.MaxAnisotropy < 1) info.maxAnisotropy = 1.0f;
|
||||
|
|
|
@ -365,6 +365,7 @@ namespace dxvk {
|
|||
samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS;
|
||||
samplerInfo.borderColor = VkClearColorValue();
|
||||
samplerInfo.usePixelCoord = VK_FALSE;
|
||||
samplerInfo.nonSeamless = VK_FALSE;
|
||||
m_sampler = Device->createSampler(samplerInfo);
|
||||
|
||||
DxvkBufferCreateInfo bufferInfo;
|
||||
|
|
|
@ -236,7 +236,8 @@ namespace dxvk {
|
|||
D3DDEVTYPE DeviceType,
|
||||
D3D9Format SourceFormat,
|
||||
D3D9Format TargetFormat) {
|
||||
bool sourceSupported = IsSupportedBackBufferFormat(D3D9Format::Unknown, SourceFormat, TRUE);
|
||||
bool sourceSupported = SourceFormat != D3D9Format::Unknown
|
||||
&& IsSupportedBackBufferFormat(SourceFormat);
|
||||
bool targetSupported = TargetFormat == D3D9Format::X1R5G5B5
|
||||
|| TargetFormat == D3D9Format::A1R5G5B5
|
||||
|| TargetFormat == D3D9Format::R5G6B5
|
||||
|
|
|
@ -134,7 +134,7 @@ namespace dxvk {
|
|||
if (pDesc->Width == 0 || pDesc->Height == 0 || pDesc->Depth == 0)
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
||||
if (FAILED(DecodeMultiSampleType(pDesc->MultiSample, pDesc->MultisampleQuality, nullptr)))
|
||||
if (FAILED(DecodeMultiSampleType(pDevice->GetDXVKDevice(), pDesc->MultiSample, pDesc->MultisampleQuality, nullptr)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
||||
// Using MANAGED pool with DYNAMIC usage is illegal
|
||||
|
@ -258,7 +258,7 @@ namespace dxvk {
|
|||
imageInfo.stages |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
DecodeMultiSampleType(m_desc.MultiSample, m_desc.MultisampleQuality, &imageInfo.sampleCount);
|
||||
DecodeMultiSampleType(m_device->GetDXVKDevice(), m_desc.MultiSample, m_desc.MultisampleQuality, &imageInfo.sampleCount);
|
||||
|
||||
// The image must be marked as mutable if it can be reinterpreted
|
||||
// by a view with a different format. Depth-stencil formats cannot
|
||||
|
|
|
@ -1066,7 +1066,7 @@ namespace dxvk {
|
|||
ctx->resolveDepthStencilImage(
|
||||
cDstImage, cSrcImage, cRegion,
|
||||
VK_RESOLVE_MODE_AVERAGE_BIT_KHR,
|
||||
VK_RESOLVE_MODE_AVERAGE_BIT_KHR);
|
||||
VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -3947,6 +3947,8 @@ namespace dxvk {
|
|||
enabled.extCustomBorderColor.customBorderColorWithoutFormat = VK_TRUE;
|
||||
}
|
||||
|
||||
enabled.extNonSeamlessCubeMap.nonSeamlessCubeMap = supported.extNonSeamlessCubeMap.nonSeamlessCubeMap;
|
||||
|
||||
return enabled;
|
||||
}
|
||||
|
||||
|
@ -5952,6 +5954,7 @@ namespace dxvk {
|
|||
info.mipmapLodMin = mipFilter.MipsEnabled ? float(cKey.MaxMipLevel) : 0;
|
||||
info.mipmapLodMax = mipFilter.MipsEnabled ? FLT_MAX : 0;
|
||||
info.usePixelCoord = VK_FALSE;
|
||||
info.nonSeamless = m_dxvkDevice->features().extNonSeamlessCubeMap.nonSeamlessCubeMap && !m_d3d9Options.seamlessCubes;
|
||||
|
||||
DecodeD3DCOLOR(cKey.BorderColor, info.borderColor.float32);
|
||||
|
||||
|
@ -6955,7 +6958,7 @@ namespace dxvk {
|
|||
const D3D9_COMMON_TEXTURE_DESC* dstDesc = dstTextureInfo->Desc();
|
||||
|
||||
VkSampleCountFlagBits dstSampleCount;
|
||||
DecodeMultiSampleType(dstDesc->MultiSample, dstDesc->MultisampleQuality, &dstSampleCount);
|
||||
DecodeMultiSampleType(m_dxvkDevice, dstDesc->MultiSample, dstDesc->MultisampleQuality, &dstSampleCount);
|
||||
|
||||
if (unlikely(dstSampleCount != VK_SAMPLE_COUNT_1_BIT)) {
|
||||
Logger::warn("D3D9DeviceEx::ResolveZ: dstSampleCount != 1. Discarding.");
|
||||
|
@ -6987,7 +6990,7 @@ namespace dxvk {
|
|||
srcSubresource.arrayLayer, 1 };
|
||||
|
||||
VkSampleCountFlagBits srcSampleCount;
|
||||
DecodeMultiSampleType(srcDesc->MultiSample, srcDesc->MultisampleQuality, &srcSampleCount);
|
||||
DecodeMultiSampleType(m_dxvkDevice, srcDesc->MultiSample, srcDesc->MultisampleQuality, &srcSampleCount);
|
||||
|
||||
if (srcSampleCount == VK_SAMPLE_COUNT_1_BIT) {
|
||||
EmitCs([
|
||||
|
|
|
@ -57,7 +57,8 @@ namespace dxvk {
|
|||
|| BackBufferFormat == D3D9Format::X8R8G8B8
|
||||
|| BackBufferFormat == D3D9Format::A1R5G5B5
|
||||
|| BackBufferFormat == D3D9Format::X1R5G5B5
|
||||
|| BackBufferFormat == D3D9Format::R5G6B5;
|
||||
|| BackBufferFormat == D3D9Format::R5G6B5
|
||||
|| BackBufferFormat == D3D9Format::Unknown;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ namespace dxvk {
|
|||
this->apitraceMode = config.getOption<bool> ("d3d9.apitraceMode", false);
|
||||
this->deviceLocalConstantBuffers = config.getOption<bool> ("d3d9.deviceLocalConstantBuffers", false);
|
||||
this->allowDirectBufferMapping = config.getOption<bool> ("d3d9.allowDirectBufferMapping", true);
|
||||
this->seamlessCubes = config.getOption<bool> ("d3d9.seamlessCubes", false);
|
||||
|
||||
// If we are not Nvidia, enable general hazards.
|
||||
this->generalHazards = adapter != nullptr
|
||||
|
|
|
@ -157,6 +157,9 @@ namespace dxvk {
|
|||
|
||||
/// Disable direct buffer mapping
|
||||
bool allowDirectBufferMapping;
|
||||
|
||||
/// Don't use non seamless cube maps
|
||||
bool seamlessCubes;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -333,7 +333,7 @@ namespace dxvk {
|
|||
D3D9CommonTexture* dstTexInfo = dst->GetCommonTexture();
|
||||
D3D9CommonTexture* srcTexInfo = m_backBuffers.back()->GetCommonTexture();
|
||||
|
||||
if (unlikely(dstTexInfo->Desc()->Pool != D3DPOOL_SYSTEMMEM))
|
||||
if (unlikely(dstTexInfo->Desc()->Pool != D3DPOOL_SYSTEMMEM && dstTexInfo->Desc()->Pool != D3DPOOL_SCRATCH))
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
||||
Rc<DxvkBuffer> dstBuffer = dstTexInfo->GetBuffer(dst->GetSubresource());
|
||||
|
|
|
@ -37,9 +37,10 @@ namespace dxvk {
|
|||
|
||||
|
||||
HRESULT DecodeMultiSampleType(
|
||||
const Rc<DxvkDevice>& pDevice,
|
||||
D3DMULTISAMPLE_TYPE MultiSample,
|
||||
DWORD MultisampleQuality,
|
||||
VkSampleCountFlagBits* pCount) {
|
||||
VkSampleCountFlagBits* pSampleCount) {
|
||||
uint32_t sampleCount = std::max<uint32_t>(MultiSample, 1u);
|
||||
|
||||
// Check if this is a power of two...
|
||||
|
@ -49,8 +50,14 @@ namespace dxvk {
|
|||
if (MultiSample == D3DMULTISAMPLE_NONMASKABLE)
|
||||
sampleCount = 1u << MultisampleQuality;
|
||||
|
||||
if (pCount != nullptr)
|
||||
*pCount = VkSampleCountFlagBits(sampleCount);
|
||||
const auto& limits = pDevice->properties().core.properties.limits;
|
||||
VkSampleCountFlags supportedSampleCounts = limits.framebufferColorSampleCounts & limits.framebufferDepthSampleCounts;
|
||||
|
||||
while (sampleCount > supportedSampleCounts)
|
||||
sampleCount >>= 1;
|
||||
|
||||
if (pSampleCount)
|
||||
*pSampleCount = VkSampleCountFlagBits(sampleCount);
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
|
|
@ -95,9 +95,10 @@ namespace dxvk {
|
|||
ID3DBlob** ppDisassembly);
|
||||
|
||||
HRESULT DecodeMultiSampleType(
|
||||
D3DMULTISAMPLE_TYPE MultiSample,
|
||||
DWORD MultisampleQuality,
|
||||
VkSampleCountFlagBits* pCount);
|
||||
const Rc<DxvkDevice>& pDevice,
|
||||
D3DMULTISAMPLE_TYPE MultiSample,
|
||||
DWORD MultisampleQuality,
|
||||
VkSampleCountFlagBits* pSampleCount);
|
||||
|
||||
VkFormat GetPackedDepthStencilFormat(D3D9Format Format);
|
||||
|
||||
|
|
|
@ -238,6 +238,8 @@ namespace dxvk {
|
|||
|| !required.extHostQueryReset.hostQueryReset)
|
||||
&& (m_deviceFeatures.extMemoryPriority.memoryPriority
|
||||
|| !required.extMemoryPriority.memoryPriority)
|
||||
&& (m_deviceFeatures.extNonSeamlessCubeMap.nonSeamlessCubeMap
|
||||
|| !required.extNonSeamlessCubeMap.nonSeamlessCubeMap)
|
||||
&& (m_deviceFeatures.extRobustness2.robustBufferAccess2
|
||||
|| !required.extRobustness2.robustBufferAccess2)
|
||||
&& (m_deviceFeatures.extRobustness2.robustImageAccess2
|
||||
|
@ -263,7 +265,7 @@ namespace dxvk {
|
|||
DxvkDeviceFeatures enabledFeatures) {
|
||||
DxvkDeviceExtensions devExtensions;
|
||||
|
||||
std::array<DxvkExt*, 29> devExtensionList = {{
|
||||
std::array<DxvkExt*, 30> devExtensionList = {{
|
||||
&devExtensions.amdMemoryOverallocationBehaviour,
|
||||
&devExtensions.amdShaderFragmentMask,
|
||||
&devExtensions.ext4444Formats,
|
||||
|
@ -275,6 +277,7 @@ namespace dxvk {
|
|||
&devExtensions.extHostQueryReset,
|
||||
&devExtensions.extMemoryBudget,
|
||||
&devExtensions.extMemoryPriority,
|
||||
&devExtensions.extNonSeamlessCubeMap,
|
||||
&devExtensions.extRobustness2,
|
||||
&devExtensions.extShaderDemoteToHelperInvocation,
|
||||
&devExtensions.extShaderStencilExport,
|
||||
|
@ -377,6 +380,11 @@ namespace dxvk {
|
|||
enabledFeatures.extMemoryPriority.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extMemoryPriority);
|
||||
}
|
||||
|
||||
if (devExtensions.extNonSeamlessCubeMap) {
|
||||
enabledFeatures.extNonSeamlessCubeMap.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT;
|
||||
enabledFeatures.extNonSeamlessCubeMap.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extNonSeamlessCubeMap);
|
||||
}
|
||||
|
||||
if (devExtensions.extShaderDemoteToHelperInvocation) {
|
||||
enabledFeatures.extShaderDemoteToHelperInvocation.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
|
||||
enabledFeatures.extShaderDemoteToHelperInvocation.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extShaderDemoteToHelperInvocation);
|
||||
|
@ -682,6 +690,11 @@ namespace dxvk {
|
|||
m_deviceFeatures.extMemoryPriority.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extMemoryPriority);
|
||||
}
|
||||
|
||||
if (m_deviceExtensions.supports(VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME)) {
|
||||
m_deviceFeatures.extNonSeamlessCubeMap.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT;
|
||||
m_deviceFeatures.extNonSeamlessCubeMap.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extNonSeamlessCubeMap);
|
||||
}
|
||||
|
||||
if (m_deviceExtensions.supports(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)) {
|
||||
m_deviceFeatures.extRobustness2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
|
||||
m_deviceFeatures.extRobustness2.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extRobustness2);
|
||||
|
@ -787,6 +800,8 @@ namespace dxvk {
|
|||
"\n hostQueryReset : ", features.extHostQueryReset.hostQueryReset ? "1" : "0",
|
||||
"\n", VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME,
|
||||
"\n memoryPriority : ", features.extMemoryPriority.memoryPriority ? "1" : "0",
|
||||
"\n", VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME,
|
||||
"\n nonSeamlessCubeMap : ", features.extNonSeamlessCubeMap.nonSeamlessCubeMap ? "1" : "0",
|
||||
"\n", VK_EXT_ROBUSTNESS_2_EXTENSION_NAME,
|
||||
"\n robustBufferAccess2 : ", features.extRobustness2.robustBufferAccess2 ? "1" : "0",
|
||||
"\n robustImageAccess2 : ", features.extRobustness2.robustImageAccess2 ? "1" : "0",
|
||||
|
|
|
@ -43,6 +43,7 @@ namespace dxvk {
|
|||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extExtendedDynamicState;
|
||||
VkPhysicalDeviceHostQueryResetFeaturesEXT extHostQueryReset;
|
||||
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
|
||||
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;
|
||||
VkPhysicalDeviceRobustness2FeaturesEXT extRobustness2;
|
||||
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT extShaderDemoteToHelperInvocation;
|
||||
VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback;
|
||||
|
|
|
@ -287,6 +287,7 @@ namespace dxvk {
|
|||
DxvkExt extHostQueryReset = { VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
DxvkExt extMemoryBudget = { VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, DxvkExtMode::Passive };
|
||||
DxvkExt extMemoryPriority = { VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
DxvkExt extNonSeamlessCubeMap = { VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
DxvkExt extRobustness2 = { VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
DxvkExt extShaderDemoteToHelperInvocation = { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
|
|
|
@ -128,7 +128,7 @@ namespace dxvk {
|
|||
appInfo.pApplicationName = appName.c_str();
|
||||
appInfo.applicationVersion = 0;
|
||||
appInfo.pEngineName = "DXVK";
|
||||
appInfo.engineVersion = VK_MAKE_VERSION(1, 10, 1);
|
||||
appInfo.engineVersion = VK_MAKE_VERSION(1, 10, 2);
|
||||
appInfo.apiVersion = VK_MAKE_VERSION(1, 1, 0);
|
||||
|
||||
VkInstanceCreateInfo info;
|
||||
|
|
|
@ -2,25 +2,4 @@
|
|||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkPipelineCache::DxvkPipelineCache(
|
||||
const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd) {
|
||||
VkPipelineCacheCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.initialDataSize = 0;
|
||||
info.pInitialData = nullptr;
|
||||
|
||||
if (m_vkd->vkCreatePipelineCache(m_vkd->device(),
|
||||
&info, nullptr, &m_handle) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkPipelineCache: Failed to create cache");
|
||||
}
|
||||
|
||||
|
||||
DxvkPipelineCache::~DxvkPipelineCache() {
|
||||
m_vkd->vkDestroyPipelineCache(
|
||||
m_vkd->device(), m_handle, nullptr);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,22 +22,16 @@ namespace dxvk {
|
|||
|
||||
public:
|
||||
|
||||
DxvkPipelineCache(const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkPipelineCache();
|
||||
DxvkPipelineCache(const Rc<vk::DeviceFn>& vkd) { }
|
||||
|
||||
/**
|
||||
* \brief Pipeline cache handle
|
||||
* \returns Pipeline cache handle
|
||||
*/
|
||||
VkPipelineCache handle() const {
|
||||
return m_handle;
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
VkPipelineCache m_handle;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace dxvk {
|
|||
VkSamplerCreateInfo samplerInfo;
|
||||
samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
samplerInfo.pNext = nullptr;
|
||||
samplerInfo.flags = 0;
|
||||
samplerInfo.flags = info.nonSeamless ? VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT : 0;
|
||||
samplerInfo.magFilter = info.magFilter;
|
||||
samplerInfo.minFilter = info.minFilter;
|
||||
samplerInfo.mipmapMode = info.mipmapMode;
|
||||
|
|
|
@ -38,6 +38,9 @@ namespace dxvk {
|
|||
|
||||
/// Enables unnormalized coordinates
|
||||
VkBool32 usePixelCoord;
|
||||
|
||||
/// Enables non seamless cube map filtering
|
||||
VkBool32 nonSeamless;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -962,8 +962,8 @@ namespace dxvk {
|
|||
m_writerQueue.pop();
|
||||
}
|
||||
|
||||
if (!file) {
|
||||
file = std::ofstream(getCacheFileName().c_str(),
|
||||
if (!file.is_open()) {
|
||||
file.open(getCacheFileName().c_str(),
|
||||
std::ios_base::binary |
|
||||
std::ios_base::app);
|
||||
}
|
||||
|
|
|
@ -302,6 +302,7 @@ namespace dxvk {
|
|||
samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS;
|
||||
samplerInfo.borderColor = VkClearColorValue();
|
||||
samplerInfo.usePixelCoord = VK_TRUE;
|
||||
samplerInfo.nonSeamless = VK_FALSE;
|
||||
m_samplerPresent = m_device->createSampler(samplerInfo);
|
||||
|
||||
samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
|
|
|
@ -53,6 +53,7 @@ namespace dxvk {
|
|||
info.compareOp = VK_COMPARE_OP_NEVER;
|
||||
info.borderColor = VkClearColorValue();
|
||||
info.usePixelCoord = VK_FALSE;
|
||||
info.nonSeamless = VK_FALSE;
|
||||
|
||||
return dev->createSampler(info);
|
||||
}
|
||||
|
|
|
@ -311,6 +311,7 @@ namespace dxvk::hud {
|
|||
info.compareOp = VK_COMPARE_OP_NEVER;
|
||||
info.borderColor = VkClearColorValue();
|
||||
info.usePixelCoord = VK_TRUE;
|
||||
info.nonSeamless = VK_FALSE;
|
||||
|
||||
return m_device->createSampler(info);
|
||||
}
|
||||
|
|
|
@ -296,6 +296,15 @@ namespace dxvk {
|
|||
{ R"(\\AWayOut(_friend)?\.exe$)", {{
|
||||
{ "dxgi.maxFrameLatency", "1" },
|
||||
}} },
|
||||
/* Garden Warfare 2
|
||||
Won't start on amd Id without atiadlxx */
|
||||
{ R"(\\GW2.Main_Win64_Retail\.exe$)", {{
|
||||
{ "dxgi.customVendorId", "10de" },
|
||||
}} },
|
||||
/* DayZ */
|
||||
{ R"(\\DayZ_x64\.exe$)", {{
|
||||
{ "d3d11.cachedDynamicResources", "cr" },
|
||||
}} },
|
||||
|
||||
/**********************************************/
|
||||
/* D3D9 GAMES */
|
||||
|
@ -342,9 +351,13 @@ namespace dxvk {
|
|||
{ "d3d9.memoryTrackTest", "True" },
|
||||
}} },
|
||||
/* Dead Space uses the a NULL render target instead
|
||||
of a 1x1 one if DF24 is NOT supported */
|
||||
of a 1x1 one if DF24 is NOT supported
|
||||
Mouse and physics issues above 60 FPS
|
||||
Built-in Vsync Locks the game to 30 FPS */
|
||||
{ R"(\\Dead Space\.exe$)", {{
|
||||
{ "d3d9.supportDFFormats", "False" },
|
||||
{ "d3d9.maxFrameRate", "60" },
|
||||
{ "d3d9.presentInterval", "1" },
|
||||
}} },
|
||||
/* Halo CE/HaloPC */
|
||||
{ R"(\\halo(ce)?\.exe$)", {{
|
||||
|
@ -565,6 +578,11 @@ namespace dxvk {
|
|||
{ R"(\\eoa\.exe$)", {{
|
||||
{ "d3d9.customVendorId", "10de" },
|
||||
}} },
|
||||
/* Beyond Good And Evil *
|
||||
* Fixes missing sun and light shafts */
|
||||
{ R"(\\BGE\.exe$)", {{
|
||||
{ "d3d9.allowDoNotWait", "False" },
|
||||
}} },
|
||||
/* Supreme Commander & Forged Alliance Forever */
|
||||
{ R"(\\(SupremeCommander|ForgedAlliance)\.exe$)", {{
|
||||
{ "d3d9.floatEmulation", "Strict" },
|
||||
|
@ -573,6 +591,16 @@ namespace dxvk {
|
|||
{ R"(\\swtor\.exe$)", {{
|
||||
{ "d3d9.forceSamplerTypeSpecConstants", "True" },
|
||||
}} },
|
||||
/* Bionic Commando
|
||||
Physics break at high fps */
|
||||
{ R"(\\bionic_commando\.exe$)", {{
|
||||
{ "d3d9.maxFrameRate", "60" },
|
||||
}} },
|
||||
/* Port Royale 3 *
|
||||
* Fixes infinite loading screens */
|
||||
{ R"(\\PortRoyale3\.exe$)", {{
|
||||
{ "d3d9.allowDoNotWait", "False" },
|
||||
}} },
|
||||
}};
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ typedef union {
|
|||
* Hash a single 512-bit block. This is the core of the algorithm.
|
||||
*/
|
||||
void
|
||||
SHA1Transform(uint32_t state[5], const uint8_t buffer[SHA1_BLOCK_LENGTH])
|
||||
SHA1Transform(uint32_t state[5], const uint8_t* buffer)
|
||||
{
|
||||
uint32_t a, b, c, d, e;
|
||||
uint8_t workspace[SHA1_BLOCK_LENGTH];
|
||||
|
|
|
@ -28,7 +28,7 @@ typedef struct _SHA1_CTX {
|
|||
|
||||
void SHA1Init(SHA1_CTX *);
|
||||
void SHA1Pad(SHA1_CTX *);
|
||||
void SHA1Transform(uint32_t [5], const uint8_t [SHA1_BLOCK_LENGTH]);
|
||||
void SHA1Transform(uint32_t [5], const uint8_t*);
|
||||
void SHA1Update(SHA1_CTX *, const uint8_t *, size_t);
|
||||
void SHA1Final(uint8_t [SHA1_DIGEST_LENGTH], SHA1_CTX *);
|
||||
|
||||
|
|
Loading…
Reference in New Issue