Possible Driver Bug - Using Image Samplers ( uimageCube, etc ) As Function Arguments

  1. Operating system version.
    Windows 10 Home.

  2. Graphics hardware.
    GeForce GTX 1070

  3. Graphics driver version.
    GeForce Game Ready Driver 399.24 from September 10th, 2018

  4. Display Control Panel settings for screen resolution, monitor configs, and driver settings.

    System name: DESKTOP-HP00OJ5

    [Display]
    Operating System: Windows 10 Home, 64-bit
    DirectX version: 12.0
    GPU processor: GeForce GTX 1070
    Driver version: 399.24
    Direct3D API version: 12
    Direct3D feature level: 12_1
    CUDA Cores: 2048
    Core clock: 1442 MHz
    Memory data rate: 8008 MHz
    Memory interface: 256-bit
    Memory bandwidth: 256.26 GB/s
    Total available graphics memory: 14312 MB
    Dedicated video memory: 8192 MB GDDR5
    System video memory: 0 MB
    Shared system memory: 6120 MB
    Video BIOS version: 86.04.5B.00.55
    IRQ: Not used
    Bus: PCI Express x16 Gen3
    Device Id: 10DE 1BE1 16601043
    Part Number: 2914 0010

    [Components]

    nvui.dll 8.17.13.9924 NVIDIA User Experience Driver Component
    nvxdplcy.dll 8.17.13.9924 NVIDIA User Experience Driver Component
    nvxdbat.dll 8.17.13.9924 NVIDIA User Experience Driver Component
    nvxdapix.dll 8.17.13.9924 NVIDIA User Experience Driver Component
    NVCPL.DLL 8.17.13.9924 NVIDIA User Experience Driver Component
    nvCplUIR.dll 8.1.940.0 NVIDIA Control Panel
    nvCplUI.exe 8.1.940.0 NVIDIA Control Panel
    nvWSSR.dll 24.21.13.9924 NVIDIA Workstation Server
    nvWSS.dll 24.21.13.9924 NVIDIA Workstation Server
    nvViTvSR.dll 24.21.13.9924 NVIDIA Video Server
    nvViTvS.dll 24.21.13.9924 NVIDIA Video Server
    NVSTVIEW.EXE 7.17.13.9924 NVIDIA 3D Vision Photo Viewer
    NVSTTEST.EXE 7.17.13.9924 NVIDIA 3D Vision Test Application
    NVSTRES.DLL 7.17.13.9924 NVIDIA 3D Vision Module
    nvDispSR.dll 24.21.13.9924 NVIDIA Display Server
    NVMCTRAY.DLL 24.21.13.9924 NVIDIA Media Center Library
    nvDispS.dll 24.21.13.9924 NVIDIA Display Server
    PhysX 09.17.0524 NVIDIA PhysX
    NVCUDA.DLL 24.21.13.9924 NVIDIA CUDA 9.2.217 driver
    nvGameSR.dll 24.21.13.9924 NVIDIA 3D Settings Server
    nvGameS.dll 24.21.13.9924 NVIDIA 3D Settings Server

  5. Reproducer project.
    I’m working on an Win32 desktop application that uses OpenGL features for accelerated compute.

    *** I can definitely make a download available, but I don’t have a simple executable that shows the problem. ***
    *** You can find the problem using glsllangvalidator.exe ***

    5.1. Source code in failing state highly appreciated. This is the code that fails:

    #version 450

    uvec4 SampleCubeMap( uimageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    uvec4 out_color = uvec4( 1 );
    out_color = imageLoad( cube_map, ivec3( texcoords, 0 ) );
    return out_color;
    }

    ivec4 SampleCubeMap( iimageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    ivec4 out_color = ivec4( 1 );
    return out_color;
    }

    vec4 SampleCubeMap( imageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    vec4 out_color = vec4( 1.0 );
    return out_color;
    }

    layout( rgba8ui ) uniform uimageCube cube_map;

    out vec4 fragColor;

    void main(void)
    {
    ivec2 src_dims = imageSize( cube_map );
    vec3 normal = vec3( 0.0, 0.0, 1.0 );
    vec2 texcoords = vec2( 0.0, 0.0 );
    uvec4 pix = SampleCubeMap( cube_map, src_dims, normal, texcoords );

      fragColor = vec4( 1.0, 0.0, 1.0, 1.0 );
    

    }

    5.2. Making the following change causes the shader to compile successfully. Note the illegal layout qualifier in the first parameter of the first function declaration.

    #version 450

    uvec4 SampleCubeMap( layout( rgba8ui ) uimageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    uvec4 out_color = uvec4( 1 );
    out_color = imageLoad( cube_map, ivec3( texcoords, 0 ) );
    return out_color;
    }

    ivec4 SampleCubeMap( iimageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    ivec4 out_color = ivec4( 1 );
    return out_color;
    }

    vec4 SampleCubeMap( imageCube cube_map, in ivec2 src_dims, in vec3 normal, in vec2 texcoords )
    {
    vec4 out_color = vec4( 1.0 );
    return out_color;
    }

    layout( rgba8ui ) uniform uimageCube cube_map;

    out vec4 fragColor;

    void main(void)
    {
    ivec2 src_dims = imageSize( cube_map );
    vec3 normal = vec3( 0.0, 0.0, 1.0 );
    vec2 texcoords = vec2( 0.0, 0.0 );
    uvec4 pix = SampleCubeMap( cube_map, src_dims, normal, texcoords );

      fragColor = vec4( 1.0, 0.0, 1.0, 1.0 );
    

    }

    5.3. This is the error I receive:

    Fragment Program Output
    0(4) : error C1115: unable to find compatible overloaded function “imageLoad(struct uimageCube_bindless, ivec3)”
    0(29) : error C1115: unable to find compatible overloaded function “SampleCubeMap(struct uimageCube4x8_bindless, ivec2, vec3, vec2)”

  6. Description of single steps to reproduce the problem.

    I can make a test application available. Reproduction steps would involve just opening a file.

  7. Description of the expected result (screenshots if possible).

    The shader renders all fragments as pure red when compiled.