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,
}
-SpirVModule::EntryPoint::EntryPoint():
- stage(VERTEX)
-{ }
-
-
-SpirVModule::StructMember::StructMember():
- type(VOID),
- struct_type(0),
- offset(0),
- array_size(0),
- array_size_spec(0),
- array_stride(0),
- matrix_stride(0)
-{ }
-
-
-SpirVModule::Variable::Variable():
- type(VOID),
- struct_type(0),
- location(-1),
- descriptor_set(-1),
- binding(-1)
-{ }
-
bool SpirVModule::Variable::operator==(const Variable &other) const
{
if(storage!=UNIFORM_CONSTANT && storage!=UNIFORM)
}
-SpirVModule::TypeInfo::TypeInfo():
- type(VOID),
- struct_type(0),
- array_size_spec(0),
- array_size(0),
- array_stride(0),
- storage(static_cast<StorageClass>(-1))
-{ }
-
-
uint32_t SpirVModule::Reflection::get_opcode(uint32_t op)
{
return op&0xFFFF;
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;