Ejemplo n.º 1
0
        public unsafe void LoadScalarAndVectorTypes()
        {
            ulong *p0 = stackalloc ulong[128];
            byte * p1 = stackalloc byte[256];

            using ReadWriteBuffer <float> buffer = Gpu.Default.AllocateReadWriteBuffer <float>(16);

            ScalarAndVectorTypesShader shader = new(buffer, new(55, 44, 888), 22, 77, new(3.14, 6.28), 42, 9999);

            int size = DispatchDataLoader.LoadDispatchData(Gpu.Default, in shader, ref *p0, ref *p1);

            Assert.AreEqual(72, size);

            Assert.AreEqual(p0[0], buffer.D3D12GpuDescriptorHandle.ptr);

            Assert.AreEqual(55, *(float *)&p1[16]);
            Assert.AreEqual(44, *(float *)&p1[20]);
            Assert.AreEqual(888, *(float *)&p1[24]);
            Assert.AreEqual(22, *(int *)&p1[28]);
            Assert.AreEqual(77, *(int *)&p1[32]);
            Assert.AreEqual(3.14, *(double *)&p1[48]);
            Assert.AreEqual(6.28, *(double *)&p1[56]);
            Assert.AreEqual(42, *(int *)&p1[64]);
            Assert.AreEqual(9999, *(int *)&p1[68]);
        }
Ejemplo n.º 2
0
        public unsafe void CapturedResource()
        {
            ulong *p0 = stackalloc ulong[128];
            byte * p1 = stackalloc byte[256];

            using ReadWriteBuffer <float> buffer = Gpu.Default.AllocateReadWriteBuffer <float>(16);

            int size = DispatchDataLoader.LoadDispatchData(Gpu.Default, new CapturedResourceShader(buffer), ref *p0, ref *p1);

            Assert.AreEqual(12, size);

            Assert.AreEqual(p0[0], buffer.D3D12GpuDescriptorHandle.ptr);
        }
Ejemplo n.º 3
0
        public unsafe void LoadFlatCustomTypeShader()
        {
            ulong *p0 = stackalloc ulong[128];
            byte * p1 = stackalloc byte[256];

            using ReadWriteBuffer <float> buffer = Gpu.Default.AllocateReadWriteBuffer <float>(16);

            FlatCustomTypeShader shader = new(
                buffer,
                new SimpleTypes(
                    f2x3: new(55, 44, 888, 111, 222, 333),
                    a: 22,
                    i1x3: new(1, 2, 3),
                    d2: new(3.14, 6.28),
                    c: 42,
                    i1x2: new(111, 222),
                    i2x2: new(11, 22, 33, 44),
                    d: 9999));

            int size = DispatchDataLoader.LoadDispatchData(Gpu.Default, in shader, ref *p0, ref *p1);

            Assert.AreEqual(124, size);

            Assert.AreEqual(p0[0], buffer.D3D12GpuDescriptorHandle.ptr);

            Assert.AreEqual(55, *(float *)&p1[16]);
            Assert.AreEqual(44, *(float *)&p1[20]);
            Assert.AreEqual(888, *(float *)&p1[24]);
            Assert.AreEqual(111, *(float *)&p1[32]);
            Assert.AreEqual(222, *(float *)&p1[36]);
            Assert.AreEqual(333, *(float *)&p1[40]);
            Assert.AreEqual(22, *(int *)&p1[44]);
            Assert.AreEqual(1, *(int *)&p1[48]);
            Assert.AreEqual(2, *(int *)&p1[52]);
            Assert.AreEqual(3, *(int *)&p1[56]);
            Assert.AreEqual(3.14, *(double *)&p1[64]);
            Assert.AreEqual(6.28, *(double *)&p1[72]);
            Assert.AreEqual(42, *(int *)&p1[80]);
            Assert.AreEqual(111, *(int *)&p1[84]);
            Assert.AreEqual(222, *(int *)&p1[88]);
            Assert.AreEqual(11, *(int *)&p1[96]);
            Assert.AreEqual(22, *(int *)&p1[100]);
            Assert.AreEqual(33, *(int *)&p1[112]);
            Assert.AreEqual(44, *(int *)&p1[116]);
            Assert.AreEqual(9999, *(int *)&p1[120]);
        }
