dxvk/src/dxvk/dxvk_shader_key.cpp

43 lines
1.2 KiB
C++

#include "dxvk_shader_key.h"
namespace dxvk {
DxvkShaderKey::DxvkShaderKey()
: m_type(0),
m_sha1(Sha1Hash::compute(nullptr, 0)) { }
std::string DxvkShaderKey::toString() const {
const char* prefix = nullptr;
switch (m_type) {
case VK_SHADER_STAGE_VERTEX_BIT: prefix = "VS_"; break;
case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: prefix = "TCS_"; break;
case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: prefix = "TES_"; break;
case VK_SHADER_STAGE_GEOMETRY_BIT: prefix = "GS_"; break;
case VK_SHADER_STAGE_FRAGMENT_BIT: prefix = "FS_"; break;
case VK_SHADER_STAGE_COMPUTE_BIT: prefix = "CS_"; break;
default: prefix = "";
}
return str::format(prefix, m_sha1.toString());
}
size_t DxvkShaderKey::hash() const {
DxvkHashState result;
result.add(uint32_t(m_type));
for (uint32_t i = 0; i < 5; i++)
result.add(m_sha1.dword(i));
return result;
}
bool DxvkShaderKey::eq(const DxvkShaderKey& key) const {
return m_type == key.m_type
&& m_sha1 == key.m_sha1;
}
}