From c921e496eb47de49a4d6ce62527581b966dca259 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 3 Jan 2020 16:16:29 -0400 Subject: GPU: Implement guest driver profile and deduce texture handler sizes. --- src/video_core/shader/const_buffer_locker.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index d32e2d657..78d9d7037 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -10,6 +10,7 @@ #include "common/hash.h" #include "video_core/engines/const_buffer_engine_interface.h" #include "video_core/engines/shader_type.h" +#include "video_core/guest_driver.h" namespace VideoCommon::Shader { @@ -71,6 +72,13 @@ public: return bindless_samplers; } + VideoCore::GuestDriverProfile* AccessGuestDriverProfile() { + if (engine) { + return &(engine->AccessGuestDriverProfile()); + } + return nullptr; + } + private: const Tegra::Engines::ShaderType stage; Tegra::Engines::ConstBufferEngineInterface* engine = nullptr; -- cgit v1.2.3 From 1e4b6bef6f1b278bdc99170b76f33179a2eff26f Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 3 Jan 2020 18:15:24 -0400 Subject: Shader_IR: Store Bound buffer on Shader Usage --- src/video_core/shader/const_buffer_locker.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index 78d9d7037..f26cce2ce 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -41,6 +41,8 @@ public: std::optional ObtainBindlessSampler(u32 buffer, u32 offset); + std::optional ObtainBoundBuffer(); + /// Inserts a key. void InsertKey(u32 buffer, u32 offset, u32 value); @@ -50,6 +52,10 @@ public: /// Inserts a bindless sampler key. void InsertBindlessSampler(u32 buffer, u32 offset, Tegra::Engines::SamplerDescriptor sampler); + /// Set the bound buffer for this locker. + + void SetBoundBuffer(u32 buffer); + /// Checks keys and samplers against engine's current const buffers. Returns true if they are /// the same value, false otherwise; bool IsConsistent() const; @@ -72,6 +78,10 @@ public: return bindless_samplers; } + u32 GetBoundBuffer() const { + return bound_buffer; + } + VideoCore::GuestDriverProfile* AccessGuestDriverProfile() { if (engine) { return &(engine->AccessGuestDriverProfile()); @@ -85,6 +95,8 @@ private: KeyMap keys; BoundSamplerMap bound_samplers; BindlessSamplerMap bindless_samplers; + bool bound_buffer_saved{}; + u32 bound_buffer{}; }; } // namespace VideoCommon::Shader -- cgit v1.2.3 From dc5cfa8d287757dede737553b6f1f8521971c6e2 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sun, 5 Jan 2020 12:08:39 -0400 Subject: Shader_IR: Address Feedback --- src/video_core/shader/const_buffer_locker.h | 1 - 1 file changed, 1 deletion(-) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index f26cce2ce..c7b72fa5e 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -53,7 +53,6 @@ public: void InsertBindlessSampler(u32 buffer, u32 offset, Tegra::Engines::SamplerDescriptor sampler); /// Set the bound buffer for this locker. - void SetBoundBuffer(u32 buffer); /// Checks keys and samplers against engine's current const buffers. Returns true if they are -- cgit v1.2.3 From b97608ca646962a6f5a217b9477bdd86eed5e48f Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 8 Jan 2020 10:28:29 -0400 Subject: Shader_IR: Allow constant access of guest driver. --- src/video_core/shader/const_buffer_locker.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index c7b72fa5e..f5655ac64 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -81,7 +81,7 @@ public: return bound_buffer; } - VideoCore::GuestDriverProfile* AccessGuestDriverProfile() { + VideoCore::GuestDriverProfile* AccessGuestDriverProfile() const { if (engine) { return &(engine->AccessGuestDriverProfile()); } -- cgit v1.2.3 From 64496f24569ecc23ebbb816725f27142867b1468 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 8 Jan 2020 11:46:36 -0400 Subject: Shader_IR: Address Feedback --- src/video_core/shader/const_buffer_locker.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index f5655ac64..fd1bb476a 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -83,7 +83,7 @@ public: VideoCore::GuestDriverProfile* AccessGuestDriverProfile() const { if (engine) { - return &(engine->AccessGuestDriverProfile()); + return &engine->AccessGuestDriverProfile(); } return nullptr; } -- cgit v1.2.3 From bb8eb15d392d69693f8cda0427669d011e23db97 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 24 Jan 2020 10:44:34 -0400 Subject: Shader_IR: Address feedback. --- src/video_core/shader/const_buffer_locker.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/video_core/shader/const_buffer_locker.h') diff --git a/src/video_core/shader/const_buffer_locker.h b/src/video_core/shader/const_buffer_locker.h index fd1bb476a..d3ea11087 100644 --- a/src/video_core/shader/const_buffer_locker.h +++ b/src/video_core/shader/const_buffer_locker.h @@ -77,10 +77,12 @@ public: return bindless_samplers; } + /// Gets bound buffer used on this shader u32 GetBoundBuffer() const { return bound_buffer; } + /// Obtains access to the guest driver's profile. VideoCore::GuestDriverProfile* AccessGuestDriverProfile() const { if (engine) { return &engine->AccessGuestDriverProfile(); -- cgit v1.2.3