فهرست منبع

shader/registry: Cache tessellation state

ReinUsesLisp 6 سال پیش
والد
کامیت
66a8a3e887

+ 1 - 1
src/video_core/renderer_opengl/gl_shader_disk_cache.cpp

@@ -48,7 +48,7 @@ struct BindlessSamplerKey {
     Tegra::Engines::SamplerDescriptor sampler;
 };
 
-constexpr u32 NativeVersion = 17;
+constexpr u32 NativeVersion = 18;
 
 ShaderCacheVersionHash GetShaderCacheVersionHash() {
     ShaderCacheVersionHash hash{};

+ 3 - 0
src/video_core/shader/registry.cpp

@@ -27,6 +27,9 @@ GraphicsInfo MakeGraphicsInfo(ShaderType shader_stage, ConstBufferEngineInterfac
 
     GraphicsInfo info;
     info.primitive_topology = graphics.regs.draw.topology;
+    info.tessellation_primitive = graphics.regs.tess_mode.prim;
+    info.tessellation_spacing = graphics.regs.tess_mode.spacing;
+    info.tessellation_clockwise = graphics.regs.tess_mode.cw;
     return info;
 }
 

+ 6 - 2
src/video_core/shader/registry.h

@@ -26,15 +26,19 @@ using BindlessSamplerMap =
 
 struct GraphicsInfo {
     Tegra::Engines::Maxwell3D::Regs::PrimitiveTopology primitive_topology{};
+    Tegra::Engines::Maxwell3D::Regs::TessellationPrimitive tessellation_primitive{};
+    Tegra::Engines::Maxwell3D::Regs::TessellationSpacing tessellation_spacing{};
+    bool tessellation_clockwise = false;
 };
-static_assert(std::is_trivially_copyable_v<GraphicsInfo>);
+static_assert(std::is_trivially_copyable_v<GraphicsInfo> &&
+              std::is_standard_layout_v<GraphicsInfo>);
 
 struct ComputeInfo {
     std::array<u32, 3> workgroup_size{};
     u32 shared_memory_size_in_words = 0;
     u32 local_memory_size_in_words = 0;
 };
-static_assert(std::is_trivially_copyable_v<ComputeInfo>);
+static_assert(std::is_trivially_copyable_v<ComputeInfo> && std::is_standard_layout_v<ComputeInfo>);
 
 struct SerializedRegistryInfo {
     VideoCore::GuestDriverProfile guest_driver_profile;