138 const std::vector<std::shared_ptr<MetalBindGroupFormat>>& bindGroupFormats,
139 MTL::SamplerState* defaultSampler, MTL::DepthStencilState* defaultDepthStencilState)
146 if (!_shader || !_composePass->vertexBuffer() || !_composePass->vertexFormat() || !_blendState || !_depthState) {
147 spdlog::warn(
"[executeCoCPass] missing CoC resources");
157 auto pipelineState = pipeline->
get(primitive, _composePass->vertexFormat(),
nullptr, -1, _shader, renderTarget,
159 if (!pipelineState) {
160 spdlog::warn(
"[executeCoCPass] failed to get pipeline state");
165 if (!vb || !vb->raw()) {
166 spdlog::warn(
"[executeCoCPass] missing vertex buffer");
170 encoder->setRenderPipelineState(pipelineState);
171 encoder->setCullMode(MTL::CullModeNone);
172 encoder->setDepthStencilState(_depthStencilState ? _depthStencilState : defaultDepthStencilState);
173 encoder->setVertexBuffer(vb->raw(), 0, 0);
176 encoder->setFragmentTexture(depthHw ? depthHw->raw() :
nullptr, 0);
177 if (defaultSampler) {
178 encoder->setFragmentSamplerState(defaultSampler, 0);
182 struct alignas(16) CoCUniforms
195 uniforms.nearBlur = params.
nearBlur ? 1.0f : 0.0f;
196 encoder->setFragmentBytes(&uniforms,
sizeof(CoCUniforms), 5);
198 encoder->drawPrimitives(MTL::PrimitiveTypeTriangle,
static_cast<NS::UInteger
>(0),
199 static_cast<NS::UInteger
>(3));
200 _device->recordDrawCall();
gpu::HardwareTexture * impl() const