The msaa-render-to-single-sampled feature (MSRTSS) 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-sampled color textures.
Additional functionalities:
wgpu::DawnRenderPassSampleCount as chained struct for wgpu::RenderPassDescriptor to specify number of samples to be rendered for the respective single-sampled attachment.Example Usage:
// Create texture with RenderAttachment usage. wgpu::TextureDescriptor desc = ...; desc.sampleCount = 1; desc.usage = wgpu::TextureUsage::RenderAttachment; 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::DawnRenderPassSampleCount renderPassSampleCount; renderPassSampleCount.sampleCount = 4; wgpu::RenderPassDescriptor renderPassDesc = ...; renderPassDesc.colorAttachments[0].view = texture.CreateView(); renderPassDesc.nextInChain = &renderPassSampleCount; auto renderPassEncoder = encoder.BeginRenderPass(&renderPassDesc); renderPassEncoder.SetPipeline(pipeline); renderPassEncoder.Draw(3); renderPassEncoder.End();
Notes:
wgpu::DawnRenderPassSampleCount chained struct. The resolveTarget field of the the color attachment must be nullptr.sampleCount specified by the wgpu::DawnRenderPassSampleCount chained struct and color attachments may have a resolveTarget as usual.