early-access version 3804
This commit is contained in:
parent
2610d4534b
commit
1c590ac5e9
@ -1,7 +1,7 @@
|
|||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 3803.
|
This is the source code for early-access 3804.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ public:
|
|||||||
|
|
||||||
Result DoHandshake() override {
|
Result DoHandshake() override {
|
||||||
OSStatus status = SSLHandshake(context);
|
OSStatus status = SSLHandshake(context);
|
||||||
return HandleReturn("SSLHandshake", 0, status).Code();
|
return HandleReturn("SSLHandshake", 0, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result Read(size_t* out_size, std::span<u8> data) override {
|
Result Read(size_t* out_size, std::span<u8> data) override {
|
||||||
|
@ -1361,7 +1361,8 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
|
|||||||
}
|
}
|
||||||
const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height);
|
const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height);
|
||||||
static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize;
|
static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize;
|
||||||
const auto post_op = VideoCommon::ObtainBufferOperation::DoNothing;
|
const auto post_op = IS_IMAGE_UPLOAD ? VideoCommon::ObtainBufferOperation::DoNothing
|
||||||
|
: VideoCommon::ObtainBufferOperation::MarkAsWritten;
|
||||||
const auto [buffer, offset] =
|
const auto [buffer, offset] =
|
||||||
buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op);
|
buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op);
|
||||||
|
|
||||||
@ -1370,8 +1371,12 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
|
|||||||
const std::span copy_span{©, 1};
|
const std::span copy_span{©, 1};
|
||||||
|
|
||||||
if constexpr (IS_IMAGE_UPLOAD) {
|
if constexpr (IS_IMAGE_UPLOAD) {
|
||||||
|
texture_cache.PrepareImage(image_id, true, false);
|
||||||
image->UploadMemory(buffer->Handle(), offset, copy_span);
|
image->UploadMemory(buffer->Handle(), offset, copy_span);
|
||||||
} else {
|
} else {
|
||||||
|
if (offset % BytesPerBlock(image->info.format)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span,
|
texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span,
|
||||||
buffer_operand.address, buffer_size);
|
buffer_operand.address, buffer_size);
|
||||||
}
|
}
|
||||||
|
@ -814,7 +814,8 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
|
|||||||
}
|
}
|
||||||
const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height);
|
const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height);
|
||||||
static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize;
|
static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize;
|
||||||
const auto post_op = VideoCommon::ObtainBufferOperation::DoNothing;
|
const auto post_op = IS_IMAGE_UPLOAD ? VideoCommon::ObtainBufferOperation::DoNothing
|
||||||
|
: VideoCommon::ObtainBufferOperation::MarkAsWritten;
|
||||||
const auto [buffer, offset] =
|
const auto [buffer, offset] =
|
||||||
buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op);
|
buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op);
|
||||||
|
|
||||||
@ -823,8 +824,12 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
|
|||||||
const std::span copy_span{©, 1};
|
const std::span copy_span{©, 1};
|
||||||
|
|
||||||
if constexpr (IS_IMAGE_UPLOAD) {
|
if constexpr (IS_IMAGE_UPLOAD) {
|
||||||
|
texture_cache.PrepareImage(image_id, true, false);
|
||||||
image->UploadMemory(buffer->Handle(), offset, copy_span);
|
image->UploadMemory(buffer->Handle(), offset, copy_span);
|
||||||
} else {
|
} else {
|
||||||
|
if (offset % BytesPerBlock(image->info.format)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span,
|
texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span,
|
||||||
buffer_operand.address, buffer_size);
|
buffer_operand.address, buffer_size);
|
||||||
}
|
}
|
||||||
|
@ -243,6 +243,9 @@ public:
|
|||||||
/// Create channel state.
|
/// Create channel state.
|
||||||
void CreateChannel(Tegra::Control::ChannelState& channel) final override;
|
void CreateChannel(Tegra::Control::ChannelState& channel) final override;
|
||||||
|
|
||||||
|
/// Prepare an image to be used
|
||||||
|
void PrepareImage(ImageId image_id, bool is_modification, bool invalidate);
|
||||||
|
|
||||||
std::recursive_mutex mutex;
|
std::recursive_mutex mutex;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -387,9 +390,6 @@ private:
|
|||||||
/// Synchronize image aliases, copying data if needed
|
/// Synchronize image aliases, copying data if needed
|
||||||
void SynchronizeAliases(ImageId image_id);
|
void SynchronizeAliases(ImageId image_id);
|
||||||
|
|
||||||
/// Prepare an image to be used
|
|
||||||
void PrepareImage(ImageId image_id, bool is_modification, bool invalidate);
|
|
||||||
|
|
||||||
/// Prepare an image view to be used
|
/// Prepare an image view to be used
|
||||||
void PrepareImageView(ImageViewId image_view_id, bool is_modification, bool invalidate);
|
void PrepareImageView(ImageViewId image_view_id, bool is_modification, bool invalidate);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user