mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
libs/vkd3d: Create single default sampler per device.
This commit is contained in:
@@ -770,6 +770,18 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT d3d12_device_create_default_sampler(struct d3d12_device *device)
|
||||
{
|
||||
D3D12_STATIC_SAMPLER_DESC sampler_desc;
|
||||
|
||||
memset(&sampler_desc, 0, sizeof(sampler_desc));
|
||||
sampler_desc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT;
|
||||
sampler_desc.AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
|
||||
sampler_desc.AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
|
||||
sampler_desc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
|
||||
return vkd3d_create_static_sampler(device, &sampler_desc, &device->vk_default_sampler);
|
||||
}
|
||||
|
||||
static void d3d12_device_init_pipeline_cache(struct d3d12_device *device)
|
||||
{
|
||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||
@@ -907,6 +919,7 @@ static ULONG STDMETHODCALLTYPE d3d12_device_Release(ID3D12Device *iface)
|
||||
|
||||
vkd3d_gpu_va_allocator_cleanup(&device->gpu_va_allocator);
|
||||
vkd3d_fence_worker_stop(&device->fence_worker);
|
||||
VK_CALL(vkDestroySampler(device->vk_device, device->vk_default_sampler, NULL));
|
||||
if (device->vk_pipeline_cache)
|
||||
VK_CALL(vkDestroyPipelineCache(device->vk_device, device->vk_pipeline_cache, NULL));
|
||||
VK_CALL(vkDestroyDevice(device->vk_device, NULL));
|
||||
@@ -1753,9 +1766,19 @@ static HRESULT d3d12_device_init(struct d3d12_device *device,
|
||||
device->signal_event = create_info->signal_event_pfn;
|
||||
device->wchar_size = create_info->wchar_size;
|
||||
|
||||
if (FAILED(hr = d3d12_device_create_default_sampler(device)))
|
||||
{
|
||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||
ERR("Failed to create default sampler, hr %#x.\n", hr);
|
||||
VK_CALL(vkDestroyDevice(device->vk_device, NULL));
|
||||
vkd3d_instance_destroy(&device->vkd3d_instance);
|
||||
return hr;
|
||||
}
|
||||
|
||||
if (FAILED(hr = vkd3d_fence_worker_start(&device->fence_worker, device)))
|
||||
{
|
||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||
VK_CALL(vkDestroySampler(device->vk_device, device->vk_default_sampler, NULL));
|
||||
VK_CALL(vkDestroyDevice(device->vk_device, NULL));
|
||||
vkd3d_instance_destroy(&device->vkd3d_instance);
|
||||
return hr;
|
||||
|
||||
Reference in New Issue
Block a user