From 7d8aaaaea758e04108600ae52cff7255ec7bfba5 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Tue, 21 Jan 2014 08:31:25 -0800 Subject: [PATCH] Texture wrapping modes. --- src/xenia/gpu/d3d11/d3d11_graphics_driver.cc | 16 +++++++++++++--- src/xenia/gpu/xenos/xenos.h | 8 +++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc index 8c5b83f30..3699124a1 100644 --- a/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc +++ b/src/xenia/gpu/d3d11/d3d11_graphics_driver.cc @@ -1490,9 +1490,19 @@ int D3D11GraphicsDriver::PrepareTextureSampler( }, }; sampler_desc.Filter = filter_matrix[min_filter][mag_filter][mip_filter]; - sampler_desc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - sampler_desc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - sampler_desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + static const D3D11_TEXTURE_ADDRESS_MODE mode_map[] = { + D3D11_TEXTURE_ADDRESS_WRAP, + D3D11_TEXTURE_ADDRESS_MIRROR, + D3D11_TEXTURE_ADDRESS_CLAMP, // ? + D3D11_TEXTURE_ADDRESS_MIRROR_ONCE, // ? + D3D11_TEXTURE_ADDRESS_CLAMP, // ? + D3D11_TEXTURE_ADDRESS_MIRROR_ONCE, // ? + D3D11_TEXTURE_ADDRESS_BORDER, // ? + D3D11_TEXTURE_ADDRESS_MIRROR, // ? + }; + sampler_desc.AddressU = mode_map[fetcher.fetch.clamp_x]; + sampler_desc.AddressV = mode_map[fetcher.fetch.clamp_y]; + sampler_desc.AddressW = mode_map[fetcher.fetch.clamp_z]; sampler_desc.MipLODBias; sampler_desc.MaxAnisotropy = 1; sampler_desc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; diff --git a/src/xenia/gpu/xenos/xenos.h b/src/xenia/gpu/xenos/xenos.h index 1626e390e..ad3cb086a 100644 --- a/src/xenia/gpu/xenos/xenos.h +++ b/src/xenia/gpu/xenos/xenos.h @@ -138,7 +138,13 @@ XEPACKEDUNION(xe_gpu_vertex_fetch_t, { XEPACKEDUNION(xe_gpu_texture_fetch_t, { XEPACKEDSTRUCTANONYMOUS({ uint32_t type : 2; // dword_0 - uint32_t unk0 : 20; + uint32_t sign_x : 2; + uint32_t sign_y : 2; + uint32_t sign_z : 2; + uint32_t clamp_x : 2; + uint32_t clamp_y : 2; + uint32_t clamp_z : 2; + uint32_t unk0 : 3; uint32_t pitch : 9; uint32_t tiled : 1; uint32_t format : 6; // dword_1