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 }; }
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); }