Log instead of warn of unsupported extensions

Currently we produce a warning every time an unsupported extension is
used. The original bug (b/139528538) called for logging these structs
silently unless a debugger's attached.

So I've replaced all of our warnings for unsupported structs with
calls to LOG_TRAP. This is an update to TRACE_ASSERT. LOG_TRAP will
never emit to the debug log, instead it will only print to a file if
writing to files is enabled for logv.

Bug: b/148415347
Change-Id: Ib4ad2b20b3dffce4fac597c891b2f5ee23e032c4
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/41348
Tested-by: Sean Risser <srisser@google.com>
Presubmit-Ready: Sean Risser <srisser@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/System/Debug.cpp b/src/System/Debug.cpp
index 8be91a1..1b91e14 100644
--- a/src/System/Debug.cpp
+++ b/src/System/Debug.cpp
@@ -98,11 +98,13 @@
 
 enum class Level
 {
+	Verbose,
 	Debug,
 	Info,
 	Warn,
 	Error,
 	Fatal,
+	Disabled,
 };
 
 #ifdef __ANDROID__
@@ -125,6 +127,8 @@
 		case Level::Fatal:
 			__android_log_write(ANDROID_LOG_FATAL, "SwiftShader", msg);
 			break;
+		default:
+			break;
 	}
 }
 #else
@@ -141,32 +145,32 @@
 		case Level::Fatal:
 			fprintf(stderr, "%s", msg);
 			break;
+		default:
+			break;
 	}
 }
 #endif
 
 void logv(Level level, const char *format, va_list args)
 {
-	if(static_cast<int>(level) < static_cast<int>(Level::SWIFTSHADER_LOGGING_LEVEL))
+	if(static_cast<int>(level) >= static_cast<int>(Level::SWIFTSHADER_LOGGING_LEVEL))
 	{
-		return;
-	}
-
 #ifndef SWIFTSHADER_DISABLE_TRACE
-	char buffer[2048];
-	vsnprintf(buffer, sizeof(buffer), format, args);
+		char buffer[2048];
+		vsnprintf(buffer, sizeof(buffer), format, args);
 
 #	if defined(__ANDROID__)
-	logv_android(level, buffer);
+		logv_android(level, buffer);
 #	elif defined(_WIN32)
-	logv_std(level, buffer);
-	::OutputDebugString(buffer);
+		logv_std(level, buffer);
+		::OutputDebugString(buffer);
 #	else
-	logv_std(level, buffer);
+		logv_std(level, buffer);
 #	endif
+	}
 
-	const bool traceToFile = false;
-	if(traceToFile)
+	const Level traceToFileLevel = Level::Disabled;
+	if(static_cast<int>(level) >= static_cast<int>(traceToFileLevel))
 	{
 		FILE *file = fopen(TRACE_OUTPUT_FILE, "a");
 
@@ -210,8 +214,10 @@
 	::abort();
 }
 
-void trace_assert(const char *format, ...)
+void log_trap(const char *format, ...)
 {
+	// If enabled, log_assert will log all messages, and otherwise ignore them
+	// unless a debugger is attached.
 	static std::atomic<bool> asserted = { false };
 	if(IsUnderDebugger() && !asserted.exchange(true))
 	{
@@ -227,7 +233,7 @@
 	{
 		va_list vararg;
 		va_start(vararg, format);
-		logv(Level::Fatal, format, vararg);
+		logv(Level::Verbose, format, vararg);
 		va_end(vararg);
 	}
 }