mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Move shader set hash/eq functions into respective structs
Makes it easier to use them outside the pipeline manager.
This commit is contained in:
parent
ba5f319809
commit
35a8cedbc2
@ -20,6 +20,14 @@ namespace dxvk {
|
|||||||
*/
|
*/
|
||||||
struct DxvkComputePipelineShaders {
|
struct DxvkComputePipelineShaders {
|
||||||
Rc<DxvkShader> cs;
|
Rc<DxvkShader> cs;
|
||||||
|
|
||||||
|
bool eq(const DxvkComputePipelineShaders& other) const {
|
||||||
|
return cs == other.cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t hash() const {
|
||||||
|
return DxvkShader::getHash(cs);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +37,22 @@ namespace dxvk {
|
|||||||
Rc<DxvkShader> tes;
|
Rc<DxvkShader> tes;
|
||||||
Rc<DxvkShader> gs;
|
Rc<DxvkShader> gs;
|
||||||
Rc<DxvkShader> fs;
|
Rc<DxvkShader> fs;
|
||||||
|
|
||||||
|
bool eq(const DxvkGraphicsPipelineShaders& other) const {
|
||||||
|
return vs == other.vs && tcs == other.tcs
|
||||||
|
&& tes == other.tes && gs == other.gs
|
||||||
|
&& fs == other.fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t hash() const {
|
||||||
|
DxvkHashState state;
|
||||||
|
state.add(DxvkShader::getHash(vs));
|
||||||
|
state.add(DxvkShader::getHash(tcs));
|
||||||
|
state.add(DxvkShader::getHash(tes));
|
||||||
|
state.add(DxvkShader::getHash(gs));
|
||||||
|
state.add(DxvkShader::getHash(fs));
|
||||||
|
return state;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,44 +4,6 @@
|
|||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
size_t DxvkPipelineKeyHash::operator () (const DxvkComputePipelineShaders& key) const {
|
|
||||||
std::hash<DxvkShader*> hash;
|
|
||||||
return hash(key.cs.ptr());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
size_t DxvkPipelineKeyHash::operator () (const DxvkGraphicsPipelineShaders& key) const {
|
|
||||||
DxvkHashState state;
|
|
||||||
state.add(getShaderHash(key.vs));
|
|
||||||
state.add(getShaderHash(key.tcs));
|
|
||||||
state.add(getShaderHash(key.tes));
|
|
||||||
state.add(getShaderHash(key.gs));
|
|
||||||
state.add(getShaderHash(key.fs));
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
size_t DxvkPipelineKeyHash::getShaderHash(const Rc<DxvkShader>& shader) {
|
|
||||||
return shader != nullptr ? shader->getHash() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool DxvkPipelineKeyEq::operator () (
|
|
||||||
const DxvkComputePipelineShaders& a,
|
|
||||||
const DxvkComputePipelineShaders& b) const {
|
|
||||||
return a.cs == b.cs;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool DxvkPipelineKeyEq::operator () (
|
|
||||||
const DxvkGraphicsPipelineShaders& a,
|
|
||||||
const DxvkGraphicsPipelineShaders& b) const {
|
|
||||||
return a.vs == b.vs && a.tcs == b.tcs
|
|
||||||
&& a.tes == b.tes && a.gs == b.gs
|
|
||||||
&& a.fs == b.fs;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DxvkPipelineManager::DxvkPipelineManager(
|
DxvkPipelineManager::DxvkPipelineManager(
|
||||||
const DxvkDevice* device,
|
const DxvkDevice* device,
|
||||||
DxvkRenderPassPool* passManager)
|
DxvkRenderPassPool* passManager)
|
||||||
|
@ -23,19 +23,6 @@ namespace dxvk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct DxvkPipelineKeyHash {
|
|
||||||
size_t operator () (const DxvkComputePipelineShaders& key) const;
|
|
||||||
size_t operator () (const DxvkGraphicsPipelineShaders& key) const;
|
|
||||||
static size_t getShaderHash(const Rc<DxvkShader>& shader);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct DxvkPipelineKeyEq {
|
|
||||||
bool operator () (const DxvkComputePipelineShaders& a, const DxvkComputePipelineShaders& b) const;
|
|
||||||
bool operator () (const DxvkGraphicsPipelineShaders& a, const DxvkGraphicsPipelineShaders& b) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Pipeline manager
|
* \brief Pipeline manager
|
||||||
*
|
*
|
||||||
@ -117,14 +104,12 @@ namespace dxvk {
|
|||||||
std::unordered_map<
|
std::unordered_map<
|
||||||
DxvkComputePipelineShaders,
|
DxvkComputePipelineShaders,
|
||||||
DxvkComputePipeline,
|
DxvkComputePipeline,
|
||||||
DxvkPipelineKeyHash,
|
DxvkHash, DxvkEq> m_computePipelines;
|
||||||
DxvkPipelineKeyEq> m_computePipelines;
|
|
||||||
|
|
||||||
std::unordered_map<
|
std::unordered_map<
|
||||||
DxvkGraphicsPipelineShaders,
|
DxvkGraphicsPipelineShaders,
|
||||||
DxvkGraphicsPipeline,
|
DxvkGraphicsPipeline,
|
||||||
DxvkPipelineKeyHash,
|
DxvkHash, DxvkEq> m_graphicsPipelines;
|
||||||
DxvkPipelineKeyEq> m_graphicsPipelines;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -254,6 +254,18 @@ namespace dxvk {
|
|||||||
return m_key.toString();
|
return m_key.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get lookup hash for a shader
|
||||||
|
*
|
||||||
|
* Convenience method that returns \c 0 for a null
|
||||||
|
* pointer, and the shader's lookup hash otherwise.
|
||||||
|
* \param [in] shader The shader
|
||||||
|
* \returns The shader's lookup hash, or 0
|
||||||
|
*/
|
||||||
|
static size_t getHash(const Rc<DxvkShader>& shader) {
|
||||||
|
return shader != nullptr ? shader->getHash() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
VkShaderStageFlagBits m_stage;
|
VkShaderStageFlagBits m_stage;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user