I’ve found a possible bug in driver 373.06 that was not present in driver 372.70 on Win7 x64 SP1.
A call to vkCreateGraphicsPipelines fails with an AccessViolation to 0x0 about a dozen calls deep into nvoglv64.dll. The PSO is very simple, with a small vertex and fragment shader. The application works as intended with driver 372.70. The validation layers (1.0.26) report no errors and the error manifests in the new driver even without validation layers.
I can provide access to an API dump up to the point of the failing call and the two shaders in both GLSL and SPIR-V.
The problem is still present in driver 375.63. I have also tested it with driver 372.90, and that driver version is also broken. This means the error was introduced between version 372.70 and 372.90. I have managed to track down the problem, the driver crashes if the fragment shader contains textureClampARB in GLSL / MinLod in SPIR-V. Again, the system is Win7 x64 SP1 with a GTX 970.
The minimal fragment shader looks like this in GLSL:
#version 450 core
#extension GL_ARB_sparse_texture_clamp : require
layout(set = 0, binding = 2) uniform sampler2D albedo;
layout(location = 0) in vec2 tc;
layout(location = 0) out vec4 color;
void main()
{
#if 1
// Enabling this line works
color = texture(albedo, tc);
#else
// Enabling this line does NOT work
color = textureClampARB(albedo, tc, 0);
#endif
}
Alright, i’ve made a minimal repro app that shows the error. Just select the fragment .spv file at the top of the cpp file to see the difference. Comes with the SPIR-V binaries and MSVC 2015 files.
My system, again, is Win7 SP1 x64 with a GTX970. The last driver version that works with both SPIR-V files is 372.70, later versions up to and including 375.70 fail with frag_minlod.spv.
I would appreciate it if someone with the same or a different system could test this as well. Using the MSVC project the output gets written to stdout.txt.