const SkRect& bounds);
// Performs an upload of vertex data in the middle of a set of a set of draws
- virtual void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload) = 0;
+ virtual void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload,
+ GrRenderTarget* rt) = 0;
/**
* Clear the passed in render target. Ignores the draw state and clip.
SkASSERT(target == fRenderTarget);
}
- void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload) override {
+ void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload,
+ GrRenderTarget*) override {
state->doUpload(upload);
}
GrDrawOpUploadToken drawToken = state->nextTokenToFlush();
while (currUploadIdx < fInlineUploads.count() &&
fInlineUploads[currUploadIdx].fUploadBeforeToken == drawToken) {
- state->commandBuffer()->inlineUpload(state, fInlineUploads[currUploadIdx++].fUpload);
+ state->commandBuffer()->inlineUpload(state, fInlineUploads[currUploadIdx++].fUpload,
+ this->pipeline()->getRenderTarget());
}
const QueuedDraw& draw = fQueuedDraws[currDrawIdx];
state->commandBuffer()->draw(*this->pipeline(), *draw.fGeometryProcessor.get(),
cbInfo.fCommandBuffer->begin(fGpu, fRenderTarget->framebuffer(), cbInfo.fRenderPass);
}
-void GrVkGpuCommandBuffer::inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload) {
+void GrVkGpuCommandBuffer::inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload,
+ GrRenderTarget* rt) {
+ GrVkRenderTarget* target = static_cast<GrVkRenderTarget*>(rt);
+ if (!fRenderTarget) {
+ this->init(target);
+ }
if (!fCommandBufferInfos[fCurrentCmdBuffer].fIsEmpty) {
this->addAdditionalCommandBuffer();
}
void discard(GrRenderTarget*) override;
- void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload) override;
+ void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload,
+ GrRenderTarget*) override;
private:
// Performs lazy initialization on the first operation seen by the command buffer.