Jelajahi Sumber

Shaders: Log and crash when using an unimplemented texture type in a texture sampling instruction.

Subv 8 tahun lalu
induk
melakukan
fc5b489b0f
1 mengubah file dengan 14 tambahan dan 5 penghapusan
  1. 14 5
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp

+ 14 - 5
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@@ -1526,7 +1526,9 @@ private:
                     break;
                 }
                 default:
-                    UNIMPLEMENTED();
+                    LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
+                                 static_cast<u32>(instr.tex.texture_type.Value()));
+                    UNREACHABLE();
                 }
 
                 const std::string sampler =
@@ -1576,7 +1578,9 @@ private:
                     break;
                 }
                 default:
-                    UNIMPLEMENTED();
+                    LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
+                                 static_cast<u32>(instr.texs.GetTextureType()));
+                    UNREACHABLE();
                 }
                 const std::string sampler = GetSampler(instr.sampler, instr.texs.GetTextureType(),
                                                        instr.texs.IsArrayTexture());
@@ -1593,7 +1597,8 @@ private:
                 switch (instr.tlds.GetTextureType()) {
                 case Tegra::Shader::TextureType::Texture2D: {
                     if (instr.tlds.IsArrayTexture()) {
-                        UNIMPLEMENTED();
+                        LOG_CRITICAL(HW_GPU, "Unhandled 2d array texture");
+                        UNREACHABLE();
                     } else {
                         std::string x = regs.GetRegisterAsInteger(instr.gpr8);
                         std::string y = regs.GetRegisterAsInteger(instr.gpr20);
@@ -1602,7 +1607,9 @@ private:
                     break;
                 }
                 default:
-                    UNIMPLEMENTED();
+                    LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
+                                 static_cast<u32>(instr.tlds.GetTextureType()));
+                    UNREACHABLE();
                 }
                 const std::string sampler = GetSampler(instr.sampler, instr.tlds.GetTextureType(),
                                                        instr.tlds.IsArrayTexture());
@@ -1623,7 +1630,9 @@ private:
                     break;
                 }
                 default:
-                    UNIMPLEMENTED();
+                    LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
+                                 static_cast<u32>(instr.tld4.texture_type.Value()));
+                    UNREACHABLE();
                 }
 
                 const std::string sampler =