=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d-shader: Add support for dual source blending.

Alexandre Julliard julliard at winehq.org
Mon Dec 17 12:29:00 CST 2018


Module: vkd3d
Branch: master
Commit: 5b0ed414a15aafc7bcd4fa79d2b2d7da552ff14f
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=5b0ed414a15aafc7bcd4fa79d2b2d7da552ff14f

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Thu Dec 13 10:28:36 2018 +0100

vkd3d-shader: Add support for dual source blending.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 7d9bf70..1153fde 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 ec7cab6..a24585c 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);
         }




More information about the wine-cvs mailing list