From 190f114449402caf40d063f9df080a49b1f07bba Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 16 Jan 2019 19:31:38 +0100 Subject: [PATCH] [dxvk] Add methods to check which dynamic states a pipeline uses --- src/dxvk/dxvk_graphics.h | 24 +++++++++++++++++++++++- src/dxvk/dxvk_util.cpp | 8 ++++++++ src/dxvk/dxvk_util.h | 3 +++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/dxvk/dxvk_graphics.h b/src/dxvk/dxvk_graphics.h index 96e5c042..6e4acd6e 100644 --- a/src/dxvk/dxvk_graphics.h +++ b/src/dxvk/dxvk_graphics.h @@ -27,7 +27,7 @@ namespace dxvk { using DxvkGraphicsPipelineFlags = Flags; - + /** * \brief Graphics pipeline state info * @@ -46,6 +46,28 @@ namespace dxvk { bool operator == (const DxvkGraphicsPipelineStateInfo& other) const; bool operator != (const DxvkGraphicsPipelineStateInfo& other) const; + + bool useDynamicStencilRef() const { + return dsEnableStencilTest; + } + + bool useDynamicDepthBias() const { + return rsDepthBiasEnable; + } + + bool useDynamicBlendConstants() const { + bool result = false; + + for (uint32_t i = 0; i < MaxNumRenderTargets && !result; i++) { + result |= omBlendAttachments[i].blendEnable + && (util::isBlendConstantBlendFactor(omBlendAttachments[i].srcColorBlendFactor) + || util::isBlendConstantBlendFactor(omBlendAttachments[i].dstColorBlendFactor) + || util::isBlendConstantBlendFactor(omBlendAttachments[i].srcAlphaBlendFactor) + || util::isBlendConstantBlendFactor(omBlendAttachments[i].dstAlphaBlendFactor)); + } + + return result; + } DxvkBindingMask bsBindingMask; diff --git a/src/dxvk/dxvk_util.cpp b/src/dxvk/dxvk_util.cpp index a8782b1f..726d7acc 100644 --- a/src/dxvk/dxvk_util.cpp +++ b/src/dxvk/dxvk_util.cpp @@ -150,6 +150,14 @@ namespace dxvk::util { } + bool isBlendConstantBlendFactor(VkBlendFactor factor) { + return factor == VK_BLEND_FACTOR_CONSTANT_COLOR + || factor == VK_BLEND_FACTOR_CONSTANT_ALPHA + || factor == VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR + || factor == VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA; + } + + bool isDualSourceBlendFactor(VkBlendFactor factor) { return factor == VK_BLEND_FACTOR_SRC1_COLOR || factor == VK_BLEND_FACTOR_SRC1_ALPHA diff --git a/src/dxvk/dxvk_util.h b/src/dxvk/dxvk_util.h index 73af2829..2137b544 100644 --- a/src/dxvk/dxvk_util.h +++ b/src/dxvk/dxvk_util.h @@ -212,6 +212,9 @@ namespace dxvk::util { VkComponentSwizzle component, uint32_t identity); + bool isBlendConstantBlendFactor( + VkBlendFactor factor); + bool isDualSourceBlendFactor( VkBlendFactor factor);