mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-01-31 11:55:37 +00:00
GPU/HW: Use wrap texture address modes
This commit is contained in:
parent
231c0b5ff6
commit
0fc301d654
|
@ -331,6 +331,8 @@ bool GPU_HW_D3D11::CreateStateObjects()
|
||||||
|
|
||||||
CD3D11_SAMPLER_DESC sampler_desc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT());
|
CD3D11_SAMPLER_DESC sampler_desc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT());
|
||||||
sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
|
sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
|
||||||
|
sampler_desc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
|
||||||
|
sampler_desc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
|
||||||
hr = m_device->CreateSamplerState(&sampler_desc, m_point_sampler_state.ReleaseAndGetAddressOf());
|
hr = m_device->CreateSamplerState(&sampler_desc, m_point_sampler_state.ReleaseAndGetAddressOf());
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return false;
|
return false;
|
||||||
|
@ -553,7 +555,7 @@ void GPU_HW_D3D11::ClearDisplay()
|
||||||
{
|
{
|
||||||
GPU_HW::ClearDisplay();
|
GPU_HW::ClearDisplay();
|
||||||
|
|
||||||
static constexpr std::array<float, 4> clear_color = { 0.0f, 0.0f, 0.0f, 1.0f };
|
static constexpr std::array<float, 4> clear_color = {0.0f, 0.0f, 0.0f, 1.0f};
|
||||||
m_context->ClearRenderTargetView(m_display_texture.GetD3DRTV(), clear_color.data());
|
m_context->ClearRenderTargetView(m_display_texture.GetD3DRTV(), clear_color.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -778,4 +780,7 @@ void GPU_HW_D3D11::UpdateDepthBufferFromMaskBit()
|
||||||
RestoreGraphicsAPIState();
|
RestoreGraphicsAPIState();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<GPU> GPU::CreateHardwareD3D11Renderer() { return std::make_unique<GPU_HW_D3D11>(); }
|
std::unique_ptr<GPU> GPU::CreateHardwareD3D11Renderer()
|
||||||
|
{
|
||||||
|
return std::make_unique<GPU_HW_D3D11>();
|
||||||
|
}
|
||||||
|
|
|
@ -228,10 +228,12 @@ bool GPU_HW_OpenGL::CreateFramebuffer()
|
||||||
const u32 texture_width = VRAM_WIDTH * m_resolution_scale;
|
const u32 texture_width = VRAM_WIDTH * m_resolution_scale;
|
||||||
const u32 texture_height = VRAM_HEIGHT * m_resolution_scale;
|
const u32 texture_height = VRAM_HEIGHT * m_resolution_scale;
|
||||||
|
|
||||||
if (!m_vram_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) ||
|
if (!m_vram_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false,
|
||||||
|
true) ||
|
||||||
!m_vram_depth_texture.Create(texture_width, texture_height, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT,
|
!m_vram_depth_texture.Create(texture_width, texture_height, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT,
|
||||||
GL_UNSIGNED_SHORT, nullptr, false) ||
|
GL_UNSIGNED_SHORT, nullptr, false) ||
|
||||||
!m_vram_read_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) ||
|
!m_vram_read_texture.Create(texture_width, texture_height, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false,
|
||||||
|
true) ||
|
||||||
!m_vram_read_texture.CreateFramebuffer() ||
|
!m_vram_read_texture.CreateFramebuffer() ||
|
||||||
!m_vram_encoding_texture.Create(VRAM_WIDTH, VRAM_HEIGHT, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) ||
|
!m_vram_encoding_texture.Create(VRAM_WIDTH, VRAM_HEIGHT, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, nullptr, false) ||
|
||||||
!m_vram_encoding_texture.CreateFramebuffer() ||
|
!m_vram_encoding_texture.CreateFramebuffer() ||
|
||||||
|
|
|
@ -332,11 +332,15 @@ bool GPU_HW_Vulkan::CreateSamplers()
|
||||||
|
|
||||||
Vulkan::SamplerBuilder sbuilder;
|
Vulkan::SamplerBuilder sbuilder;
|
||||||
sbuilder.SetPointSampler(VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
|
sbuilder.SetPointSampler(VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
|
||||||
|
sbuilder.SetAddressMode(VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||||
|
VK_SAMPLER_ADDRESS_MODE_REPEAT);
|
||||||
m_point_sampler = sbuilder.Create(device);
|
m_point_sampler = sbuilder.Create(device);
|
||||||
if (m_point_sampler == VK_NULL_HANDLE)
|
if (m_point_sampler == VK_NULL_HANDLE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
sbuilder.SetLinearSampler(false, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
|
sbuilder.SetLinearSampler(false, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
|
||||||
|
sbuilder.SetAddressMode(VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||||
|
VK_SAMPLER_ADDRESS_MODE_REPEAT);
|
||||||
m_linear_sampler = sbuilder.Create(device);
|
m_linear_sampler = sbuilder.Create(device);
|
||||||
if (m_linear_sampler == VK_NULL_HANDLE)
|
if (m_linear_sampler == VK_NULL_HANDLE)
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue