2024-06-11 16:55:20 +02:00
|
|
|
#pragma once
|
2024-07-01 12:17:04 +02:00
|
|
|
#include "Containers/Array.h"
|
|
|
|
|
#include "Enums.h"
|
2024-06-11 16:55:20 +02:00
|
|
|
#include "MinimalEngine.h"
|
2024-07-01 12:17:04 +02:00
|
|
|
#include <ostream>
|
|
|
|
|
#include <chrono>
|
|
|
|
|
#include <fmt/format.h>
|
|
|
|
|
#include <string>
|
2024-06-11 16:55:20 +02:00
|
|
|
|
|
|
|
|
namespace Seele {
|
|
|
|
|
namespace Gfx {
|
2024-06-15 21:47:20 +02:00
|
|
|
struct OcclusionResult {
|
|
|
|
|
uint64 numFragments;
|
|
|
|
|
};
|
2024-06-11 16:55:20 +02:00
|
|
|
class OcclusionQuery {
|
|
|
|
|
public:
|
|
|
|
|
OcclusionQuery();
|
|
|
|
|
virtual ~OcclusionQuery();
|
|
|
|
|
virtual void beginQuery() = 0;
|
|
|
|
|
virtual void endQuery() = 0;
|
2024-06-15 21:47:20 +02:00
|
|
|
virtual OcclusionResult getResults() = 0;
|
2024-06-11 16:55:20 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(OcclusionQuery)
|
2024-06-15 21:47:20 +02:00
|
|
|
struct PipelineStatisticsResult {
|
|
|
|
|
uint64 inputAssemblyVertices;
|
|
|
|
|
uint64 inputAssemblyPrimitives;
|
|
|
|
|
uint64 vertexShaderInvocations;
|
|
|
|
|
uint64 clippingInvocations;
|
|
|
|
|
uint64 clippingPrimitives;
|
|
|
|
|
uint64 fragmentShaderInvocations;
|
|
|
|
|
uint64 computeShaderInvocations;
|
|
|
|
|
uint64 taskShaderInvocations;
|
|
|
|
|
uint64 meshShaderInvocations;
|
2024-07-01 12:17:04 +02:00
|
|
|
friend std::ostream& operator<<(std::ostream& buf, const PipelineStatisticsResult& res);
|
2024-06-15 21:47:20 +02:00
|
|
|
};
|
2024-07-01 12:17:04 +02:00
|
|
|
|
2024-08-28 17:54:14 +02:00
|
|
|
inline std::ostream& operator<<(std::ostream & buf, const PipelineStatisticsResult& res) {
|
2024-07-01 12:17:04 +02:00
|
|
|
buf << fmt::format("{},{},{},{},{},{},{},{},{},", res.inputAssemblyVertices, res.inputAssemblyPrimitives, res.vertexShaderInvocations,
|
|
|
|
|
res.clippingInvocations, res.clippingPrimitives, res.fragmentShaderInvocations, res.computeShaderInvocations, res.taskShaderInvocations,
|
|
|
|
|
res.meshShaderInvocations);
|
|
|
|
|
return buf;
|
|
|
|
|
}
|
2024-06-15 21:47:20 +02:00
|
|
|
class PipelineStatisticsQuery {
|
|
|
|
|
public:
|
|
|
|
|
PipelineStatisticsQuery();
|
|
|
|
|
virtual ~PipelineStatisticsQuery();
|
|
|
|
|
virtual void beginQuery() = 0;
|
|
|
|
|
virtual void endQuery() = 0;
|
|
|
|
|
virtual PipelineStatisticsResult getResults() = 0;
|
|
|
|
|
};
|
|
|
|
|
DEFINE_REF(PipelineStatisticsQuery)
|
2024-07-01 12:17:04 +02:00
|
|
|
struct Timestamp {
|
|
|
|
|
std::string name;
|
2024-07-05 12:02:46 +02:00
|
|
|
uint64 time;
|
2024-07-01 12:17:04 +02:00
|
|
|
};
|
|
|
|
|
class TimestampQuery {
|
|
|
|
|
public:
|
|
|
|
|
TimestampQuery();
|
|
|
|
|
virtual ~TimestampQuery();
|
|
|
|
|
virtual void write(SePipelineStageFlagBits stage, const std::string& name = "") = 0;
|
2024-09-03 11:03:23 +02:00
|
|
|
virtual Timestamp getResult() = 0;
|
2024-07-01 12:17:04 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(TimestampQuery)
|
2024-06-11 16:55:20 +02:00
|
|
|
} // namespace Gfx
|
|
|
|
|
} // namespace Seele
|