mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/msl: Implement support for VKD3DSPR_UNDEF registers.
MSL doesn't seem to have any special handling for undefined values, differently from SPIR-V. Thus we just emit zeros. UNDEF registers are sometimes created by the DXIL parser, for example in sm6_parser_emit_composite_construct().
This commit is contained in:
committed by
Henri Verbeet
parent
eaabd2ffd7
commit
cc1db404b0
Notes:
Henri Verbeet
2025-10-30 20:00:07 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1757
@@ -24,11 +24,10 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
todo(sm<6) draw quad
|
||||
% sm6 seems to ignore profile qualifiers entirely.
|
||||
if(sm>=6) probe (0,0) rgba (1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) rgba (0, 0, 0, 99)
|
||||
|
||||
if(sm>=6) probe (0,0) f32(1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) f32(0, 0, 0, 99)
|
||||
|
||||
[pixel shader todo]
|
||||
Texture2D tex1 : register(cs, t1);
|
||||
@@ -39,10 +38,9 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
if(sm>=6) probe (0,0) rgba (1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) rgba (0, 0, 0, 99)
|
||||
|
||||
todo(sm<6) draw quad
|
||||
if(sm>=6) probe (0,0) f32(1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) f32(0, 0, 0, 99)
|
||||
|
||||
[pixel shader todo]
|
||||
Texture2D tex1 : register(ps, t1);
|
||||
@@ -53,9 +51,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
probe (0, 0) rgba (1, 1, 1, 99)
|
||||
|
||||
todo(sm<6) draw quad
|
||||
probe (0, 0) f32(1, 1, 1, 99)
|
||||
|
||||
[pixel shader fail todo]
|
||||
Texture2D tex1 : register(PS, t1);
|
||||
@@ -93,9 +90,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(msl & sm>=6) draw quad
|
||||
probe (0, 0) rgba (1, 1, 1, 99)
|
||||
|
||||
draw quad
|
||||
probe (0, 0) f32(1, 1, 1, 99)
|
||||
|
||||
[pixel shader todo]
|
||||
Texture2D tex1 : register(ps_4_0, t1);
|
||||
@@ -106,9 +102,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
probe (0, 0) rgba (1, 1, 1, 99)
|
||||
|
||||
todo(sm<6) draw quad
|
||||
probe (0, 0) f32(1, 1, 1, 99)
|
||||
|
||||
[pixel shader fail]
|
||||
Texture2D tex1 : register(ps.4.0, t1);
|
||||
@@ -128,10 +123,9 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
if(sm>=6) probe (0,0) rgba (1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) rgba (0, 0, 0, 99)
|
||||
|
||||
todo(sm<6) draw quad
|
||||
if(sm>=6) probe (0,0) f32(1, 1, 1, 99)
|
||||
if(sm<6) probe (0,0) f32(0, 0, 0, 99)
|
||||
|
||||
[pixel shader todo]
|
||||
Texture2D tex1 : register(ps_4_1, t1) : register(ps_4_0, t2);
|
||||
@@ -142,8 +136,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
probe (0, 0) rgba (2, 2, 2, 99)
|
||||
todo(sm<6) draw quad
|
||||
probe (0, 0) f32(2, 2, 2, 99)
|
||||
|
||||
% The documentation explicitly gives this case as an example, implying that a
|
||||
% more specific profile takes precedence over a less specific one. It doesn't.
|
||||
@@ -163,10 +157,9 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
if(sm>=6) probe (0,0) rgba (2, 2, 2, 99)
|
||||
if(sm<6) probe (0,0) rgba (1, 1, 1, 99)
|
||||
|
||||
todo(sm<6) draw quad
|
||||
if(sm>=6) probe (0,0) f32(2, 2, 2, 99)
|
||||
if(sm<6) probe (0,0) f32(1, 1, 1, 99)
|
||||
|
||||
[pixel shader fail(sm<4.1) todo]
|
||||
Texture2D tex1 : register(ps, t1) : register(ps_4_0, t2);
|
||||
@@ -177,9 +170,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(msl & sm>=6) draw quad
|
||||
probe (0, 0) rgba (2, 2, 2, 99)
|
||||
|
||||
draw quad
|
||||
probe (0, 0) f32(2, 2, 2, 99)
|
||||
|
||||
[pixel shader fail(sm<4.1) todo]
|
||||
Texture2D tex1 : register(ps_4_0, t1) : register(ps, t2);
|
||||
@@ -190,9 +182,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(msl & sm>=6) draw quad
|
||||
probe (0, 0) rgba (2, 2, 2, 99)
|
||||
|
||||
draw quad
|
||||
probe (0, 0) f32(2, 2, 2, 99)
|
||||
|
||||
[pixel shader fail(sm<6) todo]
|
||||
Texture2D tex1 : register(ps_6_0, t1) : register(ps, t2);
|
||||
@@ -203,9 +194,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(msl & sm>=6) draw quad
|
||||
probe (0, 0) rgba (2, 2, 2, 99)
|
||||
|
||||
draw quad
|
||||
probe (0, 0) f32(2, 2, 2, 99)
|
||||
|
||||
[pixel shader fail(sm<4.1 | sm>=6) todo]
|
||||
Texture2D tex1 : register(ps_4_0, t1) : register(t2);
|
||||
@@ -257,8 +247,8 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
probe (0, 0) rgba (1, 1, 1, 99)
|
||||
todo(sm<6) draw quad
|
||||
probe (0, 0) f32(1, 1, 1, 99)
|
||||
|
||||
% Bracket exprs should still parse correctly.
|
||||
|
||||
@@ -271,9 +261,9 @@ float4 main() : sv_target
|
||||
}
|
||||
|
||||
[test]
|
||||
todo(sm<6 | msl) draw quad
|
||||
if(sm>=6) probe (0, 0) rgba(0, 0, 0, 99)
|
||||
if(sm<6) probe (0, 0) rgba(1, 1, 1, 99)
|
||||
todo(sm<6) draw quad
|
||||
if(sm>=6) probe (0, 0) f32(0, 0, 0, 99)
|
||||
if(sm<6) probe (0, 0) f32(1, 1, 1, 99)
|
||||
|
||||
% This works, though the bind point is ignored.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user