Remove more uses of GrRenderTarget from GrVkOpsRenderPass.
There are still a couple more uses of GrRenderTarget in the render pass but they involve larger changes which will be pulled out into their individual CLs. Bug: skia:11809 Change-Id: I1f0cc2505250916e32dde03e505ed05c3179bc47 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/398656 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
This commit is contained in:
parent
422f630d5d
commit
a36cb40671
@ -646,16 +646,19 @@ bool GrVkOpsRenderPass::onBindPipeline(const GrProgramInfo& programInfo, const S
|
||||
// same place (i.e., the target renderTargetProxy) they had best agree.
|
||||
SkASSERT(programInfo.origin() == fOrigin);
|
||||
|
||||
if (!fCurrentPipelineState->setAndBindUniforms(fGpu, fRenderTarget, programInfo, currentCB)) {
|
||||
auto colorAttachment = fFramebuffer->colorAttachment();
|
||||
if (!fCurrentPipelineState->setAndBindUniforms(fGpu, colorAttachment->dimensions(), programInfo,
|
||||
currentCB)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!programInfo.pipeline().isScissorTestEnabled()) {
|
||||
// "Disable" scissor by setting it to the full pipeline bounds.
|
||||
GrVkPipeline::SetDynamicScissorRectState(fGpu, currentCB, fRenderTarget, fOrigin,
|
||||
GrVkPipeline::SetDynamicScissorRectState(
|
||||
fGpu, currentCB, colorAttachment->dimensions(), fOrigin,
|
||||
fCurrentPipelineBounds);
|
||||
}
|
||||
GrVkPipeline::SetDynamicViewportState(fGpu, currentCB, fRenderTarget);
|
||||
GrVkPipeline::SetDynamicViewportState(fGpu, currentCB, colorAttachment->dimensions());
|
||||
GrVkPipeline::SetDynamicBlendConstantState(fGpu, currentCB,
|
||||
programInfo.pipeline().writeSwizzle(),
|
||||
programInfo.pipeline().getXferProcessor());
|
||||
@ -668,13 +671,14 @@ void GrVkOpsRenderPass::onSetScissorRect(const SkIRect& scissor) {
|
||||
if (!combinedScissorRect.intersect(fCurrentPipelineBounds, scissor)) {
|
||||
combinedScissorRect = SkIRect::MakeEmpty();
|
||||
}
|
||||
GrVkPipeline::SetDynamicScissorRectState(fGpu, this->currentCommandBuffer(), fRenderTarget,
|
||||
GrVkPipeline::SetDynamicScissorRectState(fGpu, this->currentCommandBuffer(),
|
||||
fFramebuffer->colorAttachment()->dimensions(),
|
||||
fOrigin, combinedScissorRect);
|
||||
}
|
||||
|
||||
#ifdef SK_DEBUG
|
||||
void check_sampled_texture(GrTexture* tex, GrRenderTarget* rt, GrVkGpu* gpu) {
|
||||
SkASSERT(!tex->isProtected() || (rt->isProtected() && gpu->protectedContext()));
|
||||
void check_sampled_texture(GrTexture* tex, GrAttachment* colorAttachment, GrVkGpu* gpu) {
|
||||
SkASSERT(!tex->isProtected() || (colorAttachment->isProtected() && gpu->protectedContext()));
|
||||
auto vkTex = static_cast<GrVkTexture*>(tex)->textureAttachment();
|
||||
SkASSERT(vkTex->currentLayout() == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
}
|
||||
@ -685,14 +689,15 @@ bool GrVkOpsRenderPass::onBindTextures(const GrGeometryProcessor& geomProc,
|
||||
const GrPipeline& pipeline) {
|
||||
#ifdef SK_DEBUG
|
||||
SkASSERT(fCurrentPipelineState);
|
||||
auto colorAttachment = fFramebuffer->colorAttachment();
|
||||
for (int i = 0; i < geomProc.numTextureSamplers(); ++i) {
|
||||
check_sampled_texture(geomProcTextures[i]->peekTexture(), fRenderTarget, fGpu);
|
||||
check_sampled_texture(geomProcTextures[i]->peekTexture(), colorAttachment, fGpu);
|
||||
}
|
||||
pipeline.visitTextureEffects([&](const GrTextureEffect& te) {
|
||||
check_sampled_texture(te.texture(), fRenderTarget, fGpu);
|
||||
check_sampled_texture(te.texture(), colorAttachment, fGpu);
|
||||
});
|
||||
if (GrTexture* dstTexture = pipeline.peekDstTexture()) {
|
||||
check_sampled_texture(dstTexture, fRenderTarget, fGpu);
|
||||
check_sampled_texture(dstTexture, colorAttachment, fGpu);
|
||||
}
|
||||
#endif
|
||||
if (!fCurrentPipelineState->setAndBindTextures(fGpu, geomProc, pipeline, geomProcTextures,
|
||||
|
@ -670,11 +670,11 @@ void GrVkPipeline::freeGPUData() const {
|
||||
|
||||
void GrVkPipeline::SetDynamicScissorRectState(GrVkGpu* gpu,
|
||||
GrVkCommandBuffer* cmdBuffer,
|
||||
const GrRenderTarget* renderTarget,
|
||||
SkISize colorAttachmentDimensions,
|
||||
GrSurfaceOrigin rtOrigin,
|
||||
const SkIRect& scissorRect) {
|
||||
SkASSERT(scissorRect.isEmpty() ||
|
||||
SkIRect::MakeWH(renderTarget->width(), renderTarget->height()).contains(scissorRect));
|
||||
SkIRect::MakeSize(colorAttachmentDimensions).contains(scissorRect));
|
||||
|
||||
VkRect2D scissor;
|
||||
scissor.offset.x = scissorRect.fLeft;
|
||||
@ -683,7 +683,7 @@ void GrVkPipeline::SetDynamicScissorRectState(GrVkGpu* gpu,
|
||||
scissor.offset.y = scissorRect.fTop;
|
||||
} else {
|
||||
SkASSERT(kBottomLeft_GrSurfaceOrigin == rtOrigin);
|
||||
scissor.offset.y = renderTarget->height() - scissorRect.fBottom;
|
||||
scissor.offset.y = colorAttachmentDimensions.height() - scissorRect.fBottom;
|
||||
}
|
||||
scissor.extent.height = scissorRect.height();
|
||||
|
||||
@ -694,13 +694,13 @@ void GrVkPipeline::SetDynamicScissorRectState(GrVkGpu* gpu,
|
||||
|
||||
void GrVkPipeline::SetDynamicViewportState(GrVkGpu* gpu,
|
||||
GrVkCommandBuffer* cmdBuffer,
|
||||
const GrRenderTarget* renderTarget) {
|
||||
SkISize colorAttachmentDimensions) {
|
||||
// We always use one viewport the size of the RT
|
||||
VkViewport viewport;
|
||||
viewport.x = 0.0f;
|
||||
viewport.y = 0.0f;
|
||||
viewport.width = SkIntToScalar(renderTarget->width());
|
||||
viewport.height = SkIntToScalar(renderTarget->height());
|
||||
viewport.width = SkIntToScalar(colorAttachmentDimensions.width());
|
||||
viewport.height = SkIntToScalar(colorAttachmentDimensions.height());
|
||||
viewport.minDepth = 0.0f;
|
||||
viewport.maxDepth = 1.0f;
|
||||
cmdBuffer->setViewport(gpu, 0, 1, &viewport);
|
||||
|
@ -61,9 +61,13 @@ public:
|
||||
return fPipelineLayout;
|
||||
}
|
||||
|
||||
static void SetDynamicScissorRectState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*,
|
||||
static void SetDynamicScissorRectState(GrVkGpu*,
|
||||
GrVkCommandBuffer*,
|
||||
SkISize colorAttachmentDimensions,
|
||||
GrSurfaceOrigin, const SkIRect& scissorRect);
|
||||
static void SetDynamicViewportState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*);
|
||||
static void SetDynamicViewportState(GrVkGpu*,
|
||||
GrVkCommandBuffer*,
|
||||
SkISize colorAttachmentDimensions);
|
||||
static void SetDynamicBlendConstantState(GrVkGpu*,
|
||||
GrVkCommandBuffer*,
|
||||
const GrSwizzle& writeSwizzle,
|
||||
|
@ -73,10 +73,10 @@ void GrVkPipelineState::freeGPUResources(GrVkGpu* gpu) {
|
||||
}
|
||||
|
||||
bool GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu,
|
||||
const GrRenderTarget* renderTarget,
|
||||
SkISize colorAttachmentDimensions,
|
||||
const GrProgramInfo& programInfo,
|
||||
GrVkCommandBuffer* commandBuffer) {
|
||||
this->setRenderTargetState(renderTarget, programInfo.origin());
|
||||
this->setRenderTargetState(colorAttachmentDimensions, programInfo.origin());
|
||||
|
||||
fGeometryProcessor->setData(fDataManager, *gpu->caps()->shaderCaps(), programInfo.geomProc());
|
||||
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
|
||||
@ -247,20 +247,21 @@ bool GrVkPipelineState::setAndBindInputAttachment(GrVkGpu* gpu,
|
||||
return true;
|
||||
}
|
||||
|
||||
void GrVkPipelineState::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin origin) {
|
||||
void GrVkPipelineState::setRenderTargetState(SkISize colorAttachmentDimensions,
|
||||
GrSurfaceOrigin origin) {
|
||||
|
||||
// Load the RT height uniform if it is needed to y-flip gl_FragCoord.
|
||||
if (fBuiltinUniformHandles.fRTHeightUni.isValid() &&
|
||||
fRenderTargetState.fRenderTargetSize.fHeight != rt->height()) {
|
||||
fDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni, SkIntToScalar(rt->height()));
|
||||
fRenderTargetState.fRenderTargetSize.fHeight != colorAttachmentDimensions.height()) {
|
||||
fDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni,
|
||||
SkIntToScalar(colorAttachmentDimensions.height()));
|
||||
}
|
||||
|
||||
// set RT adjustment
|
||||
SkISize dimensions = rt->dimensions();
|
||||
SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid());
|
||||
if (fRenderTargetState.fRenderTargetOrigin != origin ||
|
||||
fRenderTargetState.fRenderTargetSize != dimensions) {
|
||||
fRenderTargetState.fRenderTargetSize = dimensions;
|
||||
fRenderTargetState.fRenderTargetSize != colorAttachmentDimensions) {
|
||||
fRenderTargetState.fRenderTargetSize = colorAttachmentDimensions;
|
||||
fRenderTargetState.fRenderTargetOrigin = origin;
|
||||
|
||||
float rtAdjustmentVec[4];
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
|
||||
~GrVkPipelineState();
|
||||
|
||||
bool setAndBindUniforms(GrVkGpu*, const GrRenderTarget*, const GrProgramInfo&,
|
||||
bool setAndBindUniforms(GrVkGpu*, SkISize colorAttachmentDimensions, const GrProgramInfo&,
|
||||
GrVkCommandBuffer*);
|
||||
/**
|
||||
* This must be called after setAndBindUniforms() since that function invalidates texture
|
||||
@ -109,7 +109,7 @@ private:
|
||||
};
|
||||
|
||||
// Helper for setData() that sets the view matrix and loads the render target height uniform
|
||||
void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin);
|
||||
void setRenderTargetState(SkISize colorAttachmentDimensions, GrSurfaceOrigin);
|
||||
|
||||
// GrManagedResources
|
||||
sk_sp<const GrVkPipeline> fPipeline;
|
||||
|
Loading…
Reference in New Issue
Block a user