mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Feat] (MG_Util/ShaderTranspiler): POC to query member offsets from UBO
This commit is contained in:
@@ -223,4 +223,7 @@ TEST_F(ProgramTest, DecompProgram) {
|
|||||||
EXPECT_EQ(it->second, uniform.location);
|
EXPECT_EQ(it->second, uniform.location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto ubo0 = sessions[0].GetShaderInterface(SPVC_RESOURCE_TYPE_UNIFORM_BUFFER);
|
||||||
|
auto ubo1 = sessions[1].GetShaderInterface(SPVC_RESOURCE_TYPE_UNIFORM_BUFFER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "MG_Util/Debug/Log.h"
|
||||||
|
|
||||||
namespace MobileGL {
|
namespace MobileGL {
|
||||||
namespace MG_Util {
|
namespace MG_Util {
|
||||||
@@ -95,6 +96,22 @@ namespace MobileGL {
|
|||||||
var.name = list[i].name;
|
var.name = list[i].name;
|
||||||
var.location = spvc_compiler_get_decoration(compiler, list[i].id, SpvDecorationLocation);
|
var.location = spvc_compiler_get_decoration(compiler, list[i].id, SpvDecorationLocation);
|
||||||
variables.push_back(var);
|
variables.push_back(var);
|
||||||
|
|
||||||
|
if (resource_type == SPVC_RESOURCE_TYPE_UNIFORM_BUFFER) {
|
||||||
|
spvc_type type = spvc_compiler_get_type_handle(compiler, list[i].base_type_id);
|
||||||
|
size_t num_members = spvc_type_get_num_member_types(type);
|
||||||
|
printf("uniform %s {\n", var.name.c_str());
|
||||||
|
for (size_t j = 0; j < num_members; ++j) {
|
||||||
|
const char *memberName = spvc_compiler_get_member_name(compiler, list[i].base_type_id, j);
|
||||||
|
// auto memberTypeId = spvc_type_get_member_type(type, j);
|
||||||
|
// auto memberType = spvc_compiler_get_type_handle(compiler, memberTypeId);
|
||||||
|
|
||||||
|
unsigned memberOffset = 0;
|
||||||
|
spvc_compiler_type_struct_member_offset(compiler, type, j, &memberOffset);
|
||||||
|
printf("\b%s; // %u\n", memberName, memberOffset);
|
||||||
|
}
|
||||||
|
printf("}\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
std::sort(variables.begin(), variables.end());
|
std::sort(variables.begin(), variables.end());
|
||||||
return variables;
|
return variables;
|
||||||
|
|||||||
Reference in New Issue
Block a user