[Feat] (MG_Util/SpvcSession): reflect member types from SPIR-V binary

This commit is contained in:
2025-08-14 10:33:15 +08:00
parent bb75045584
commit 70b440839d
2 changed files with 50 additions and 0 deletions
@@ -15,8 +15,43 @@
namespace MobileGL {
namespace MG_Util {
namespace ShaderTranspiler {
struct SpvcType {
spvc_basetype basetype = SPVC_BASETYPE_UNKNOWN;
Uint32 vectorSize = 0;
Uint32 matCol = 0;
Bool isScalar() const { return vectorSize == 1 && matCol == 1; }
Bool isVector() const { return vectorSize > 1 && matCol == 1; }
Bool isMatrix() const { return vectorSize > 1 && matCol > 1; }
static Uint32 getByteSizeOfBaseType(const spvc_basetype type) {
switch (type) {
case SPVC_BASETYPE_INT8:
case SPVC_BASETYPE_UINT8:
return 1;
case SPVC_BASETYPE_INT16:
case SPVC_BASETYPE_UINT16:
case SPVC_BASETYPE_FP16:
return 2;
case SPVC_BASETYPE_INT32:
case SPVC_BASETYPE_UINT32:
case SPVC_BASETYPE_FP32:
return 4;
case SPVC_BASETYPE_INT64:
case SPVC_BASETYPE_UINT64:
case SPVC_BASETYPE_FP64:
return 8;
default:
return 0;
}
}
};
struct SpvcMetadata {
UnorderedMap<String, unsigned> plainUniformOffsetsInUBO;
UnorderedMap<String, SizeT> plainUniformMemberSizesInBytes;
UnorderedMap<String, SpvcType> plainUniformMemberTypes;
SizeT uboSize = 0;
};