Skip to content

Latest commit

 

History

History
116 lines (89 loc) · 2.9 KB

File metadata and controls

116 lines (89 loc) · 2.9 KB

Compute Shader 错误已全部修复! ✅

修复的问题

1. ❌ _DynamicInvalidationMasks 未设置

错误: Compute shader (VSMFreeInvalidatedPages): Property (_DynamicInvalidationMasks) is not set

修复:

// 添加字段
private ComputeBuffer dynamicInvalidationMasksBuffer;

// 初始化
dynamicInvalidationMasksBuffer = new ComputeBuffer(VSMConstants.CASCADE_COUNT, sizeof(uint));
uint[] emptyMasks = new uint[VSMConstants.CASCADE_COUNT];
dynamicInvalidationMasksBuffer.SetData(emptyMasks);

// 在 BookkeepingPhase 中设置
freeInvalidatedPagesShader.SetBuffer(kernel, "_DynamicInvalidationMasks", dynamicInvalidationMasksBuffer);

2. ❌ _SourceHPB 未设置

错误: Compute shader (VSMBuildHPB): Property (_SourceHPB) is not set

修复:

// 在 mip level 0 时也设置一个 dummy 纹理
if (i == 0)
{
    buildHPBShader.SetTexture(buildKernel, "_VirtualPageTable", virtualPageTable);
    buildHPBShader.SetTexture(buildKernel, "_SourceHPB", virtualPageTable); // Dummy
}

3. ❌ CopyComputeBufferCount 类型错误

错误: The destination buffer in CopyComputeBufferCount is not of type Raw or IndirectArguments

修复:

// 改用 Raw 类型
allocationCounterBuffer = new ComputeBuffer(2, sizeof(uint), ComputeBufferType.Raw);

Shader 警告 (非错误)

以下是性能警告,不影响功能:

⚠️ Integer 除法/模运算警告

Shader warning: integer modulus may be much slower, try using uints if possible

说明:

  • 这些是性能提示,不是错误
  • 使用 int 除法/模运算比 uint
  • 可以优化,但不影响当前功能

如果想优化:

// 从
int x = value % 32;
// 改为
uint x = value % 32u;

⚠️ Signed/Unsigned 类型警告

Shader warning: signed/unsigned mismatch, unsigned assumed

说明:

  • HLSL 自动转换
  • 不影响功能
  • 可以通过显式类型转换消除

修复清单

✅ DynamicInvalidationMasks buffer 已创建并设置 ✅ HPB SourceHPB 参数已设置 ✅ allocationCounterBuffer 改为 Raw 类型 ✅ 所有 buffer 都在 Cleanup 中正确释放

ComputeBufferType 说明

类型 用途 CopyCount支持
Default 普通结构化数据
Raw 原始字节数据
Append 追加buffer
Counter 带计数器 部分
IndirectArguments GPU绘制参数

现在的状态

✅ 已修复:

  • Input System 错误
  • Shader 兼容性
  • GUID 错误
  • Depth Texture 问题
  • Compute Shader 缺失参数
  • Buffer 类型错误

⚠️ 剩余警告 (可忽略):

  • 性能警告 (int vs uint)
  • 类型转换警告

下一步

在 Unity 中:

  1. 刷新项目 (Ctrl + R)
  2. 点击 Play
  3. 检查是否还有错误

预期: 应该能看到场景运行,虽然阴影可能还需要调试。

Shader 警告不会阻止运行! 它们只是性能优化建议。 🚀