|
|
@@ -83,23 +83,6 @@ struct OutputVertex {
|
|
|
static_assert(std::is_pod<OutputVertex>::value, "Structure is not POD");
|
|
|
static_assert(sizeof(OutputVertex) == 32 * sizeof(float), "OutputVertex has invalid size");
|
|
|
|
|
|
-/// Vertex shader memory
|
|
|
-struct ShaderSetup {
|
|
|
- struct {
|
|
|
- // The float uniforms are accessed by the shader JIT using SSE instructions, and are
|
|
|
- // therefore required to be 16-byte aligned.
|
|
|
- alignas(16) Math::Vec4<float24> f[96];
|
|
|
-
|
|
|
- std::array<bool, 16> b;
|
|
|
- std::array<Math::Vec4<u8>, 4> i;
|
|
|
- } uniforms;
|
|
|
-
|
|
|
- Math::Vec4<float24> default_attributes[16];
|
|
|
-
|
|
|
- std::array<u32, 1024> program_code;
|
|
|
- std::array<u32, 1024> swizzle_data;
|
|
|
-};
|
|
|
-
|
|
|
// Helper structure used to keep track of data useful for inspection of shader emulation
|
|
|
template<bool full_debugging>
|
|
|
struct DebugData;
|
|
|
@@ -342,33 +325,51 @@ struct UnitState {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * Performs any shader unit setup that only needs to happen once per shader (as opposed to once per
|
|
|
- * vertex, which would happen within the `Run` function).
|
|
|
- */
|
|
|
-void Setup();
|
|
|
+/// Clears the shader cache
|
|
|
+void ClearCache();
|
|
|
+
|
|
|
+struct ShaderSetup {
|
|
|
|
|
|
-/// Performs any cleanup when the emulator is shutdown
|
|
|
-void Shutdown();
|
|
|
+ struct {
|
|
|
+ // The float uniforms are accessed by the shader JIT using SSE instructions, and are
|
|
|
+ // therefore required to be 16-byte aligned.
|
|
|
+ alignas(16) Math::Vec4<float24> f[96];
|
|
|
|
|
|
-/**
|
|
|
- * Runs the currently setup shader
|
|
|
- * @param state Shader unit state, must be setup per shader and per shader unit
|
|
|
- * @param input Input vertex into the shader
|
|
|
- * @param num_attributes The number of vertex shader attributes
|
|
|
- * @return The output vertex, after having been processed by the vertex shader
|
|
|
- */
|
|
|
-OutputVertex Run(UnitState<false>& state, const InputVertex& input, int num_attributes);
|
|
|
+ std::array<bool, 16> b;
|
|
|
+ std::array<Math::Vec4<u8>, 4> i;
|
|
|
+ } uniforms;
|
|
|
|
|
|
-/**
|
|
|
- * Produce debug information based on the given shader and input vertex
|
|
|
- * @param input Input vertex into the shader
|
|
|
- * @param num_attributes The number of vertex shader attributes
|
|
|
- * @param config Configuration object for the shader pipeline
|
|
|
- * @param setup Setup object for the shader pipeline
|
|
|
- * @return Debug information for this shader with regards to the given vertex
|
|
|
- */
|
|
|
-DebugData<true> ProduceDebugInfo(const InputVertex& input, int num_attributes, const Regs::ShaderConfig& config, const ShaderSetup& setup);
|
|
|
+ Math::Vec4<float24> default_attributes[16];
|
|
|
+
|
|
|
+ std::array<u32, 1024> program_code;
|
|
|
+ std::array<u32, 1024> swizzle_data;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Performs any shader unit setup that only needs to happen once per shader (as opposed to once per
|
|
|
+ * vertex, which would happen within the `Run` function).
|
|
|
+ */
|
|
|
+ void Setup();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Runs the currently setup shader
|
|
|
+ * @param state Shader unit state, must be setup per shader and per shader unit
|
|
|
+ * @param input Input vertex into the shader
|
|
|
+ * @param num_attributes The number of vertex shader attributes
|
|
|
+ * @return The output vertex, after having been processed by the vertex shader
|
|
|
+ */
|
|
|
+ OutputVertex Run(UnitState<false>& state, const InputVertex& input, int num_attributes);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Produce debug information based on the given shader and input vertex
|
|
|
+ * @param input Input vertex into the shader
|
|
|
+ * @param num_attributes The number of vertex shader attributes
|
|
|
+ * @param config Configuration object for the shader pipeline
|
|
|
+ * @param setup Setup object for the shader pipeline
|
|
|
+ * @return Debug information for this shader with regards to the given vertex
|
|
|
+ */
|
|
|
+ DebugData<true> ProduceDebugInfo(const InputVertex& input, int num_attributes, const Regs::ShaderConfig& config, const ShaderSetup& setup);
|
|
|
+
|
|
|
+};
|
|
|
|
|
|
} // namespace Shader
|
|
|
|