Esempio n. 1
0
static cg_sampler_cache_entry_t *
_cg_sampler_cache_get_entry_cg(cg_sampler_cache_t *cache,
                                 const cg_sampler_cache_entry_t *key)
{
    cg_sampler_cache_entry_t *entry;

    entry = c_hash_table_lookup(cache->hash_table_cg, key);

    if (entry == NULL) {
        cg_sampler_cache_entry_t canonical_key;
        cg_sampler_cache_entry_t *gl_entry;

        entry = c_slice_dup(cg_sampler_cache_entry_t, key);

        /* Get the sampler object number from the canonical GL version
           of the sampler state cache */
        canonical_key = *key;
        canonicalize_key(&canonical_key);
        gl_entry = _cg_sampler_cache_get_entry_gl(cache, &canonical_key);
        entry->sampler_object = gl_entry->sampler_object;

        c_hash_table_insert(cache->hash_table_cg, entry, entry);
    }

    return entry;
}
Esempio n. 2
0
static void
register_edit_object_cb(void *object, uint64_t edit_mode_id, void *user_data)
{
    rig_slave_t *slave = user_data;
    uint64_t *id_chunk;

    if (lookup_object(slave, edit_mode_id)) {
        c_critical("Tried to re-register object");
        return;
    }

    /* XXX: We need a mechanism for hooking into frontend edits that
     * happen as a result of UI logic so we can make sure to unregister
     * objects that might be deleted by UI logic. */

    id_chunk = rut_magazine_chunk_alloc(_rig_slave_object_id_magazine);
    *id_chunk = edit_mode_id;

    c_hash_table_insert(slave->edit_id_to_play_object_map, id_chunk, object);
    c_hash_table_insert(slave->play_object_to_edit_id_map, object, id_chunk);
}
Esempio n. 3
0
static cg_sampler_cache_entry_t *
_cg_sampler_cache_get_entry_gl(cg_sampler_cache_t *cache,
                               const cg_sampler_cache_entry_t *key)
{
    cg_sampler_cache_entry_t *entry;

    entry = c_hash_table_lookup(cache->hash_table_gl, key);

    if (entry == NULL) {
        cg_device_t *dev = cache->dev;

        entry = c_slice_dup(cg_sampler_cache_entry_t, key);

        if (_cg_has_private_feature(dev,
                                    CG_PRIVATE_FEATURE_SAMPLER_OBJECTS)) {
            GE(dev, glGenSamplers(1, &entry->sampler_object));

            GE(dev,
               glSamplerParameteri(entry->sampler_object,
                                   GL_TEXTURE_MIN_FILTER,
                                   entry->min_filter));
            GE(dev,
               glSamplerParameteri(entry->sampler_object,
                                   GL_TEXTURE_MAG_FILTER,
                                   entry->mag_filter));

            set_wrap_mode(dev,
                          entry->sampler_object,
                          GL_TEXTURE_WRAP_S,
                          entry->wrap_mode_s);
            set_wrap_mode(dev,
                          entry->sampler_object,
                          GL_TEXTURE_WRAP_T,
                          entry->wrap_mode_t);
            set_wrap_mode(dev,
                          entry->sampler_object,
                          GL_TEXTURE_WRAP_R,
                          entry->wrap_mode_p);
        } else {
            /* If sampler objects aren't supported then we'll invent a
               unique number so that pipelines can still compare the
               unique state just by comparing the sampler object
               numbers */
            entry->sampler_object = cache->next_fake_sampler_object_number++;
        }

        c_hash_table_insert(cache->hash_table_gl, entry, entry);
    }

    return entry;
}
Esempio n. 4
0
c_quark_t
c_quark_from_string(const char *string)
{
    void *quark_ptr;

    ensure_quark_hash_table();

    quark_ptr = c_hash_table_lookup(_quark_hash_table, string);
    if (!quark_ptr) {
        c_quark_t new_quark = _next_quark++;
        c_hash_table_insert(_quark_hash_table, (void *)c_strdup(string),
                            C_UINT_TO_POINTER(new_quark));
        return new_quark;
    } else
        return C_POINTER_TO_UINT(quark_ptr);
}
Esempio n. 5
0
const char *
c_intern_string(const char *string)
{
    void *quark_key;
    void *quark_ptr;
    bool found;

    ensure_quark_hash_table();

    found = c_hash_table_lookup_extended(_quark_hash_table,
                                         string,
                                         &quark_key,
                                         &quark_ptr);
    if (!found) {
        c_quark_t new_quark = _next_quark++;
        quark_key = c_strdup(string);
        c_hash_table_insert(_quark_hash_table, quark_key,
                            C_UINT_TO_POINTER(new_quark));
    }

    return quark_key;
}