mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/msl: Implement VKD3DSIH_IADD.
This commit is contained in:
Notes:
Henri Verbeet
2025-06-09 16:31:45 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1547
@@ -929,6 +929,7 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d
|
|||||||
switch (ins->opcode)
|
switch (ins->opcode)
|
||||||
{
|
{
|
||||||
case VKD3DSIH_ADD:
|
case VKD3DSIH_ADD:
|
||||||
|
case VKD3DSIH_IADD:
|
||||||
msl_binop(gen, ins, "+");
|
msl_binop(gen, ins, "+");
|
||||||
break;
|
break;
|
||||||
case VKD3DSIH_AND:
|
case VKD3DSIH_AND:
|
||||||
|
@@ -300,13 +300,13 @@ if(sm>=6) uniform 4 uint 0x4200
|
|||||||
% i is allocated differently between SM4-5 and SM6
|
% i is allocated differently between SM4-5 and SM6
|
||||||
uniform 5 uint 2
|
uniform 5 uint 2
|
||||||
uniform 8 uint 2
|
uniform 8 uint 2
|
||||||
todo(msl | sm>=6) draw quad
|
todo(sm>=6) draw quad
|
||||||
probe (0, 0) rgba(10.25, 3.5, 0.0, 0.0)
|
probe (0, 0) rgba(10.25, 3.5, 0.0, 0.0)
|
||||||
uniform 0 uint 0
|
uniform 0 uint 0
|
||||||
uniform 4 uint 0
|
uniform 4 uint 0
|
||||||
uniform 5 uint 0
|
uniform 5 uint 0
|
||||||
uniform 8 uint 0
|
uniform 8 uint 0
|
||||||
todo(msl | sm>=6) draw quad
|
todo(sm>=6) draw quad
|
||||||
probe (0, 0) rgba(1.0, 2.0, 0, 0)
|
probe (0, 0) rgba(1.0, 2.0, 0, 0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
|
@@ -271,7 +271,7 @@ uniform 0 uint 0
|
|||||||
uniform 4 uint 0
|
uniform 4 uint 0
|
||||||
uniform 8 uint 0xffd
|
uniform 8 uint 0xffd
|
||||||
uniform 12 uint 1
|
uniform 12 uint 1
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgbai(1, -0xfff, 0xffe, -0xffe)
|
probe (0, 0) rgbai(1, -0xfff, 0xffe, -0xffe)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@@ -290,14 +290,14 @@ uniform 4 uint 0xffe
|
|||||||
% i is allocated differently between SM4-5 and SM6
|
% i is allocated differently between SM4-5 and SM6
|
||||||
uniform 5 uint 2
|
uniform 5 uint 2
|
||||||
uniform 8 uint 2
|
uniform 8 uint 2
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
% In D3D12 with SM5 all reads to the array return 0
|
% In D3D12 with SM5 all reads to the array return 0
|
||||||
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(0xfffff803, 0x1ffd, 0, 0)
|
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(0xfffff803, 0x1ffd, 0, 0)
|
||||||
uniform 0 uint 0
|
uniform 0 uint 0
|
||||||
uniform 4 uint 0
|
uniform 4 uint 0
|
||||||
uniform 5 uint 0
|
uniform 5 uint 0
|
||||||
uniform 8 uint 0
|
uniform 8 uint 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(1, 2, 0, 0)
|
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(1, 2, 0, 0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
|
@@ -124,11 +124,11 @@ uint4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 uint 0
|
uniform 0 uint 0
|
||||||
uniform 4 uint 0
|
uniform 4 uint 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgbaui(0xfff, 0x7ff, 0, 0)
|
probe (0, 0) rgbaui(0xfff, 0x7ff, 0, 0)
|
||||||
uniform 0 uint 1
|
uniform 0 uint 1
|
||||||
uniform 4 uint 0xfff
|
uniform 4 uint 0xfff
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgbaui(0x1000, 0x17fe, 0, 0)
|
probe (0, 0) rgbaui(0x1000, 0x17fe, 0, 0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@@ -147,14 +147,14 @@ uniform 4 uint 0xffe
|
|||||||
% i is allocated differently between SM4-5 and SM6
|
% i is allocated differently between SM4-5 and SM6
|
||||||
uniform 5 uint 2
|
uniform 5 uint 2
|
||||||
uniform 8 uint 2
|
uniform 8 uint 2
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
% In D3D12 with SM5 all reads to the array return 0
|
% In D3D12 with SM5 all reads to the array return 0
|
||||||
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(0x801, 0x1ffd, 0, 0)
|
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(0x801, 0x1ffd, 0, 0)
|
||||||
uniform 0 uint 0
|
uniform 0 uint 0
|
||||||
uniform 4 uint 0
|
uniform 4 uint 0
|
||||||
uniform 5 uint 0
|
uniform 5 uint 0
|
||||||
uniform 8 uint 0
|
uniform 8 uint 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(1, 2, 0, 0)
|
if(sm>=6 | !d3d12) probe (0, 0) rgbaui(1, 2, 0, 0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
|
@@ -49,5 +49,5 @@ float4 main(struct input i) : sv_target
|
|||||||
}
|
}
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
todo(msl) draw triangle strip 4
|
draw triangle strip 4
|
||||||
probe (0, 0, 640, 480) rgba (0.0, 2.0, 2.0, 2.0)
|
probe (0, 0, 640, 480) rgba (0.0, 2.0, 2.0, 2.0)
|
||||||
|
@@ -40,11 +40,11 @@ float4 main(float4 pos : SV_Position, uint sample_idx : SV_SampleIndex) : SV_Tar
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
clear rtv 0 1.0 1.0 1.0 1.0
|
clear rtv 0 1.0 1.0 1.0 1.0
|
||||||
todo(msl) draw triangle list 3
|
draw triangle list 3
|
||||||
todo probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
todo(vulkan | opengl | d3d12) probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
todo probe (639, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
todo(vulkan | opengl | d3d12) probe (639, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
||||||
todo probe ( 0, 479) rgba(0.25, 0.25, 0.25, 0.25)
|
todo(vulkan | opengl | d3d12) probe ( 0, 479) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
todo probe (639, 479) rgba(0.0, 0.0, 0.0, 0.0)
|
todo(vulkan | opengl | d3d12) probe (639, 479) rgba(0.0, 0.0, 0.0, 0.0)
|
||||||
|
|
||||||
% Centroid interpolation, which means the pixel center if all samples are
|
% Centroid interpolation, which means the pixel center if all samples are
|
||||||
% covered and the first covered sample if a least a sample is not covered (in
|
% covered and the first covered sample if a least a sample is not covered (in
|
||||||
@@ -72,11 +72,11 @@ float4 main(centroid float4 pos : SV_Position, uint sample_idx : SV_SampleIndex)
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
clear rtv 0 1.0 1.0 1.0 1.0
|
clear rtv 0 1.0 1.0 1.0 1.0
|
||||||
todo(glsl | msl) draw triangle list 3
|
todo(glsl) draw triangle list 3
|
||||||
todo probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
todo probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
todo probe (638, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
todo(vulkan | opengl | d3d12) probe (638, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
||||||
todo probe ( 0, 478) rgba(0.25, 0.25, 0.25, 0.25)
|
todo probe ( 0, 478) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
todo probe (639, 479) rgba(0.0, 0.0, 0.0, 0.0)
|
todo(vulkan | opengl | d3d12) probe (639, 479) rgba(0.0, 0.0, 0.0, 0.0)
|
||||||
|
|
||||||
% Sample interpolation.
|
% Sample interpolation.
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ float4 main(float4 pos : SV_Position, float2 attr : ATTR, uint sample_idx : SV_S
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
clear rtv 0 1.0 1.0 1.0 1.0
|
clear rtv 0 1.0 1.0 1.0 1.0
|
||||||
todo(msl) draw triangle list 3
|
draw triangle list 3
|
||||||
probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
probe ( 0, 0) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
probe (639, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
probe (639, 0) rgba(0.0, 0.0, 0.0, 0.0)
|
||||||
probe ( 0, 479) rgba(0.25, 0.25, 0.25, 0.25)
|
probe ( 0, 479) rgba(0.25, 0.25, 0.25, 0.25)
|
||||||
|
@@ -151,11 +151,11 @@ uniform 8 float 3.0
|
|||||||
uniform 12 float 4.0
|
uniform 12 float 4.0
|
||||||
if(sm<4) uniform 16 float4 0 1 0 0
|
if(sm<4) uniform 16 float4 0 1 0 0
|
||||||
if(sm>=4) uniform 16 uint4 0 1 0 0
|
if(sm>=4) uniform 16 uint4 0 1 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(3.0, 3.0, 3.0, 3.0)
|
probe (0, 0) rgba(3.0, 3.0, 3.0, 3.0)
|
||||||
if(sm<4) uniform 16 float4 1 1 0 0
|
if(sm<4) uniform 16 float4 1 1 0 0
|
||||||
if(sm>=4) uniform 16 uint4 1 1 0 0
|
if(sm>=4) uniform 16 uint4 1 1 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(4.0, 4.0, 4.0, 4.0)
|
probe (0, 0) rgba(4.0, 4.0, 4.0, 4.0)
|
||||||
|
|
||||||
% Copy-prop is currently unable to propagate the following,
|
% Copy-prop is currently unable to propagate the following,
|
||||||
|
@@ -383,31 +383,31 @@ uniform 4 float4 5.0 6.0 7.0 8.0
|
|||||||
uniform 8 float4 9.0 10.0 11.0 12.0
|
uniform 8 float4 9.0 10.0 11.0 12.0
|
||||||
if(sm<4) uniform 12 float4 0 0 0 0
|
if(sm<4) uniform 12 float4 0 0 0 0
|
||||||
if(sm>=4) uniform 12 int4 0 0 0 0
|
if(sm>=4) uniform 12 int4 0 0 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(1.0, 2.0, 3.0, 4.0)
|
probe (0, 0) rgba(1.0, 2.0, 3.0, 4.0)
|
||||||
if(sm<4) uniform 12 float4 1 0 0 0
|
if(sm<4) uniform 12 float4 1 0 0 0
|
||||||
if(sm>=4) uniform 12 int4 1 0 0 0
|
if(sm>=4) uniform 12 int4 1 0 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
||||||
if(sm<4) uniform 12 float4 0 1 0 0
|
if(sm<4) uniform 12 float4 0 1 0 0
|
||||||
if(sm>=4) uniform 12 int4 0 1 0 0
|
if(sm>=4) uniform 12 int4 0 1 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
||||||
if(sm<4) uniform 12 float4 1 1 0 0
|
if(sm<4) uniform 12 float4 1 1 0 0
|
||||||
if(sm>=4) uniform 12 int4 1 1 0 0
|
if(sm>=4) uniform 12 int4 1 1 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(9.0, 10.0, 11.0, 12.0)
|
probe (0, 0) rgba(9.0, 10.0, 11.0, 12.0)
|
||||||
if(sm<4) uniform 12 float4 0.5 0 0 0
|
if(sm<4) uniform 12 float4 0.5 0 0 0
|
||||||
if(sm>=4) uniform 12 int4 0 0 0 0
|
if(sm>=4) uniform 12 int4 0 0 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(1.0, 2.0, 3.0, 4.0)
|
probe (0, 0) rgba(1.0, 2.0, 3.0, 4.0)
|
||||||
if(sm<4) uniform 12 float4 0 1.4 0 0
|
if(sm<4) uniform 12 float4 0 1.4 0 0
|
||||||
if(sm>=4) uniform 12 int4 0 1 0 0 0
|
if(sm>=4) uniform 12 int4 0 1 0 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
probe (0, 0) rgba(5.0, 6.0, 7.0, 8.0)
|
||||||
if(sm<4) uniform 12 float4 1.5 0 0 0
|
if(sm<4) uniform 12 float4 1.5 0 0 0
|
||||||
if(sm>=4) uniform 12 int4 2 0 0 0
|
if(sm>=4) uniform 12 int4 2 0 0 0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba(9.0, 10.0, 11.0, 12.0)
|
probe (0, 0) rgba(9.0, 10.0, 11.0, 12.0)
|
||||||
|
|
||||||
[require]
|
[require]
|
||||||
|
@@ -52,7 +52,7 @@ void main(float4 position : SV_Position, float2 t0 : TEXCOORD0,
|
|||||||
}
|
}
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
todo(msl) draw triangle strip 4
|
draw triangle strip 4
|
||||||
probe (0, 0) rgba (10.0, 8.0, 7.0, 3.0)
|
probe (0, 0) rgba (10.0, 8.0, 7.0, 3.0)
|
||||||
|
|
||||||
[input layout]
|
[input layout]
|
||||||
|
@@ -92,10 +92,16 @@ static MTLVertexFormat get_metal_attribute_format(DXGI_FORMAT format)
|
|||||||
{
|
{
|
||||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||||
return MTLVertexFormatFloat4;
|
return MTLVertexFormatFloat4;
|
||||||
|
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||||
|
return MTLVertexFormatUInt4;
|
||||||
case DXGI_FORMAT_R32G32_FLOAT:
|
case DXGI_FORMAT_R32G32_FLOAT:
|
||||||
return MTLVertexFormatFloat2;
|
return MTLVertexFormatFloat2;
|
||||||
case DXGI_FORMAT_R32G32_SINT:
|
case DXGI_FORMAT_R32G32_SINT:
|
||||||
return MTLVertexFormatInt2;
|
return MTLVertexFormatInt2;
|
||||||
|
case DXGI_FORMAT_R32_FLOAT:
|
||||||
|
return MTLVertexFormatFloat;
|
||||||
|
case DXGI_FORMAT_R32_UINT:
|
||||||
|
return MTLVertexFormatUInt;
|
||||||
default:
|
default:
|
||||||
return MTLVertexFormatInvalid;
|
return MTLVertexFormatInvalid;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user