Exemple #1
0
 public EffectLayout(
     IMgDescriptorSetLayout descriptorSetLayout,
     IMgPipelineLayout layout
     )
 {
     DescriptorSetLayout = descriptorSetLayout;
     Layout = layout;
 }
Exemple #2
0
 public Result CreateDescriptorSetLayout(MgDescriptorSetLayoutCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgDescriptorSetLayout pSetLayout)
 {
     pSetLayout = new AmtDescriptorSetLayout(pCreateInfo);
     return(Result.SUCCESS);
 }
Exemple #3
0
 public Result CreateDescriptorSetLayout(MgDescriptorSetLayoutCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgDescriptorSetLayout pSetLayout)
 {
     if (pCreateInfo == null)
     {
         throw new ArgumentNullException(nameof(pCreateInfo));
     }
     pSetLayout = new GLDescriptorSetLayout(pCreateInfo);
     return(Result.SUCCESS);
 }
Exemple #4
0
 public Result CreateDescriptorSetLayout(MgDescriptorSetLayoutCreateInfo pCreateInfo, IMgAllocationCallbacks allocator, out IMgDescriptorSetLayout pSetLayout)
 {
     throw new NotImplementedException();
 }
Exemple #5
0
        // Allocate one region of memory for the uniform buffer
        private void InitializeUniforms()
        {
            MgBufferCreateInfo pCreateInfo = new MgBufferCreateInfo
            {
                Usage = MgBufferUsageFlagBits.UNIFORM_BUFFER_BIT,
                Size  = MaxBytesPerFrame,
            };
            IMgBuffer buffer;
            var       err = mConfiguration.Device.CreateBuffer(pCreateInfo, null, out buffer);

            Debug.Assert(err == Result.SUCCESS);
            //dynamicConstantBuffer = device.CreateBuffer(MaxBytesPerFrame, (MTLResourceOptions)0);
            //dynamicConstantBuffer.Label = "UniformBuffer";

            MgMemoryRequirements uniformsMemReqs;

            mConfiguration.Device.GetBufferMemoryRequirements(buffer, out uniformsMemReqs);

            const MgMemoryPropertyFlagBits uniformPropertyFlags = MgMemoryPropertyFlagBits.HOST_COHERENT_BIT;

            uint uniformMemoryTypeIndex;

            mConfiguration.Partition.GetMemoryType(
                uniformsMemReqs.MemoryTypeBits, uniformPropertyFlags, out uniformMemoryTypeIndex);

            var uniformMemAlloc = new MgMemoryAllocateInfo
            {
                MemoryTypeIndex = uniformMemoryTypeIndex,
                AllocationSize  = uniformsMemReqs.Size,
            };

            IMgDeviceMemory deviceMemory;
            var             result = mConfiguration.Device.AllocateMemory(uniformMemAlloc, null, out deviceMemory);

            Debug.Assert(result == Result.SUCCESS);

            buffer.BindBufferMemory(mConfiguration.Device, deviceMemory, 0);

            mUniforms = new BufferInfo
            {
                Buffer       = buffer,
                DeviceMemory = deviceMemory,
                Offset       = 0,
                Length       = MaxBytesPerFrame,
            };

            IMgDescriptorSetLayout pSetLayout;
            var dslCreateInfo = new MgDescriptorSetLayoutCreateInfo
            {
                Bindings = new MgDescriptorSetLayoutBinding[]
                {
                    new MgDescriptorSetLayoutBinding
                    {
                        Binding         = 0,
                        DescriptorCount = 1,
                        DescriptorType  = MgDescriptorType.UNIFORM_BUFFER_DYNAMIC,
                        StageFlags      = MgShaderStageFlagBits.VERTEX_BIT,
                    },
                },
            };

            err = mConfiguration.Device.CreateDescriptorSetLayout(dslCreateInfo, null, out pSetLayout);

            var poolCreateInfo = new Magnesium.MgDescriptorPoolCreateInfo
            {
                MaxSets   = 1,
                PoolSizes = new MgDescriptorPoolSize[] {
                    new MgDescriptorPoolSize
                    {
                        DescriptorCount = 1,
                        Type            = MgDescriptorType.COMBINED_IMAGE_SAMPLER,
                    },
                },
            };

            err = mConfiguration.Device.CreateDescriptorPool(poolCreateInfo, null, out mDescriptorPool);

            IMgDescriptorSet[]          dSets;
            MgDescriptorSetAllocateInfo pAllocateInfo = new MgDescriptorSetAllocateInfo
            {
                DescriptorPool     = mDescriptorPool,
                DescriptorSetCount = 1,
                SetLayouts         = new IMgDescriptorSetLayout[]
                {
                    pSetLayout,
                },
            };

            mConfiguration.Device.AllocateDescriptorSets(pAllocateInfo, out dSets);
            mUniformDescriptorSet = dSets[0];

            MgWriteDescriptorSet[] writes = new MgWriteDescriptorSet[]
            {
                new MgWriteDescriptorSet
                {
                    DescriptorCount = 1,
                    DescriptorType  = MgDescriptorType.UNIFORM_BUFFER_DYNAMIC,
                    DstSet          = mUniformDescriptorSet,
                    BufferInfo      = new MgDescriptorBufferInfo[]
                    {
                        new MgDescriptorBufferInfo
                        {
                            Buffer = mUniforms.Buffer,
                            Offset = mUniforms.Offset,
                            Range  = mUniforms.Length,
                        },
                    },
                    DstBinding = 0,
                }
            };
            mConfiguration.Device.UpdateDescriptorSets(writes, null);


            mSetLayout = pSetLayout;
        }