mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-07 22:29:48 +00:00
Revert some previous changes partially + maintenance5 changes
This commit is contained in:
@@ -578,29 +578,40 @@ bool BufferCacheRuntime::BindMultiRangeStorageBuffer(u64 key, bool is_written) {
|
||||
|
||||
void BufferCacheRuntime::BindIndexBuffer(PrimitiveTopology topology, IndexFormat index_format,
|
||||
u32 base_vertex, u32 num_indices, VkBuffer buffer,
|
||||
u32 offset, [[maybe_unused]] u32 size) {
|
||||
u32 offset, u32 size) {
|
||||
VkIndexType vk_index_type = MaxwellToVK::IndexFormat(index_format);
|
||||
VkDeviceSize vk_offset = offset;
|
||||
VkDeviceSize vk_size = size;
|
||||
VkBuffer vk_buffer = buffer;
|
||||
if (topology == PrimitiveTopology::Quads || topology == PrimitiveTopology::QuadStrip) {
|
||||
vk_index_type = VK_INDEX_TYPE_UINT32;
|
||||
vk_size = VK_WHOLE_SIZE;
|
||||
std::tie(vk_buffer, vk_offset) =
|
||||
quad_index_pass.Assemble(index_format, num_indices, base_vertex, buffer, offset,
|
||||
topology == PrimitiveTopology::QuadStrip);
|
||||
} else if (vk_index_type == VK_INDEX_TYPE_UINT8_EXT && !device.IsExtIndexTypeUint8Supported()) {
|
||||
vk_index_type = VK_INDEX_TYPE_UINT16;
|
||||
if (uint8_pass) {
|
||||
vk_size = VK_WHOLE_SIZE;
|
||||
std::tie(vk_buffer, vk_offset) = uint8_pass->Assemble(num_indices, buffer, offset);
|
||||
} else if (device.GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
|
||||
ReserveNullBuffer();
|
||||
vk_buffer = *null_buffer;
|
||||
vk_offset = 0;
|
||||
vk_size = VK_WHOLE_SIZE;
|
||||
}
|
||||
}
|
||||
if (vk_buffer == VK_NULL_HANDLE) {
|
||||
// Vulkan doesn't support null index buffers. Replace it with our own null buffer.
|
||||
ReserveNullBuffer();
|
||||
vk_buffer = *null_buffer;
|
||||
vk_size = VK_WHOLE_SIZE;
|
||||
}
|
||||
if (device.IsKhrMaintenance5Supported()) {
|
||||
scheduler.Record([vk_buffer, vk_offset, vk_size, vk_index_type](vk::CommandBuffer cmdbuf) {
|
||||
cmdbuf.BindIndexBuffer2KHR(vk_buffer, vk_offset, vk_size, vk_index_type);
|
||||
});
|
||||
return;
|
||||
}
|
||||
scheduler.Record([vk_buffer, vk_offset, vk_index_type](vk::CommandBuffer cmdbuf) {
|
||||
cmdbuf.BindIndexBuffer(vk_buffer, vk_offset, vk_index_type);
|
||||
|
||||
@@ -342,7 +342,17 @@ std::pair<VkBuffer, VkDeviceSize> QuadIndexedPass::Assemble(
|
||||
return 2;
|
||||
}();
|
||||
const u32 input_size = num_vertices << index_shift;
|
||||
const u32 num_tri_vertices = (is_strip ? (num_vertices - 2) / 2 : num_vertices / 4) * 6;
|
||||
u32 quads = num_vertices / 4;
|
||||
if (is_strip) {
|
||||
quads = 0;
|
||||
if (num_vertices >= 2) {
|
||||
quads = (num_vertices - 2) / 2;
|
||||
}
|
||||
}
|
||||
if (quads == 0) {
|
||||
quads = 1;
|
||||
}
|
||||
const u32 num_tri_vertices = quads * 6;
|
||||
|
||||
const std::size_t staging_size = num_tri_vertices * sizeof(u32);
|
||||
const auto staging = staging_buffer_pool.Request(staging_size, MemoryUsage::DeviceLocal);
|
||||
|
||||
@@ -212,8 +212,6 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra
|
||||
compute_pass_descriptor_queue(device, UpdateDescriptorQueue::COMPUTE_FRAME_PAYLOAD_SIZE),
|
||||
descriptor_buffer_ring(device, memory_allocator),
|
||||
blit_image(device, scheduler, state_tracker, descriptor_pool), render_pass_cache(device),
|
||||
indirect_quads_pass(device, scheduler, descriptor_pool, staging_pool,
|
||||
compute_pass_descriptor_queue),
|
||||
texture_cache_runtime{
|
||||
device, scheduler, memory_allocator, staging_pool,
|
||||
blit_image, render_pass_cache, descriptor_pool, compute_pass_descriptor_queue},
|
||||
@@ -319,15 +317,6 @@ void RasterizerVulkan::DrawIndirect() {
|
||||
VkBuffer command_buffer = buffer->Handle();
|
||||
VkDeviceSize command_offset = offset;
|
||||
u32 command_stride = static_cast<u32>(params.stride);
|
||||
if (params.is_indexed &&
|
||||
maxwell3d->draw_manager.draw_state.topology == Maxwell::PrimitiveTopology::Quads) {
|
||||
const auto patched = indirect_quads_pass.Assemble(
|
||||
static_cast<u32>(params.max_draw_counts), command_stride, command_buffer,
|
||||
static_cast<u32>(offset));
|
||||
command_buffer = patched.first;
|
||||
command_offset = patched.second;
|
||||
command_stride = IndirectQuadsPass::COMMAND_WORDS * static_cast<u32>(sizeof(u32));
|
||||
}
|
||||
if (params.is_byte_count) {
|
||||
scheduler.Record([buffer_obj = buffer->Handle(), offset,
|
||||
stride = params.stride](vk::CommandBuffer cmdbuf) {
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "video_core/rasterizer_interface.h"
|
||||
#include "video_core/renderer_vulkan/blit_image.h"
|
||||
#include "video_core/renderer_vulkan/vk_buffer_cache.h"
|
||||
#include "video_core/renderer_vulkan/vk_compute_pass.h"
|
||||
#include "video_core/renderer_vulkan/vk_descriptor_buffer.h"
|
||||
#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
|
||||
#include "video_core/renderer_vulkan/vk_fence_manager.h"
|
||||
@@ -212,7 +211,6 @@ private:
|
||||
DescriptorBufferRing descriptor_buffer_ring;
|
||||
BlitImageHelper blit_image;
|
||||
RenderPassCache render_pass_cache;
|
||||
IndirectQuadsPass indirect_quads_pass;
|
||||
|
||||
TextureCacheRuntime texture_cache_runtime;
|
||||
TextureCache texture_cache;
|
||||
|
||||
Reference in New Issue
Block a user