shader/registry: Cache tessellation state

This commit is contained in:
ReinUsesLisp 2020-02-29 04:03:22 -03:00
parent 0528be5c92
commit 66a8a3e887
3 changed files with 10 additions and 3 deletions

View file

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

View file

@ -27,6 +27,9 @@ GraphicsInfo MakeGraphicsInfo(ShaderType shader_stage, ConstBufferEngineInterfac
GraphicsInfo info; GraphicsInfo info;
info.primitive_topology = graphics.regs.draw.topology; 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; return info;
} }

View file

@ -26,15 +26,19 @@ using BindlessSamplerMap =
struct GraphicsInfo { struct GraphicsInfo {
Tegra::Engines::Maxwell3D::Regs::PrimitiveTopology primitive_topology{}; 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 { struct ComputeInfo {
std::array<u32, 3> workgroup_size{}; std::array<u32, 3> workgroup_size{};
u32 shared_memory_size_in_words = 0; u32 shared_memory_size_in_words = 0;
u32 local_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 { struct SerializedRegistryInfo {
VideoCore::GuestDriverProfile guest_driver_profile; VideoCore::GuestDriverProfile guest_driver_profile;