mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[Fix] (MG_State/Program): properly invoke SPIR-V sanitize routine
This commit is contained in:
@@ -899,41 +899,41 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
source = ForceSupporterOutput(source);
|
source = ForceSupporterOutput(source);
|
||||||
|
|
||||||
// TODO: probably a patch system?
|
// TODO: probably a patch system?
|
||||||
String findStr = "if (distance_weight_sum == 0.0)";
|
// String findStr = "if (distance_weight_sum == 0.0)";
|
||||||
String replaceStr = "if (distance_weight_sum <= 0.0001)";
|
// String replaceStr = "if (distance_weight_sum <= 0.0001)";
|
||||||
auto pos = source.find(findStr);
|
// auto pos = source.find(findStr);
|
||||||
while (pos != String::npos) {
|
// while (pos != String::npos) {
|
||||||
MGLOG_D("Applying patch #1 to Photon...");
|
// MGLOG_D("Applying patch #1 to Photon...");
|
||||||
source.replace(pos, findStr.length(), replaceStr);
|
// source.replace(pos, findStr.length(), replaceStr);
|
||||||
pos = source.find(findStr, pos);
|
// pos = source.find(findStr, pos);
|
||||||
}
|
// }
|
||||||
|
|
||||||
findStr = "1000000.0";
|
String findStr = "1000000.0";
|
||||||
replaceStr = "65500.0";
|
String replaceStr = "65500.0";
|
||||||
pos = source.find(findStr);
|
auto pos = source.find(findStr);
|
||||||
while (pos != String::npos) {
|
while (pos != String::npos) {
|
||||||
MGLOG_D("Applying patch #2 to Photon...");
|
MGLOG_D("Applying patch #2 to Photon...");
|
||||||
source.replace(pos, findStr.length(), replaceStr);
|
source.replace(pos, findStr.length(), replaceStr);
|
||||||
pos = source.find(findStr, pos);
|
pos = source.find(findStr, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
findStr = "if (gtao.w == 0.0)";
|
// findStr = "if (gtao.w == 0.0)";
|
||||||
replaceStr = "if (abs(gtao.w) <= 0.00001)";
|
// replaceStr = "if (abs(gtao.w) <= 0.00001)";
|
||||||
pos = source.find(findStr);
|
// pos = source.find(findStr);
|
||||||
while (pos != String::npos) {
|
// while (pos != String::npos) {
|
||||||
MGLOG_D("Applying patch #3 to Photon...");
|
// MGLOG_D("Applying patch #3 to Photon...");
|
||||||
source.replace(pos, findStr.length(), replaceStr);
|
// source.replace(pos, findStr.length(), replaceStr);
|
||||||
pos = source.find(findStr, pos);
|
// pos = source.find(findStr, pos);
|
||||||
}
|
// }
|
||||||
|
|
||||||
findStr = "== 0.0";
|
// findStr = "== 0.0";
|
||||||
replaceStr = "<= 0.00001";
|
// replaceStr = "<= 0.00001";
|
||||||
pos = source.find(findStr);
|
// pos = source.find(findStr);
|
||||||
while (pos != String::npos) {
|
// while (pos != String::npos) {
|
||||||
MGLOG_D("Applying patch #4 to Photon...");
|
// MGLOG_D("Applying patch #4 to Photon...");
|
||||||
source.replace(pos, findStr.length(), replaceStr);
|
// source.replace(pos, findStr.length(), replaceStr);
|
||||||
pos = source.find(findStr, pos);
|
// pos = source.find(findStr, pos);
|
||||||
}
|
// }
|
||||||
|
|
||||||
const char* sourceCStr = source.c_str();
|
const char* sourceCStr = source.c_str();
|
||||||
MGLOG_D("Setting shader source for backend shader ID: %u\nsrc:\n%s", backendShaderId, sourceCStr);
|
MGLOG_D("Setting shader source for backend shader ID: %u\nsrc:\n%s", backendShaderId, sourceCStr);
|
||||||
|
|||||||
@@ -453,11 +453,13 @@ namespace MobileGL {
|
|||||||
MGLOG_D("ProgramObject %u: GenerateBinary - generated %zu SPIR-V modules", m_externalIndex,
|
MGLOG_D("ProgramObject %u: GenerateBinary - generated %zu SPIR-V modules", m_externalIndex,
|
||||||
m_generatedSpirv.size());
|
m_generatedSpirv.size());
|
||||||
|
|
||||||
for (SizeT i = 0; i < m_generatedSpirv.size(); i++) {
|
for (auto& spv: m_generatedSpirv) {
|
||||||
auto& spv = m_generatedSpirv[i];
|
|
||||||
|
|
||||||
auto success = ShaderCompiler::SanitizeBinary(spv, spv);
|
auto success = ShaderCompiler::SanitizeBinary(spv, spv);
|
||||||
MOBILEGL_ASSERT(success, "SanitizeBinary failed");
|
MOBILEGL_ASSERT(success, "SanitizeBinary failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (SizeT i = 0; i < m_generatedSpirv.size(); i++) {
|
||||||
|
auto& spv = m_generatedSpirv[i];
|
||||||
|
|
||||||
auto shaderType = shaderTypes[i];
|
auto shaderType = shaderTypes[i];
|
||||||
MGLOG_D("ProgramObject %u: GenerateBinary - parsing SPIR-V meta data for module %zu "
|
MGLOG_D("ProgramObject %u: GenerateBinary - parsing SPIR-V meta data for module %zu "
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ namespace MobileGL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- Found it, continue to patch it ---
|
// --- Found it, continue to patch it ---
|
||||||
|
MGLOG_D("Found 1 occurrence of `FloatEqualsZero`, patching");
|
||||||
|
|
||||||
// 1. Get var type (Float) and result type (Bool)
|
// 1. Get var type (Float) and result type (Bool)
|
||||||
uint32_t float_type_id = def_use_mgr->GetDef(var_id)->type_id();
|
uint32_t float_type_id = def_use_mgr->GetDef(var_id)->type_id();
|
||||||
|
|||||||
Reference in New Issue
Block a user