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 wgpu::RenderPipelineDescriptor pipelineDesc = ...; 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.resolveTarget field of the the render pass’ color attachment.wgpu::DawnRenderPassColorAttachmentRenderToSingleSampled's implicitSampleCount field.