mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/hlsl: Allocate return variables before other outputs.
point-sprite.shader_test is not technically well formed since, in SM4, the vertex output signature should be: // Output signature: // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // sv_position 0 xyzw 0 POS float xyzw // texcoord 0 xy 1 NONE float xy and the pixel input signature should be: // Input signature: // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // texcoord 0 xy 0 NONE float xy so we are not passing "texcoord" properly to the pixel shader, even on Windows.
This commit is contained in:
committed by
Henri Verbeet
parent
e0359c5299
commit
2e0cbff3a0
Notes:
Henri Verbeet
2025-06-23 20:18:28 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1578
@@ -13574,6 +13574,19 @@ static void process_entry_function(struct hlsl_ctx *ctx,
|
||||
lower_ir(ctx, lower_matrix_swizzles, body);
|
||||
lower_ir(ctx, lower_index_loads, body);
|
||||
|
||||
if (entry_func->return_var)
|
||||
{
|
||||
if (profile->type == VKD3D_SHADER_TYPE_GEOMETRY)
|
||||
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_INCOMPATIBLE_PROFILE,
|
||||
"Geometry shaders cannot return values.");
|
||||
else if (entry_func->return_var->data_type->class != HLSL_CLASS_STRUCT
|
||||
&& !entry_func->return_var->semantic.name)
|
||||
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
|
||||
"Entry point \"%s\" is missing a return value semantic.", entry_func->func->name);
|
||||
|
||||
append_output_var_copy(ctx, entry_func, entry_func->return_var);
|
||||
}
|
||||
|
||||
for (i = 0; i < entry_func->parameters.count; ++i)
|
||||
{
|
||||
var = entry_func->parameters.vars[i];
|
||||
@@ -13678,18 +13691,9 @@ static void process_entry_function(struct hlsl_ctx *ctx,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry_func->return_var)
|
||||
{
|
||||
if (profile->type == VKD3D_SHADER_TYPE_GEOMETRY)
|
||||
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_INCOMPATIBLE_PROFILE,
|
||||
"Geometry shaders cannot return values.");
|
||||
else if (entry_func->return_var->data_type->class != HLSL_CLASS_STRUCT
|
||||
&& !entry_func->return_var->semantic.name)
|
||||
hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
|
||||
"Entry point \"%s\" is missing a return value semantic.", entry_func->func->name);
|
||||
|
||||
append_output_var_copy(ctx, entry_func, entry_func->return_var);
|
||||
|
||||
if (profile->type == VKD3D_SHADER_TYPE_HULL && !ctx->is_patch_constant_func)
|
||||
ctx->output_control_point_type = entry_func->return_var->data_type;
|
||||
}
|
||||
|
@@ -33,16 +33,16 @@ clear rtv 0 0 0 0 0
|
||||
point-size 30.0 1.0 64.0
|
||||
point-sprite off
|
||||
draw point list 1
|
||||
probe (310, 230) rgba (1, 0, 1, 1)
|
||||
probe (330, 230) rgba (1, 0, 1, 1)
|
||||
probe (310, 250) rgba (1, 0, 1, 1)
|
||||
probe (330, 250) rgba (1, 0, 1, 1)
|
||||
todo(sm>=4 & sm<6) probe (310, 230) f32(1, 0, 1, 1)
|
||||
todo(sm>=4 & sm<6) probe (330, 230) f32(1, 0, 1, 1)
|
||||
todo(sm>=4 & sm<6) probe (310, 250) f32(1, 0, 1, 1)
|
||||
todo(sm>=4 & sm<6) probe (330, 250) f32(1, 0, 1, 1)
|
||||
|
||||
clear rtv 0 0 0 0 0
|
||||
point-size 30.0 1.0 64.0
|
||||
point-sprite on
|
||||
draw point list 1
|
||||
probe (310, 230) rgba (1, 1, 0, 1)
|
||||
probe (330, 230) rgba (0, 1, 1, 1)
|
||||
probe (310, 250) rgba (1, 0, 0, 1)
|
||||
probe (330, 250) rgba (1, 0, 1, 1)
|
||||
bug(mvk & sm>=4 & sm<6) probe (310, 230) f32(1, 1, 0, 1)
|
||||
bug(mvk & sm>=4 & sm<6) probe (330, 230) f32(0, 1, 1, 1)
|
||||
bug(mvk & sm>=4 & sm<6) probe (310, 250) f32(1, 0, 0, 1)
|
||||
bug(mvk & sm>=4 & sm<6) probe (330, 250) f32(1, 0, 1, 1)
|
||||
|
@@ -39,4 +39,4 @@ float4 main(float cc : SEMC, float aa : SEMA, float bb[2] : SEMB) : sv_target
|
||||
|
||||
[test]
|
||||
bug(mvk & sm>=6) draw quad
|
||||
todo(sm<6) probe (0, 0) f32(300, 100, 200, 201)
|
||||
probe (0, 0) f32(300, 100, 200, 201)
|
||||
|
Reference in New Issue
Block a user