intel/compiler: Add id parameter to shader_perf_log callback
There are two problems with the current architecture. In OpenGL, the id is supposed to be a unique identifier for a particular log source. This is done so that applications can (theoretically) filter particular log messages. The debug callback infrastructure in Mesa assigns a uniqe value when a value of 0 is passed in. This causes the id to get set once to a unique value for each message. By passing a stack variable that is initialized to 0 on every call, every time the same message is logged, it will have a different id. This isn't great, but it's also not catastrophic. When threaded shader compiles are used, the id *pointer* is saved and dereferenced at a possibly much later time on a possibly different thread. This causes one thread to access the stack from a different thread... and that stack frame might not be valid any more. :( I have not observed any crashes related to this particular issue. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12136>
This commit is contained in:
@@ -2848,11 +2848,11 @@ vec4_visitor::run()
|
||||
bool allocated_without_spills = reg_allocate();
|
||||
|
||||
if (!allocated_without_spills) {
|
||||
compiler->shader_perf_log(log_data,
|
||||
"%s shader triggered register spilling. "
|
||||
"Try reducing the number of live vec4 values "
|
||||
"to improve performance.\n",
|
||||
stage_name);
|
||||
brw_shader_perf_log(compiler, log_data,
|
||||
"%s shader triggered register spilling. "
|
||||
"Try reducing the number of live vec4 values "
|
||||
"to improve performance.\n",
|
||||
stage_name);
|
||||
|
||||
while (!reg_allocate()) {
|
||||
if (failed)
|
||||
|
||||
Reference in New Issue
Block a user