librashader/librashader-cache/src/key.rs
chyyran 604edfb78f cache: implement transparent shader object cache
supported objects:

- SPIR-V artifacts
- Validated DXIL artifacts
- DXBC artifacts
- OpenGL Program Binaries
- Vulkan Pipeline caches
- D3D12 CACHED_PIPELINE_STATE
2023-02-15 18:08:47 -05:00

44 lines
839 B
Rust

/// Trait for objects that can be used as part of a key for a cached object.
pub trait CacheKey {
/// Get a byte representation of the object that
/// will be fed into the hash.
fn hash_bytes(&self) -> &[u8];
}
impl CacheKey for u32 {
fn hash_bytes(&self) -> &[u8] {
&bytemuck::bytes_of(&*self)
}
}
impl CacheKey for i32 {
fn hash_bytes(&self) -> &[u8] {
&bytemuck::bytes_of(&*self)
}
}
impl CacheKey for &[u8] {
fn hash_bytes(&self) -> &[u8] {
self
}
}
impl CacheKey for Vec<u8> {
fn hash_bytes(&self) -> &[u8] {
&self
}
}
impl CacheKey for Vec<u32> {
fn hash_bytes(&self) -> &[u8] {
bytemuck::cast_slice(&self)
}
}
impl CacheKey for &str {
fn hash_bytes(&self) -> &[u8] {
// need to be explicit
self.as_bytes()
}
}