From 39a2b1cb7a2e64ab9e8d012ef9463e55580308e4 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 2 Jul 2022 20:59:12 +0200 Subject: [PATCH] [dxvk] Remove support for state cache versions older than v8 We could technically keep supporting this with Dynamic Rendering, but it's a huge amount of work and there's no good reason to do so. --- src/dxvk/dxvk_state_cache.cpp | 233 +----------------------------- src/dxvk/dxvk_state_cache.h | 20 --- src/dxvk/dxvk_state_cache_types.h | 141 ------------------ 3 files changed, 1 insertion(+), 393 deletions(-) diff --git a/src/dxvk/dxvk_state_cache.cpp b/src/dxvk/dxvk_state_cache.cpp index ab08a1427..16f965ba6 100644 --- a/src/dxvk/dxvk_state_cache.cpp +++ b/src/dxvk/dxvk_state_cache.cpp @@ -397,25 +397,8 @@ namespace dxvk { return false; } - // Struct size hasn't changed between v2 and v4 - size_t expectedSize = newHeader.entrySize; - - if (curHeader.version <= 4) - expectedSize = sizeof(DxvkStateCacheEntryV4); - else if (curHeader.version <= 5) - expectedSize = sizeof(DxvkStateCacheEntryV5); - else if (curHeader.version <= 6) - expectedSize = sizeof(DxvkStateCacheEntryV6); - else if (curHeader.version <= 7) - expectedSize = sizeof(DxvkStateCacheEntry); - - if (curHeader.entrySize != expectedSize) { - Logger::warn("DXVK: State cache entry size changed"); - return false; - } - // Discard caches of unsupported versions - if (curHeader.version < 2 || curHeader.version > newHeader.version) { + if (curHeader.version < 8 || curHeader.version > newHeader.version) { Logger::warn("DXVK: State cache version not supported"); return false; } @@ -485,51 +468,10 @@ namespace dxvk { } - bool DxvkStateCache::readCacheEntryV7( - uint32_t version, - std::istream& stream, - DxvkStateCacheEntry& entry) const { - if (version <= 6) { - DxvkStateCacheEntryV6 v6; - - if (version <= 4) { - DxvkStateCacheEntryV4 v4; - - if (!readCacheEntryTyped(stream, v4)) - return false; - - if (version == 2) - convertEntryV2(v4); - - if (!convertEntryV4(v4, v6)) - return false; - } else if (version <= 5) { - DxvkStateCacheEntryV5 v5; - - if (!readCacheEntryTyped(stream, v5)) - return false; - - if (!convertEntryV5(v5, v6)) - return false; - } else { - if (!readCacheEntryTyped(stream, v6)) - return false; - } - - return convertEntryV6(v6, entry); - } else { - return readCacheEntryTyped(stream, entry); - } - } - - bool DxvkStateCache::readCacheEntry( uint32_t version, std::istream& stream, DxvkStateCacheEntry& entry) const { - if (version < 8) - return readCacheEntryV7(version, stream, entry); - // Read entry metadata and actual data DxvkStateCacheEntryHeader header; DxvkStateCacheEntryData data; @@ -732,179 +674,6 @@ namespace dxvk { } - bool DxvkStateCache::convertEntryV2( - DxvkStateCacheEntryV4& entry) const { - // Semantics changed: - // v2: rsDepthClampEnable - // v3: rsDepthClipEnable - entry.gpState.rsDepthClipEnable = !entry.gpState.rsDepthClipEnable; - - // Frontend changed: Depth bias - // will typically be disabled - entry.gpState.rsDepthBiasEnable = VK_FALSE; - return true; - } - - - bool DxvkStateCache::convertEntryV4( - const DxvkStateCacheEntryV4& in, - DxvkStateCacheEntryV6& out) const { - out.shaders = in.shaders; - out.format = in.format; - out.hash = in.hash; - - out.cpState.bsBindingMask = in.cpState.bsBindingMask; - out.gpState.bsBindingMask = in.gpState.bsBindingMask; - - out.gpState.iaPrimitiveTopology = in.gpState.iaPrimitiveTopology; - out.gpState.iaPrimitiveRestart = in.gpState.iaPrimitiveRestart; - out.gpState.iaPatchVertexCount = in.gpState.iaPatchVertexCount; - - out.gpState.ilAttributeCount = in.gpState.ilAttributeCount; - out.gpState.ilBindingCount = in.gpState.ilBindingCount; - - for (uint32_t i = 0; i < in.gpState.ilAttributeCount; i++) - out.gpState.ilAttributes[i] = in.gpState.ilAttributes[i]; - - for (uint32_t i = 0; i < in.gpState.ilBindingCount; i++) { - out.gpState.ilBindings[i] = in.gpState.ilBindings[i]; - out.gpState.ilDivisors[i] = in.gpState.ilDivisors[i]; - } - - out.gpState.rsDepthClipEnable = in.gpState.rsDepthClipEnable; - out.gpState.rsDepthBiasEnable = in.gpState.rsDepthBiasEnable; - out.gpState.rsPolygonMode = in.gpState.rsPolygonMode; - out.gpState.rsCullMode = in.gpState.rsCullMode; - out.gpState.rsFrontFace = in.gpState.rsFrontFace; - out.gpState.rsViewportCount = in.gpState.rsViewportCount; - out.gpState.rsSampleCount = in.gpState.rsSampleCount; - - out.gpState.msSampleCount = in.gpState.msSampleCount; - out.gpState.msSampleMask = in.gpState.msSampleMask; - out.gpState.msEnableAlphaToCoverage = in.gpState.msEnableAlphaToCoverage; - - out.gpState.dsEnableDepthTest = in.gpState.dsEnableDepthTest; - out.gpState.dsEnableDepthWrite = in.gpState.dsEnableDepthWrite; - out.gpState.dsEnableStencilTest = in.gpState.dsEnableStencilTest; - out.gpState.dsDepthCompareOp = in.gpState.dsDepthCompareOp; - out.gpState.dsStencilOpFront = in.gpState.dsStencilOpFront; - out.gpState.dsStencilOpBack = in.gpState.dsStencilOpBack; - - out.gpState.omEnableLogicOp = in.gpState.omEnableLogicOp; - out.gpState.omLogicOp = in.gpState.omLogicOp; - - for (uint32_t i = 0; i < 8; i++) { - out.gpState.omBlendAttachments[i] = in.gpState.omBlendAttachments[i]; - out.gpState.omComponentMapping[i] = in.gpState.omComponentMapping[i]; - } - - return true; - } - - - bool DxvkStateCache::convertEntryV5( - const DxvkStateCacheEntryV5& in, - DxvkStateCacheEntryV6& out) const { - out.shaders = in.shaders; - out.gpState = in.gpState; - out.format = in.format; - out.hash = in.hash; - - out.cpState.bsBindingMask = in.cpState.bsBindingMask; - return true; - } - - - bool DxvkStateCache::convertEntryV6( - const DxvkStateCacheEntryV6& in, - DxvkStateCacheEntry& out) const { - out.shaders = in.shaders; - out.format = in.format; - out.hash = in.hash; - - if (in.shaders.cs.eq(g_nullShaderKey)) { - // Graphics state - out.gpState.ia = DxvkIaInfo( - in.gpState.iaPrimitiveTopology, - in.gpState.iaPrimitiveRestart, - in.gpState.iaPatchVertexCount); - - out.gpState.il = DxvkIlInfo( - in.gpState.ilAttributeCount, - in.gpState.ilBindingCount); - - for (uint32_t i = 0; i < in.gpState.ilAttributeCount; i++) { - out.gpState.ilAttributes[i] = DxvkIlAttribute( - in.gpState.ilAttributes[i].location, - in.gpState.ilAttributes[i].binding, - in.gpState.ilAttributes[i].format, - in.gpState.ilAttributes[i].offset); - } - - for (uint32_t i = 0; i < in.gpState.ilBindingCount; i++) { - out.gpState.ilBindings[i] = DxvkIlBinding( - in.gpState.ilBindings[i].binding, - in.gpState.ilBindings[i].stride, - in.gpState.ilBindings[i].inputRate, - in.gpState.ilDivisors[i]); - } - - out.gpState.rs = DxvkRsInfo( - in.gpState.rsDepthClipEnable, - in.gpState.rsDepthBiasEnable, - in.gpState.rsPolygonMode, - in.gpState.rsCullMode, - in.gpState.rsFrontFace, - in.gpState.rsViewportCount, - in.gpState.rsSampleCount, - VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT); - - out.gpState.ms = DxvkMsInfo( - in.gpState.msSampleCount, - in.gpState.msSampleMask, - in.gpState.msEnableAlphaToCoverage); - - out.gpState.ds = DxvkDsInfo( - in.gpState.dsEnableDepthTest, - in.gpState.dsEnableDepthWrite, - in.gpState.dsEnableDepthBoundsTest, - in.gpState.dsEnableStencilTest, - in.gpState.dsDepthCompareOp); - - out.gpState.dsFront = DxvkDsStencilOp(in.gpState.dsStencilOpFront); - out.gpState.dsBack = DxvkDsStencilOp(in.gpState.dsStencilOpBack); - - out.gpState.om = DxvkOmInfo( - in.gpState.omEnableLogicOp, - in.gpState.omLogicOp); - - for (uint32_t i = 0; i < 8 && i < MaxNumRenderTargets; i++) { - out.gpState.omBlend[i] = DxvkOmAttachmentBlend( - in.gpState.omBlendAttachments[i].blendEnable, - in.gpState.omBlendAttachments[i].srcColorBlendFactor, - in.gpState.omBlendAttachments[i].dstColorBlendFactor, - in.gpState.omBlendAttachments[i].colorBlendOp, - in.gpState.omBlendAttachments[i].srcAlphaBlendFactor, - in.gpState.omBlendAttachments[i].dstAlphaBlendFactor, - in.gpState.omBlendAttachments[i].alphaBlendOp, - in.gpState.omBlendAttachments[i].colorWriteMask); - - out.gpState.omSwizzle[i] = DxvkOmAttachmentSwizzle( - in.gpState.omComponentMapping[i]); - } - - // Specialization constants - for (uint32_t i = 0; i < 8 && i < MaxNumSpecConstants; i++) - out.cpState.sc.specConstants[i] = in.cpState.scSpecConstants[i]; - } else { - for (uint32_t i = 0; i < 8 && i < MaxNumSpecConstants; i++) - out.gpState.sc.specConstants[i] = in.gpState.scSpecConstants[i]; - } - - return true; - } - - void DxvkStateCache::workerFunc() { env::setThreadName("dxvk-shader"); diff --git a/src/dxvk/dxvk_state_cache.h b/src/dxvk/dxvk_state_cache.h index f23c85f05..6419a797f 100644 --- a/src/dxvk/dxvk_state_cache.h +++ b/src/dxvk/dxvk_state_cache.h @@ -149,11 +149,6 @@ namespace dxvk { std::istream& stream, DxvkStateCacheHeader& header) const; - bool readCacheEntryV7( - uint32_t version, - std::istream& stream, - DxvkStateCacheEntry& entry) const; - bool readCacheEntry( uint32_t version, std::istream& stream, @@ -163,21 +158,6 @@ namespace dxvk { std::ostream& stream, DxvkStateCacheEntry& entry) const; - bool convertEntryV2( - DxvkStateCacheEntryV4& entry) const; - - bool convertEntryV4( - const DxvkStateCacheEntryV4& in, - DxvkStateCacheEntryV6& out) const; - - bool convertEntryV5( - const DxvkStateCacheEntryV5& in, - DxvkStateCacheEntryV6& out) const; - - bool convertEntryV6( - const DxvkStateCacheEntryV6& in, - DxvkStateCacheEntry& out) const; - void workerFunc(); void writerFunc(); diff --git a/src/dxvk/dxvk_state_cache_types.h b/src/dxvk/dxvk_state_cache_types.h index c60861ca6..a9c33b2d3 100644 --- a/src/dxvk/dxvk_state_cache_types.h +++ b/src/dxvk/dxvk_state_cache_types.h @@ -89,145 +89,4 @@ namespace dxvk { }; - /** - * \brief Version 4 graphics pipeline state - */ - struct DxvkGraphicsPipelineStateInfoV4 { - DxvkBindingMaskV8 bsBindingMask; - - VkPrimitiveTopology iaPrimitiveTopology; - VkBool32 iaPrimitiveRestart; - uint32_t iaPatchVertexCount; - - uint32_t ilAttributeCount; - uint32_t ilBindingCount; - VkVertexInputAttributeDescription ilAttributes[32]; - VkVertexInputBindingDescription ilBindings[32]; - uint32_t ilDivisors[32]; - - VkBool32 rsDepthClipEnable; - VkBool32 rsDepthBiasEnable; - VkPolygonMode rsPolygonMode; - VkCullModeFlags rsCullMode; - VkFrontFace rsFrontFace; - uint32_t rsViewportCount; - VkSampleCountFlags rsSampleCount; - - VkSampleCountFlags msSampleCount; - uint32_t msSampleMask; - VkBool32 msEnableAlphaToCoverage; - - VkCompareOp xsAlphaCompareOp; - - VkBool32 dsEnableDepthTest; - VkBool32 dsEnableDepthWrite; - VkBool32 dsEnableStencilTest; - VkCompareOp dsDepthCompareOp; - VkStencilOpState dsStencilOpFront; - VkStencilOpState dsStencilOpBack; - - VkBool32 omEnableLogicOp; - VkLogicOp omLogicOp; - VkPipelineColorBlendAttachmentState omBlendAttachments[8]; - VkComponentMapping omComponentMapping[8]; - }; - - - /** - * \brief Version 6 graphics pipeline state - */ - struct DxvkGraphicsPipelineStateInfoV6 { - DxvkBindingMaskV8 bsBindingMask; - - VkPrimitiveTopology iaPrimitiveTopology; - VkBool32 iaPrimitiveRestart; - uint32_t iaPatchVertexCount; - - uint32_t ilAttributeCount; - uint32_t ilBindingCount; - VkVertexInputAttributeDescription ilAttributes[32]; - VkVertexInputBindingDescription ilBindings[32]; - uint32_t ilDivisors[32]; - - VkBool32 rsDepthClipEnable; - VkBool32 rsDepthBiasEnable; - VkPolygonMode rsPolygonMode; - VkCullModeFlags rsCullMode; - VkFrontFace rsFrontFace; - uint32_t rsViewportCount; - VkSampleCountFlags rsSampleCount; - - VkSampleCountFlags msSampleCount; - uint32_t msSampleMask; - VkBool32 msEnableAlphaToCoverage; - - VkBool32 dsEnableDepthTest; - VkBool32 dsEnableDepthWrite; - VkBool32 dsEnableDepthBoundsTest; - VkBool32 dsEnableStencilTest; - VkCompareOp dsDepthCompareOp; - VkStencilOpState dsStencilOpFront; - VkStencilOpState dsStencilOpBack; - - VkBool32 omEnableLogicOp; - VkLogicOp omLogicOp; - VkPipelineColorBlendAttachmentState omBlendAttachments[8]; - VkComponentMapping omComponentMapping[8]; - - uint32_t scSpecConstants[8]; - }; - - - /** - * \brief Version 5 compute pipeline state - */ - struct DxvkComputePipelineStateInfoV5 { - DxvkBindingMaskV8 bsBindingMask; - }; - - - /** - * \brief Version 6 compute pipeline state - */ - struct DxvkComputePipelineStateInfoV6 { - DxvkBindingMaskV8 bsBindingMask; - uint32_t scSpecConstants[8]; - }; - - - /** - * \brief Version 4 state cache entry - */ - struct DxvkStateCacheEntryV4 { - DxvkStateCacheKey shaders; - DxvkGraphicsPipelineStateInfoV4 gpState; - DxvkComputePipelineStateInfoV5 cpState; - DxvkRenderPassFormat format; - Sha1Hash hash; - }; - - - /** - * \brief Version 5 state cache entry - */ - struct DxvkStateCacheEntryV5 { - DxvkStateCacheKey shaders; - DxvkGraphicsPipelineStateInfoV6 gpState; - DxvkComputePipelineStateInfoV5 cpState; - DxvkRenderPassFormat format; - Sha1Hash hash; - }; - - - /** - * \brief Version 6 state cache entry - */ - struct DxvkStateCacheEntryV6 { - DxvkStateCacheKey shaders; - DxvkGraphicsPipelineStateInfoV6 gpState; - DxvkComputePipelineStateInfoV6 cpState; - DxvkRenderPassFormat format; - Sha1Hash hash; - }; - }