matdbg: add support for essl1 shader debugging

Fixes #8261
This commit is contained in:
Eliza Velasquez
2025-01-30 15:43:59 -08:00
committed by Eliza
parent 87bdf96449
commit 40851f4b51
22 changed files with 171 additions and 109 deletions

View File

@@ -122,7 +122,8 @@ private:
DebugServer* mServer;
};
DebugServer::DebugServer(Backend backend, int port) : mBackend(backend) {
DebugServer::DebugServer(Backend backend, ShaderLanguage shaderLanguage, int port)
: mBackend(backend), mShaderLanguage(shaderLanguage) {
#if !SERVE_FROM_SOURCE_TREE
ASSET_MAP["/index.html"] = {
@@ -254,47 +255,23 @@ bool DebugServer::handleEditCommand(const MaterialKey& key, backend::Backend api
return error(__LINE__);
}
FixedCapacityVector<ShaderInfo> infos;
size_t shaderCount;
switch (api) {
case backend::Backend::OPENGL: {
shaderCount = getShaderCount(package, ChunkType::MaterialGlsl);
infos.reserve(shaderCount);
infos.resize(shaderCount);
if (!getShaderInfo(package, infos.data(), ChunkType::MaterialGlsl)) {
return error(__LINE__);
}
break;
}
case backend::Backend::VULKAN: {
shaderCount = getShaderCount(package, ChunkType::MaterialSpirv);
infos.reserve(shaderCount);
infos.resize(shaderCount);
if (!getShaderInfo(package, infos.data(), ChunkType::MaterialSpirv)) {
return error(__LINE__);
}
break;
}
case backend::Backend::METAL: {
shaderCount = getShaderCount(package, ChunkType::MaterialMetal);
infos.reserve(shaderCount);
infos.resize(shaderCount);
if (!getShaderInfo(package, infos.data(), ChunkType::MaterialMetal)) {
return error(__LINE__);
}
break;
}
default:
error(__LINE__);
}
ShaderReplacer editor(api, mShaderLanguage, package.getData(), package.getSize());
size_t shaderCount = getShaderCount(package, editor.getMaterialTag());
if (shaderIndex < 0 || shaderIndex >= shaderCount) {
return error(__LINE__);
}
FixedCapacityVector<ShaderInfo> infos;
infos.reserve(shaderCount);
infos.resize(shaderCount);
if (!getShaderInfo(package, infos.data(), editor.getMaterialTag())) {
return error(__LINE__);
}
const ShaderInfo info = infos[shaderIndex];
ShaderReplacer editor(api, package.getData(), package.getSize());
if (!editor.replaceShaderSource(info.shaderModel, info.variant, info.pipelineStage, source, size)) {
if (!editor.replaceShaderSource(info.shaderModel, info.variant, info.pipelineStage, source,
size)) {
return error(__LINE__);
}