IShaderResourceView GetSrv(ref ShaderResourceViewDescription viewDesc) { CShaderResourceView view = null; foreach (var v in srvs) { if (v.DescEquals(ref viewDesc)) { view = v; break; } } if (view == null) { view = new CShaderResourceView(this, GetTexture(), ref viewDesc); srvs.Add(view); } return view; }
public static bool Equals(ref ShaderResourceViewDescription desc1, ref ShaderResourceViewDescription desc2) { switch (desc1.Dimension) { case ShaderResourceViewDimension.Unknown: return desc2.Dimension == ShaderResourceViewDimension.Unknown; case ShaderResourceViewDimension.Buffer: return desc2.Dimension == ShaderResourceViewDimension.Buffer && desc1.FormatID == desc2.FormatID && desc1.FirstElement == desc2.FirstElement && desc1.ElementCount == desc2.ElementCount; case ShaderResourceViewDimension.Texture1D: return desc2.Dimension == ShaderResourceViewDimension.Texture1D && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels; case ShaderResourceViewDimension.Texture1DArray: return desc2.Dimension == ShaderResourceViewDimension.Texture1DArray && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels && desc1.FirstArraySlice == desc2.FirstArraySlice && desc1.ArraySize == desc2.ArraySize; case ShaderResourceViewDimension.Texture2D: return desc2.Dimension == ShaderResourceViewDimension.Texture2D && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels; case ShaderResourceViewDimension.Texture2DArray: return desc2.Dimension == ShaderResourceViewDimension.Texture2DArray && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels && desc1.FirstArraySlice == desc2.FirstArraySlice && desc1.ArraySize == desc2.ArraySize; case ShaderResourceViewDimension.Texture2DMultisampled: return desc2.Dimension == ShaderResourceViewDimension.Texture2DMultisampled && desc1.FormatID == desc2.FormatID; case ShaderResourceViewDimension.Texture2DMultisampledArray: return desc2.Dimension == ShaderResourceViewDimension.Texture2DMultisampledArray && desc1.FormatID == desc2.FormatID && desc1.FirstArraySlice == desc2.FirstArraySlice && desc1.ArraySize == desc2.ArraySize; case ShaderResourceViewDimension.Texture3D: return desc2.Dimension == ShaderResourceViewDimension.Texture3D && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels; case ShaderResourceViewDimension.TextureCube: return desc2.Dimension == ShaderResourceViewDimension.TextureCube && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels; case ShaderResourceViewDimension.TextureCubeArray: return desc2.Dimension == ShaderResourceViewDimension.TextureCubeArray && desc1.FormatID == desc2.FormatID && desc1.MostDetailedMip == desc2.MostDetailedMip && desc1.MipLevels == desc2.MipLevels && desc1.FirstArraySlice == desc2.FirstArraySlice && desc1.ArraySize == desc2.ArraySize; default: throw new ShouldNeverHappenException(); } }
public static void CreateForBuffer(int formatID, int firstElement, int elementCount, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.Buffer, FormatID = formatID, FirstElement = firstElement, ElementCount = elementCount }; }
public static void CreateForTextureCubeArray(int formatID, int mostDetailedMip, int mipLevels, int firstArraySlice, int arraySize, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.TextureCubeArray, FormatID = formatID, MostDetailedMip = mostDetailedMip, MipLevels = mipLevels, FirstArraySlice = firstArraySlice, ArraySize = arraySize }; }
public static void CreateForTextureCube(int formatID, int mostDetailedMip, int mipLevels, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.TextureCube, FormatID = formatID, MostDetailedMip = mostDetailedMip, MipLevels = mipLevels }; }
public static void CreateForTexture2DMultisampledArray(int formatID, int firstArraySlice, int arraySize, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.Texture2DMultisampledArray, FormatID = formatID, FirstArraySlice = firstArraySlice, ArraySize = arraySize }; }
public static void CreateForTexture2DMultisampled(int formatID, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.Texture2DMultisampled, FormatID = formatID }; }
public static void CreateForBufferEx(int formatID, int firstElement, int elementCount, ShaderResourceViewExtendedBufferFlags flags, out ShaderResourceViewDescription desc) { desc = new ShaderResourceViewDescription { Dimension = ShaderResourceViewDimension.ExtendedBuffer, FirstElement = firstElement, ElementCount = elementCount, ExtendedBufferFlags = flags }; }