From fb5030171e3a66fe56dc1db0f2f1725b67a2212f Mon Sep 17 00:00:00 2001 From: Triang3l Date: Thu, 25 Oct 2018 09:32:19 +0300 Subject: [PATCH] [D3D12] RGBA32F resolve --- .../shaders/dxbc/texture_tile_128bpp_cs.cso | Bin 0 -> 2916 bytes .../shaders/dxbc/texture_tile_128bpp_cs.h | 247 ++++++++++++++++++ .../shaders/dxbc/texture_tile_128bpp_cs.txt | 107 ++++++++ .../d3d12/shaders/texture_tile_128bpp.cs.hlsl | 20 ++ src/xenia/gpu/d3d12/texture_cache.cc | 6 +- src/xenia/gpu/d3d12/texture_cache.h | 1 + 6 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/texture_tile_128bpp.cs.hlsl diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..363d0e47211df7d55da74157d7658cf2a6cb4c20 GIT binary patch literal 2916 zcma)7OKTHR6h4_YeWbOdEsAtuM{A+FkhX||ij2064}3PURyQGSrY53^Bq=@?;tvov zx)T=)J|J6hA^rftgOf#atu+KYww&vfdEmt6mH~eh1 zyj)rICAysVt2LSTGXXRMsF!s?=BDleJ00u?wm6#ctG&1(ZO3+4tWdVpO_N z64MHI8aU?O3YP_rb!~;a3tVy&xM(r1Eu$LQgrksY~b})v9?(F3t27R`@1KFvPKbgY&3zVv&F?qxmsSTxnr|?+>>Y0 zXWVolm-j2~RQcvD^s(YjjPIL}Q|S}uSX&b1`N(_vsqU>dOr=mO$f$2p={oZW`+A#0zoa#-5i^#4(WyA{lM zHI|_!@pfY`VpidU`K8(&alGIh@htHUVJ&xr_SHR@?=W<*Z^RVV(S9VnzuiMIl-zR< zFbg(^IlDiW%{{~(kbq0PP)s~&)*R1>0LZ@>n1{eIU;1TyjGvORB#?>L47i>!4z)5k zT(7_d{xv@OWY5*7O2#$>pY%`C8d0yd+>h_b(e$0QoD0Rz_;gnBm+>bjVZ$}Y3*sk6 z$?<}7!8=;118B|%ZD8L|dy?acFfX!_7qnrswSKfyd;=4*qff>}JLXKgsL#C?!`M`(cuIb^ z8ou#P`rrQ19L;ynGiHrmYs~P|ICHv|h@8CRG|t-^iNy%ocJ9WVGMu^P&l<$m?qOy6ux zYojr6?^m3=m7VY$kj}bdj{=j<9Lqd``Y> uint2(0u, 16u)) & 0xFFFFu; + [branch] if (any(xe_thread_id.xy >= texture_size)) { + return; + } + uint texel_address = xe_texture_tile_guest_base + XeTextureTiledOffset2D( + xe_thread_id.xy, xe_texture_tile_endian_format_guest_pitch >> 9u, 4u).x; + uint texel_source_offset = xe_texture_tile_host_base + xe_thread_id.y * + xe_texture_tile_host_pitch + xe_thread_id.x * 16u; + uint4 texel = XeByteSwap128( + xe_texture_tile_source.Load4(texel_source_offset), + xe_texture_tile_endian_format_guest_pitch); + xe_texture_tile_dest.Store4(texel_address, texel); +} diff --git a/src/xenia/gpu/d3d12/texture_cache.cc b/src/xenia/gpu/d3d12/texture_cache.cc index 4b8bc4af6..da0b2f950 100644 --- a/src/xenia/gpu/d3d12/texture_cache.cc +++ b/src/xenia/gpu/d3d12/texture_cache.cc @@ -42,6 +42,7 @@ namespace d3d12 { #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt3a_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt5_rgba8_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt5a_r8_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_32bpp_cs.h" @@ -220,7 +221,8 @@ const TextureCache::HostFormat TextureCache::host_formats_[64] = { // k_32_32_32_32_FLOAT {DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, LoadMode::k128bpb, DXGI_FORMAT_UNKNOWN, - LoadMode::kUnknown, DXGI_FORMAT_UNKNOWN, ResolveTileMode::kUnknown}, + LoadMode::kUnknown, DXGI_FORMAT_R32G32B32A32_FLOAT, + ResolveTileMode::k128bpp}, // k_32_AS_8 {DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, LoadMode::kUnknown, DXGI_FORMAT_UNKNOWN, LoadMode::kUnknown, @@ -355,6 +357,8 @@ const TextureCache::ResolveTileModeInfo DXGI_FORMAT_UNKNOWN, 0}, {texture_tile_64bpp_cs, sizeof(texture_tile_64bpp_cs), DXGI_FORMAT_UNKNOWN, 0}, + {texture_tile_128bpp_cs, sizeof(texture_tile_128bpp_cs), + DXGI_FORMAT_UNKNOWN, 0}, {texture_tile_16bpp_rgba_cs, sizeof(texture_tile_16bpp_rgba_cs), DXGI_FORMAT_R16_UINT, 1}, }; diff --git a/src/xenia/gpu/d3d12/texture_cache.h b/src/xenia/gpu/d3d12/texture_cache.h index fecd5556b..3b81372c3 100644 --- a/src/xenia/gpu/d3d12/texture_cache.h +++ b/src/xenia/gpu/d3d12/texture_cache.h @@ -176,6 +176,7 @@ class TextureCache { k16bpp, k32bpp, k64bpp, + k128bpp, // B5G5R5A1 and B4G4R4A4 are optional in DXGI for render targets, and aren't // supported on Nvidia. k16bppRGBA,