void GrVkGpuRTCommandBuffer::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo, const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) { SkASSERT(!fRenderTarget); SkASSERT(fCommandBufferInfos.empty()); SkASSERT(-1 == fCurrentCmdInfo); SkASSERT(fGpu == rt->getContext()->priv().getGpu()); SkASSERT(!fLastPipelineState); this->INHERITED::set(rt, origin); if (this->wrapsSecondaryCommandBuffer()) { this->initWrapped(); return; } fClearColor = colorInfo.fClearColor; get_vk_load_store_ops(colorInfo.fLoadOp, colorInfo.fStoreOp, &fVkColorLoadOp, &fVkColorStoreOp); get_vk_load_store_ops(stencilInfo.fLoadOp, stencilInfo.fStoreOp, &fVkStencilLoadOp, &fVkStencilStoreOp); this->init(); }
GrVkGpuCommandBuffer::GrVkGpuCommandBuffer(GrVkGpu* gpu, GrVkRenderTarget* target, const LoadAndStoreInfo& colorInfo, const LoadAndStoreInfo& stencilInfo) : fGpu(gpu) , fRenderTarget(target) , fIsEmpty(true) , fStartsWithClear(false) { VkAttachmentLoadOp vkLoadOp; VkAttachmentStoreOp vkStoreOp; get_vk_load_store_ops(colorInfo, &vkLoadOp, &vkStoreOp); GrVkRenderPass::LoadStoreOps vkColorOps(vkLoadOp, vkStoreOp); get_vk_load_store_ops(stencilInfo, &vkLoadOp, &vkStoreOp); GrVkRenderPass::LoadStoreOps vkStencilOps(vkLoadOp, vkStoreOp); const GrVkResourceProvider::CompatibleRPHandle& rpHandle = target->compatibleRenderPassHandle(); if (rpHandle.isValid()) { fRenderPass = fGpu->resourceProvider().findRenderPass(rpHandle, vkColorOps, vkStencilOps); } else { fRenderPass = fGpu->resourceProvider().findRenderPass(*target, vkColorOps, vkStencilOps); } GrColorToRGBAFloat(colorInfo.fClearColor, fColorClearValue.color.float32); fCommandBuffer = gpu->resourceProvider().findOrCreateSecondaryCommandBuffer(); fCommandBuffer->begin(gpu, target->framebuffer(), fRenderPass); }