[graphite] Add Vulkan "renderpass" tracking
Adds a boolean to ensure we're not trying to call draw commands
unless we're between beginRendering/endRendering.
Change-Id: Id6adc922c1e7e79966ab5682ac4d62fc76144866
Bug: b/285136232
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/705616
Reviewed-by: Nicolette Prevost <nicolettep@google.com>
Reviewed-by: James Godfrey-Kittle <jamesgk@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/graphite/vk/VulkanCommandBuffer.cpp b/src/gpu/graphite/vk/VulkanCommandBuffer.cpp
index ee95bae..8a1cd01 100644
--- a/src/gpu/graphite/vk/VulkanCommandBuffer.cpp
+++ b/src/gpu/graphite/vk/VulkanCommandBuffer.cpp
@@ -135,6 +135,7 @@
void VulkanCommandBuffer::end() {
SkASSERT(fActive);
+ SkASSERT(!fActiveRenderPass);
this->submitPipelineBarriers();
@@ -401,13 +402,15 @@
VULKAN_CALL(fSharedContext->interface(),
CmdBeginRendering(fPrimaryCommandBuffer, &renderingInfo));
+ fActiveRenderPass = true;
- return true;
+ return true;
}
void VulkanCommandBuffer::endRenderPass() {
SkASSERT(fActive);
VULKAN_CALL(fSharedContext->interface(), CmdEndRendering(fPrimaryCommandBuffer));
+ fActiveRenderPass = false;
}
void VulkanCommandBuffer::addDrawPass(const DrawPass* drawPass) {
@@ -747,6 +750,7 @@
void VulkanCommandBuffer::draw(PrimitiveType type,
unsigned int baseVertex,
unsigned int vertexCount) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
@@ -755,30 +759,40 @@
unsigned int baseIndex,
unsigned int indexCount,
unsigned int baseVertex) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
void VulkanCommandBuffer::drawInstanced(PrimitiveType type,
- unsigned int baseVertex, unsigned int vertexCount,
- unsigned int baseInstance, unsigned int instanceCount) {
+ unsigned int baseVertex,
+ unsigned int vertexCount,
+ unsigned int baseInstance,
+ unsigned int instanceCount) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
-void VulkanCommandBuffer::drawIndexedInstanced(PrimitiveType type, unsigned int baseIndex,
- unsigned int indexCount, unsigned int baseVertex,
- unsigned int baseInstance, unsigned int instanceCount) {
+void VulkanCommandBuffer::drawIndexedInstanced(PrimitiveType type,
+ unsigned int baseIndex,
+ unsigned int indexCount,
+ unsigned int baseVertex,
+ unsigned int baseInstance,
+ unsigned int instanceCount) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
void VulkanCommandBuffer::drawIndirect(PrimitiveType type) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
void VulkanCommandBuffer::drawIndexedIndirect(PrimitiveType type) {
+ SkASSERT(fActiveRenderPass);
this->syncDescriptorSets();
// TODO: Implement
}
diff --git a/src/gpu/graphite/vk/VulkanCommandBuffer.h b/src/gpu/graphite/vk/VulkanCommandBuffer.h
index a640bec..891fb5f 100644
--- a/src/gpu/graphite/vk/VulkanCommandBuffer.h
+++ b/src/gpu/graphite/vk/VulkanCommandBuffer.h
@@ -160,7 +160,9 @@
// end). A nullptr means there is no active render pass. The VulkanCommandBuffer does not own
// the render pass.
// TODO: define what this is once we implement renderpasses.
- const void* fActiveRenderPass = nullptr;
+ //const void* fActiveRenderPass = nullptr;
+ // For now, use this to track whether we're between beginRendering/endRendering calls.
+ bool fActiveRenderPass = false;
const VulkanGraphicsPipeline* fActiveGraphicsPipeline = nullptr;