Ejemplo n.º 4
0
        public unsafe void LoadMultipleResourcesAndPrimitives()
        {
            ulong *p0 = stackalloc ulong[128];
            byte * p1 = stackalloc byte[256];

            using ReadWriteBuffer <float> buffer0 = Gpu.Default.AllocateReadWriteBuffer <float>(16);
            using ReadWriteBuffer <float> buffer1 = Gpu.Default.AllocateReadWriteBuffer <float>(16);

            int size = DispatchDataLoader.LoadDispatchData(Gpu.Default, new MultipleResourcesAndPrimitivesShader(buffer0, buffer1, 1, 22, 77), ref *p0, ref *p1);

            Assert.AreEqual(24, size);

            Assert.AreEqual(p0[0], buffer0.D3D12GpuDescriptorHandle.ptr);
            Assert.AreEqual(p0[1], buffer1.D3D12GpuDescriptorHandle.ptr);

            Assert.AreEqual(1, *(int *)&p1[12]);
            Assert.AreEqual(22, *(int *)&p1[16]);
            Assert.AreEqual(77, *(int *)&p1[20]);
        }
Ejemplo n.º 5
0
        public unsafe void LoadNestedCustomTypes()
        {
            ulong *p0 = stackalloc ulong[128];
            byte * p1 = stackalloc byte[256];

            using ReadWriteBuffer <float> buffer = Gpu.Default.AllocateReadWriteBuffer <float>(16);

            NestedCustomTypesShader shader = new(
                buffer,
                new CustomType1(
                    a: new(3.14f, 6.28f, 123.4f),
                    b: new SimpleTypes(
                        f2x3: new(55, 44, 888, 111, 222, 333),
                        a: 22,
                        i1x3: new(1, 2, 3),
                        d2: new(3.14, 6.28),
                        c: 42,
                        i1x2: new(111, 222),
                        i2x2: new(11, 22, 33, 44),
                        d: 9999),
                    c: 42,
                    d: new CustomType2(
                        a: 1234567,
                        b: new(44.4f, 55.5f),
                        c: new CustomType3(
                            a: 7654321,
                            b: new (111.1f, 222.2f))),
                    e: new CustomType3(
                        a: 888888,
                        b: new(333.3f, 444.4f))));

            int size = DispatchDataLoader.LoadDispatchData(Gpu.Default, in shader, ref *p0, ref *p1);

            Assert.AreEqual(188, size);

            Assert.AreEqual(p0[0], buffer.D3D12GpuDescriptorHandle.ptr);

            Assert.AreEqual(3.14f, *(float *)&p1[16]);
            Assert.AreEqual(6.28f, *(float *)&p1[20]);
            Assert.AreEqual(123.4f, *(float *)&p1[24]);
            Assert.AreEqual(55, *(float *)&p1[32]);
            Assert.AreEqual(44, *(float *)&p1[36]);
            Assert.AreEqual(888, *(float *)&p1[40]);
            Assert.AreEqual(111, *(float *)&p1[48]);
            Assert.AreEqual(222, *(float *)&p1[52]);
            Assert.AreEqual(333, *(float *)&p1[56]);
            Assert.AreEqual(22, *(int *)&p1[60]);
            Assert.AreEqual(1, *(int *)&p1[64]);
            Assert.AreEqual(2, *(int *)&p1[68]);
            Assert.AreEqual(3, *(int *)&p1[72]);
            Assert.AreEqual(3.14, *(double *)&p1[80]);
            Assert.AreEqual(6.28, *(double *)&p1[88]);
            Assert.AreEqual(42, *(int *)&p1[96]);
            Assert.AreEqual(111, *(int *)&p1[100]);
            Assert.AreEqual(222, *(int *)&p1[104]);
            Assert.AreEqual(11, *(int *)&p1[112]);
            Assert.AreEqual(22, *(int *)&p1[116]);
            Assert.AreEqual(33, *(int *)&p1[128]);
            Assert.AreEqual(44, *(int *)&p1[132]);
            Assert.AreEqual(9999, *(int *)&p1[136]);
            Assert.AreEqual(42, *(int *)&p1[140]);
            Assert.AreEqual(1234567, *(int *)&p1[144]);
            Assert.AreEqual(44.4f, *(float *)&p1[148]);
            Assert.AreEqual(55.5f, *(float *)&p1[152]);
            Assert.AreEqual(7654321, *(int *)&p1[160]);
            Assert.AreEqual(111.1f, *(float *)&p1[164]);
            Assert.AreEqual(222.2f, *(float *)&p1[168]);
            Assert.AreEqual(888888, *(int *)&p1[176]);
            Assert.AreEqual(333.3f, *(float *)&p1[180]);
            Assert.AreEqual(444.4f, *(float *)&p1[184]);
        }