diff options
| author | 2020-04-09 17:59:21 -0300 | |
|---|---|---|
| committer | 2020-04-09 17:59:21 -0300 | |
| commit | 36f607217fa9172d2e1b76e327fdb03b0498ae4d (patch) | |
| tree | 523309af11b2e7f47f3f6060fad1d86e9d446206 /src/core/memory.h | |
| parent | Merge pull request #3601 from ReinUsesLisp/some-shader-encodings (diff) | |
| parent | VkRasterizer: Eliminate Legacy code. (diff) | |
| download | yuzu-36f607217fa9172d2e1b76e327fdb03b0498ae4d.tar.gz yuzu-36f607217fa9172d2e1b76e327fdb03b0498ae4d.tar.xz yuzu-36f607217fa9172d2e1b76e327fdb03b0498ae4d.zip | |
Merge pull request #3610 from FernandoS27/gpu-caches
Refactor all the GPU Caches to use VAddr for cache addressing
Diffstat (limited to 'src/core/memory.h')
| -rw-r--r-- | src/core/memory.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/core/memory.h b/src/core/memory.h index 8913a9da4..b92d678a4 100644 --- a/src/core/memory.h +++ b/src/core/memory.h | |||
| @@ -295,6 +295,27 @@ public: | |||
| 295 | std::size_t size); | 295 | std::size_t size); |
| 296 | 296 | ||
| 297 | /** | 297 | /** |
| 298 | * Reads a contiguous block of bytes from a specified process' address space. | ||
| 299 | * This unsafe version does not trigger GPU flushing. | ||
| 300 | * | ||
| 301 | * @param process The process to read the data from. | ||
| 302 | * @param src_addr The virtual address to begin reading from. | ||
| 303 | * @param dest_buffer The buffer to place the read bytes into. | ||
| 304 | * @param size The amount of data to read, in bytes. | ||
| 305 | * | ||
| 306 | * @note If a size of 0 is specified, then this function reads nothing and | ||
| 307 | * no attempts to access memory are made at all. | ||
| 308 | * | ||
| 309 | * @pre dest_buffer must be at least size bytes in length, otherwise a | ||
| 310 | * buffer overrun will occur. | ||
| 311 | * | ||
| 312 | * @post The range [dest_buffer, size) contains the read bytes from the | ||
| 313 | * process' address space. | ||
| 314 | */ | ||
| 315 | void ReadBlockUnsafe(const Kernel::Process& process, VAddr src_addr, void* dest_buffer, | ||
| 316 | std::size_t size); | ||
| 317 | |||
| 318 | /** | ||
| 298 | * Reads a contiguous block of bytes from the current process' address space. | 319 | * Reads a contiguous block of bytes from the current process' address space. |
| 299 | * | 320 | * |
| 300 | * @param src_addr The virtual address to begin reading from. | 321 | * @param src_addr The virtual address to begin reading from. |
| @@ -313,6 +334,25 @@ public: | |||
| 313 | void ReadBlock(VAddr src_addr, void* dest_buffer, std::size_t size); | 334 | void ReadBlock(VAddr src_addr, void* dest_buffer, std::size_t size); |
| 314 | 335 | ||
| 315 | /** | 336 | /** |
| 337 | * Reads a contiguous block of bytes from the current process' address space. | ||
| 338 | * This unsafe version does not trigger GPU flushing. | ||
| 339 | * | ||
| 340 | * @param src_addr The virtual address to begin reading from. | ||
| 341 | * @param dest_buffer The buffer to place the read bytes into. | ||
| 342 | * @param size The amount of data to read, in bytes. | ||
| 343 | * | ||
| 344 | * @note If a size of 0 is specified, then this function reads nothing and | ||
| 345 | * no attempts to access memory are made at all. | ||
| 346 | * | ||
| 347 | * @pre dest_buffer must be at least size bytes in length, otherwise a | ||
| 348 | * buffer overrun will occur. | ||
| 349 | * | ||
| 350 | * @post The range [dest_buffer, size) contains the read bytes from the | ||
| 351 | * current process' address space. | ||
| 352 | */ | ||
| 353 | void ReadBlockUnsafe(VAddr src_addr, void* dest_buffer, std::size_t size); | ||
| 354 | |||
| 355 | /** | ||
| 316 | * Writes a range of bytes into a given process' address space at the specified | 356 | * Writes a range of bytes into a given process' address space at the specified |
| 317 | * virtual address. | 357 | * virtual address. |
| 318 | * | 358 | * |
| @@ -336,6 +376,26 @@ public: | |||
| 336 | std::size_t size); | 376 | std::size_t size); |
| 337 | 377 | ||
| 338 | /** | 378 | /** |
| 379 | * Writes a range of bytes into a given process' address space at the specified | ||
| 380 | * virtual address. | ||
| 381 | * This unsafe version does not invalidate GPU Memory. | ||
| 382 | * | ||
| 383 | * @param process The process to write data into the address space of. | ||
| 384 | * @param dest_addr The destination virtual address to begin writing the data at. | ||
| 385 | * @param src_buffer The data to write into the process' address space. | ||
| 386 | * @param size The size of the data to write, in bytes. | ||
| 387 | * | ||
| 388 | * @post The address range [dest_addr, size) in the process' address space | ||
| 389 | * contains the data that was within src_buffer. | ||
| 390 | * | ||
| 391 | * @post If an attempt is made to write into an unmapped region of memory, the writes | ||
| 392 | * will be ignored and an error will be logged. | ||
| 393 | * | ||
| 394 | */ | ||
| 395 | void WriteBlockUnsafe(const Kernel::Process& process, VAddr dest_addr, const void* src_buffer, | ||
| 396 | std::size_t size); | ||
| 397 | |||
| 398 | /** | ||
| 339 | * Writes a range of bytes into the current process' address space at the specified | 399 | * Writes a range of bytes into the current process' address space at the specified |
| 340 | * virtual address. | 400 | * virtual address. |
| 341 | * | 401 | * |
| @@ -357,6 +417,24 @@ public: | |||
| 357 | void WriteBlock(VAddr dest_addr, const void* src_buffer, std::size_t size); | 417 | void WriteBlock(VAddr dest_addr, const void* src_buffer, std::size_t size); |
| 358 | 418 | ||
| 359 | /** | 419 | /** |
| 420 | * Writes a range of bytes into the current process' address space at the specified | ||
| 421 | * virtual address. | ||
| 422 | * This unsafe version does not invalidate GPU Memory. | ||
| 423 | * | ||
| 424 | * @param dest_addr The destination virtual address to begin writing the data at. | ||
| 425 | * @param src_buffer The data to write into the current process' address space. | ||
| 426 | * @param size The size of the data to write, in bytes. | ||
| 427 | * | ||
| 428 | * @post The address range [dest_addr, size) in the current process' address space | ||
| 429 | * contains the data that was within src_buffer. | ||
| 430 | * | ||
| 431 | * @post If an attempt is made to write into an unmapped region of memory, the writes | ||
| 432 | * will be ignored and an error will be logged. | ||
| 433 | * | ||
| 434 | */ | ||
| 435 | void WriteBlockUnsafe(VAddr dest_addr, const void* src_buffer, std::size_t size); | ||
| 436 | |||
| 437 | /** | ||
| 360 | * Fills the specified address range within a process' address space with zeroes. | 438 | * Fills the specified address range within a process' address space with zeroes. |
| 361 | * | 439 | * |
| 362 | * @param process The process that will have a portion of its memory zeroed out. | 440 | * @param process The process that will have a portion of its memory zeroed out. |