vkd3d-shader: Add offset buffer path to DXIL.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2020-10-28 09:29:49 +01:00
parent 127b498a5a
commit a4f68931bb
2 changed files with 11 additions and 13 deletions

View File

@ -127,21 +127,19 @@ static dxil_spv_bool dxil_srv_remap(void *userdata, const dxil_spv_d3d_binding *
{
const struct vkd3d_shader_interface_info *shader_interface_info = userdata;
unsigned int resource_flags, resource_flags_ssbo;
bool use_ssbo;
resource_flags_ssbo = dxil_resource_flags_from_kind(d3d_binding->kind, true);
resource_flags = dxil_resource_flags_from_kind(d3d_binding->kind, false);
use_ssbo = resource_flags_ssbo != resource_flags;
bool use_ssbo = resource_flags_ssbo != resource_flags;
if (use_ssbo && dxil_remap(shader_interface_info, VKD3D_SHADER_DESCRIPTOR_TYPE_SRV,
d3d_binding, &vk_binding->buffer_binding, resource_flags_ssbo))
{
vk_binding->buffer_binding.descriptor_type = DXIL_SPV_VULKAN_DESCRIPTOR_TYPE_SSBO;
if (d3d_binding->alignment < shader_interface_info->min_ssbo_alignment)
if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_SSBO_OFFSET_BUFFER)
{
FIXME("Shader declares resource with alignment of %u bytes, but implementation only supports %u.\n",
d3d_binding->alignment, shader_interface_info->min_ssbo_alignment);
vk_binding->offset_binding.set = shader_interface_info->offset_buffer_binding->set;
vk_binding->offset_binding.binding = shader_interface_info->offset_buffer_binding->binding;
}
return DXIL_SPV_TRUE;
}
@ -226,15 +224,10 @@ static dxil_spv_bool dxil_uav_remap(void *userdata, const dxil_spv_uav_d3d_bindi
{
const struct vkd3d_shader_interface_info *shader_interface_info = userdata;
unsigned int resource_flags, resource_flags_ssbo;
bool use_ssbo;
resource_flags_ssbo = dxil_resource_flags_from_kind(d3d_binding->d3d_binding.kind, true);
resource_flags = dxil_resource_flags_from_kind(d3d_binding->d3d_binding.kind, false);
if (resource_flags != resource_flags_ssbo)
use_ssbo = d3d_binding->d3d_binding.alignment >= shader_interface_info->min_ssbo_alignment;
else
use_ssbo = false;
bool use_ssbo = resource_flags != resource_flags_ssbo;
if (use_ssbo)
{
@ -242,6 +235,11 @@ static dxil_spv_bool dxil_uav_remap(void *userdata, const dxil_spv_uav_d3d_bindi
&vk_binding->buffer_binding, resource_flags_ssbo))
{
vk_binding->buffer_binding.descriptor_type = DXIL_SPV_VULKAN_DESCRIPTOR_TYPE_SSBO;
if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_SSBO_OFFSET_BUFFER)
{
vk_binding->offset_binding.set = shader_interface_info->offset_buffer_binding->set;
vk_binding->offset_binding.binding = shader_interface_info->offset_buffer_binding->binding;
}
}
else if (!dxil_remap(shader_interface_info, VKD3D_SHADER_DESCRIPTOR_TYPE_UAV, &d3d_binding->d3d_binding,
&vk_binding->buffer_binding, resource_flags))

@ -1 +1 @@
Subproject commit 64ede36e58ebecce64b2f44b908503a8e4ecea19
Subproject commit 1f85c7bff8cf6b5defc00e300e1d4540d81ac8d1