Make GuestBuffer format-less

Buffers generally don't have formats that are fundamentally associated with them unless they're texel buffers, if that is the case it can be manually set in `BufferView`.
This commit is contained in:
PixelyIon 2021-12-06 23:25:13 +05:30
parent 03314ec7d2
commit 8652edb07b
2 changed files with 4 additions and 5 deletions

View File

@ -12,7 +12,6 @@ namespace skyline::gpu {
struct GuestBuffer { struct GuestBuffer {
using Mappings = boost::container::small_vector<span<u8>, 3>; using Mappings = boost::container::small_vector<span<u8>, 3>;
Mappings mappings; //!< Spans to CPU memory for the underlying data backing this buffer Mappings mappings; //!< Spans to CPU memory for the underlying data backing this buffer
vk::Format format;
/** /**
* @return The total size of the buffer by adding up the size of all mappings * @return The total size of the buffer by adding up the size of all mappings
@ -107,7 +106,7 @@ namespace skyline::gpu {
/** /**
* @return A cached or newly created view into this buffer with the supplied attributes * @return A cached or newly created view into this buffer with the supplied attributes
*/ */
std::shared_ptr<BufferView> GetView(vk::DeviceSize offset, vk::DeviceSize range, vk::Format format); std::shared_ptr<BufferView> GetView(vk::DeviceSize offset, vk::DeviceSize range, vk::Format format = {});
}; };
/** /**

View File

@ -43,11 +43,11 @@ namespace skyline::gpu {
if (firstHostMapping == hostMappings.begin() && firstHostMapping->begin() == guestMapping.begin() && mappingMatch && endHostMapping == hostMappings.end() && lastGuestMapping.end() == lastHostMapping.end()) { if (firstHostMapping == hostMappings.begin() && firstHostMapping->begin() == guestMapping.begin() && mappingMatch && endHostMapping == hostMappings.end() && lastGuestMapping.end() == lastHostMapping.end()) {
// We've gotten a perfect 1:1 match for *all* mappings from the start to end // We've gotten a perfect 1:1 match for *all* mappings from the start to end
std::scoped_lock bufferLock(*hostMapping->buffer); std::scoped_lock bufferLock(*hostMapping->buffer);
return hostMapping->buffer->GetView(0, hostMapping->buffer->size, guest.format); return hostMapping->buffer->GetView(0, hostMapping->buffer->size);
} else if (mappingMatch && firstHostMapping->begin() > guestMapping.begin() && lastHostMapping.end() > lastGuestMapping.end()) { } else if (mappingMatch && firstHostMapping->begin() > guestMapping.begin() && lastHostMapping.end() > lastGuestMapping.end()) {
// We've gotten a guest buffer that is located entirely within a host buffer // We've gotten a guest buffer that is located entirely within a host buffer
std::scoped_lock bufferLock(*hostMapping->buffer); std::scoped_lock bufferLock(*hostMapping->buffer);
return hostMapping->buffer->GetView(hostMapping->offset + static_cast<vk::DeviceSize>(hostMapping->begin() - guestMapping.begin()), guest.BufferSize(), guest.format); return hostMapping->buffer->GetView(hostMapping->offset + static_cast<vk::DeviceSize>(hostMapping->begin() - guestMapping.begin()), guest.BufferSize());
} }
} }
} }
@ -103,6 +103,6 @@ namespace skyline::gpu {
offset += mapping->size_bytes(); offset += mapping->size_bytes();
} }
return buffer->GetView(0, buffer->size, guest.format); return buffer->GetView(0, buffer->size);
} }
} }