vkd3d: Introduce vkd3d_buffer_view_desc.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
parent
05381caac9
commit
3c9a54cb73
|
@ -5977,7 +5977,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
|
|||
{
|
||||
struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList(iface);
|
||||
struct vkd3d_view *base_view, *uint_view;
|
||||
struct vkd3d_texture_view_desc view_desc;
|
||||
const struct vkd3d_format *uint_format;
|
||||
struct d3d12_resource *resource_impl;
|
||||
VkClearColorValue color;
|
||||
|
@ -6005,7 +6004,9 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
|
|||
|
||||
if (d3d12_resource_is_texture(resource_impl))
|
||||
{
|
||||
struct vkd3d_texture_view_desc view_desc;
|
||||
memset(&view_desc, 0, sizeof(view_desc));
|
||||
|
||||
view_desc.view_type = base_view->info.texture.vk_view_type;
|
||||
view_desc.layout = base_view->info.texture.vk_layout;
|
||||
view_desc.format = uint_format;
|
||||
|
@ -6023,8 +6024,13 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!vkd3d_create_buffer_view(list->device, resource_impl->vk_buffer, uint_format,
|
||||
base_view->info.buffer.offset, base_view->info.buffer.size, &uint_view))
|
||||
struct vkd3d_buffer_view_desc view_desc;
|
||||
view_desc.buffer = resource_impl->vk_buffer;
|
||||
view_desc.format = uint_format;
|
||||
view_desc.offset = base_view->info.buffer.offset;
|
||||
view_desc.size = base_view->info.buffer.size;
|
||||
|
||||
if (!vkd3d_create_buffer_view(list->device, &view_desc, &uint_view))
|
||||
{
|
||||
ERR("Failed to create buffer view.\n");
|
||||
return;
|
||||
|
|
|
@ -3100,14 +3100,13 @@ static bool vkd3d_create_vk_buffer_view(struct d3d12_device *device,
|
|||
return vr == VK_SUCCESS;
|
||||
}
|
||||
|
||||
bool vkd3d_create_buffer_view(struct d3d12_device *device, VkBuffer vk_buffer, const struct vkd3d_format *format,
|
||||
VkDeviceSize offset, VkDeviceSize size, struct vkd3d_view **view)
|
||||
bool vkd3d_create_buffer_view(struct d3d12_device *device, const struct vkd3d_buffer_view_desc *desc, struct vkd3d_view **view)
|
||||
{
|
||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||
struct vkd3d_view *object;
|
||||
VkBufferView vk_view;
|
||||
|
||||
if (!vkd3d_create_vk_buffer_view(device, vk_buffer, format, offset, size, &vk_view))
|
||||
if (!vkd3d_create_vk_buffer_view(device, desc->buffer, desc->format, desc->offset, desc->size, &vk_view))
|
||||
return false;
|
||||
|
||||
if (!(object = vkd3d_view_create(VKD3D_VIEW_TYPE_BUFFER)))
|
||||
|
@ -3117,9 +3116,9 @@ bool vkd3d_create_buffer_view(struct d3d12_device *device, VkBuffer vk_buffer, c
|
|||
}
|
||||
|
||||
object->vk_buffer_view = vk_view;
|
||||
object->format = format;
|
||||
object->info.buffer.offset = offset;
|
||||
object->info.buffer.size = size;
|
||||
object->format = desc->format;
|
||||
object->info.buffer.offset = desc->offset;
|
||||
object->info.buffer.size = desc->size;
|
||||
*view = object;
|
||||
return true;
|
||||
}
|
||||
|
@ -3131,6 +3130,7 @@ static bool vkd3d_create_buffer_view_for_resource(struct d3d12_device *device,
|
|||
unsigned int offset, unsigned int size, unsigned int structure_stride,
|
||||
unsigned int flags, struct vkd3d_view **view)
|
||||
{
|
||||
struct vkd3d_buffer_view_desc view_desc;
|
||||
const struct vkd3d_format *format;
|
||||
VkDeviceSize element_size;
|
||||
|
||||
|
@ -3156,8 +3156,12 @@ static bool vkd3d_create_buffer_view_for_resource(struct d3d12_device *device,
|
|||
|
||||
assert(d3d12_resource_is_buffer(resource));
|
||||
|
||||
return vkd3d_create_buffer_view(device, resource->vk_buffer,
|
||||
format, resource->heap_offset + offset * element_size, size * element_size, view);
|
||||
view_desc.buffer = resource->vk_buffer;
|
||||
view_desc.format = format;
|
||||
view_desc.offset = resource->heap_offset + offset * element_size;
|
||||
view_desc.size = size * element_size;
|
||||
|
||||
return vkd3d_create_buffer_view(device, &view_desc, view);
|
||||
}
|
||||
|
||||
static void vkd3d_set_view_swizzle_for_format(VkComponentMapping *components,
|
||||
|
@ -3467,9 +3471,13 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor,
|
|||
{
|
||||
if (!device->device_info.robustness2_features.nullDescriptor)
|
||||
{
|
||||
if (!vkd3d_create_buffer_view(device, null_resources->vk_buffer,
|
||||
vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false),
|
||||
0, VKD3D_NULL_BUFFER_SIZE, &view))
|
||||
struct vkd3d_buffer_view_desc view_desc;
|
||||
view_desc.buffer = null_resources->vk_buffer;
|
||||
view_desc.format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||
view_desc.offset = 0;
|
||||
view_desc.size = VKD3D_NULL_BUFFER_SIZE;
|
||||
|
||||
if (!vkd3d_create_buffer_view(device, &view_desc, &view))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3700,9 +3708,13 @@ static void vkd3d_create_null_uav(struct d3d12_desc *descriptor,
|
|||
{
|
||||
if (!device->device_info.robustness2_features.nullDescriptor)
|
||||
{
|
||||
if (!vkd3d_create_buffer_view(device, null_resources->vk_buffer,
|
||||
vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false),
|
||||
0, VKD3D_NULL_BUFFER_SIZE, &view))
|
||||
struct vkd3d_buffer_view_desc view_desc;
|
||||
view_desc.buffer = null_resources->vk_buffer;
|
||||
view_desc.format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||
view_desc.offset = 0;
|
||||
view_desc.size = VKD3D_NULL_BUFFER_SIZE;
|
||||
|
||||
if (!vkd3d_create_buffer_view(device, &view_desc, &view))
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -578,6 +578,14 @@ struct vkd3d_view
|
|||
void vkd3d_view_decref(struct vkd3d_view *view, struct d3d12_device *device) DECLSPEC_HIDDEN;
|
||||
void vkd3d_view_incref(struct vkd3d_view *view) DECLSPEC_HIDDEN;
|
||||
|
||||
struct vkd3d_buffer_view_desc
|
||||
{
|
||||
VkBuffer buffer;
|
||||
const struct vkd3d_format *format;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
};
|
||||
|
||||
struct vkd3d_texture_view_desc
|
||||
{
|
||||
VkImageViewType view_type;
|
||||
|
@ -591,8 +599,8 @@ struct vkd3d_texture_view_desc
|
|||
bool allowed_swizzle;
|
||||
};
|
||||
|
||||
bool vkd3d_create_buffer_view(struct d3d12_device *device, VkBuffer vk_buffer, const struct vkd3d_format *format,
|
||||
VkDeviceSize offset, VkDeviceSize size, struct vkd3d_view **view) DECLSPEC_HIDDEN;
|
||||
bool vkd3d_create_buffer_view(struct d3d12_device *device,
|
||||
const struct vkd3d_buffer_view_desc *desc, struct vkd3d_view **view) DECLSPEC_HIDDEN;
|
||||
bool vkd3d_create_texture_view(struct d3d12_device *device, VkImage vk_image,
|
||||
const struct vkd3d_texture_view_desc *desc, struct vkd3d_view **view) DECLSPEC_HIDDEN;
|
||||
|
||||
|
|
Loading…
Reference in New Issue