public static UnorderedAccessView CreateBufferUAV(SharpDX.Direct3D11.Device device, Buffer buffer, UnorderedAccessViewBufferFlags flags = UnorderedAccessViewBufferFlags.None)
        {
            UnorderedAccessViewDescription uavDesc = new UnorderedAccessViewDescription
            {
                Dimension = UnorderedAccessViewDimension.Buffer,
                Buffer = new UnorderedAccessViewDescription.BufferResource { FirstElement = 0 }
            };
            if ((buffer.Description.OptionFlags & ResourceOptionFlags.BufferAllowRawViews) == ResourceOptionFlags.BufferAllowRawViews)
            {
                // A raw buffer requires R32_Typeless
                uavDesc.Format = Format.R32_Typeless;
                uavDesc.Buffer.Flags = UnorderedAccessViewBufferFlags.Raw | flags;
                uavDesc.Buffer.ElementCount = buffer.Description.SizeInBytes / 4;
            }
            else if ((buffer.Description.OptionFlags & ResourceOptionFlags.BufferStructured) == ResourceOptionFlags.BufferStructured)
            {
                uavDesc.Format = Format.Unknown;
                uavDesc.Buffer.Flags = flags;
                uavDesc.Buffer.ElementCount = buffer.Description.SizeInBytes / buffer.Description.StructureByteStride;
            }
            else
            {
                throw new ArgumentException("Buffer must be raw or structured", "buffer");
            }

            return new UnorderedAccessView(device, buffer, uavDesc);
        }
        /// <summary>
        /// Создает Аноредеред Асес Вив для Компьюте шейдера из Raw или Структурде буффера.
        /// </summary>
        /// <param name="device">Устройство которое будет использовать этот буффер</param>
        /// <param name="buffer">Буффер из которого нужно созда ан ордерерд асес вию</param>
        /// <returns>Ан ордеред асес вью для использования в компьюте шейдере</returns>
        public static UnorderedAccessView CreateBufferUAV(SharpDX.Direct3D11.Device device,
                                                          SharpDX.Direct3D11.Buffer buffer,
                                                          UnorderedAccessViewBufferFlags flags = UnorderedAccessViewBufferFlags.None)
        {
            UnorderedAccessViewDescription uavDesc = new UnorderedAccessViewDescription
            {
                Dimension = UnorderedAccessViewDimension.Buffer,
                Buffer    = new UnorderedAccessViewDescription.BufferResource {
                    FirstElement = 0
                }
            };

            if ((buffer.Description.OptionFlags & ResourceOptionFlags.BufferAllowRawViews) == ResourceOptionFlags.BufferAllowRawViews)
            {
                // A raw buffer requires R32_Typeless
                uavDesc.Format              = Format.R32_Typeless;
                uavDesc.Buffer.Flags        = UnorderedAccessViewBufferFlags.Raw | flags;
                uavDesc.Buffer.ElementCount = buffer.Description.SizeInBytes / 4;
            }
            else if ((buffer.Description.OptionFlags & ResourceOptionFlags.BufferStructured) == ResourceOptionFlags.BufferStructured)
            {
                uavDesc.Format              = Format.Unknown;
                uavDesc.Buffer.Flags        = flags;
                uavDesc.Buffer.ElementCount = buffer.Description.SizeInBytes / buffer.Description.StructureByteStride;
            }
            else
            {
                throw new ArgumentException("Buffer must be raw or structured", "buffer");
            }

            return(new UnorderedAccessView(device, buffer, uavDesc));
        }
 public static void CreateForBuffer(int formatID, int firstElement, int elementCount, UnorderedAccessViewBufferFlags flags, out UnorderedAccessViewDescription desc)
 {
     desc = new UnorderedAccessViewDescription
     {
         Dimension = UnorderedAccessViewDimension.Buffer,
         FormatID = formatID,
         FirstElement = firstElement,
         ElementCount = elementCount,
         BufferFlags = flags
     };
 }
 public static UnorderedAccessViewDescription CreateForBuffer(int formatID, int firstElement, int elementCount, UnorderedAccessViewBufferFlags flags)
 {
     return new UnorderedAccessViewDescription
     {
         Dimension = UnorderedAccessViewDimension.Buffer,
         FormatID = formatID,
         FirstElement = firstElement,
         ElementCount = elementCount,
         BufferFlags = flags
     };
 }
Example #5
0
        public static UnorderedAccessView CreateUnorderedAccessView(Device device, Resource resource, Format format, UnorderedAccessViewDimension viewDimension, int firstElement, int numElements, UnorderedAccessViewBufferFlags flags, int mipSlice)
        {
            UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription();

            uavd.Format    = format;
            uavd.Dimension = viewDimension;

            switch (viewDimension)
            {
            case UnorderedAccessViewDimension.Texture1D:
                uavd.Texture1D.MipSlice = mipSlice;
                break;

            case UnorderedAccessViewDimension.Texture1DArray:
                uavd.Texture1DArray.MipSlice        = mipSlice;
                uavd.Texture1DArray.ArraySize       = numElements;
                uavd.Texture1DArray.FirstArraySlice = firstElement;
                break;

            case UnorderedAccessViewDimension.Texture2D:
                uavd.Texture2D.MipSlice = mipSlice;
                break;

            case UnorderedAccessViewDimension.Texture2DArray:
                uavd.Texture2DArray.MipSlice        = mipSlice;
                uavd.Texture2DArray.ArraySize       = numElements;
                uavd.Texture2DArray.FirstArraySlice = firstElement;
                break;

            case UnorderedAccessViewDimension.Texture3D:
                uavd.Texture3D.MipSlice    = mipSlice;
                uavd.Texture3D.WSize       = numElements;
                uavd.Texture3D.FirstWSlice = firstElement;
                break;

            case UnorderedAccessViewDimension.Buffer:
                uavd.Buffer.ElementCount = numElements;
                uavd.Buffer.FirstElement = firstElement;
                uavd.Buffer.Flags        = flags;
                break;

            case UnorderedAccessViewDimension.Unknown:
            default:
                return(null);
            }
            var uav = new UnorderedAccessView(device, resource, uavd);

            return(uav);
        }