## 20.3. Example

To create a graphics pipeline that uses the following vertex description:

    struct Vertex
    {
        float   x, y, z, w;
        uint8_t u, v;
    };

The application could use the following set of structures:

    const VkVertexInputBindingDescription binding =
    {
        0,                                          // binding
        sizeof(Vertex),                             // stride
        VK_VERTEX_INPUT_RATE_VERTEX                 // inputRate
    };

    const VkVertexInputAttributeDescription attributes[] =
    {
        {
            0,                                      // location
            binding.binding,                        // binding
            VK_FORMAT_R32G32B32A32_SFLOAT,          // format
            0                                       // offset
        },
        {
            1,                                      // location
            binding.binding,                        // binding
            VK_FORMAT_R8G8_UNORM,                   // format
            4 * sizeof(float)                       // offset
        }
    };

    const VkPipelineVertexInputStateCreateInfo viInfo =
    {
        VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO,    // sType
        NULL,                         // pNext
        0,                            // flags
        1,                            // vertexBindingDescriptionCount
        &binding,                     // pVertexBindingDescriptions
        2,                            // vertexAttributeDescriptionCount
        &attributes[0]                // pVertexAttributeDescriptions
    };