diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index 7861efc16..4512a81cb 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -6299,8 +6299,7 @@ static void sm6_parser_emit_dx_store_output(struct sm6_parser *sm6, enum dx_intr return; } e = &signature->elements[row_index]; - if (!e->sysval_semantic) - column_index += vsir_write_mask_get_component_idx(e->mask); + column_index += vsir_write_mask_get_component_idx(e->mask); if (column_index >= VKD3D_VEC4_SIZE) { diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 490bbc612..2028c588d 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -5813,7 +5813,7 @@ static void calculate_clip_or_cull_distance_mask(const struct signature_element return; } - write_mask = e->mask >> vsir_write_mask_get_component_idx(e->mask); + write_mask = e->mask; *mask |= (write_mask & VKD3DSP_WRITEMASK_ALL) << (VKD3D_VEC4_SIZE * e->semantic_index); } @@ -6060,7 +6060,7 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler, if (use_private_variable) { compiler->private_output_variable[element_idx] = var_id; - compiler->private_output_variable_write_mask[element_idx] |= write_mask >> component_idx; + compiler->private_output_variable_write_mask[element_idx] |= write_mask; if (!compiler->epilogue_function_id) compiler->epilogue_function_id = vkd3d_spirv_alloc_id(builder); } @@ -6112,9 +6112,6 @@ static void spirv_compiler_emit_store_shader_output(struct spirv_compiler *compi use_mask |= element->used_mask; } } - index = vsir_write_mask_get_component_idx(output->mask); - dst_write_mask >>= index; - use_mask >>= index; write_mask &= dst_write_mask; if (!write_mask) diff --git a/tests/hlsl/clip-cull-distance.shader_test b/tests/hlsl/clip-cull-distance.shader_test index 9b33fe414..1254bab26 100644 --- a/tests/hlsl/clip-cull-distance.shader_test +++ b/tests/hlsl/clip-cull-distance.shader_test @@ -132,11 +132,11 @@ probe rtv 0 (160, 120) f32(0.0, 0.0, 0.0, 1.0) probe rtv 0 (160, 240) f32(0.0, 0.0, 0.0, 1.0) probe rtv 0 (160, 360) f32(0.0, 0.0, 0.0, 1.0) probe rtv 0 (320, 120) f32(1.0, 1.0, 1.0, 1.0) -todo(sm<6) probe rtv 0 (320, 240) f32(0.0, 0.0, 0.0, 1.0) -todo(sm<6) probe rtv 0 (320, 360) f32(0.0, 0.0, 0.0, 1.0) +probe rtv 0 (320, 240) f32(0.0, 0.0, 0.0, 1.0) +probe rtv 0 (320, 360) f32(0.0, 0.0, 0.0, 1.0) probe rtv 0 (480, 120) f32(1.0, 1.0, 1.0, 1.0) -todo(sm<6) probe rtv 0 (480, 240) f32(0.0, 0.0, 0.0, 1.0) -todo(sm<6) probe rtv 0 (480, 360) f32(0.0, 0.0, 0.0, 1.0) +probe rtv 0 (480, 240) f32(0.0, 0.0, 0.0, 1.0) +probe rtv 0 (480, 360) f32(0.0, 0.0, 0.0, 1.0) probe rtv 0 (320, 239) f32(1.0, 1.0, 1.0, 1.0) [require]