mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d: Do not create Vulkan descriptor sets for non-shader-visible heaps.
This commit is contained in:
committed by
Alexandre Julliard
parent
9014183100
commit
42d46d2513
Notes:
Alexandre Julliard
2023-07-20 22:58:27 +02:00
Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/272
@@ -4425,6 +4425,7 @@ static void d3d12_command_list_set_descriptor_table(struct d3d12_command_list *l
|
|||||||
{
|
{
|
||||||
struct vkd3d_pipeline_bindings *bindings = &list->pipeline_bindings[bind_point];
|
struct vkd3d_pipeline_bindings *bindings = &list->pipeline_bindings[bind_point];
|
||||||
const struct d3d12_root_signature *root_signature = bindings->root_signature;
|
const struct d3d12_root_signature *root_signature = bindings->root_signature;
|
||||||
|
struct d3d12_descriptor_heap *descriptor_heap;
|
||||||
struct d3d12_desc *desc;
|
struct d3d12_desc *desc;
|
||||||
|
|
||||||
assert(root_signature_get_descriptor_table(root_signature, index));
|
assert(root_signature_get_descriptor_table(root_signature, index));
|
||||||
@@ -4435,6 +4436,15 @@ static void d3d12_command_list_set_descriptor_table(struct d3d12_command_list *l
|
|||||||
if (bindings->descriptor_tables[index] == desc)
|
if (bindings->descriptor_tables[index] == desc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
descriptor_heap = d3d12_desc_get_descriptor_heap(desc);
|
||||||
|
if (!(descriptor_heap->desc.Flags & D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE))
|
||||||
|
{
|
||||||
|
/* GetGPUDescriptorHandleForHeapStart() returns a null handle in this case,
|
||||||
|
* but a CPU handle could be passed. */
|
||||||
|
WARN("Descriptor heap %p is not shader visible.\n", descriptor_heap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bindings->descriptor_tables[index] = desc;
|
bindings->descriptor_tables[index] = desc;
|
||||||
bindings->descriptor_table_dirty_mask |= (uint64_t)1 << index;
|
bindings->descriptor_table_dirty_mask |= (uint64_t)1 << index;
|
||||||
bindings->descriptor_table_active_mask |= (uint64_t)1 << index;
|
bindings->descriptor_table_active_mask |= (uint64_t)1 << index;
|
||||||
|
@@ -3970,7 +3970,7 @@ static HRESULT d3d12_descriptor_heap_vk_descriptor_sets_init(struct d3d12_descri
|
|||||||
descriptor_heap->vk_descriptor_pool = VK_NULL_HANDLE;
|
descriptor_heap->vk_descriptor_pool = VK_NULL_HANDLE;
|
||||||
memset(descriptor_heap->vk_descriptor_sets, 0, sizeof(descriptor_heap->vk_descriptor_sets));
|
memset(descriptor_heap->vk_descriptor_sets, 0, sizeof(descriptor_heap->vk_descriptor_sets));
|
||||||
|
|
||||||
if (!device->use_vk_heaps || (desc->Type != D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
|
if (!descriptor_heap->use_vk_heaps || (desc->Type != D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
|
||||||
&& desc->Type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER))
|
&& desc->Type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER))
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
@@ -4001,7 +4001,7 @@ static HRESULT d3d12_descriptor_heap_init(struct d3d12_descriptor_heap *descript
|
|||||||
if (FAILED(hr = vkd3d_private_store_init(&descriptor_heap->private_store)))
|
if (FAILED(hr = vkd3d_private_store_init(&descriptor_heap->private_store)))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
descriptor_heap->use_vk_heaps = device->use_vk_heaps;
|
descriptor_heap->use_vk_heaps = device->use_vk_heaps && (desc->Flags & D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE);
|
||||||
d3d12_descriptor_heap_vk_descriptor_sets_init(descriptor_heap, device, desc);
|
d3d12_descriptor_heap_vk_descriptor_sets_init(descriptor_heap, device, desc);
|
||||||
vkd3d_mutex_init(&descriptor_heap->vk_sets_mutex);
|
vkd3d_mutex_init(&descriptor_heap->vk_sets_mutex);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user