mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d: Pass device to vkd3d_get_format().
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
7c8ce3c51c
commit
9536f10383
@ -2103,8 +2103,8 @@ static HRESULT d3d12_device_check_multisample_quality_levels(struct d3d12_device
|
|||||||
if (data->Format == DXGI_FORMAT_UNKNOWN)
|
if (data->Format == DXGI_FORMAT_UNKNOWN)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (!(format = vkd3d_get_format(data->Format, false)))
|
if (!(format = vkd3d_get_format(device, data->Format, false)))
|
||||||
format = vkd3d_get_format(data->Format, true);
|
format = vkd3d_get_format(device, data->Format, true);
|
||||||
if (!format)
|
if (!format)
|
||||||
{
|
{
|
||||||
FIXME("Unhandled format %#x.\n", data->Format);
|
FIXME("Unhandled format %#x.\n", data->Format);
|
||||||
@ -2257,8 +2257,8 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device *
|
|||||||
|
|
||||||
data->Support1 = D3D12_FORMAT_SUPPORT1_NONE;
|
data->Support1 = D3D12_FORMAT_SUPPORT1_NONE;
|
||||||
data->Support2 = D3D12_FORMAT_SUPPORT2_NONE;
|
data->Support2 = D3D12_FORMAT_SUPPORT2_NONE;
|
||||||
if (!(format = vkd3d_get_format(data->Format, false)))
|
if (!(format = vkd3d_get_format(device, data->Format, false)))
|
||||||
format = vkd3d_get_format(data->Format, true);
|
format = vkd3d_get_format(device, data->Format, true);
|
||||||
if (!format)
|
if (!format)
|
||||||
{
|
{
|
||||||
FIXME("Unhandled format %#x.\n", data->Format);
|
FIXME("Unhandled format %#x.\n", data->Format);
|
||||||
|
@ -1701,12 +1701,12 @@ static bool vkd3d_create_buffer_view(struct d3d12_device *device,
|
|||||||
|
|
||||||
if (view_format == DXGI_FORMAT_R32_TYPELESS && (flags & VKD3D_VIEW_RAW_BUFFER))
|
if (view_format == DXGI_FORMAT_R32_TYPELESS && (flags & VKD3D_VIEW_RAW_BUFFER))
|
||||||
{
|
{
|
||||||
format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
|
format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||||
element_size = format->byte_count;
|
element_size = format->byte_count;
|
||||||
}
|
}
|
||||||
else if (view_format == DXGI_FORMAT_UNKNOWN && structure_stride)
|
else if (view_format == DXGI_FORMAT_UNKNOWN && structure_stride)
|
||||||
{
|
{
|
||||||
format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
|
format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||||
element_size = structure_stride;
|
element_size = structure_stride;
|
||||||
}
|
}
|
||||||
else if ((format = vkd3d_format_from_d3d12_resource_desc(device, &resource->desc, view_format)))
|
else if ((format = vkd3d_format_from_d3d12_resource_desc(device, &resource->desc, view_format)))
|
||||||
@ -2055,7 +2055,7 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor,
|
|||||||
|
|
||||||
WARN("Creating NULL SRV %#x.\n", desc->ViewDimension);
|
WARN("Creating NULL SRV %#x.\n", desc->ViewDimension);
|
||||||
|
|
||||||
vkd3d_desc.format = vkd3d_get_format(VKD3D_NULL_VIEW_FORMAT, 0);
|
vkd3d_desc.format = vkd3d_get_format(device, VKD3D_NULL_VIEW_FORMAT, 0);
|
||||||
vkd3d_desc.miplevel_idx = 0;
|
vkd3d_desc.miplevel_idx = 0;
|
||||||
vkd3d_desc.miplevel_count = 1;
|
vkd3d_desc.miplevel_count = 1;
|
||||||
vkd3d_desc.layer_idx = 0;
|
vkd3d_desc.layer_idx = 0;
|
||||||
@ -2258,7 +2258,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_
|
|||||||
assert(d3d12_resource_is_buffer(counter_resource));
|
assert(d3d12_resource_is_buffer(counter_resource));
|
||||||
assert(desc->u.Buffer.StructureByteStride);
|
assert(desc->u.Buffer.StructureByteStride);
|
||||||
|
|
||||||
format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
|
format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||||
if (!vkd3d_create_vk_buffer_view(device, counter_resource, format,
|
if (!vkd3d_create_vk_buffer_view(device, counter_resource, format,
|
||||||
desc->u.Buffer.CounterOffsetInBytes, sizeof(uint32_t), &view->vk_counter_view))
|
desc->u.Buffer.CounterOffsetInBytes, sizeof(uint32_t), &view->vk_counter_view))
|
||||||
{
|
{
|
||||||
@ -2272,7 +2272,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_
|
|||||||
if ((desc->Format == DXGI_FORMAT_R32_TYPELESS && (desc->u.Buffer.Flags & VKD3D_VIEW_RAW_BUFFER))
|
if ((desc->Format == DXGI_FORMAT_R32_TYPELESS && (desc->u.Buffer.Flags & VKD3D_VIEW_RAW_BUFFER))
|
||||||
|| desc->Format == DXGI_FORMAT_R32_UINT)
|
|| desc->Format == DXGI_FORMAT_R32_UINT)
|
||||||
{
|
{
|
||||||
const struct vkd3d_format *format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
|
const struct vkd3d_format *format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||||
|
|
||||||
descriptor->uav.buffer.offset = desc->u.Buffer.FirstElement * format->byte_count;
|
descriptor->uav.buffer.offset = desc->u.Buffer.FirstElement * format->byte_count;
|
||||||
descriptor->uav.buffer.size = desc->u.Buffer.NumElements * format->byte_count;
|
descriptor->uav.buffer.size = desc->u.Buffer.NumElements * format->byte_count;
|
||||||
@ -2367,7 +2367,7 @@ bool vkd3d_create_raw_buffer_view(struct d3d12_device *device,
|
|||||||
const struct vkd3d_format *format;
|
const struct vkd3d_format *format;
|
||||||
struct d3d12_resource *resource;
|
struct d3d12_resource *resource;
|
||||||
|
|
||||||
format = vkd3d_get_format(DXGI_FORMAT_R32_UINT, false);
|
format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
|
||||||
resource = vkd3d_gpu_va_allocator_dereference(&device->gpu_va_allocator, gpu_address);
|
resource = vkd3d_gpu_va_allocator_dereference(&device->gpu_va_allocator, gpu_address);
|
||||||
return vkd3d_create_vk_buffer_view(device, resource, format,
|
return vkd3d_create_vk_buffer_view(device, resource, format,
|
||||||
gpu_address - resource->gpu_address, VK_WHOLE_SIZE, vk_buffer_view);
|
gpu_address - resource->gpu_address, VK_WHOLE_SIZE, vk_buffer_view);
|
||||||
|
@ -1969,8 +1969,8 @@ static bool is_dual_source_blending(const D3D12_RENDER_TARGET_BLEND_DESC *desc)
|
|||||||
|| is_dual_source_blending_blend(desc->DestBlendAlpha));
|
|| is_dual_source_blending_blend(desc->DestBlendAlpha));
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT compute_input_layout_offsets(const D3D12_INPUT_LAYOUT_DESC *input_layout_desc,
|
static HRESULT compute_input_layout_offsets(const struct d3d12_device *device,
|
||||||
uint32_t *offsets)
|
const D3D12_INPUT_LAYOUT_DESC *input_layout_desc, uint32_t *offsets)
|
||||||
{
|
{
|
||||||
uint32_t input_slot_offsets[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT] = {0};
|
uint32_t input_slot_offsets[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT] = {0};
|
||||||
const D3D12_INPUT_ELEMENT_DESC *e;
|
const D3D12_INPUT_ELEMENT_DESC *e;
|
||||||
@ -1993,7 +1993,7 @@ static HRESULT compute_input_layout_offsets(const D3D12_INPUT_LAYOUT_DESC *input
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(format = vkd3d_get_format(e->Format, false)))
|
if (!(format = vkd3d_get_format(device, e->Format, false)))
|
||||||
{
|
{
|
||||||
WARN("Invalid input element format %#x.\n", e->Format);
|
WARN("Invalid input element format %#x.\n", e->Format);
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
@ -2145,7 +2145,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
{
|
{
|
||||||
const D3D12_DEPTH_STENCIL_DESC *ds_desc = &desc->DepthStencilState;
|
const D3D12_DEPTH_STENCIL_DESC *ds_desc = &desc->DepthStencilState;
|
||||||
|
|
||||||
if (!(format = vkd3d_get_format(desc->DSVFormat, true)))
|
if (!(format = vkd3d_get_format(device, desc->DSVFormat, true)))
|
||||||
{
|
{
|
||||||
WARN("Invalid DSV format %#x.\n", desc->DSVFormat);
|
WARN("Invalid DSV format %#x.\n", desc->DSVFormat);
|
||||||
hr = E_INVALIDARG;
|
hr = E_INVALIDARG;
|
||||||
@ -2183,7 +2183,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
const D3D12_RENDER_TARGET_BLEND_DESC *rt_desc;
|
const D3D12_RENDER_TARGET_BLEND_DESC *rt_desc;
|
||||||
size_t idx = graphics->rt_idx + i;
|
size_t idx = graphics->rt_idx + i;
|
||||||
|
|
||||||
if (!(format = vkd3d_get_format(desc->RTVFormats[i], false)))
|
if (!(format = vkd3d_get_format(device, desc->RTVFormats[i], false)))
|
||||||
{
|
{
|
||||||
WARN("Invalid RTV format %#x.\n", desc->RTVFormats[i]);
|
WARN("Invalid RTV format %#x.\n", desc->RTVFormats[i]);
|
||||||
hr = E_INVALIDARG;
|
hr = E_INVALIDARG;
|
||||||
@ -2368,7 +2368,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr = compute_input_layout_offsets(&desc->InputLayout, aligned_offsets)))
|
if (FAILED(hr = compute_input_layout_offsets(device, &desc->InputLayout, aligned_offsets)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
graphics->instance_divisor_count = 0;
|
graphics->instance_divisor_count = 0;
|
||||||
@ -2377,7 +2377,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s
|
|||||||
const D3D12_INPUT_ELEMENT_DESC *e = &desc->InputLayout.pInputElementDescs[i];
|
const D3D12_INPUT_ELEMENT_DESC *e = &desc->InputLayout.pInputElementDescs[i];
|
||||||
const struct vkd3d_shader_signature_element *signature_element;
|
const struct vkd3d_shader_signature_element *signature_element;
|
||||||
|
|
||||||
if (!(format = vkd3d_get_format(e->Format, false)))
|
if (!(format = vkd3d_get_format(device, e->Format, false)))
|
||||||
{
|
{
|
||||||
WARN("Invalid input element format %#x.\n", e->Format);
|
WARN("Invalid input element format %#x.\n", e->Format);
|
||||||
hr = E_INVALIDARG;
|
hr = E_INVALIDARG;
|
||||||
|
@ -136,10 +136,13 @@ static const struct vkd3d_format vkd3d_depth_stencil_formats[] =
|
|||||||
* properly support typeless formats because depth/stencil formats are only
|
* properly support typeless formats because depth/stencil formats are only
|
||||||
* compatible with themselves in Vulkan.
|
* compatible with themselves in Vulkan.
|
||||||
*/
|
*/
|
||||||
static const struct vkd3d_format *vkd3d_get_depth_stencil_format(DXGI_FORMAT dxgi_format)
|
static const struct vkd3d_format *vkd3d_get_depth_stencil_format(const struct d3d12_device *device,
|
||||||
|
DXGI_FORMAT dxgi_format)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
assert(device);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(vkd3d_depth_stencil_formats); ++i)
|
for (i = 0; i < ARRAY_SIZE(vkd3d_depth_stencil_formats); ++i)
|
||||||
{
|
{
|
||||||
if (vkd3d_depth_stencil_formats[i].dxgi_format == dxgi_format)
|
if (vkd3d_depth_stencil_formats[i].dxgi_format == dxgi_format)
|
||||||
@ -149,12 +152,13 @@ static const struct vkd3d_format *vkd3d_get_depth_stencil_format(DXGI_FORMAT dxg
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct vkd3d_format *vkd3d_get_format(DXGI_FORMAT dxgi_format, bool depth_stencil)
|
const struct vkd3d_format *vkd3d_get_format(const struct d3d12_device *device,
|
||||||
|
DXGI_FORMAT dxgi_format, bool depth_stencil)
|
||||||
{
|
{
|
||||||
const struct vkd3d_format *format;
|
const struct vkd3d_format *format;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (depth_stencil && (format = vkd3d_get_depth_stencil_format(dxgi_format)))
|
if (depth_stencil && (format = vkd3d_get_depth_stencil_format(device, dxgi_format)))
|
||||||
return format;
|
return format;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(vkd3d_formats); ++i)
|
for (i = 0; i < ARRAY_SIZE(vkd3d_formats); ++i)
|
||||||
@ -170,7 +174,7 @@ VkFormat vkd3d_get_vk_format(DXGI_FORMAT format)
|
|||||||
{
|
{
|
||||||
const struct vkd3d_format *vkd3d_format;
|
const struct vkd3d_format *vkd3d_format;
|
||||||
|
|
||||||
if (!(vkd3d_format = vkd3d_get_format(format, false)))
|
if (!(vkd3d_format = vkd3d_get_format(NULL, format, false)))
|
||||||
return VK_FORMAT_UNDEFINED;
|
return VK_FORMAT_UNDEFINED;
|
||||||
|
|
||||||
return vkd3d_format->vk_format;
|
return vkd3d_format->vk_format;
|
||||||
|
@ -1034,14 +1034,15 @@ static inline bool vkd3d_format_is_compressed(const struct vkd3d_format *format)
|
|||||||
return format->block_byte_count != 1;
|
return format->block_byte_count != 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct vkd3d_format *vkd3d_get_format(DXGI_FORMAT dxgi_format, bool depth_stencil) DECLSPEC_HIDDEN;
|
const struct vkd3d_format *vkd3d_get_format(const struct d3d12_device *device,
|
||||||
|
DXGI_FORMAT dxgi_format, bool depth_stencil) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
bool dxgi_format_is_typeless(DXGI_FORMAT dxgi_format) DECLSPEC_HIDDEN;
|
bool dxgi_format_is_typeless(DXGI_FORMAT dxgi_format) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static inline const struct vkd3d_format *vkd3d_format_from_d3d12_resource_desc(
|
static inline const struct vkd3d_format *vkd3d_format_from_d3d12_resource_desc(
|
||||||
const struct d3d12_device *device, const D3D12_RESOURCE_DESC *desc, DXGI_FORMAT view_format)
|
const struct d3d12_device *device, const D3D12_RESOURCE_DESC *desc, DXGI_FORMAT view_format)
|
||||||
{
|
{
|
||||||
return vkd3d_get_format(view_format ? view_format : desc->Format,
|
return vkd3d_get_format(device, view_format ? view_format : desc->Format,
|
||||||
desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL);
|
desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user