Files
Xenia-Canary/src/xenia/gpu/shaders/texture_load_128bpb.xesli
Triang3l 80dad41454 [GPU/WGF] Use ByteAddressBuffer in precompiled shaders
Drivers and hardware may provide more optimal paths for untyped buffers
compared to typed.

Also, ByteAddressBuffer may be bound via a root descriptor in Direct3D 12,
greatly simplifying the binding logic.

ByteAddressBuffer also doesn't have the 128 * 2^20 element count limit that
typed and structured buffers have, and doesn't require the structure stride
to be specified at resource creation time in Direct3D 11.
2026-02-17 23:28:42 +03:00

42 lines
1.8 KiB
Plaintext

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "texture_load.xesli"
XE_TEXTURE_LOAD_ENTRY(16)
{
// 1 thread = 2 blocks.
XeTextureLoadInfo load_info = XeTextureLoadGetInfo(pass_push_consts_xe);
uint3_xe block_index = in_global_thread_id_xe << uint3_xe(1u, 0u, 0u);
dont_flatten_xe
if (any(greater_than_equal_xe(block_index.xy, load_info.size_blocks.xy))) {
return;
}
uint block_offset_host =
load_info.host_offset +
uint(XeTextureHostLinearOffset(int3_xe(block_index), load_info.host_pitch,
load_info.size_blocks.y, 16u));
uint block_offset_guest =
XeTextureLoadSourceAddress(load_info, block_index, 4u);
byte_buffer_align16_store16_xe(
xe_texture_load_dest, block_offset_host,
XeEndianSwap32(byte_buffer_align16_load16_xe(xe_texture_load_source,
block_offset_guest),
load_info.endian_32));
block_offset_host += 16u;
block_offset_guest +=
XeTextureLoadLocalXAddressXor(1u, 4u, load_info.is_tiled);
byte_buffer_align16_store16_xe(
xe_texture_load_dest, block_offset_host,
XeEndianSwap32(byte_buffer_align16_load16_xe(xe_texture_load_source,
block_offset_guest),
load_info.endian_32));
}
entry_code_end_compute_xe