Example #1
0
        public void Render(DX11RenderContext context, DX11RenderSettings settings)
        {
            if (this.FLayerIn.IsConnected)
            {
                for (int i = 0; i < FSemantic.SliceCount; i++)
                {
                    RWStructuredBufferRenderSemantic ccrs = null;
                    foreach (var rsem in settings.CustomSemantics)
                    {
                        if (rsem.Semantic == FSemantic[i])
                        {
                            if (rsem is RWStructuredBufferRenderSemantic)
                            {
                                ccrs = rsem as RWStructuredBufferRenderSemantic;
                            }
                        }
                    }

                    if (FInReset[i])
                    {
                        if (ccrs != null)
                        {
                            int[] resetval = { FInResetCounterValue[i] };
                            var   uavarray = new UnorderedAccessView[1] {
                                ccrs.Data.UAV
                            };
                            context.CurrentDeviceContext.ComputeShader.SetUnorderedAccessViews(uavarray, 0, 1, resetval);
                        }
                    }
                }
                this.FLayerIn[0][context].Render(context, settings);
            }
        }
        public void Update(DX11RenderContext context)
        {
            if (this.updateddevices.Contains(context) && !reset)
            {
                return;
            }

            foreach (IDX11RenderSemantic semres in rsemantics)
            {
                if (semres != null)
                {
                    semres.Dispose();
                }
            }
            if (reset)
            {
                rsemantics.Clear();
                this.DisposeBuffers(context);

                for (int i = 0; i < FOutBuffers.SliceCount; i++)
                {
                    if (reset || !this.FOutBuffers[i].Contains(context))
                    {
                        try
                        {
                            var mode = FInMode[i];

                            DX11RWStructuredBuffer rb = new DX11RWStructuredBuffer(context.Device, this.sizes[i], strides[i], mode);
                            this.FOutBuffers[i][context] = rb;
                        }
                        catch (Exception) { }

                        RWStructuredBufferRenderSemantic uavbs = new RWStructuredBufferRenderSemantic(FSemantic[i] + FUAVPostfix[i], false);
                        uavbs.Data = this.FOutBuffers[i][context];
                        rsemantics.Add(uavbs);

                        StructuredBufferRenderSemantic srvbs = new StructuredBufferRenderSemantic(FSemantic[i] + FSRVPostfix[i], false);
                        srvbs.Data = this.FOutBuffers[i][context];
                        rsemantics.Add(srvbs);
                    }
                }
                reset = false;
            }

            this.updateddevices.Add(context);
        }
Example #3
0
        public void Render(DX11RenderContext context, DX11RenderSettings settings)
        {
            IDX11Geometry g = settings.Geometry;

            if (this.FEnabled[0])
            {
                if (this.FLayerIn.IsConnected)
                {
                    RWStructuredBufferRenderSemantic ccrs = null;
                    foreach (var rsem in settings.CustomSemantics)
                    {
                        if (rsem.Semantic == FSemantic[0])
                        {
                            if (rsem is RWStructuredBufferRenderSemantic)
                            {
                                ccrs = rsem as RWStructuredBufferRenderSemantic;
                            }
                        }
                    }
                    if (ccrs != null)
                    {
                        var srcbuf = ccrs.Data as DX11RWStructuredBuffer;
                        if (srcbuf != null)
                        {
                            var argBuffer           = dispatchBuffer.Buffer;
                            UnorderedAccessView uav = srcbuf.UAV;
                            if (FMode[0] == DispatchIndirectMode.CopyCounter)
                            {
                                context.CurrentDeviceContext.CopyStructureCount(uav, argBuffer, 0);
                            }
                            else
                            {
                                ResourceRegion rr = new ResourceRegion(FOffs[0], 0, 0, FOffs[0] + 4, 0, 0);
                                context.CurrentDeviceContext.CopySubresourceRegion(srcbuf.Buffer, 0, rr, argBuffer, 0, 0, 0, 0);
                            }

                            settings.Geometry = indirectGeom[context];
                            context.CurrentDeviceContext.Rasterizer.SetViewports();
                        }
                    }
                    FLayerIn[0][context].Render(context, settings);
                }
            }
            settings.Geometry = g;
        }
Example #4
0
 public void Render(DX11RenderContext context, DX11RenderSettings settings)
 {
     if (this.FEnabled[0])
     {
         if (this.FLayerIn.IsConnected)
         {
             var spreadmax = Math.Max(FSrcSem.SliceCount, FDstSem.SliceCount);
             for (int i = 0; i < spreadmax; i++)
             {
                 RWStructuredBufferRenderSemantic srcccrs = null;
                 foreach (var rsem in settings.CustomSemantics)
                 {
                     if (rsem.Semantic == FSrcSem[i])
                     {
                         if (rsem is RWStructuredBufferRenderSemantic)
                         {
                             srcccrs = rsem as RWStructuredBufferRenderSemantic;
                             break;
                         }
                     }
                 }
                 IDX11RWResource dstccrs = null;
                 foreach (var rsem in settings.CustomSemantics)
                 {
                     if (rsem.Semantic == FDstSem[i])
                     {
                         if (rsem is RWStructuredBufferRenderSemantic)
                         {
                             var t = rsem as RWStructuredBufferRenderSemantic;
                             dstccrs = t.Data;
                             break;
                         }
                     }
                 }
                 if ((srcccrs != null) && (dstccrs != null))
                 {
                     var srcbuf = srcccrs.Data as DX11RWStructuredBuffer;
                     if (srcbuf != null)
                     {
                         UnorderedAccessView uav = srcbuf.UAV;
                         Buffer dstbuf           = null;
                         if (dstccrs is DX11RWStructuredBuffer)
                         {
                             var t = dstccrs as DX11RWStructuredBuffer;
                             dstbuf = t.Buffer;
                         }
                         if (dstbuf != null)
                         {
                             if (FCopyRegion[i])
                             {
                                 var region = new ResourceRegion(FSrcFrom[i], 0, 0, FSrcTo[i], 1, 1);
                                 context.CurrentDeviceContext.CopySubresourceRegion(srcbuf.Buffer, 0, region, dstbuf, 0, FDstFrom[i], 0, 0);
                             }
                             else
                             {
                                 context.CurrentDeviceContext.CopyResource(srcbuf.Buffer, dstbuf);
                             }
                         }
                     }
                 }
             }
             FLayerIn[0][context].Render(context, settings);
         }
     }
 }