Files
Seele/src/Engine/Graphics/Query.h
T

67 lines
2.0 KiB
C++
Raw Normal View History

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
static std::ostream& operator<<(std::ostream & buf, const PipelineStatisticsResult& res) {
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;
std::chrono::nanoseconds time;
};
class TimestampQuery {
public:
TimestampQuery();
virtual ~TimestampQuery();
virtual void begin() = 0;
virtual void write(SePipelineStageFlagBits stage, const std::string& name = "") = 0;
virtual void end() = 0;
virtual Array<Timestamp> getResults() = 0;
};
DEFINE_REF(TimestampQuery)
2024-06-11 16:55:20 +02:00
} // namespace Gfx
} // namespace Seele