Bug:
Shortest shader code (10 lines of code) shadertoy link
The correct shader result is a black screen.
Bug result - noise like this imgur image link
I have this bug confirmed on Nvidia 750 and Nvidia 960, maybe this is only “Old” Nvidia videocards bug. Driver version Linux 440.82, Windows 436.15 WHQL.
Launch this shader in Nvidia Vulkan, using Khronos-Samples, as an example, or anything else you want use.
Steps to launch this shader in Khronos example:
- clone and build https://github.com/KhronosGroup/Vulkan-Samples
- edit shader code
Vulkan-Samples/shaders/texture_loading/texture.frag
to this:
#version 450
/* Copyright (c) 2019, Sascha Willems
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 the "License";
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
layout (binding = 1) uniform sampler2D samplerColor;
layout (location = 0) in vec2 inUV;
layout (location = 1) in float inLodBias;
layout (location = 2) in vec3 inNormal;
layout (location = 3) in vec3 inViewVec;
layout (location = 4) in vec3 inLightVec;
layout (location = 0) out vec4 outFragColor;
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy;
vec3 color = vec3(0.0);
float time = 1.;
vec2 ipos = floor(uv);
float pct = 1.0;
vec2 pv=mod(ipos ,vec2(1.));
pct *= pv.y;
if ((ipos.y > 0.0) || (ipos.x < fract(time))) {
color = vec3(pct);
}
fragColor = vec4(color, 1.0);
}
void main()
{
vec4 c=vec4(0.);
mainImage(c,inUV*512.);
outFragColor = c;
//vec4 color = texture(samplerColor, inUV, inLodBias);
//vec3 N = normalize(inNormal);
//vec3 L = normalize(inLightVec);
//vec3 V = normalize(inViewVec);
//vec3 R = reflect(-L, N);
//vec3 diffuse = max(dot(N, L), 0.0) * vec3(1.0);
//float specular = pow(max(dot(R, V), 0.0), 16.0) * color.a;
//outFragColor = vec4(diffuse * color.rgb + specular, 1.0);
}
this is 1:1 linked shadertoy code copy
- launch
./build/linux/app/bin/Release/x86_64/vulkan_samples --sample texture_loading
result image link
result video link
full nvidia forum thread