GeometryShaderGen.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Copyright 2014 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <fmt/format.h>
  5. #include <functional>
  6. #include "Common/CommonTypes.h"
  7. #include "VideoCommon/RenderState.h"
  8. #include "VideoCommon/ShaderGenCommon.h"
  9. enum class APIType;
  10. #pragma pack(1)
  11. struct geometry_shader_uid_data
  12. {
  13. u32 NumValues() const { return sizeof(geometry_shader_uid_data); }
  14. bool IsPassthrough() const;
  15. u32 numTexGens : 4;
  16. u32 primitive_type : 2;
  17. };
  18. #pragma pack()
  19. using GeometryShaderUid = ShaderUid<geometry_shader_uid_data>;
  20. ShaderCode GenerateGeometryShaderCode(APIType api_type, const ShaderHostConfig& host_config,
  21. const geometry_shader_uid_data* uid_data);
  22. GeometryShaderUid GetGeometryShaderUid(PrimitiveType primitive_type);
  23. void EnumerateGeometryShaderUids(const std::function<void(const GeometryShaderUid&)>& callback);
  24. template <>
  25. struct fmt::formatter<geometry_shader_uid_data>
  26. {
  27. constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
  28. template <typename FormatContext>
  29. auto format(const geometry_shader_uid_data& uid, FormatContext& ctx) const
  30. {
  31. return fmt::format_to(ctx.out(), "passthrough: {}, {} tex gens, primitive type {}",
  32. uid.IsPassthrough(), uid.numTexGens, uid.primitive_type);
  33. }
  34. };