Context refactor: from OpenGL-like state to Vulkan-like state
Overview of the changes:
The Context class has been split into more Vulkan related functional
elements:
- The IndexBuffer class, which contains the index buffer information
and has been extended to also the functionality to support
primitive restart. Should we need primitive restart related caching
in the future, this would be the place to do it.
- The Attachments class, which contains information about render
targets and depth and stencil buffers
- The Inputs class, which contains information about descriptor sets
and input streams.
- The GraphicsState is a completely constant class which can only be
modified in the constructor, which represents the state of a
graphics pipeline, which never changes past construction. The
GraphicsState can be combined with a DynamicState structure in
order to create a complete state used by rendering.
Also to note:
- The DynamicState class in now in Context.hpp, in order for the
GraphicsState to have functionality related to it.
- PushConstantStorage was moved to vk::Pipeline, as it is used by
both the Graphics Pipeline and the Compute Pipeline.
- Viewport/scissor functionality is contained in the GraphicsState
and was removed from the Renderer.
- All *Processor::update() functions now receive only the information
that they require, rather that having access to the entire context.
Bug: b/132280877
Change-Id: I74f2582d34e45aa1e7b192dbd2b9b770e7af118d
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/48830
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
Commit-Queue: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/ComputeProgram.hpp b/src/Pipeline/ComputeProgram.hpp
index c188546..839f494 100644
--- a/src/Pipeline/ComputeProgram.hpp
+++ b/src/Pipeline/ComputeProgram.hpp
@@ -17,9 +17,9 @@
#include "SpirvShader.hpp"
-#include "Device/Context.hpp"
#include "Reactor/Coroutine.hpp"
#include "Vulkan/VkDescriptorSet.hpp"
+#include "Vulkan/VkPipeline.hpp"
#include <functional>
@@ -58,7 +58,7 @@
vk::DescriptorSet::Array const &descriptorSetObjects,
vk::DescriptorSet::Bindings const &descriptorSetBindings,
vk::DescriptorSet::DynamicOffsets const &descriptorDynamicOffsets,
- PushConstantStorage const &pushConstants,
+ vk::Pipeline::PushConstantStorage const &pushConstants,
uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
@@ -76,7 +76,7 @@
uint32_t invocationsPerSubgroup; // SPIR-V: "SubgroupSize"
uint32_t subgroupsPerWorkgroup; // SPIR-V: "NumSubgroups"
uint32_t invocationsPerWorkgroup; // Total number of invocations per workgroup.
- PushConstantStorage pushConstants;
+ vk::Pipeline::PushConstantStorage pushConstants;
const Constants *constants;
};