virgl: Make max_hw_atomic_counter_buffers less than PIPE_MAX_HW_ATOMIC_BUFFERS
The values of gl_constants.MaxAtomicBufferBindings and gl_program_constants.MaxAtomicBuffers are derived from pipe_shader_caps.max_hw_atomic_counter_buffers, which is synchronized with the host's GL_MAX_*_ATOMIC_COUNTER_BUFFERS. Based on the definition of struct virgl_context and other factors, the current virgl driver can only support a maximum of 32 atomic buffers. If no restrictions are imposed on pipe_shader_caps.max_hw_atomic_counter_buffers, an error like the following will occur in the vm when the host's GL_MAX_*_ATOMIC_COUNTER_BUFFERS exceeds 32. Thread 1 "glmark2-drm" received signal SIGABRT, Aborted. Download failed: Invalid argument. Continuing without source file ./nptl/./nptl/pthread_kill.c. __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44 warning: 44 ./nptl/pthread_kill.c: No such file or directory #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89 #3 0x00007ffff784527e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0x00007ffff78288ff in __GI_abort () at ./stdlib/abort.c:79 #5 0x00007ffff782881b in __assert_fail_base (fmt=0x7ffff79d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7ffff63f686a "start + count <= 32", file=file@entry=0x7ffff63f6854 "../src/util/ bitscan.h", line=line@entry=306, function=function@entry=0x7ffff6d4c020 <__PRETTY_FUNCTION__.16> "u_bit_cons ecutive") at ./assert/assert.c:96 #6 0x00007ffff783b517 in __assert_fail (assertion=assertion@entry=0x7ffff63f686a "start + count <= 32", file =file@entry=0x7ffff63f6854 "../src/util/bitscan.h", line=line@entry=306, function=function@entry=0x7ffff6d4c020 <__PRETTY_FUNCTION__.16> "u_bit_consecutive") at ./assert/assert.c:105 #7 0x00007ffff5250ef5 in u_bit_consecutive (count=48, start=0) at ../src/util/bitscan.h:306 #8 0x00007ffff5252337 in u_bit_consecutive (count=48, start=0) at ../src/gallium/auxiliary/util/u_inlines.h:75 #9 virgl_set_hw_atomic_buffers (ctx=<optimized out>, start_slot=0, count=48, buffers=0x7fffffffd9b0) at ../src/ gallium/drivers/virgl/virgl_context.c:1351 #10 0x00007ffff4a58faf in st_bind_hw_atomic_buffers (st=<optimized out>) at ../src/mesa/state_tracker/st_atom_ atomicbuf.c:168 #11 0x0000000000000000 in ?? () Signed-off-by: Feng Jiang <jiangfeng@kylinos.cn> Reviewed-by: Corentin Noël <corentin.noel@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35730>
This commit is contained in:
@@ -254,7 +254,7 @@ virgl_init_shader_caps(struct virgl_screen *vscreen)
|
||||
caps->max_hw_atomic_counters =
|
||||
VIRGL_SHADER_STAGE_CAP_V2(max_atomic_counters, i);
|
||||
caps->max_hw_atomic_counter_buffers =
|
||||
VIRGL_SHADER_STAGE_CAP_V2(max_atomic_counter_buffers, i);
|
||||
MIN2(VIRGL_SHADER_STAGE_CAP_V2(max_atomic_counter_buffers, i), PIPE_MAX_HW_ATOMIC_BUFFERS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user