tests/shader_runner: Correct the minification filter and mipmap mode calculations.

This commit is contained in:
Shaun Ren
2025-08-23 02:15:43 -04:00
committed by Henri Verbeet
parent d6bed4be37
commit f6cebdb26d
Notes: Henri Verbeet 2025-09-03 13:09:54 +02:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1698
4 changed files with 11 additions and 9 deletions

View File

@@ -540,13 +540,13 @@ static bool d3d9_runner_draw(struct shader_runner *r,
ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr); ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr);
hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MINFILTER, hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MINFILTER,
(sampler->filter & 0x1) ? D3DTEXF_LINEAR : D3DTEXF_POINT); (sampler->filter & 0x10) ? D3DTEXF_LINEAR : D3DTEXF_POINT);
ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr); ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr);
hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MAGFILTER, hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MAGFILTER,
(sampler->filter & 0x4) ? D3DTEXF_LINEAR : D3DTEXF_POINT); (sampler->filter & 0x4) ? D3DTEXF_LINEAR : D3DTEXF_POINT);
ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr); ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr);
hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MIPFILTER, hr = IDirect3DDevice9_SetSamplerState(device, sampler->slot, D3DSAMP_MIPFILTER,
(sampler->filter & 0x10) ? D3DTEXF_LINEAR : D3DTEXF_POINT); (sampler->filter & 0x1) ? D3DTEXF_LINEAR : D3DTEXF_POINT);
ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr); ok(hr == D3D_OK, "Failed to set sampler state, hr %#lx.\n", hr);
} }

View File

@@ -1026,10 +1026,12 @@ static GLenum get_texture_filter_mag_gl(D3D12_FILTER filter)
static GLenum get_texture_filter_min_gl(D3D12_FILTER filter) static GLenum get_texture_filter_min_gl(D3D12_FILTER filter)
{ {
if (filter & 0x1) bool min_linear = filter & 0x10, mip_linear = filter & 0x1;
return filter & 0x10 ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR_MIPMAP_NEAREST;
if (min_linear)
return mip_linear ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR_MIPMAP_NEAREST;
else else
return filter & 0x10 ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST; return mip_linear ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST;
} }
static GLenum get_compare_op_gl(D3D12_COMPARISON_FUNC op) static GLenum get_compare_op_gl(D3D12_COMPARISON_FUNC op)

View File

@@ -818,9 +818,9 @@ static bool metal_runner_draw(struct shader_runner *r, D3D_PRIMITIVE_TOPOLOGY to
sampler_desc.rAddressMode = get_metal_address_mode(sampler->w_address); sampler_desc.rAddressMode = get_metal_address_mode(sampler->w_address);
sampler_desc.magFilter = (sampler->filter & 0x4) sampler_desc.magFilter = (sampler->filter & 0x4)
? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest; ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest;
sampler_desc.minFilter = (sampler->filter & 0x1) sampler_desc.minFilter = (sampler->filter & 0x10)
? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest; ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest;
sampler_desc.mipFilter = (sampler->filter & 0x10) sampler_desc.mipFilter = (sampler->filter & 0x1)
? MTLSamplerMipFilterLinear : MTLSamplerMipFilterNearest; ? MTLSamplerMipFilterLinear : MTLSamplerMipFilterNearest;
sampler_desc.compareFunction = sampler->func sampler_desc.compareFunction = sampler->func
? get_metal_compare_function(sampler->func) : MTLCompareFunctionNever; ? get_metal_compare_function(sampler->func) : MTLCompareFunctionNever;

View File

@@ -1003,8 +1003,8 @@ static VkDescriptorSetLayout create_descriptor_set_layout(struct vulkan_shader_r
const struct sampler *sampler = &runner->r.samplers[i]; const struct sampler *sampler = &runner->r.samplers[i];
sampler_desc.magFilter = (sampler->filter & 0x4) ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; sampler_desc.magFilter = (sampler->filter & 0x4) ? VK_FILTER_LINEAR : VK_FILTER_NEAREST;
sampler_desc.minFilter = (sampler->filter & 0x1) ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; sampler_desc.minFilter = (sampler->filter & 0x10) ? VK_FILTER_LINEAR : VK_FILTER_NEAREST;
sampler_desc.mipmapMode = (sampler->filter & 0x10) ? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST; sampler_desc.mipmapMode = (sampler->filter & 0x1) ? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST;
sampler_desc.addressModeU = vk_address_mode_from_d3d12(sampler->u_address); sampler_desc.addressModeU = vk_address_mode_from_d3d12(sampler->u_address);
sampler_desc.addressModeV = vk_address_mode_from_d3d12(sampler->v_address); sampler_desc.addressModeV = vk_address_mode_from_d3d12(sampler->v_address);
sampler_desc.addressModeW = vk_address_mode_from_d3d12(sampler->w_address); sampler_desc.addressModeW = vk_address_mode_from_d3d12(sampler->w_address);