[PATCH vkd3d 1/7] vkd3d-shader: Add support for dual source blending.
Józef Kucia
joseph.kucia at gmail.com
Thu Dec 13 03:28:36 CST 2018
From: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
include/vkd3d_shader.h | 1 +
libs/vkd3d-shader/spirv.c | 19 ++++++++++++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 7d9bf70e3131..1153fdea0a0d 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -165,6 +165,7 @@ struct vkd3d_shader_compile_arguments
const void *next;
enum vkd3d_shader_target target;
+ bool dual_source_blending;
const unsigned int *output_swizzles;
unsigned int output_swizzle_count;
};
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index ec7cab693c84..a24585c542da 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -3400,6 +3400,14 @@ static unsigned int get_shader_output_swizzle(const struct vkd3d_dxbc_compiler *
return compile_args->output_swizzles[register_idx];
}
+static bool is_dual_source_blending(const struct vkd3d_dxbc_compiler *compiler)
+{
+ const struct vkd3d_shader_compile_arguments *compile_args = compiler->compile_args;
+
+ return compiler->shader_type == VKD3D_SHADER_TYPE_PIXEL
+ && compile_args && compile_args->dual_source_blending;
+}
+
static void calculate_clip_or_cull_distance_mask(const struct vkd3d_shader_signature_element *e,
uint32_t *mask)
{
@@ -3544,7 +3552,16 @@ static void vkd3d_dxbc_compiler_emit_output(struct vkd3d_dxbc_compiler *compiler
}
else
{
- vkd3d_spirv_build_op_decorate1(builder, id, SpvDecorationLocation, reg->idx[0].offset);
+ if (is_dual_source_blending(compiler) && reg->idx[0].offset < 2)
+ {
+ vkd3d_spirv_build_op_decorate1(builder, id, SpvDecorationLocation, 0);
+ vkd3d_spirv_build_op_decorate1(builder, id, SpvDecorationIndex, reg->idx[0].offset);
+ }
+ else
+ {
+ vkd3d_spirv_build_op_decorate1(builder, id, SpvDecorationLocation, reg->idx[0].offset);
+ }
+
if (component_idx)
vkd3d_spirv_build_op_decorate1(builder, id, SpvDecorationComponent, component_idx);
}
--
2.19.2
More information about the wine-devel
mailing list