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); }
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; }
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); } } }