diff options
| author | 2022-10-21 15:38:50 +0800 | |
|---|---|---|
| committer | 2022-10-21 17:09:22 +0800 | |
| commit | 1f54cd4ac78dd1af48490dcc404bec4adf2876f3 (patch) | |
| tree | 92b3ef5859262f2141e90344cd9179ed8895ec23 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #9088 from Fdawgs/chore/images (diff) | |
| download | yuzu-1f54cd4ac78dd1af48490dcc404bec4adf2876f3.tar.gz yuzu-1f54cd4ac78dd1af48490dcc404bec4adf2876f3.tar.xz yuzu-1f54cd4ac78dd1af48490dcc404bec4adf2876f3.zip | |
video_coare: Reimplementing the maxwell drawing trigger mechanism
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 11 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 2 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 47dfb45a1..9a7d90b2a 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -127,11 +127,10 @@ VkRect2D GetScissorState(const Maxwell& regs, size_t index, u32 up_scale = 1, u3 | |||
| 127 | return scissor; | 127 | return scissor; |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | DrawParams MakeDrawParams(const Maxwell& regs, u32 num_instances, bool is_instanced, | 130 | DrawParams MakeDrawParams(const Maxwell& regs, u32 num_instances, bool is_indexed) { |
| 131 | bool is_indexed) { | ||
| 132 | DrawParams params{ | 131 | DrawParams params{ |
| 133 | .base_instance = regs.global_base_instance_index, | 132 | .base_instance = regs.global_base_instance_index, |
| 134 | .num_instances = is_instanced ? num_instances : 1, | 133 | .num_instances = num_instances, |
| 135 | .base_vertex = is_indexed ? regs.global_base_vertex_index : regs.vertex_buffer.first, | 134 | .base_vertex = is_indexed ? regs.global_base_vertex_index : regs.vertex_buffer.first, |
| 136 | .num_vertices = is_indexed ? regs.index_buffer.count : regs.vertex_buffer.count, | 135 | .num_vertices = is_indexed ? regs.index_buffer.count : regs.vertex_buffer.count, |
| 137 | .first_index = is_indexed ? regs.index_buffer.first : 0, | 136 | .first_index = is_indexed ? regs.index_buffer.first : 0, |
| @@ -177,7 +176,7 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra | |||
| 177 | 176 | ||
| 178 | RasterizerVulkan::~RasterizerVulkan() = default; | 177 | RasterizerVulkan::~RasterizerVulkan() = default; |
| 179 | 178 | ||
| 180 | void RasterizerVulkan::Draw(bool is_indexed, bool is_instanced) { | 179 | void RasterizerVulkan::Draw(bool is_indexed, u32 instance_count) { |
| 181 | MICROPROFILE_SCOPE(Vulkan_Drawing); | 180 | MICROPROFILE_SCOPE(Vulkan_Drawing); |
| 182 | 181 | ||
| 183 | SCOPE_EXIT({ gpu.TickWork(); }); | 182 | SCOPE_EXIT({ gpu.TickWork(); }); |
| @@ -199,8 +198,8 @@ void RasterizerVulkan::Draw(bool is_indexed, bool is_instanced) { | |||
| 199 | UpdateDynamicStates(); | 198 | UpdateDynamicStates(); |
| 200 | 199 | ||
| 201 | const auto& regs{maxwell3d->regs}; | 200 | const auto& regs{maxwell3d->regs}; |
| 202 | const u32 num_instances{maxwell3d->mme_draw.instance_count}; | 201 | const u32 num_instances{instance_count}; |
| 203 | const DrawParams draw_params{MakeDrawParams(regs, num_instances, is_instanced, is_indexed)}; | 202 | const DrawParams draw_params{MakeDrawParams(regs, num_instances, is_indexed)}; |
| 204 | scheduler.Record([draw_params](vk::CommandBuffer cmdbuf) { | 203 | scheduler.Record([draw_params](vk::CommandBuffer cmdbuf) { |
| 205 | if (draw_params.is_indexed) { | 204 | if (draw_params.is_indexed) { |
| 206 | cmdbuf.DrawIndexed(draw_params.num_vertices, draw_params.num_instances, | 205 | cmdbuf.DrawIndexed(draw_params.num_vertices, draw_params.num_instances, |
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 4cde3c983..b3a182588 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h | |||
| @@ -64,7 +64,7 @@ public: | |||
| 64 | StateTracker& state_tracker_, Scheduler& scheduler_); | 64 | StateTracker& state_tracker_, Scheduler& scheduler_); |
| 65 | ~RasterizerVulkan() override; | 65 | ~RasterizerVulkan() override; |
| 66 | 66 | ||
| 67 | void Draw(bool is_indexed, bool is_instanced) override; | 67 | void Draw(bool is_indexed, u32 instance_count) override; |
| 68 | void Clear() override; | 68 | void Clear() override; |
| 69 | void DispatchCompute() override; | 69 | void DispatchCompute() override; |
| 70 | void ResetCounter(VideoCore::QueryType type) override; | 70 | void ResetCounter(VideoCore::QueryType type) override; |