From e605d19ef7989ddd927ca75a92e3106fc652f5b1 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 9 Nov 2021 12:15:02 +0100 Subject: [PATCH] vkd3d-shader: Add shader extension for scalar block layout. Signed-off-by: Hans-Kristian Arntzen --- include/vkd3d_shader.h | 1 + libs/vkd3d-shader/dxil.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index a20b8e00..c864d1eb 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -291,6 +291,7 @@ enum vkd3d_shader_target_extension VKD3D_SHADER_TARGET_EXTENSION_READ_STORAGE_IMAGE_WITHOUT_FORMAT, VKD3D_SHADER_TARGET_EXTENSION_SPV_KHR_INTEGER_DOT_PRODUCT, VKD3D_SHADER_TARGET_EXTENSION_RAY_TRACING_PRIMITIVE_CULLING, + VKD3D_SHADER_TARGET_EXTENSION_SCALAR_BLOCK_LAYOUT, }; enum vkd3d_shader_quirk diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index 7d654faa..bc9af04c 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -742,6 +742,17 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc, goto end; } } + else if (compiler_args->target_extensions[i] == VKD3D_SHADER_TARGET_EXTENSION_SCALAR_BLOCK_LAYOUT) + { + static const dxil_spv_option_scalar_block_layout helper = + { { DXIL_SPV_OPTION_SCALAR_BLOCK_LAYOUT }, DXIL_SPV_TRUE }; + if (dxil_spv_converter_add_option(converter, &helper.base) != DXIL_SPV_SUCCESS) + { + ERR("dxil-spirv does not support SCALAR_BLOCK_LAYOUT.\n"); + ret = VKD3D_ERROR_NOT_IMPLEMENTED; + goto end; + } + } } if (compiler_args->dual_source_blending) @@ -1192,6 +1203,17 @@ int vkd3d_shader_compile_dxil_export(const struct vkd3d_shader_code *dxil, goto end; } } + else if (compiler_args->target_extensions[i] == VKD3D_SHADER_TARGET_EXTENSION_SCALAR_BLOCK_LAYOUT) + { + static const dxil_spv_option_scalar_block_layout helper = + { { DXIL_SPV_OPTION_SCALAR_BLOCK_LAYOUT }, DXIL_SPV_TRUE }; + if (dxil_spv_converter_add_option(converter, &helper.base) != DXIL_SPV_SUCCESS) + { + ERR("dxil-spirv does not support SCALAR_BLOCK_LAYOUT.\n"); + ret = VKD3D_ERROR_NOT_IMPLEMENTED; + goto end; + } + } else if (compiler_args->target_extensions[i] == VKD3D_SHADER_TARGET_EXTENSION_RAY_TRACING_PRIMITIVE_CULLING) { /* Only relevant for ray tracing pipelines. Ray query requires support for PrimitiveCulling feature,