mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
libs/vkd3d: GPU virtual address for texture resources is always 0.
This commit is contained in:
parent
a5fbcb28f0
commit
eea8617b9b
@ -1538,8 +1538,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(ID3D12Graphics
|
|||||||
|
|
||||||
vk_procs = &list->device->vk_procs;
|
vk_procs = &list->device->vk_procs;
|
||||||
|
|
||||||
assert(dst_resource_impl->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER);
|
assert(d3d12_resource_is_buffer(dst_resource_impl));
|
||||||
assert(src_resource_impl->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER);
|
assert(d3d12_resource_is_buffer(src_resource_impl));
|
||||||
|
|
||||||
buffer_copy.srcOffset = src_offset;
|
buffer_copy.srcOffset = src_offset;
|
||||||
buffer_copy.dstOffset = dst_offset;
|
buffer_copy.dstOffset = dst_offset;
|
||||||
@ -1836,7 +1836,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResourceBarrier(ID3D12GraphicsC
|
|||||||
VK_CALL(vkCmdPipelineBarrier(list->vk_command_buffer, src_stage_mask, dst_stage_mask, 0,
|
VK_CALL(vkCmdPipelineBarrier(list->vk_command_buffer, src_stage_mask, dst_stage_mask, 0,
|
||||||
1, &vk_barrier, 0, NULL, 0, NULL));
|
1, &vk_barrier, 0, NULL, 0, NULL));
|
||||||
}
|
}
|
||||||
else if (resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
|
else if (d3d12_resource_is_buffer(resource))
|
||||||
{
|
{
|
||||||
VkBufferMemoryBarrier vk_barrier;
|
VkBufferMemoryBarrier vk_barrier;
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ static HRESULT vkd3d_allocate_buffer_memory(struct d3d12_resource *resource, str
|
|||||||
VkResult vr;
|
VkResult vr;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
assert(resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER);
|
assert(d3d12_resource_is_buffer(resource));
|
||||||
|
|
||||||
VK_CALL(vkGetBufferMemoryRequirements(device->vk_device, resource->u.vk_buffer, &memory_requirements));
|
VK_CALL(vkGetBufferMemoryRequirements(device->vk_device, resource->u.vk_buffer, &memory_requirements));
|
||||||
if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
|
if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
|
||||||
@ -471,7 +471,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_resource_Map(ID3D12Resource *iface, UINT
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resource->desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER)
|
if (!d3d12_resource_is_buffer(resource))
|
||||||
{
|
{
|
||||||
/* Textures seem to be mappable only on UMA adapters. */
|
/* Textures seem to be mappable only on UMA adapters. */
|
||||||
FIXME("Not implemented for textures.\n");
|
FIXME("Not implemented for textures.\n");
|
||||||
@ -515,7 +515,7 @@ static void STDMETHODCALLTYPE d3d12_resource_Unmap(ID3D12Resource *iface, UINT s
|
|||||||
device = resource->device;
|
device = resource->device;
|
||||||
vk_procs = &device->vk_procs;
|
vk_procs = &device->vk_procs;
|
||||||
|
|
||||||
if (resource->desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER)
|
if (!d3d12_resource_is_buffer(resource))
|
||||||
{
|
{
|
||||||
FIXME("Not implemented for textures.\n");
|
FIXME("Not implemented for textures.\n");
|
||||||
return;
|
return;
|
||||||
@ -552,6 +552,12 @@ static D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE d3d12_resource_GetGPUVirtualA
|
|||||||
|
|
||||||
TRACE("iface %p.\n", iface);
|
TRACE("iface %p.\n", iface);
|
||||||
|
|
||||||
|
if (!d3d12_resource_is_buffer(resource))
|
||||||
|
{
|
||||||
|
WARN("GPU virtual address for textures is always 0.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return resource->u.gpu_address;
|
return resource->u.gpu_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +637,7 @@ static HRESULT d3d12_committed_resource_init(struct d3d12_resource *resource, st
|
|||||||
|
|
||||||
resource->desc = *desc;
|
resource->desc = *desc;
|
||||||
|
|
||||||
if (desc->Dimension != D3D12_RESOURCE_DIMENSION_BUFFER
|
if (!d3d12_resource_is_buffer(resource)
|
||||||
&& (heap_properties->Type == D3D12_HEAP_TYPE_UPLOAD || heap_properties->Type == D3D12_HEAP_TYPE_READBACK))
|
&& (heap_properties->Type == D3D12_HEAP_TYPE_UPLOAD || heap_properties->Type == D3D12_HEAP_TYPE_READBACK))
|
||||||
{
|
{
|
||||||
WARN("Texture cannot be created on a UPLOAD/READBACK heap.\n");
|
WARN("Texture cannot be created on a UPLOAD/READBACK heap.\n");
|
||||||
@ -655,7 +661,7 @@ static HRESULT d3d12_committed_resource_init(struct d3d12_resource *resource, st
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optimized_clear_value && desc->Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
|
if (optimized_clear_value && d3d12_resource_is_buffer(resource))
|
||||||
{
|
{
|
||||||
WARN("Optimized clear value must be NULL for buffers.\n");
|
WARN("Optimized clear value must be NULL for buffers.\n");
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
@ -138,6 +138,11 @@ struct d3d12_resource
|
|||||||
struct d3d12_device *device;
|
struct d3d12_device *device;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline bool d3d12_resource_is_buffer(const struct d3d12_resource *resource)
|
||||||
|
{
|
||||||
|
return resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT d3d12_committed_resource_create(struct d3d12_device *device,
|
HRESULT d3d12_committed_resource_create(struct d3d12_device *device,
|
||||||
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
|
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
|
||||||
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
|
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
|
||||||
|
@ -844,6 +844,7 @@ static void test_create_command_queue(void)
|
|||||||
|
|
||||||
static void test_create_committed_resource(void)
|
static void test_create_committed_resource(void)
|
||||||
{
|
{
|
||||||
|
D3D12_GPU_VIRTUAL_ADDRESS gpu_address;
|
||||||
D3D12_HEAP_PROPERTIES heap_properties;
|
D3D12_HEAP_PROPERTIES heap_properties;
|
||||||
D3D12_RESOURCE_DESC resource_desc;
|
D3D12_RESOURCE_DESC resource_desc;
|
||||||
ID3D12Device *device, *tmp_device;
|
ID3D12Device *device, *tmp_device;
|
||||||
@ -898,6 +899,9 @@ static void test_create_committed_resource(void)
|
|||||||
check_interface(resource, &IID_ID3D12Pageable, TRUE);
|
check_interface(resource, &IID_ID3D12Pageable, TRUE);
|
||||||
check_interface(resource, &IID_ID3D12Resource, TRUE);
|
check_interface(resource, &IID_ID3D12Resource, TRUE);
|
||||||
|
|
||||||
|
gpu_address = ID3D12Resource_GetGPUVirtualAddress(resource);
|
||||||
|
ok(!gpu_address, "Got unexpected GPU virtual address %#"PRIx64".\n", gpu_address);
|
||||||
|
|
||||||
refcount = ID3D12Resource_Release(resource);
|
refcount = ID3D12Resource_Release(resource);
|
||||||
ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);
|
ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);
|
||||||
|
|
||||||
@ -953,6 +957,9 @@ static void test_create_committed_resource(void)
|
|||||||
check_interface(resource, &IID_ID3D12Pageable, TRUE);
|
check_interface(resource, &IID_ID3D12Pageable, TRUE);
|
||||||
check_interface(resource, &IID_ID3D12Resource, TRUE);
|
check_interface(resource, &IID_ID3D12Resource, TRUE);
|
||||||
|
|
||||||
|
gpu_address = ID3D12Resource_GetGPUVirtualAddress(resource);
|
||||||
|
ok(gpu_address, "Got unexpected GPU virtual address %#"PRIx64".\n", gpu_address);
|
||||||
|
|
||||||
refcount = ID3D12Resource_Release(resource);
|
refcount = ID3D12Resource_Release(resource);
|
||||||
ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);
|
ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user