internal virtual void RCQSwitchToShader(RenderCommandQueue commandQueue) { // Set shader & constant buffers commandQueue.QueueCommand(RenderCommand.SetShader(this)); if (NumConstantBufferSlots > 0U) { commandQueue.QueueCommand(RenderCommand.SetShaderConstantBuffers(this)); } }
internal virtual void RCQUpdateResources(RenderCommandQueue commandQueue, ShaderResourcePackage shaderResources) { for (int i = 0; i < ConstantBufferBindings.Length; i++) { commandQueue.QueueCommand(RenderCommand.DiscardWriteShaderConstantBuffer( ConstantBufferBindings[i], shaderResources.GetValue(ConstantBufferBindings[i]) )); } if (TextureSamplerBindings.Length > 0) { if (texSamplerValueDict == null) { texSamplerValueDict = new FastClearList <KVP <TextureSamplerBinding, TextureSampler> >(); } texSamplerValueDict.Clear(); for (int i = 0; i < TextureSamplerBindings.Length; ++i) { var tsb = TextureSamplerBindings[i]; texSamplerValueDict.Add(new KVP <TextureSamplerBinding, TextureSampler>(tsb, shaderResources.GetValue(tsb))); } commandQueue.QueueCommand(RenderCommand.SetShaderTextureSamplers(this, texSamplerValueDict)); } if (ResourceViewBindings.Length > 0) { if (resViewValueDict == null) { resViewValueDict = new FastClearList <KVP <ResourceViewBinding, IResourceView> >(); } resViewValueDict.Clear(); for (int i = 0; i < ResourceViewBindings.Length; ++i) { var rvb = ResourceViewBindings[i]; resViewValueDict.Add(new KVP <ResourceViewBinding, IResourceView>(rvb, shaderResources.GetValue(rvb))); Assure.False( ((BaseResourceView)shaderResources.GetValue(ResourceViewBindings[i])) != null && ((BaseResourceView)shaderResources.GetValue(ResourceViewBindings[i])).Resource.PermittedBindings == GPUBindings.None, "Underlying resource has no permitted GPU bindings." ); } commandQueue.QueueCommand(RenderCommand.SetShaderResourceViews(this, resViewValueDict)); } }
internal override void RCQUpdateResources(RenderCommandQueue commandQueue, ShaderResourcePackage shaderResources) { base.RCQUpdateResources(commandQueue, shaderResources); // Set vertex buffers if (InputBindings.Length > 0) { if (vertexInputValueDict == null) { vertexInputValueDict = new Dictionary <VertexInputBinding, IVertexBuffer>(); } vertexInputValueDict.Clear(); for (int i = 0; i < InputBindings.Length; ++i) { vertexInputValueDict[InputBindings[i]] = shaderResources.GetValue(InputBindings[i]); } commandQueue.QueueCommand(RenderCommand.SetShaderVertexBuffers(this, vertexInputValueDict)); } }
internal virtual void RCQUpdateResources(RenderCommandQueue commandQueue) { for (int i = 0; i < ConstantBufferBindings.Length; i++) { commandQueue.QueueCommand(RenderCommand.DiscardWriteShaderConstantBuffer( ConstantBufferBindings[i], ConstantBufferBindings[i].CurValuePtr )); } if (TextureSamplerBindings.Length > 0) { if (texSamplerValueDict == null) { texSamplerValueDict = new FastClearList <KVP <TextureSamplerBinding, TextureSampler> >(); } texSamplerValueDict.Clear(); for (int i = 0; i < TextureSamplerBindings.Length; ++i) { texSamplerValueDict.Add(new KVP <TextureSamplerBinding, TextureSampler>(TextureSamplerBindings[i], TextureSamplerBindings[i].GetBoundResource())); } commandQueue.QueueCommand(RenderCommand.SetShaderTextureSamplers(this, texSamplerValueDict)); } if (ResourceViewBindings.Length > 0) { if (resViewValueDict == null) { resViewValueDict = new FastClearList <KVP <ResourceViewBinding, IResourceView> >(); } resViewValueDict.Clear(); for (int i = 0; i < ResourceViewBindings.Length; ++i) { resViewValueDict.Add(new KVP <ResourceViewBinding, IResourceView>(ResourceViewBindings[i], ResourceViewBindings[i].GetBoundResourceAsBaseResourceView())); Assure.False(ResourceViewBindings[i].GetBoundResourceAsBaseResourceView().Resource.PermittedBindings == GPUBindings.None, "Underlying resource has no permitted GPU bindings."); } commandQueue.QueueCommand(RenderCommand.SetShaderResourceViews(this, resViewValueDict)); } }