Bug 104153

Summary: [OpenGL CTS] [SKL] KHR-GL46.compute_shader.resource-texture sometimes fails in full run
Product: Mesa Reporter: Kenneth Graunke <kenneth>
Component: Drivers/DRI/i965Assignee: 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
KHR-GL46.compute_shader.resource-texture appears to fail in some configs on Skylake GT4 when run via cts-runner --type=gl46.  So far I haven't been able to reproduce this when running a subset of the tests, even with the same config options.
Comment 1 Kenneth Graunke 2017-12-13 04:26:26 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.
Comment 2 Ian Romanick 2017-12-15 02:01:17 UTC
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.
Comment 3 Mark Janes 2017-12-15 18:05:31 UTC
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 });
Comment 4 Ian Romanick 2017-12-21 19:50:14 UTC
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?
Comment 5 Andrés Gómez García 2018-05-02 12:32:29 UTC
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
Comment 6 GitLab Migration User 2019-09-25 19:06:21 UTC
-- 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.