/// <summary> /// Constructs a new instance of the texture bindings manager. /// </summary> /// <param name="context">The GPU context that the texture bindings manager belongs to</param> /// <param name="channel">The GPU channel that the texture bindings manager belongs to</param> /// <param name="poolCache">Texture pools cache used to get texture pools from</param> /// <param name="scales">Array where the scales for the currently bound textures are stored</param> /// <param name="isCompute">True if the bindings manager is used for the compute engine</param> public TextureBindingsManager(GpuContext context, GpuChannel channel, TexturePoolCache poolCache, float[] scales, bool isCompute) { _context = context; _channel = channel; _texturePoolCache = poolCache; _scales = scales; _isCompute = isCompute; int stages = isCompute ? 1 : Constants.ShaderStages; _textureBindings = new TextureBindingInfo[stages][]; _imageBindings = new TextureBindingInfo[stages][]; _textureState = new TextureStatePerStage[stages][]; _imageState = new TextureStatePerStage[stages][]; _textureBindingsCount = new int[stages]; _imageBindingsCount = new int[stages]; for (int stage = 0; stage < stages; stage++) { _textureBindings[stage] = new TextureBindingInfo[InitialTextureStateSize]; _imageBindings[stage] = new TextureBindingInfo[InitialImageStateSize]; _textureState[stage] = new TextureStatePerStage[InitialTextureStateSize]; _imageState[stage] = new TextureStatePerStage[InitialImageStateSize]; } }
/// <summary> /// Creates a new instance of the texture manager. /// </summary> /// <param name="context">GPU context that the texture manager belongs to</param> /// <param name="channel">GPU channel that the texture manager belongs to</param> public TextureManager(GpuContext context, GpuChannel channel) { _context = context; TexturePoolCache texturePoolCache = new TexturePoolCache(context); _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, isCompute: true); _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, isCompute: false); _rtColors = new Texture[Constants.TotalRenderTargets]; _rtHostColors = new ITexture[Constants.TotalRenderTargets]; }
/// <summary> /// Constructs a new instance of the texture bindings manager. /// </summary> /// <param name="context">The GPU context that the texture bindings manager belongs to</param> /// <param name="texturePoolCache">Texture pools cache used to get texture pools from</param> /// <param name="isCompute">True if the bindings manager is used for the compute engine</param> public TextureBindingsManager(GpuContext context, TexturePoolCache texturePoolCache, bool isCompute) { _context = context; _texturePoolCache = texturePoolCache; _isCompute = isCompute; int stages = isCompute ? 1 : Constants.ShaderStages; _textureBindings = new TextureBindingInfo[stages][]; _imageBindings = new TextureBindingInfo[stages][]; _textureState = new TextureStatePerStage[stages][]; _imageState = new TextureStatePerStage[stages][]; }
/// <summary> /// Creates a new instance of the texture manager. /// </summary> /// <param name="context">GPU context that the texture manager belongs to</param> /// <param name="channel">GPU channel that the texture manager belongs to</param> public TextureManager(GpuContext context, GpuChannel channel) { _context = context; TexturePoolCache texturePoolCache = new TexturePoolCache(context); float[] scales = new float[64]; new Span <float>(scales).Fill(1f); _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, scales, isCompute: true); _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, scales, isCompute: false); _rtColors = new Texture[Constants.TotalRenderTargets]; _rtHostColors = new ITexture[Constants.TotalRenderTargets]; }
/// <summary> /// Constructs a new instance of the texture manager. /// </summary> /// <param name="context">The GPU context that the texture manager belongs to</param> public TextureManager(GpuContext context) { _context = context; TexturePoolCache texturePoolCache = new TexturePoolCache(context); _cpBindingsManager = new TextureBindingsManager(context, texturePoolCache, isCompute: true); _gpBindingsManager = new TextureBindingsManager(context, texturePoolCache, isCompute: false); _rtColors = new Texture[Constants.TotalRenderTargets]; _rtHostColors = new ITexture[Constants.TotalRenderTargets]; _textures = new RangeList <Texture>(); _textureOverlaps = new Texture[OverlapsBufferInitialCapacity]; _cache = new AutoDeleteCache(); }
/// <summary> /// Constructs a new instance of the texture bindings manager. /// </summary> /// <param name="context">The GPU context that the texture bindings manager belongs to</param> /// <param name="texturePoolCache">Texture pools cache used to get texture pools from</param> /// <param name="isCompute">True if the bindings manager is used for the compute engine</param> public TextureBindingsManager(GpuContext context, TexturePoolCache texturePoolCache, bool isCompute) { _context = context; _texturePoolCache = texturePoolCache; _isCompute = isCompute; int stages = isCompute ? 1 : Constants.ShaderStages; _textureBindings = new TextureBindingInfo[stages][]; _imageBindings = new TextureBindingInfo[stages][]; _textureState = new TextureStatePerStage[stages][]; _imageState = new TextureStatePerStage[stages][]; _scales = new float[64]; for (int i = 0; i < 64; i++) { _scales[i] = 1f; } }
/// <summary> /// Constructs a new instance of the texture manager. /// </summary> /// <param name="context">The GPU context that the texture manager belongs to</param> public TextureManager(GpuContext context) { _context = context; TexturePoolCache texturePoolCache = new TexturePoolCache(context); _cpBindingsManager = new TextureBindingsManager(context, texturePoolCache, isCompute: true); _gpBindingsManager = new TextureBindingsManager(context, texturePoolCache, isCompute: false); _rtColors = new Texture[Constants.TotalRenderTargets]; _rtHostColors = new ITexture[Constants.TotalRenderTargets]; _textures = new RangeList <Texture>(); _textureOverlaps = new Texture[OverlapsBufferInitialCapacity]; _overlapInfo = new OverlapInfo[OverlapsBufferInitialCapacity]; _cache = new AutoDeleteCache(); _modified = new HashSet <Texture>(new ReferenceEqualityComparer <Texture>()); _modifiedLinear = new HashSet <Texture>(new ReferenceEqualityComparer <Texture>()); }