mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Prepare for pipeline state changes and bump cache format to v7
One of the changes includes hard-coding certain constants into the old pipeline state structs, since changing the constants would invalidate any old state cache and making the conversion pointless.
This commit is contained in:
parent
32dff89b2d
commit
9dad44a6b1
@ -302,6 +302,8 @@ namespace dxvk {
|
|||||||
expectedSize = sizeof(DxvkStateCacheEntryV4);
|
expectedSize = sizeof(DxvkStateCacheEntryV4);
|
||||||
else if (curHeader.version <= 5)
|
else if (curHeader.version <= 5)
|
||||||
expectedSize = sizeof(DxvkStateCacheEntryV5);
|
expectedSize = sizeof(DxvkStateCacheEntryV5);
|
||||||
|
else if (curHeader.version <= 6)
|
||||||
|
expectedSize = sizeof(DxvkStateCacheEntryV6);
|
||||||
|
|
||||||
if (curHeader.entrySize != expectedSize) {
|
if (curHeader.entrySize != expectedSize) {
|
||||||
Logger::warn("DXVK: State cache entry size changed");
|
Logger::warn("DXVK: State cache entry size changed");
|
||||||
@ -383,23 +385,34 @@ namespace dxvk {
|
|||||||
uint32_t version,
|
uint32_t version,
|
||||||
std::istream& stream,
|
std::istream& stream,
|
||||||
DxvkStateCacheEntry& entry) const {
|
DxvkStateCacheEntry& entry) const {
|
||||||
if (version <= 4) {
|
if (version <= 6) {
|
||||||
DxvkStateCacheEntryV4 v4;
|
DxvkStateCacheEntryV6 v6;
|
||||||
|
|
||||||
if (!readCacheEntryTyped(stream, v4))
|
if (version <= 4) {
|
||||||
return false;
|
DxvkStateCacheEntryV4 v4;
|
||||||
|
|
||||||
if (version == 2)
|
|
||||||
convertEntryV2(v4);
|
|
||||||
|
|
||||||
return convertEntryV4(v4, entry);
|
|
||||||
} else if (version <= 5) {
|
|
||||||
DxvkStateCacheEntryV5 v5;
|
|
||||||
|
|
||||||
if (!readCacheEntryTyped(stream, v5))
|
if (!readCacheEntryTyped(stream, v4))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return convertEntryV5(v5, entry);
|
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 {
|
} else {
|
||||||
return readCacheEntryTyped(stream, entry);
|
return readCacheEntryTyped(stream, entry);
|
||||||
}
|
}
|
||||||
@ -435,7 +448,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
bool DxvkStateCache::convertEntryV4(
|
bool DxvkStateCache::convertEntryV4(
|
||||||
const DxvkStateCacheEntryV4& in,
|
const DxvkStateCacheEntryV4& in,
|
||||||
DxvkStateCacheEntry& out) const {
|
DxvkStateCacheEntryV6& out) const {
|
||||||
out.shaders = in.shaders;
|
out.shaders = in.shaders;
|
||||||
out.format = in.format;
|
out.format = in.format;
|
||||||
out.hash = in.hash;
|
out.hash = in.hash;
|
||||||
@ -480,7 +493,7 @@ namespace dxvk {
|
|||||||
out.gpState.omEnableLogicOp = in.gpState.omEnableLogicOp;
|
out.gpState.omEnableLogicOp = in.gpState.omEnableLogicOp;
|
||||||
out.gpState.omLogicOp = in.gpState.omLogicOp;
|
out.gpState.omLogicOp = in.gpState.omLogicOp;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < MaxNumRenderTargets; i++) {
|
for (uint32_t i = 0; i < 8; i++) {
|
||||||
out.gpState.omBlendAttachments[i] = in.gpState.omBlendAttachments[i];
|
out.gpState.omBlendAttachments[i] = in.gpState.omBlendAttachments[i];
|
||||||
out.gpState.omComponentMapping[i] = in.gpState.omComponentMapping[i];
|
out.gpState.omComponentMapping[i] = in.gpState.omComponentMapping[i];
|
||||||
}
|
}
|
||||||
@ -491,7 +504,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
bool DxvkStateCache::convertEntryV5(
|
bool DxvkStateCache::convertEntryV5(
|
||||||
const DxvkStateCacheEntryV5& in,
|
const DxvkStateCacheEntryV5& in,
|
||||||
DxvkStateCacheEntry& out) const {
|
DxvkStateCacheEntryV6& out) const {
|
||||||
out.shaders = in.shaders;
|
out.shaders = in.shaders;
|
||||||
out.gpState = in.gpState;
|
out.gpState = in.gpState;
|
||||||
out.format = in.format;
|
out.format = in.format;
|
||||||
@ -502,6 +515,14 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DxvkStateCache::convertEntryV6(
|
||||||
|
const DxvkStateCacheEntryV6& in,
|
||||||
|
DxvkStateCacheEntry& out) const {
|
||||||
|
/* TODO implement */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkStateCache::workerFunc() {
|
void DxvkStateCache::workerFunc() {
|
||||||
env::setThreadName("dxvk-shader");
|
env::setThreadName("dxvk-shader");
|
||||||
|
|
||||||
|
@ -157,10 +157,14 @@ namespace dxvk {
|
|||||||
|
|
||||||
bool convertEntryV4(
|
bool convertEntryV4(
|
||||||
const DxvkStateCacheEntryV4& in,
|
const DxvkStateCacheEntryV4& in,
|
||||||
DxvkStateCacheEntry& out) const;
|
DxvkStateCacheEntryV6& out) const;
|
||||||
|
|
||||||
bool convertEntryV5(
|
bool convertEntryV5(
|
||||||
const DxvkStateCacheEntryV5& in,
|
const DxvkStateCacheEntryV5& in,
|
||||||
|
DxvkStateCacheEntryV6& out) const;
|
||||||
|
|
||||||
|
bool convertEntryV6(
|
||||||
|
const DxvkStateCacheEntryV6& in,
|
||||||
DxvkStateCacheEntry& out) const;
|
DxvkStateCacheEntry& out) const;
|
||||||
|
|
||||||
void workerFunc();
|
void workerFunc();
|
||||||
|
@ -52,7 +52,7 @@ namespace dxvk {
|
|||||||
*/
|
*/
|
||||||
struct DxvkStateCacheHeader {
|
struct DxvkStateCacheHeader {
|
||||||
char magic[4] = { 'D', 'X', 'V', 'K' };
|
char magic[4] = { 'D', 'X', 'V', 'K' };
|
||||||
uint32_t version = 6;
|
uint32_t version = 7;
|
||||||
uint32_t entrySize = sizeof(DxvkStateCacheEntry);
|
uint32_t entrySize = sizeof(DxvkStateCacheEntry);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -71,9 +71,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
uint32_t ilAttributeCount;
|
uint32_t ilAttributeCount;
|
||||||
uint32_t ilBindingCount;
|
uint32_t ilBindingCount;
|
||||||
VkVertexInputAttributeDescription ilAttributes[DxvkLimits::MaxNumVertexAttributes];
|
VkVertexInputAttributeDescription ilAttributes[32];
|
||||||
VkVertexInputBindingDescription ilBindings[DxvkLimits::MaxNumVertexBindings];
|
VkVertexInputBindingDescription ilBindings[32];
|
||||||
uint32_t ilDivisors[DxvkLimits::MaxNumVertexBindings];
|
uint32_t ilDivisors[32];
|
||||||
|
|
||||||
VkBool32 rsDepthClipEnable;
|
VkBool32 rsDepthClipEnable;
|
||||||
VkBool32 rsDepthBiasEnable;
|
VkBool32 rsDepthBiasEnable;
|
||||||
@ -98,8 +98,53 @@ namespace dxvk {
|
|||||||
|
|
||||||
VkBool32 omEnableLogicOp;
|
VkBool32 omEnableLogicOp;
|
||||||
VkLogicOp omLogicOp;
|
VkLogicOp omLogicOp;
|
||||||
VkPipelineColorBlendAttachmentState omBlendAttachments[MaxNumRenderTargets];
|
VkPipelineColorBlendAttachmentState omBlendAttachments[8];
|
||||||
VkComponentMapping omComponentMapping[MaxNumRenderTargets];
|
VkComponentMapping omComponentMapping[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Version 6 graphics pipeline state
|
||||||
|
*/
|
||||||
|
struct DxvkGraphicsPipelineStateInfoV6 {
|
||||||
|
DxvkBindingMask 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];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -111,6 +156,15 @@ namespace dxvk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Version 6 compute pipeline state
|
||||||
|
*/
|
||||||
|
struct DxvkComputePipelineStateInfoV6 {
|
||||||
|
DxvkBindingMask bsBindingMask;
|
||||||
|
uint32_t scSpecConstants[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Version 4 state cache entry
|
* \brief Version 4 state cache entry
|
||||||
*/
|
*/
|
||||||
@ -128,10 +182,22 @@ namespace dxvk {
|
|||||||
*/
|
*/
|
||||||
struct DxvkStateCacheEntryV5 {
|
struct DxvkStateCacheEntryV5 {
|
||||||
DxvkStateCacheKey shaders;
|
DxvkStateCacheKey shaders;
|
||||||
DxvkGraphicsPipelineStateInfo gpState;
|
DxvkGraphicsPipelineStateInfoV6 gpState;
|
||||||
DxvkComputePipelineStateInfoV5 cpState;
|
DxvkComputePipelineStateInfoV5 cpState;
|
||||||
DxvkRenderPassFormat format;
|
DxvkRenderPassFormat format;
|
||||||
Sha1Hash hash;
|
Sha1Hash hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Version 6 state cache entry
|
||||||
|
*/
|
||||||
|
struct DxvkStateCacheEntryV6 {
|
||||||
|
DxvkStateCacheKey shaders;
|
||||||
|
DxvkGraphicsPipelineStateInfoV6 gpState;
|
||||||
|
DxvkComputePipelineStateInfoV6 cpState;
|
||||||
|
DxvkRenderPassFormat format;
|
||||||
|
Sha1Hash hash;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user