The msaa-render-to-single-sampled
feature allows a render pass to include single-sampled attachments while rendering is done with a specified number of samples. When this feature is used, the client doesn't need to explicitly allocate any multi-sammpled color textures. We denote this kind of render passes as “implicit multi-sampled” render passes.
Additional functionalities:
wgpu::DawnRenderPassColorAttachmentRenderToSingleSampled
as chained struct for wgpu::RenderPassColorAtttachment
to specify number of samples to be rendered for the respective single-sampled attachment.wgpu::DawnMultisampleStateRenderToSingleSampled
as chained struct for wgpu::RenderPipelineDescriptor::MultisampleState
to indicate that the render pipeline is going to be used in a “implicit multi-sampled” render pass.Example Usage:
// Create texture with TextureBinding usage. wgpu::TextureDescriptor desc = ...; desc.usage = wgpu::TextureUsage::RenderAttachment | wgpu::TextureUsage::TextureBinding; auto texture = device.CreateTexture(&desc); // Create a render pipeline to be used in a "implicit multi-sampled" render pass. wgpu::DawnMultisampleStateRenderToSingleSampled pipelineMSAARenderToSingleSampledDesc; pipelineMSAARenderToSingleSampledDesc.enabled = true; wgpu::RenderPipelineDescriptor pipelineDesc = ...; pipelineDesc.multisample.count = 4; pipelineDesc.multisample.nextInChain = &pipelineMSAARenderToSingleSampledDesc; auto pipeline = device.CreateRenderPipeline(&pipelineDesc); // Create a render pass with "implicit multi-sampled" enabled. wgpu::DawnRenderPassColorAttachmentRenderToSingleSampled colorAttachmentRenderToSingleSampledDesc; colorAttachmentRenderToSingleSampledDesc.implicitSampleCount = 4; wgpu::RenderPassDescriptor renderPassDesc = ...; renderPassDesc.colorAttachments[0].view = texture.CreateView(); renderPassDesc.colorAttachments[0].nextInChain = &colorAttachmentRenderToSingleSampledDesc; auto renderPassEncoder = encoder.BeginRenderPass(&renderPassDesc); renderPassEncoder.SetPipeline(pipeline); renderPassEncoder.Draw(3); renderPassEncoder.End();
Notes:
wgpu::TextureUsage::TextureBinding
usage.wgpu::DawnMultisampleStateRenderToSingleSampled
chained struct is not included in a wgpu::RenderPipelineDescriptor::MultisampleState
or if it is included but enabled
boolean flag is false, then the result render pipeline cannot be used in a “implicit multi-sampled” render pass.wgpu::DawnMultisampleStateRenderToSingleSampled
‘s enabled
flag = true
won’t be able to be used in normal render passes.resolveTarget
field of the the render pass’ color attachment.wgpu::DawnRenderPassColorAttachmentRenderToSingleSampled
's implicitSampleCount
field.