65 FIXME(
"Actual case of a hash collision found.\n");
75 .key_size =
e->h.key_size,
118 TRACE(
"cache %p refcount %u.\n",
cache, refcount);
132 static const uint64_t fnv_prime = 0x00000100000001b3;
154 const void *
key,
size_t key_size,
const void *
value,
size_t value_size)
165 k.key_size = key_size;
174 WARN(
"Key already exists, returning VKD3D_ERROR_KEY_ALREADY_EXISTS.\n");
193 e->h.key_size = key_size;
194 e->h.value_size = value_size;
209 const void *
key,
size_t key_size,
void *
value,
size_t *value_size)
219 size_in = *value_size;
223 k.key_size = key_size;
230 WARN(
"Entry not found.\n");
237 *value_size =
e->h.value_size;
241 e->h.hash,
e->h.value_size);
246 if (size_in < e->
h.value_size)
248 WARN(
"Output buffer is too small for item %#"PRIx64", got %#zx want %#"PRIx64".\n",
249 e->h.hash, size_in,
e->h.value_size);
256 TRACE(
"Returning cached item %#"PRIx64".\n",
e->h.hash);
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
#define RB_ENTRY_VALUE(element, type, field)
static void rb_destroy(struct rb_tree *tree, rb_traverse_func_t *callback, void *context)
static int rb_put(struct rb_tree *tree, const void *key, struct rb_entry *entry)
static struct rb_entry * rb_get(const struct rb_tree *tree, const void *key)
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
static void vkd3d_shader_cache_add_entry(struct vkd3d_shader_cache *cache, struct shader_cache_entry *e)
static void vkd3d_shader_cache_destroy_entry(struct rb_entry *entry, void *context)
static uint64_t vkd3d_shader_cache_hash_key(const void *key, size_t size)
static void vkd3d_shader_cache_lock(struct vkd3d_shader_cache *cache)
static int vkd3d_shader_cache_compare_key(const void *key, const struct rb_entry *entry)
static void vkd3d_shader_cache_unlock(struct vkd3d_shader_cache *cache)
int vkd3d_shader_cache_put(struct vkd3d_shader_cache *cache, const void *key, size_t key_size, const void *value, size_t value_size)
int vkd3d_shader_cache_get(struct vkd3d_shader_cache *cache, const void *key, size_t key_size, void *value, size_t *value_size)
unsigned int vkd3d_shader_cache_incref(struct vkd3d_shader_cache *cache)
unsigned int vkd3d_shader_cache_decref(struct vkd3d_shader_cache *cache)
int vkd3d_shader_open_cache(struct vkd3d_shader_cache **cache)
static void vkd3d_mutex_init(struct vkd3d_mutex *lock)
static void vkd3d_mutex_unlock(struct vkd3d_mutex *lock)
static void vkd3d_mutex_lock(struct vkd3d_mutex *lock)
static void vkd3d_mutex_destroy(struct vkd3d_mutex *lock)
static uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
static int vkd3d_u64_compare(uint64_t x, uint64_t y)
static uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
static void vkd3d_free(void *ptr)
static void * vkd3d_malloc(size_t size)
@ VKD3D_ERROR_KEY_ALREADY_EXISTS
@ VKD3D_ERROR_OUT_OF_MEMORY