diff --git a/source/blender/gpu/intern/gpu_shader_log.cc b/source/blender/gpu/intern/gpu_shader_log.cc index b2b4f582a17..77a8209d6ed 100644 --- a/source/blender/gpu/intern/gpu_shader_log.cc +++ b/source/blender/gpu/intern/gpu_shader_log.cc @@ -34,7 +34,7 @@ namespace blender::gpu { #define DEBUG_DEPENDENCIES 0 void Shader::print_log(Span sources, - char *log, + const char *log, const char *stage, const bool error, GPULogParser *parser) @@ -80,7 +80,7 @@ void Shader::print_log(Span sources, sources_end_line.append(0); } - char *log_line = log, *line_end; + const char *log_line = log, *line_end; LogCursor previous_location; @@ -223,6 +223,9 @@ void Shader::print_log(Span sources, else if (log_item.severity == Severity::Error) { BLI_dynstr_appendf(dynstr, "%s%s%s: ", warn_col, "Warning", info_col); } + else if (log_item.severity == Severity::Note) { + BLI_dynstr_appendf(dynstr, "%s%s%s: ", warn_col, "Note", info_col); + } /* Print the error itself. */ BLI_dynstr_append(dynstr, info_col); BLI_dynstr_nappend(dynstr, log_line, (line_end + 1) - log_line); @@ -237,7 +240,8 @@ void Shader::print_log(Span sources, CLG_Severity severity = error ? CLG_SEVERITY_ERROR : CLG_SEVERITY_WARN; if (((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= 0)) || - (severity >= CLG_SEVERITY_WARN)) { + (severity >= CLG_SEVERITY_WARN)) + { const char *_str = BLI_dynstr_get_cstring(dynstr); CLG_log_str(LOG.type, severity, this->name, stage, _str); MEM_freeN((void *)_str); @@ -246,10 +250,11 @@ void Shader::print_log(Span sources, BLI_dynstr_free(dynstr); } -char *GPULogParser::skip_severity(char *log_line, - GPULogItem &log_item, - const char *error_msg, - const char *warning_msg) const +const char *GPULogParser::skip_severity(const char *log_line, + GPULogItem &log_item, + const char *error_msg, + const char *warning_msg, + const char *note_msg) const { if (STREQLEN(log_line, error_msg, strlen(error_msg))) { log_line += strlen(error_msg); @@ -259,10 +264,14 @@ char *GPULogParser::skip_severity(char *log_line, log_line += strlen(warning_msg); log_item.severity = Severity::Warning; } + else if (STREQLEN(log_line, note_msg, strlen(note_msg))) { + log_line += strlen(note_msg); + log_item.severity = Severity::Note; + } return log_line; } -char *GPULogParser::skip_separators(char *log_line, const StringRef separators) const +const char *GPULogParser::skip_separators(const char *log_line, const StringRef separators) const { while (at_any(log_line, separators)) { log_line++; @@ -270,9 +279,9 @@ char *GPULogParser::skip_separators(char *log_line, const StringRef separators) return log_line; } -char *GPULogParser::skip_until(char *log_line, char stop_char) const +const char *GPULogParser::skip_until(const char *log_line, char stop_char) const { - char *cursor = log_line; + const char *cursor = log_line; while (!ELEM(cursor[0], '\n', '\0')) { if (cursor[0] == stop_char) { return cursor; @@ -292,9 +301,9 @@ bool GPULogParser::at_any(const char *log_line, const StringRef chars) const return chars.find(log_line[0]) != StringRef::not_found; } -int GPULogParser::parse_number(const char *log_line, char **r_new_position) const +int GPULogParser::parse_number(const char *log_line, const char **r_new_position) const { - return int(strtol(log_line, r_new_position, 10)); + return int(strtol(log_line, const_cast(r_new_position), 10)); } /** \} */ diff --git a/source/blender/gpu/intern/gpu_shader_private.hh b/source/blender/gpu/intern/gpu_shader_private.hh index 59c4d2b0ea9..c3216f05c60 100644 --- a/source/blender/gpu/intern/gpu_shader_private.hh +++ b/source/blender/gpu/intern/gpu_shader_private.hh @@ -97,8 +97,11 @@ class Shader { static void set_framebuffer_srgb_target(int use_srgb_to_linear); protected: - void print_log( - Span sources, char *log, const char *stage, bool error, GPULogParser *parser); + void print_log(Span sources, + const char *log, + const char *stage, + bool error, + GPULogParser *parser); }; /* Syntactic sugar. */ @@ -119,6 +122,7 @@ enum class Severity { Unknown, Warning, Error, + Note, }; struct LogCursor { @@ -135,18 +139,19 @@ struct GPULogItem { class GPULogParser { public: - virtual char *parse_line(char *log_line, GPULogItem &log_item) = 0; + virtual const char *parse_line(const char *log_line, GPULogItem &log_item) = 0; protected: - char *skip_severity(char *log_line, - GPULogItem &log_item, - const char *error_msg, - const char *warning_msg) const; - char *skip_separators(char *log_line, const StringRef separators) const; - char *skip_until(char *log_line, char stop_char) const; + const char *skip_severity(const char *log_line, + GPULogItem &log_item, + const char *error_msg, + const char *warning_msg, + const char *note_msg) const; + const char *skip_separators(const char *log_line, const StringRef separators) const; + const char *skip_until(const char *log_line, char stop_char) const; bool at_number(const char *log_line) const; bool at_any(const char *log_line, const StringRef chars) const; - int parse_number(const char *log_line, char **r_new_position) const; + int parse_number(const char *log_line, const char **r_new_position) const; MEM_CXX_CLASS_ALLOC_FUNCS("GPULogParser"); }; diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh index 0cdec8ad93f..fc92aaa0a71 100644 --- a/source/blender/gpu/opengl/gl_shader.hh +++ b/source/blender/gpu/opengl/gl_shader.hh @@ -95,11 +95,11 @@ class GLShader : public Shader { class GLLogParser : public GPULogParser { public: - char *parse_line(char *log_line, GPULogItem &log_item) override; + const char *parse_line(const char *log_line, GPULogItem &log_item) override; protected: - char *skip_severity_prefix(char *log_line, GPULogItem &log_item); - char *skip_severity_keyword(char *log_line, GPULogItem &log_item); + const char *skip_severity_prefix(const char *log_line, GPULogItem &log_item); + const char *skip_severity_keyword(const char *log_line, GPULogItem &log_item); MEM_CXX_CLASS_ALLOC_FUNCS("GLLogParser"); }; diff --git a/source/blender/gpu/opengl/gl_shader_log.cc b/source/blender/gpu/opengl/gl_shader_log.cc index 2588beafef4..581b24edddc 100644 --- a/source/blender/gpu/opengl/gl_shader_log.cc +++ b/source/blender/gpu/opengl/gl_shader_log.cc @@ -11,7 +11,7 @@ namespace blender::gpu { -char *GLLogParser::parse_line(char *log_line, GPULogItem &log_item) +const char *GLLogParser::parse_line(const char *log_line, GPULogItem &log_item) { /* Skip ERROR: or WARNING:. */ log_line = skip_severity_prefix(log_line, log_item); @@ -19,7 +19,7 @@ char *GLLogParser::parse_line(char *log_line, GPULogItem &log_item) /* Parse error line & char numbers. */ if (at_number(log_line)) { - char *error_line_number_end; + const char *error_line_number_end; log_item.cursor.row = parse_number(log_line, &error_line_number_end); /* Try to fetch the error character (not always available). */ if (at_any(error_line_number_end, "(:") && at_number(&error_line_number_end[1])) { @@ -70,14 +70,14 @@ char *GLLogParser::parse_line(char *log_line, GPULogItem &log_item) return log_line; } -char *GLLogParser::skip_severity_prefix(char *log_line, GPULogItem &log_item) +const char *GLLogParser::skip_severity_prefix(const char *log_line, GPULogItem &log_item) { - return skip_severity(log_line, log_item, "ERROR", "WARNING"); + return skip_severity(log_line, log_item, "ERROR", "WARNING", "NOTE"); } -char *GLLogParser::skip_severity_keyword(char *log_line, GPULogItem &log_item) +const char *GLLogParser::skip_severity_keyword(const char *log_line, GPULogItem &log_item) { - return skip_severity(log_line, log_item, "error", "warning"); + return skip_severity(log_line, log_item, "error", "warning", "note"); } } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_shader_log.cc b/source/blender/gpu/vulkan/vk_shader_log.cc index 9f32e9863e1..276c7996552 100644 --- a/source/blender/gpu/vulkan/vk_shader_log.cc +++ b/source/blender/gpu/vulkan/vk_shader_log.cc @@ -11,14 +11,14 @@ namespace blender::gpu { -char *VKLogParser::parse_line(char *log_line, GPULogItem &log_item) +const char *VKLogParser::parse_line(const char *log_line, GPULogItem &log_item) { log_line = skip_name(log_line); log_line = skip_separators(log_line, ":"); /* Parse error line & char numbers. */ if (at_number(log_line)) { - char *error_line_number_end; + const char *error_line_number_end; log_item.cursor.row = parse_number(log_line, &error_line_number_end); log_line = error_line_number_end; } @@ -31,14 +31,14 @@ char *VKLogParser::parse_line(char *log_line, GPULogItem &log_item) return log_line; } -char *VKLogParser::skip_name(char *log_line) +const char *VKLogParser::skip_name(const char *log_line) { return skip_until(log_line, ':'); } -char *VKLogParser::skip_severity_keyword(char *log_line, GPULogItem &log_item) +const char *VKLogParser::skip_severity_keyword(const char *log_line, GPULogItem &log_item) { - return skip_severity(log_line, log_item, "error", "warning"); + return skip_severity(log_line, log_item, "error", "warning", "note"); } } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_shader_log.hh b/source/blender/gpu/vulkan/vk_shader_log.hh index b6b08869eb7..29ac3d9af04 100644 --- a/source/blender/gpu/vulkan/vk_shader_log.hh +++ b/source/blender/gpu/vulkan/vk_shader_log.hh @@ -7,10 +7,10 @@ namespace blender::gpu { class VKLogParser : public GPULogParser { public: - char *parse_line(char *log_line, GPULogItem &log_item) override; + const char *parse_line(const char *log_line, GPULogItem &log_item) override; protected: - char *skip_name(char *log_line); - char *skip_severity_keyword(char *log_line, GPULogItem &log_item); + const char *skip_name(const char *log_line); + const char *skip_severity_keyword(const char *log_line, GPULogItem &log_item); }; } // namespace blender::gpu