static void init_velement_lowered(struct st_context *st, const struct st_vertex_program *vp, struct pipe_vertex_element *velements, int src_offset, int format, int instance_divisor, int vbo_index, int nr_components, GLboolean doubles, GLuint *attr_idx) { int idx = *attr_idx; if (doubles) { int lower_format; if (nr_components < 2) lower_format = PIPE_FORMAT_R32G32_UINT; else lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset, lower_format, instance_divisor, vbo_index); idx++; if (idx < vp->num_inputs && vp->index_to_input[idx] == ST_DOUBLE_ATTRIB_PLACEHOLDER) { if (nr_components >= 3) { if (nr_components == 3) lower_format = PIPE_FORMAT_R32G32_UINT; else lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset + 4 * sizeof(float), lower_format, instance_divisor, vbo_index); } else { /* The values here are undefined. Fill in some conservative * dummy values. */ init_velement(&velements[idx], src_offset, PIPE_FORMAT_R32G32_UINT, instance_divisor, vbo_index); } idx++; } } else { init_velement(&velements[idx], src_offset, format, instance_divisor, vbo_index); idx++; } *attr_idx = idx; }
static void init_velement_lowered(const struct st_vertex_program *vp, struct pipe_vertex_element *velements, const struct gl_vertex_format *vformat, int src_offset, int instance_divisor, int vbo_index, int idx) { const GLubyte nr_components = vformat->Size; if (vformat->Doubles) { int lower_format; if (nr_components < 2) lower_format = PIPE_FORMAT_R32G32_UINT; else lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset, lower_format, instance_divisor, vbo_index); idx++; if (idx < vp->num_inputs && vp->index_to_input[idx] == ST_DOUBLE_ATTRIB_PLACEHOLDER) { if (nr_components >= 3) { if (nr_components == 3) lower_format = PIPE_FORMAT_R32G32_UINT; else lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset + 4 * sizeof(float), lower_format, instance_divisor, vbo_index); } else { /* The values here are undefined. Fill in some conservative * dummy values. */ init_velement(&velements[idx], src_offset, PIPE_FORMAT_R32G32_UINT, instance_divisor, vbo_index); } } } else { const unsigned format = st_pipe_vertex_format(vformat); init_velement(&velements[idx], src_offset, format, instance_divisor, vbo_index); } }
static void init_velement_lowered(struct st_context *st, struct pipe_vertex_element *velements, int src_offset, int format, int instance_divisor, int vbo_index, int nr_components, GLboolean doubles, GLuint *attr_idx) { int idx = *attr_idx; if (doubles) { int lower_format; if (nr_components == 1) lower_format = PIPE_FORMAT_R32G32_UINT; else if (nr_components >= 2) lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset, lower_format, instance_divisor, vbo_index); idx++; if (nr_components > 2) { if (nr_components == 3) lower_format = PIPE_FORMAT_R32G32_UINT; else if (nr_components >= 4) lower_format = PIPE_FORMAT_R32G32B32A32_UINT; init_velement(&velements[idx], src_offset + 4 * sizeof(float), lower_format, instance_divisor, vbo_index); idx++; } } else { init_velement(&velements[idx], src_offset, format, instance_divisor, vbo_index); idx++; } *attr_idx = idx; }