LLVMValueRef vertex_index,
boolean is_aindex_indirect,
LLVMValueRef attrib_index,
+ boolean is_sindex_indirect,
LLVMValueRef swizzle_index)
{
const struct draw_tcs_llvm_iface *tcs = draw_tcs_llvm_iface(tes_iface);
LLVMValueRef res;
struct lp_type type = bld->type;
- if (is_vindex_indirect || is_aindex_indirect) {
+ if (is_vindex_indirect || is_aindex_indirect || is_sindex_indirect) {
int i;
res = bld->zero;
LLVMValueRef idx = lp_build_const_int32(gallivm, i);
LLVMValueRef vert_chan_index = vertex_index;
LLVMValueRef attr_chan_index = attrib_index;
+ LLVMValueRef swiz_chan_index = swizzle_index;
LLVMValueRef channel_vec;
if (is_vindex_indirect) {
attr_chan_index = LLVMBuildExtractElement(builder,
attrib_index, idx, "");
}
+ if (is_sindex_indirect) {
+ swiz_chan_index = LLVMBuildExtractElement(builder,
+ swizzle_index, idx, "");
+ }
indices[0] = vert_chan_index;
indices[1] = attr_chan_index;
- indices[2] = swizzle_index;
+ indices[2] = swiz_chan_index;
channel_vec = LLVMBuildGEP(builder, tcs->input, indices, 3, "");
channel_vec = LLVMBuildLoad(builder, channel_vec, "");
LLVMValueRef vertex_index,
boolean is_aindex_indirect,
LLVMValueRef attrib_index,
+ boolean is_sindex_indirect,
LLVMValueRef swizzle_index,
uint32_t name)
{
LLVMValueRef res;
struct lp_type type = bld->type;
- if (is_vindex_indirect || is_aindex_indirect) {
+ if (is_vindex_indirect || is_aindex_indirect || is_sindex_indirect) {
int i;
res = bld->zero;
LLVMValueRef idx = lp_build_const_int32(gallivm, i);
LLVMValueRef vert_chan_index = vertex_index;
LLVMValueRef attr_chan_index = attrib_index;
+ LLVMValueRef swiz_chan_index = swizzle_index;
LLVMValueRef channel_vec;
if (is_vindex_indirect) {
attr_chan_index = LLVMBuildExtractElement(builder,
attrib_index, idx, "");
}
+ if (is_sindex_indirect) {
+ swiz_chan_index = LLVMBuildExtractElement(builder,
+ swizzle_index, idx, "");
+ }
indices[0] = vert_chan_index;
indices[1] = attr_chan_index;
- indices[2] = swizzle_index;
+ indices[2] = swiz_chan_index;
channel_vec = LLVMBuildGEP(builder, tcs->output, indices, 3, "");
channel_vec = LLVMBuildLoad(builder, channel_vec, "");
LLVMValueRef vertex_index,
boolean is_aindex_indirect,
LLVMValueRef attrib_index,
+ boolean is_sindex_indirect,
LLVMValueRef swizzle_index)
{
const struct draw_tes_llvm_iface *tes = draw_tes_llvm_iface(tes_iface);
LLVMValueRef res;
struct lp_type type = bld->type;
- if (is_vindex_indirect || is_aindex_indirect) {
+ if (is_vindex_indirect || is_aindex_indirect || is_sindex_indirect) {
int i;
res = bld->zero;
LLVMValueRef idx = lp_build_const_int32(gallivm, i);
LLVMValueRef vert_chan_index = vertex_index;
LLVMValueRef attr_chan_index = attrib_index;
+ LLVMValueRef swiz_chan_index = swizzle_index;
LLVMValueRef channel_vec;
if (is_vindex_indirect) {
attr_chan_index = LLVMBuildExtractElement(builder,
attrib_index, idx, "");
}
+ if (is_sindex_indirect) {
+ swiz_chan_index = LLVMBuildExtractElement(builder,
+ swizzle_index, idx, "");
+ }
indices[0] = vert_chan_index;
indices[1] = attr_chan_index;
- indices[2] = swizzle_index;
+ indices[2] = swiz_chan_index;
channel_vec = LLVMBuildGEP(builder, tes->input, indices, 3, "");
channel_vec = LLVMBuildLoad(builder, channel_vec, "");