Пример #1
0
        public unsafe void Update(GraphicsDevice graphicsDevice, ResourceGroupAllocator resourceGroupAllocator, ParameterCollection parameters)
        {
            // Instantiate descriptor sets
            for (int i = 0; i < resourceGroups.Length; ++i)
            {
                var resourceGroupLayout = updaterLayout.ResourceGroupLayouts[i];
                if (resourceGroupLayout != null)
                {
                    resourceGroupAllocator.PrepareResourceGroup(resourceGroupLayout, BufferPoolAllocationType.UsedOnce, resourceGroups[i]);
                }
            }

            // Set resources
            var layouts             = updaterLayout.Layouts;
            var descriptorStartSlot = 0;
            var bufferStartOffset   = 0;

            for (int layoutIndex = 0; layoutIndex < layouts.Length; layoutIndex++)
            {
                var resourceGroup = resourceGroups[layoutIndex];
                var descriptorSet = resourceGroup.DescriptorSet;
                var layout        = layouts[layoutIndex];
                if (layout == null)
                {
                    continue;
                }

                if (parameters.ObjectValues != null)
                {
                    for (int resourceSlot = 0; resourceSlot < layout.ElementCount; ++resourceSlot)
                    {
                        var value = parameters.ObjectValues[descriptorStartSlot + resourceSlot];
                        switch (layout.Entries[resourceSlot].Class)
                        {
                        case EffectParameterClass.UnorderedAccessView:
                            descriptorSet.SetUnorderedAccessView(resourceSlot, value as GraphicsResource);
                            break;

                        default:
                            descriptorSet.SetValue(resourceSlot, value);
                            break;
                        }
                    }
                }

                descriptorStartSlot += layout.ElementCount;

                if (parameters.DataValues != null && resourceGroup.ConstantBuffer.Size > 0)
                {
                    fixed(byte *dataValues = parameters.DataValues)
                    Utilities.CopyMemory(resourceGroup.ConstantBuffer.Data, (IntPtr)dataValues + bufferStartOffset, resourceGroup.ConstantBuffer.Size);

                    bufferStartOffset += resourceGroup.ConstantBuffer.Size;
                }
            }
        }
Пример #2
0
 public GraphicsContext(CommandList commandList, ResourceGroupAllocator resourceGroupAllocator)
 {
     CommandList            = commandList;
     ResourceGroupAllocator = resourceGroupAllocator;
 }
Пример #3
0
 public RenderThreadContext(RenderContext renderContext, ResourceGroupAllocator resourceGroupAllocator)
 {
     RenderContext          = renderContext;
     ResourceGroupAllocator = resourceGroupAllocator;
 }