DECO_SPEC_ID = 1,
DECO_ARRAY_STRIDE = 6,
DECO_MATRIX_STRIDE = 7,
+ DECO_BUILTIN = 11,
DECO_LOCATION = 30,
DECO_BINDING = 33,
DECO_DESCRIPTOR_SET = 34,
case OP_TYPE_INT: reflect_int_type(op); break;
case OP_TYPE_FLOAT: reflect_float_type(op); break;
case OP_TYPE_VECTOR: reflect_vector_type(op); break;
- case OP_TYPE_MATRIX: reflect_vector_type(op); break;
+ case OP_TYPE_MATRIX: reflect_matrix_type(op); break;
case OP_TYPE_IMAGE: reflect_image_type(op); break;
case OP_TYPE_SAMPLED_IMAGE: reflect_sampled_image_type(op); break;
case OP_TYPE_ARRAY: reflect_array_type(op); break;
TypeInfo &type = types[*(op+1)];
DataType component = types[*(op+2)].type;
unsigned count = *(op+3);
- type.type = static_cast<DataType>((count<<12) | (component&0xF00) | ((component&0xFF)*count));
+ type.type = static_cast<DataType>(((count-1)<<12) | (component&0xF00) | ((component&0xFF)*count));
}
void SpirVModule::Reflection::reflect_matrix_type(CodeIterator op)
TypeInfo &type = types[*(op+1)];
DataType column = types[*(op+2)].type;
unsigned count = *(op+3);
- type.type = static_cast<DataType>((count<<16) | (column&0xF00) | ((column&0xFF)*count));
+ type.type = static_cast<DataType>(((count-1)<<14) | (column&0x3F00) | ((column&0xFF)*count));
}
void SpirVModule::Reflection::reflect_image_type(CodeIterator op)
case DECO_ARRAY_STRIDE:
types[id].array_stride = *op;
break;
+ case DECO_BUILTIN:
+ variables[id].builtin = static_cast<BuiltinSemantic>(*op);
+ break;
case DECO_LOCATION:
variables[id].location = *op;
break;
case DECO_MATRIX_STRIDE:
member.matrix_stride = *op;
break;
+ case DECO_BUILTIN:
+ member.builtin = static_cast<BuiltinSemantic>(*op);
+ break;
case DECO_OFFSET:
member.offset = *op;
break;