.. _program_listing_file_PrismEngine_src_deviceRater.h: Program Listing for File deviceRater.h ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``PrismEngine/src/deviceRater.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include "vulkan/vulkan.h" #include "utils.h" #include "layersMacroses.h" #include "pgcLayersObjsTemplate.h" DECLARE_PGC_LAYER_INSTANCE(L2) struct DeviceScore { int typeScore = 0; int featureScore = 0; int hardwareScore = 0; int apiScore = 0; }; struct FeatureScores { float swapchain = 0.0f; float raytracing = 0.0f; // RT поддержка float upscaling = 0.0f; // DLSS/FSR float advancedFeatures = 0.0f; // Доп. возможности }; struct HardwareScore { float vramGB = 0.0f; float shaderCores = 0.0f; float clockSpeedGHz = 0.0f; float textureUnits = 0.0f; // Весовые коэффициенты для расчета оценки const float VRAM_WEIGHT = 0.5f; const float SHADER_CORES_WEIGHT = 0.3f; const float CLOCK_SPEED_WEIGHT = 0.2f; // Референсные значения для нормализации const float REFERENCE_VRAM_GB = 16.0f; // 16GB считается "идеальным" объемом const float REFERENCE_SHADER_CORES = 10.0f; // 10 ядер как опорная точка const float REFERENCE_CLOCK_SPEED_GHZ = 3.0f; // 3GHz как опорная частота }; class ScoreWrapper { public: static void print(DeviceScore score); static void print(FeatureScores score); static void print(HardwareScore score); static int getTotal(DeviceScore score); static int getTotal(FeatureScores score); static int getTotal(HardwareScore score); }; class DeviceRater : public L2_Object { public: DeviceRater(PGC::utils::Context* context, PGC::utils::Settings* settings) : L2_Object(context, settings) {}; int rate(VkPhysicalDevice device); private: bool debugDeviceSelection = false; int getDeviceTypeScore(VkPhysicalDevice device); int getDeviceFeatureScore(VkPhysicalDevice device); int getDeviceHardwareScore(VkPhysicalDevice device); int getDeviceApiScore(VkPhysicalDevice device); static FeatureScores calculateFeatureScore(VkPhysicalDevice device); }; END_NAMESPACE_DECLARATION