Skip to content

Missing validation for array of samplers bound to EMBEDDED_IMMUTABLE_SAMPLER_BIT_EXT #11380

@HansKristian-Work

Description

@HansKristian-Work

Describe the situation in which you encountered the missing validation
Issue description:

Here's a repro .foz archive which should trip validation when replayed with fossilize-replay /tmp/pruned.foz --enable-validation:

pruned.foz.zip

The equivalent GLSL shader looks like this:

#version 460
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_nonuniform_qualifier : require
#extension GL_EXT_buffer_reference_uvec2 : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(buffer_reference) buffer PhysicalPointerFloatArray;

float _56;

layout(buffer_reference, buffer_reference_align = 4, std430) buffer PhysicalPointerFloatArray
{
    float value[];
};

layout(push_constant, std430) uniform RootConstants
{
    uvec2 _m0;
    uint _m1;
} registers;

layout(set = 1, binding = 1) uniform texture2D _15[];
layout(set = 3, binding = 0) uniform sampler _19[];

void main()
{
    PhysicalPointerFloatArray(registers._m0).value[gl_WorkGroupID.x] = textureLod(sampler2D(_15[registers._m1], _19[gl_WorkGroupID.x + 0u]), vec2(0.5), 0.0).x;
}

set 3 is an embedded sampler set:

// Pipeline layout
{
    "version": 6,
    "pipelineLayouts": {
        "bfbf4c6d126be77f": {
            "flags": 0,
            "pushConstantRanges": [
                {
                    "stageFlags": 32,
                    "size": 12,
                    "offset": 0
                }
            ],
            "setLayouts": [
                "af85db740c1afe44",
                "efc82a01a1e3a0f2",
                "f76cce55e10f8470",
                "90e2cf9b27aa6288"
            ]
        }
    }
}

{
    "version": 6,
    "setLayouts": {
        "90e2cf9b27aa6288": {
            "flags": 48, // DESC_BUFFER | EMBEDDED
            "bindings": [
                {
                    "descriptorType": 0,
                    "descriptorCount": 1,
                    "stageFlags": 2147483647,
                    "binding": 0,
                    "immutableSamplers": [
                        "d96f39ca1740a12f"
                    ]
                },
                {
                    "descriptorType": 0,
                    "descriptorCount": 1,
                    "stageFlags": 2147483647,
                    "binding": 1,
                    "immutableSamplers": [
                        "dc895dc00740a12f"
                    ]
                },
                {
                    "descriptorType": 0,
                    "descriptorCount": 1,
                    "stageFlags": 2147483647,
                    "binding": 2,
                    "immutableSamplers": [
                        "e7d837739740a12f"
                    ]
                },
                {
                    "descriptorType": 0,
                    "descriptorCount": 1,
                    "stageFlags": 2147483647,
                    "binding": 3,
                    "immutableSamplers": [
                        "81b93954e840a12f"
                    ]
                }
            ]
        }
    }
}

Valid Usage IDs requested
Please include the valid usage IDs for the checks you are requesting:

It's a little unclear which exact VUID should cover this, but trying to map unsized array to a descriptor binding with descriptorCount = 1 without VARIABLE_COUNT seems questionable.

Additional Context

Metadata

Metadata

Assignees

No one assigned

    Labels

    IncompleteMissing Validation VUs to be added

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions