本文整理汇总了C++中ralloc_strdup函数的典型用法代码示例。如果您正苦于以下问题:C++ ralloc_strdup函数的具体用法?C++ ralloc_strdup怎么用?C++ ralloc_strdup使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ralloc_strdup函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: gl_type
glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
const char *name) :
gl_type(0),
base_type(GLSL_TYPE_STRUCT),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
sampler_type(0), interface_packing(0),
vector_elements(0), matrix_columns(0),
length(num_fields)
{
unsigned int i;
init_ralloc_type_ctx();
assert(name != NULL);
this->name = ralloc_strdup(this->mem_ctx, name);
this->fields.structure = ralloc_array(this->mem_ctx,
glsl_struct_field, length);
for (i = 0; i < length; i++) {
this->fields.structure[i].type = fields[i].type;
this->fields.structure[i].name = ralloc_strdup(this->fields.structure,
fields[i].name);
this->fields.structure[i].precision = fields[i].precision;
this->fields.structure[i].location = fields[i].location;
this->fields.structure[i].interpolation = fields[i].interpolation;
this->fields.structure[i].centroid = fields[i].centroid;
this->fields.structure[i].sample = fields[i].sample;
this->fields.structure[i].matrix_layout = fields[i].matrix_layout;
}
}
示例2: ralloc_strdup
void
program_resource_visitor::process(ir_variable *var)
{
const glsl_type *t = var->type;
/* false is always passed for the row_major parameter to the other
* processing functions because no information is available to do
* otherwise. See the warning in linker.h.
*/
/* Only strdup the name if we actually will need to modify it. */
if (t->is_record() || (t->is_array() && t->fields.array->is_record())) {
char *name = ralloc_strdup(NULL, var->name);
recursion(var->type, &name, strlen(name), false);
ralloc_free(name);
} else if (t->is_interface()) {
char *name = ralloc_strdup(NULL, var->type->name);
recursion(var->type, &name, strlen(name), false);
ralloc_free(name);
} else if (t->is_array() && t->fields.array->is_interface()) {
char *name = ralloc_strdup(NULL, var->type->fields.array->name);
recursion(var->type, &name, strlen(name), false);
ralloc_free(name);
} else {
this->visit_field(t, var->name, false);
}
}
示例3: base_type
glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
const char *name) :
base_type(GLSL_TYPE_STRUCT),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
sampler_ms(false), sampler_buffer(false), outputstream_type(GLSL_OUTPUTSTREAM_NONE),
sample_count(1), inner_type(0), vector_elements(0),
matrix_columns(0), HlslName(nullptr), length(num_fields), patch_length(0)
{
unsigned int i;
init_ralloc_type_ctx();
this->name = ralloc_strdup(this->mem_ctx, name);
this->fields.structure = ralloc_array(this->mem_ctx,
glsl_struct_field, length);
for (i = 0; i < length; i++)
{
this->fields.structure[i].type = fields[i].type;
this->fields.structure[i].name = ralloc_strdup(this->mem_ctx, fields[i].name);
this->fields.structure[i].semantic = ralloc_strdup(this->mem_ctx, fields[i].semantic);
this->fields.structure[i].centroid = fields[i].centroid;
this->fields.structure[i].interpolation = fields[i].interpolation;
this->fields.structure[i].geometryinput = fields[i].geometryinput;
this->fields.structure[i].patchconstant = fields[i].patchconstant;
}
}
示例4: while
ir_visitor_status
ir_array_decomposer_visitor::visit(ir_variable *ir)
{
if(!basevar) basevar = ir;
if(ir->type->is_array()) {
unsigned array_count = ir->type->array_size();
void *ctx = ir;
while(array_count-- > 0) {
char nm[512];
sprintf(&nm[0], "%s_%d", ir->name, array_count);
ir_variable *newvar = new (ctx) ir_variable(ir->type->element_type(), ralloc_strdup(ctx, &nm[0]), (ir_variable_mode)ir->mode, (glsl_precision)ir->precision);
newvar->parent = ir;
newvar->location = array_count;
base_ir->insert_after(newvar);
hash_table_insert(varhash, newvar, ralloc_strdup(ctx, &nm[0]));
}
} else if(ir->type->is_matrix()) {
unsigned n = ir->type->matrix_columns;
void *ctx = ir;
while(n-- > 0) {
char nm[512];
sprintf(&nm[0], "%s_%d", ir->name, n);
ir_variable *newvar = new (ctx) ir_variable(glsl_type::vec4_type, ralloc_strdup(ctx, &nm[0]), (ir_variable_mode)ir->mode, (glsl_precision)ir->precision);
newvar->parent = ir;
ir->child[n] = newvar;
newvar->usedAsAMatrixComponent = true;
newvar->location = n;
base_ir->insert_after(newvar);
hash_table_insert(varhash, newvar, ralloc_strdup(ctx, &nm[0]));
}
}
return visit_continue;
}
示例5: if
void ir_remap_agalvars_visitor::handleDeref(ir_variable **varloc)
{
ir_variable *glvar = *varloc;
ir_variable *agalvar = (ir_variable*)hash_table_find(varhash, glvar->name);
if(agalvar) {
*varloc = agalvar;
//fprintf(stderr, "remapping deref -- %s\n", glvar->name);
} else if(glvar->name[0] == 'g' && glvar->name[1] == 'l' && glvar->name[2] == '_') {
computeAgalName(glvar);
agalvar = new (glvar) ir_variable(glvar->type, ralloc_strdup(glvar, &agalName[0]), (ir_variable_mode)glvar->mode, (glsl_precision)glvar->precision);
hash_table_insert(varhash, agalvar, ralloc_strdup(agalvar, glvar->name));
hash_table_insert(varhash, agalvar, ralloc_strdup(agalvar, &agalName[0]));
hash_table_insert(renamedvars, glvar, glvar);
varbase->insert_before(agalvar);
*varloc = agalvar;
//fprintf(stderr, "renaming: %s -> %s\n", glvar->name, &agalName[0]);
} else if (hash_table_find(renamedvars, glvar)) {
// already renamed
} else {
computeAgalName(glvar);
glvar->name = ralloc_strdup(glvar, agalName);
hash_table_insert(renamedvars, glvar, glvar);
}
}
示例6: check
void glsl_type::add_structure_member(const glsl_struct_field* field)
{
check(this->is_record());
unsigned int i;
glsl_struct_field* new_fields = ralloc_array(this->mem_ctx, glsl_struct_field, this->length + 1);
for (i = 0; i < this->length; i++)
{
new_fields[i].type = this->fields.structure[i].type;
new_fields[i].name = this->fields.structure[i].name;
new_fields[i].semantic = this->fields.structure[i].semantic;
new_fields[i].centroid = this->fields.structure[i].centroid;
new_fields[i].interpolation = this->fields.structure[i].interpolation;
new_fields[i].geometryinput = this->fields.structure[i].geometryinput;
new_fields[i].patchconstant = this->fields.structure[i].patchconstant;
}
new_fields[i].type = field->type;
new_fields[i].name = ralloc_strdup(new_fields, field->name);
new_fields[i].semantic = ralloc_strdup(new_fields, field->semantic);
new_fields[i].centroid = field->centroid;
new_fields[i].interpolation = field->interpolation;
new_fields[i].geometryinput = field->geometryinput;
new_fields[i].patchconstant = field->patchconstant;
this->fields.structure = new_fields;
++this->length;
}
示例7: copyShVariableCtx
ShVariable* copyShVariableCtx(ShVariable *src, void* mem_ctx)
{
if (!src)
return NULL;
ShVariable* ret = (ShVariable*) rzalloc(mem_ctx, ShVariable);
assert(ret || !"not enough memory to copy ShVariable");
ret->uniqueId = src->uniqueId;
ret->builtin = src->builtin;
if (src->name)
ret->name = ralloc_strdup(ret, src->name);
ret->type = src->type;
ret->qualifier = src->qualifier;
ret->size = src->size;
ret->isMatrix = src->isMatrix;
ret->matrixSize[0] = src->matrixSize[0];
ret->matrixSize[1] = src->matrixSize[1];
ret->isArray = src->isArray;
for (int i = 0; i < MAX_ARRAYS; i++)
ret->arraySize[i] = src->arraySize[i];
if (src->structName)
ret->structName = ralloc_strdup(ret, src->structName);
ret->structSize = src->structSize;
if (ret->structSize) {
ret->structSpec = (ShVariable**) rzalloc_array(ret, ShVariable*, ret->structSize);
assert(ret->structSpec || !"not enough memory to copy structSpec of ShVariable");
for (int i = 0; i < ret->structSize; i++)
ret->structSpec[i] = copyShVariableCtx(src->structSpec[i], ret->structSpec);
}
示例8: ralloc_strdup
void glsl_type::replace_structure_member(int memberIndex, const glsl_struct_field* new_field)
{
this->fields.structure[memberIndex].type = new_field->type;
this->fields.structure[memberIndex].name = ralloc_strdup(this->fields.structure, new_field->name);
this->fields.structure[memberIndex].semantic = ralloc_strdup(this->fields.structure, new_field->semantic);
this->fields.structure[memberIndex].centroid = new_field->centroid;
this->fields.structure[memberIndex].interpolation = new_field->interpolation;
this->fields.structure[memberIndex].geometryinput = new_field->geometryinput;
this->fields.structure[memberIndex].patchconstant = new_field->patchconstant;
}
示例9: build_color_shaders
static void
build_color_shaders(struct nir_shader **out_vs,
struct nir_shader **out_fs,
uint32_t frag_output)
{
nir_builder vs_b;
nir_builder fs_b;
nir_builder_init_simple_shader(&vs_b, NULL, MESA_SHADER_VERTEX, NULL);
nir_builder_init_simple_shader(&fs_b, NULL, MESA_SHADER_FRAGMENT, NULL);
vs_b.shader->info.name = ralloc_strdup(vs_b.shader, "meta_clear_color_vs");
fs_b.shader->info.name = ralloc_strdup(fs_b.shader, "meta_clear_color_fs");
const struct glsl_type *position_type = glsl_vec4_type();
const struct glsl_type *color_type = glsl_vec4_type();
nir_variable *vs_out_pos =
nir_variable_create(vs_b.shader, nir_var_shader_out, position_type,
"gl_Position");
vs_out_pos->data.location = VARYING_SLOT_POS;
nir_intrinsic_instr *in_color_load = nir_intrinsic_instr_create(fs_b.shader, nir_intrinsic_load_push_constant);
nir_intrinsic_set_base(in_color_load, 0);
nir_intrinsic_set_range(in_color_load, 16);
in_color_load->src[0] = nir_src_for_ssa(nir_imm_int(&fs_b, 0));
in_color_load->num_components = 4;
nir_ssa_dest_init(&in_color_load->instr, &in_color_load->dest, 4, 32, "clear color");
nir_builder_instr_insert(&fs_b, &in_color_load->instr);
nir_variable *fs_out_color =
nir_variable_create(fs_b.shader, nir_var_shader_out, color_type,
"f_color");
fs_out_color->data.location = FRAG_RESULT_DATA0 + frag_output;
nir_store_var(&fs_b, fs_out_color, &in_color_load->dest.ssa, 0xf);
nir_ssa_def *outvec = radv_meta_gen_rect_vertices(&vs_b);
nir_store_var(&vs_b, vs_out_pos, outvec, 0xf);
const struct glsl_type *layer_type = glsl_int_type();
nir_variable *vs_out_layer =
nir_variable_create(vs_b.shader, nir_var_shader_out, layer_type,
"v_layer");
vs_out_layer->data.location = VARYING_SLOT_LAYER;
vs_out_layer->data.interpolation = INTERP_MODE_FLAT;
nir_ssa_def *inst_id = nir_load_system_value(&vs_b, nir_intrinsic_load_instance_id, 0);
nir_ssa_def *base_instance = nir_load_system_value(&vs_b, nir_intrinsic_load_base_instance, 0);
nir_ssa_def *layer_id = nir_iadd(&vs_b, inst_id, base_instance);
nir_store_var(&vs_b, vs_out_layer, layer_id, 0x1);
*out_vs = vs_b.shader;
*out_fs = fs_b.shader;
}
示例10: assert
/**
* Replace any declaration of gl_TessLevel* as an array of floats with a
* declaration of gl_TessLevel*MESA as a vec4.
*/
ir_visitor_status
lower_tess_level_visitor::visit(ir_variable *ir)
{
if ((!ir->name) ||
((strcmp(ir->name, "gl_TessLevelInner") != 0) &&
(strcmp(ir->name, "gl_TessLevelOuter") != 0)))
return visit_continue;
assert (ir->type->is_array());
if (strcmp(ir->name, "gl_TessLevelOuter") == 0) {
if (this->old_tess_level_outer_var)
return visit_continue;
old_tess_level_outer_var = ir;
assert(ir->type->fields.array == glsl_type::float_type);
/* Clone the old var so that we inherit all of its properties */
new_tess_level_outer_var = ir->clone(ralloc_parent(ir), NULL);
/* And change the properties that we need to change */
new_tess_level_outer_var->name = ralloc_strdup(new_tess_level_outer_var,
"gl_TessLevelOuterMESA");
new_tess_level_outer_var->type = glsl_type::vec4_type;
new_tess_level_outer_var->data.max_array_access = 0;
ir->replace_with(new_tess_level_outer_var);
} else if (strcmp(ir->name, "gl_TessLevelInner") == 0) {
if (this->old_tess_level_inner_var)
return visit_continue;
old_tess_level_inner_var = ir;
assert(ir->type->fields.array == glsl_type::float_type);
/* Clone the old var so that we inherit all of its properties */
new_tess_level_inner_var = ir->clone(ralloc_parent(ir), NULL);
/* And change the properties that we need to change */
new_tess_level_inner_var->name = ralloc_strdup(new_tess_level_inner_var,
"gl_TessLevelInnerMESA");
new_tess_level_inner_var->type = glsl_type::vec2_type;
new_tess_level_inner_var->data.max_array_access = 0;
ir->replace_with(new_tess_level_inner_var);
} else {
assert(0);
}
this->progress = true;
return visit_continue;
}
示例11: sprintf
ir_visitor_status
ir_unique_agalvars_visitor::visit(ir_variable *ir)
{
if(hash_table_find(varhash, ir->name)) {
char nm[512];
sprintf(&nm[0], "%s_%d", ir->name, tmpcount++);
//fprintf(stderr, "uniquing %s --> %s\n", ir->name, &nm[0]);
ir->name = (char*)ralloc_strdup(ir, &nm[0]);
}
hash_table_insert(varhash, (void*)0x1, ralloc_strdup(ir, ir->name));
return visit_continue;
}
示例12: visit_field
virtual void visit_field(const glsl_type *type, const char *name,
bool row_major, const glsl_type *record_type)
{
assert(this->index < this->num_variables);
gl_uniform_buffer_variable *v = &this->variables[this->index++];
v->Name = ralloc_strdup(mem_ctx, name);
v->Type = type;
v->RowMajor = row_major;
if (this->is_array_instance) {
v->IndexName = ralloc_strdup(mem_ctx, name);
char *open_bracket = strchr(v->IndexName, '[');
assert(open_bracket != NULL);
char *close_bracket = strchr(open_bracket, ']');
assert(close_bracket != NULL);
/* Length of the tail without the ']' but with the NUL.
*/
unsigned len = strlen(close_bracket + 1) + 1;
memmove(open_bracket, close_bracket + 1, len);
} else {
v->IndexName = v->Name;
}
const unsigned alignment = record_type
? record_type->std140_base_alignment(!!v->RowMajor)
: type->std140_base_alignment(!!v->RowMajor);
unsigned size = type->std140_size(!!v->RowMajor);
this->offset = glsl_align(this->offset, alignment);
v->Offset = this->offset;
this->offset += size;
/* From the GL_ARB_uniform_buffer_object spec:
*
* "For uniform blocks laid out according to [std140] rules, the
* minimum buffer object size returned by the
* UNIFORM_BLOCK_DATA_SIZE query is derived by taking the offset of
* the last basic machine unit consumed by the last uniform of the
* uniform block (including any end-of-array or end-of-structure
* padding), adding one, and rounding up to the next multiple of
* the base alignment required for a vec4."
*/
this->buffer_size = glsl_align(this->offset, 16);
}
示例13: ralloc_parent
ir_rvalue*
ir_array_decomposer_visitor::computeNewRValue(ir_rvalue *rval)
{
ir_dereference_array *da = rval->as_dereference_array();
if(da && (da->array->type->is_array() || da->array->type->is_matrix())) {
ir_constant *ci = da->array_index->constant_expression_value();
if(!ci) {
return NULL;
}
ir_variable *src = da->variable_referenced();
if(!src) {
return NULL;
}
// make sure unsized arrays end up with a reasonable size
if(src->max_array_access < ci->get_int_component(0)) {
src->max_array_access = ci->get_int_component(0);
//fprintf(stderr, "updating max access: %d\n", src->max_array_access);
}
void *ctx = ralloc_parent(base_ir);
char nm[512] = {0};
sprintf(&nm[0], "%s_%d", src->name, ci->get_int_component(0));
ir_variable *v = (ir_variable*)hash_table_find(varhash, &nm[0]);
if(!v) {
v = new (ctx) ir_variable(src->type->element_type(), ralloc_strdup(ctx, &nm[0]), (ir_variable_mode)src->mode, (glsl_precision)src->precision);
v->parent = src;
v->location = ci->get_int_component(0);
basevar->insert_before(v);
hash_table_insert(varhash, v, ralloc_strdup(ctx, &nm[0]));
}
ir_dereference_variable *dv = new(ctx) ir_dereference_variable(v);
int c = v->type->vector_elements;
if(c == 4) {
return dv;
}
char si[5] = "xyzw";
si[c] = 0;
ir_swizzle *sz = ir_swizzle::create(dv, si, c);
return sz;
}
return NULL;
}
示例14: _mesa_clear_shader_program_data
void
_mesa_clear_shader_program_data(struct gl_shader_program *shProg)
{
unsigned i;
shProg->NumUniformStorage = 0;
shProg->UniformStorage = NULL;
shProg->NumUniformRemapTable = 0;
shProg->UniformRemapTable = NULL;
shProg->UniformHash = NULL;
ralloc_free(shProg->InfoLog);
shProg->InfoLog = ralloc_strdup(shProg, "");
ralloc_free(shProg->BufferInterfaceBlocks);
shProg->BufferInterfaceBlocks = NULL;
shProg->NumBufferInterfaceBlocks = 0;
ralloc_free(shProg->UniformBlocks);
shProg->UniformBlocks = NULL;
shProg->NumUniformBlocks = 0;
ralloc_free(shProg->ShaderStorageBlocks);
shProg->ShaderStorageBlocks = NULL;
shProg->NumShaderStorageBlocks = 0;
for (i = 0; i < MESA_SHADER_STAGES; i++) {
ralloc_free(shProg->InterfaceBlockStageIndex[i]);
shProg->InterfaceBlockStageIndex[i] = NULL;
}
ralloc_free(shProg->AtomicBuffers);
shProg->AtomicBuffers = NULL;
shProg->NumAtomicBuffers = 0;
}
示例15: _mesa_clear_shader_program_data
/**
* Clear (free) the shader program state that gets produced by linking.
*/
void
_mesa_clear_shader_program_data(struct gl_context *ctx,
struct gl_shader_program *shProg)
{
if (shProg->UniformStorage) {
unsigned i;
for (i = 0; i < shProg->NumUserUniformStorage; ++i)
_mesa_uniform_detach_all_driver_storage(&shProg->UniformStorage[i]);
ralloc_free(shProg->UniformStorage);
shProg->NumUserUniformStorage = 0;
shProg->UniformStorage = NULL;
}
if (shProg->UniformRemapTable) {
ralloc_free(shProg->UniformRemapTable);
shProg->NumUniformRemapTable = 0;
shProg->UniformRemapTable = NULL;
}
if (shProg->UniformHash) {
string_to_uint_map_dtor(shProg->UniformHash);
shProg->UniformHash = NULL;
}
assert(shProg->InfoLog != NULL);
ralloc_free(shProg->InfoLog);
shProg->InfoLog = ralloc_strdup(shProg, "");
}