From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/shader_spirv.c | 41 ++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 16 deletions(-)
diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index e27b6d502dd..142b02346b2 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -105,7 +105,7 @@ struct wined3d_shader_spirv_compile_args struct vkd3d_shader_spirv_target_info spirv_target; struct vkd3d_shader_parameter_info parameter_info; enum vkd3d_shader_spirv_extension extensions[1]; - struct vkd3d_shader_parameter1 parameters[9]; + struct vkd3d_shader_parameter1 parameters[12]; unsigned int ps_alpha_swizzle[WINED3D_MAX_RENDER_TARGETS]; };
@@ -160,27 +160,40 @@ static void shader_spirv_compile_arguments_init(struct shader_spirv_compile_argu } }
+static void fill_buffer_parameter(struct vkd3d_shader_parameter1 *parameter, uint32_t binding, + enum vkd3d_shader_parameter_name name, enum vkd3d_shader_parameter_data_type data_type, uint32_t offset) +{ + parameter->name = name; + parameter->type = VKD3D_SHADER_PARAMETER_TYPE_BUFFER; + parameter->data_type = data_type; + parameter->u.buffer.set = 0; + parameter->u.buffer.binding = binding; + parameter->u.buffer.offset = offset; +} + static void fill_vs_parameters(struct wined3d_shader_spirv_compile_args *vkd3d_args, const struct shader_spirv_compile_arguments *compile_args, uint32_t ffp_extra_binding) { struct vkd3d_shader_parameter1 *parameters = vkd3d_args->parameters;
for (unsigned int i = 0; i < WINED3D_MAX_CLIP_DISTANCES; ++i) - { - parameters[i].name = VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0 + i; - parameters[i].type = VKD3D_SHADER_PARAMETER_TYPE_BUFFER; - parameters[i].data_type = VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4; - parameters[i].u.buffer.set = 0; - parameters[i].u.buffer.binding = ffp_extra_binding; - parameters[i].u.buffer.offset = offsetof(struct wined3d_ffp_vs_constants, clip_planes[i]); - } + fill_buffer_parameter(¶meters[i], ffp_extra_binding, + VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0 + i, VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4, + offsetof(struct wined3d_ffp_vs_constants, clip_planes[i]));
parameters[8].name = VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK; parameters[8].type = VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT; parameters[8].data_type = VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32; parameters[8].u.immediate_constant.u.u32 = compile_args->u.vs.clip_planes;
- vkd3d_args->parameter_info.parameter_count = 9; + fill_buffer_parameter(¶meters[9], ffp_extra_binding, VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE, + VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, offsetof(struct wined3d_ffp_vs_constants, point.size)); + fill_buffer_parameter(¶meters[10], ffp_extra_binding, VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN, + VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, offsetof(struct wined3d_ffp_vs_constants, point_clamp.min)); + fill_buffer_parameter(¶meters[11], ffp_extra_binding, VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MAX, + VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, offsetof(struct wined3d_ffp_vs_constants, point_clamp.max)); + + vkd3d_args->parameter_info.parameter_count = 12; vkd3d_args->parameter_info.parameters = vkd3d_args->parameters; }
@@ -204,12 +217,8 @@ static void fill_ps_parameters(struct wined3d_shader_spirv_compile_args *vkd3d_a parameters[2].data_type = VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32; parameters[2].u.immediate_constant.u.u32 = compile_args->u.fs.args.alpha_test_func + 1;
- parameters[3].name = VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF; - parameters[3].type = VKD3D_SHADER_PARAMETER_TYPE_BUFFER; - parameters[3].data_type = VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32; - parameters[3].u.buffer.set = 0; - parameters[3].u.buffer.binding = ffp_extra_binding; - parameters[3].u.buffer.offset = offsetof(struct wined3d_ffp_ps_constants, alpha_test_ref); + fill_buffer_parameter(¶meters[3], ffp_extra_binding, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, + VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, offsetof(struct wined3d_ffp_ps_constants, alpha_test_ref));
vkd3d_args->parameter_info.parameter_count = 4; vkd3d_args->parameter_info.parameters = vkd3d_args->parameters;