libs/vkd3d: GPU virtual address for texture resources is always 0.

This commit is contained in:
Józef Kucia 2016-10-24 13:20:09 +02:00
parent a5fbcb28f0
commit eea8617b9b
4 changed files with 26 additions and 8 deletions

View File

@ -1538,8 +1538,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(ID3D12Graphics
vk_procs = &list->device->vk_procs;
assert(dst_resource_impl->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER);
assert(src_resource_impl->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER);
assert(d3d12_resource_is_buffer(dst_resource_impl));
assert(d3d12_resource_is_buffer(src_resource_impl));
buffer_copy.srcOffset = src_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,
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;

View File

@ -279,7 +279,7 @@ static HRESULT vkd3d_allocate_buffer_memory(struct d3d12_resource *resource, str
VkResult vr;
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));
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;
}
if (resource->desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER)
if (!d3d12_resource_is_buffer(resource))
{
/* Textures seem to be mappable only on UMA adapters. */
FIXME("Not implemented for textures.\n");
@ -515,7 +515,7 @@ static void STDMETHODCALLTYPE d3d12_resource_Unmap(ID3D12Resource *iface, UINT s
device = resource->device;
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");
return;
@ -552,6 +552,12 @@ static D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE d3d12_resource_GetGPUVirtualA
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;
}
@ -631,7 +637,7 @@ static HRESULT d3d12_committed_resource_init(struct d3d12_resource *resource, st
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))
{
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;
}
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");
return E_INVALIDARG;

View File

@ -138,6 +138,11 @@ struct d3d12_resource
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,
const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,

View File

@ -844,6 +844,7 @@ static void test_create_command_queue(void)
static void test_create_committed_resource(void)
{
D3D12_GPU_VIRTUAL_ADDRESS gpu_address;
D3D12_HEAP_PROPERTIES heap_properties;
D3D12_RESOURCE_DESC resource_desc;
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_ID3D12Resource, TRUE);
gpu_address = ID3D12Resource_GetGPUVirtualAddress(resource);
ok(!gpu_address, "Got unexpected GPU virtual address %#"PRIx64".\n", gpu_address);
refcount = ID3D12Resource_Release(resource);
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_ID3D12Resource, TRUE);
gpu_address = ID3D12Resource_GetGPUVirtualAddress(resource);
ok(gpu_address, "Got unexpected GPU virtual address %#"PRIx64".\n", gpu_address);
refcount = ID3D12Resource_Release(resource);
ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);