Summary: | [OpenGL CTS] [SKL] KHR-GL46.compute_shader.resource-texture sometimes fails in full run | ||
---|---|---|---|
Product: | Mesa | Reporter: | Kenneth Graunke <kenneth> |
Component: | Drivers/DRI/i965 | Assignee: | Intel 3D Bugs Mailing List <intel-3d-bugs> |
Status: | RESOLVED MOVED | QA Contact: | Intel 3D Bugs Mailing List <intel-3d-bugs> |
Severity: | normal | ||
Priority: | medium | CC: | agoldmints, agomez |
Version: | git | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Bug Depends on: | |||
Bug Blocks: | 102590 |
Description
Kenneth Graunke
2017-12-07 07:53:45 UTC
I did see this failure in a CI run today, so it is possible to reproduce it without a full run. Not quite sure how yet. Is there any output from the failing runs? The test uses indirect dispatch and memory barriers. There are plenty of opportunities for timing related issues. KHR-GL46.compute_shader.resource-texture.kblm64 (from KHR-GL46) Failing for the past 1 build (Since Failed#11521 ) Took 0.13 sec. Standard Output Compute Shader resources - Textures Verify that texture access works correctly in CS. 1. Create CS which uses all sampler types (sampler1D, sampler2D, sampler3D, sampler2DRect, sampler1DArray, sampler2DArray, samplerBuffer, sampler2DMS, sampler2DMSArray). 2. Dispatch CS with DispatchCompute and DispatchComputeIndirect commands. 3. Sample each texture and write sampled value to SSBO. 4. Verify SSBO content. 5. Repeat for different texture and CS work sizes. Everything works as expected. glCreateProgram(); // 2791 returned glCreateShader(GL_COMPUTE_SHADER); // 2792 returned glAttachShader(2791, 2792); glDeleteShader(2792); glShaderSource(2792, 2, 0x00007ffd0d4be1a0, 0x0000000000000000); glCompileShader(2792); glLinkProgram(2791); glGetProgramiv(2791, GL_LINK_STATUS, 0x00007ffd0d4bd264); // params = { 1 } glUseProgram(2791); glGetUniformLocation(2791, g_sampler0); // 0 returned glUniform1i(0, 0); glGetUniformLocation(2791, g_sampler1); // 1 returned glUniform1i(1, 1); glGetUniformLocation(2791, g_sampler2); // 2 returned glUniform1i(2, 2); glGetUniformLocation(2791, g_sampler3); // 3 returned glUniform1i(3, 3); glGetUniformLocation(2791, g_sampler4); // 4 returned glUniform1i(4, 4); glGetUniformLocation(2791, g_sampler5); // 5 returned glUniform1i(5, 5); glGetUniformLocation(2791, g_sampler6); // 6 returned glUniform1i(6, 6); glGetUniformLocation(2791, g_sampler7); // 7 returned glUniform1i(7, 7); glGetUniformLocation(2791, g_sampler8); // 8 returned glUniform1i(8, 8); glUseProgram(0); glGenBuffers(1, 0x000055cc8d6eab1c); // buffers = { 1215 } glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 1215); glBufferData(GL_SHADER_STORAGE_BUFFER, 73728, 0x55cc8c221c90, GL_DYNAMIC_DRAW); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); glGenTextures(9, 0x000055cc8d6eab20); // textures = { 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163 } glGenBuffers(1, 0x000055cc8d6eab44); // buffers = { 1216 } glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_1D, 1155); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 32, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, 1156); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_3D, 1157); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F, 32, 4, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE3); glBindTexture(0x84f5, 1158); glTexParameteri(0x84f5, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(0x84f5, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(0x84f5, 0, GL_RGBA32F, 32, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE4); glBindTexture(0x8c18, 1159); glTexParameteri(0x8c18, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(0x8c18, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(0x8c18, 0, GL_RGBA32F, 32, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D_ARRAY, 1160); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA32F, 32, 4, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8c74f9c0); glActiveTexture(GL_TEXTURE6); glBindBuffer(GL_TEXTURE_BUFFER, 1216); glBufferData(GL_TEXTURE_BUFFER, 8192, 0x55cc8c74f9c0, GL_DYNAMIC_DRAW); glBindBuffer(GL_TEXTURE_BUFFER, 0); glBindTexture(GL_TEXTURE_BUFFER, 1161); glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, 1216); glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 1162); glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA32F, 32, 4, GL_FALSE); glActiveTexture(GL_TEXTURE8); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 1163); glTexImage3DMultisample(0x00009102, 4, 0x00008814, 32, 4, 4, GL_FALSE); glGenFramebuffers(1, 0x00007ffd0d4be21c); // framebuffers = { 209 } glBindFramebuffer(GL_FRAMEBUFFER, 209); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 1162, 0); glClearBufferfv(GL_COLOR, 0, 0x00007ffd0d4be2c0); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 1163, 0); glClearBufferfv(GL_COLOR, 0, 0x00007ffd0d4be2d0); glDeleteFramebuffers(1, { 209 }); glUseProgram(2791); glDispatchCompute(8, 1, 1); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1215); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); glGetBufferSubData(0x000090d2, 0, 73728, 0x55cc8c221c90); glDeleteProgram(2791); glCreateProgram(); // 2793 returned glCreateShader(GL_COMPUTE_SHADER); // 2794 returned glAttachShader(2793, 2794); glDeleteShader(2794); glShaderSource(2794, 2, 0x00007ffd0d4be1a0, 0x0000000000000000); glCompileShader(2794); glLinkProgram(2793); glGetProgramiv(2793, GL_LINK_STATUS, 0x00007ffd0d4bd264); // params = { 1 } glUseProgram(2793); glGetUniformLocation(2793, g_sampler0); // 0 returned glUniform1i(0, 0); glGetUniformLocation(2793, g_sampler1); // 1 returned glUniform1i(1, 1); glGetUniformLocation(2793, g_sampler2); // 2 returned glUniform1i(2, 2); glGetUniformLocation(2793, g_sampler3); // 3 returned glUniform1i(3, 3); glGetUniformLocation(2793, g_sampler4); // 4 returned glUniform1i(4, 4); glGetUniformLocation(2793, g_sampler5); // 5 returned glUniform1i(5, 5); glGetUniformLocation(2793, g_sampler6); // 6 returned glUniform1i(6, 6); glGetUniformLocation(2793, g_sampler7); // 7 returned glUniform1i(7, 7); glGetUniformLocation(2793, g_sampler8); // 8 returned glUniform1i(8, 8); glUseProgram(0); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 1215); glBufferData(GL_SHADER_STORAGE_BUFFER, 18432, 0x55cc8c5529e0, GL_DYNAMIC_DRAW); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_1D, 1155); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 4, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, 1156); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 4, 16, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_3D, 1157); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F, 4, 16, 2, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE3); glBindTexture(0x84f5, 1158); glTexParameteri(0x84f5, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(0x84f5, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(0x84f5, 0, GL_RGBA32F, 4, 16, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE4); glBindTexture(0x8c18, 1159); glTexParameteri(0x8c18, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(0x8c18, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(0x8c18, 0, GL_RGBA32F, 4, 16, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D_ARRAY, 1160); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA32F, 4, 16, 2, 0, GL_RGBA, GL_FLOAT, 0x55cc8d6d2340); glActiveTexture(GL_TEXTURE6); glBindBuffer(GL_TEXTURE_BUFFER, 1216); glBufferData(GL_TEXTURE_BUFFER, 2048, 0x55cc8d6d2340, GL_DYNAMIC_DRAW); glBindBuffer(GL_TEXTURE_BUFFER, 0); glBindTexture(GL_TEXTURE_BUFFER, 1161); glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, 1216); glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 1162); glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA32F, 4, 16, GL_FALSE); glActiveTexture(GL_TEXTURE8); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 1163); glTexImage3DMultisample(0x00009102, 4, 0x00008814, 4, 16, 2, GL_FALSE); glGenFramebuffers(1, 0x00007ffd0d4be21c); // framebuffers = { 210 } glBindFramebuffer(GL_FRAMEBUFFER, 210); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 1162, 0); glClearBufferfv(GL_COLOR, 0, 0x00007ffd0d4be2c0); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 1163, 0); glClearBufferfv(GL_COLOR, 0, 0x00007ffd0d4be2d0); glDeleteFramebuffers(1, { 210 }); glUseProgram(2793); glGenBuffers(1, 0x000055cc8d6eab48); // buffers = { 1217 } glBindBuffer(GL_DISPATCH_INDIRECT_BUFFER, 1217); glBufferData(GL_DISPATCH_INDIRECT_BUFFER, 12, 0x7ffd0d4be4f0, GL_STATIC_DRAW); glDispatchComputeIndirect(0); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1215); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); glGetBufferSubData(0x000090d2, 0, 18432, 0x55cc8c5529e0); Incorrect data at index 1028. Test Run() failed glActiveTexture(GL_TEXTURE0); glUseProgram(0); glDeleteProgram(2793); glDeleteBuffers(1, { 1215 }); glDeleteTextures(9, { 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163 }); glDeleteBuffers(1, { 1216 }); glDeleteBuffers(1, { 1217 }); I was not able to reproduce this failure during a full CTS run on a Skylake GT3e NUC. This problem is likely timing related or possibly related to some software outside Mesa (kernel, X, Wayland, something?). My system is: kernel-4.14.6-300.fc27.x86_64 libwayland-server-1.14.0-2.fc27.x86_64 gnome-session-wayland-session-3.26.1-1.fc27.x86_64 libdrm 2.4.89 (commit 831036a6) Looking at the output from the failure (and since it fails sporadically on the CI), I'm definitely leaning towards timing. Is glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT) maybe not doing the right thing? We do regular runs of the CTS on a Skylake GT3e NUC. So far, we have not been able to reproduce. System specs: linux-image-4.12.0-2-amd64 - SMP Debian 4.12.13-1 (2017-09-19) libdrm2:amd64 2.4.83-1~16.04.1 xserver-xorg 1:7.7+19 xserver-xorg-core 2:1.19.3-2 xserver-xorg-video-intel 2:2.99.917+git20161206-1 -- GitLab Migration Automatic Message -- This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/1663. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.