/// <summary>
 /// Initializes a new instance of the <see cref="UnorderedAccessViewDescription1"/> struct.
 /// </summary>
 /// <param name="buffer"></param>
 /// <param name="format"></param>
 /// <param name="firstElement"></param>
 /// <param name="numElements"></param>
 /// <param name="flags"><see cref="BufferUnorderedAccessViewFlag"/> options flags for the resource.</param>
 public UnorderedAccessViewDescription1(
     ID3D11Buffer buffer,
     Format format,
     int firstElement = 0,
     int numElements  = 0,
     BufferUnorderedAccessViewFlag flags = BufferUnorderedAccessViewFlag.None) : this()
 {
     Format              = format;
     ViewDimension       = UnorderedAccessViewDimension.Buffer;
     Buffer.FirstElement = firstElement;
     Buffer.NumElements  = numElements;
     Buffer.Flags        = flags;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="UnorderedAccessViewDescription1"/> struct.
        /// </summary>
        /// <param name="viewDimension">The <see cref="UnorderedAccessViewDimension"/></param>
        /// <param name="format">The <see cref="DXGI.Format"/> to use or <see cref="Format.Unknown"/>.</param>
        /// <param name="mipSlice">The index of the mipmap level to use mip slice or FirstElement for BUFFER.</param>
        /// <param name="firstArraySlice">The index of the first texture to use in an array of textures or NumElements for BUFFER or FirstWSlice for TEXTURE3D.</param>
        /// <param name="arraySize">Number of textures in the array or WSize for TEXTURE3D.</param>
        /// <param name="flags"><see cref="BufferUnorderedAccessViewFlag"/> options flags for the resource.</param>
        /// <param name="planeSlice"></param>
        public UnorderedAccessViewDescription1(
            UnorderedAccessViewDimension viewDimension,
            Format format       = Format.Unknown,
            int mipSlice        = 0,
            int firstArraySlice = 0,
            int arraySize       = -1,
            BufferUnorderedAccessViewFlag flags = BufferUnorderedAccessViewFlag.None,
            int planeSlice = 0) : this()
        {
            Format        = format;
            ViewDimension = viewDimension;
            switch (viewDimension)
            {
            case UnorderedAccessViewDimension.Buffer:
                Buffer.FirstElement = mipSlice;
                Buffer.NumElements  = firstArraySlice;
                Buffer.Flags        = flags;
                break;

            case UnorderedAccessViewDimension.Texture1D:
                Texture1D.MipSlice = mipSlice;
                break;

            case UnorderedAccessViewDimension.Texture1DArray:
                Texture1DArray.MipSlice        = mipSlice;
                Texture1DArray.FirstArraySlice = firstArraySlice;
                Texture1DArray.ArraySize       = arraySize;
                break;

            case UnorderedAccessViewDimension.Texture2D:
                Texture2D.MipSlice   = mipSlice;
                Texture2D.PlaneSlice = planeSlice;
                break;

            case UnorderedAccessViewDimension.Texture2DArray:
                Texture2DArray.MipSlice        = mipSlice;
                Texture2DArray.FirstArraySlice = firstArraySlice;
                Texture2DArray.ArraySize       = arraySize;
                Texture2DArray.PlaneSlice      = planeSlice;
                break;

            case UnorderedAccessViewDimension.Texture3D:
                Texture3D.MipSlice    = mipSlice;
                Texture3D.FirstWSlice = firstArraySlice;
                Texture3D.WSize       = arraySize;
                break;
            }
        }