tests/shader_runner_metal: Implement buffer textures.

This commit is contained in:
Henri Verbeet
2025-05-28 23:03:17 +02:00
parent 90b6412daa
commit 955fff7570
Notes: Henri Verbeet 2025-07-14 18:53:23 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1609
2 changed files with 26 additions and 28 deletions

View File

@@ -23,7 +23,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 100 200 300 400
uniform 4 float4 1000 2000 3000 4000
todo(msl) draw quad
draw quad
probe (0, 0) rgba (200, 3000, 4, 7)
@@ -40,7 +40,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 100 200 300 400
uniform 4 float4 1000 2000 3000 4000
todo(msl) draw quad
draw quad
probe (0, 0) rgba (4000.0, 8.0, 9.0, 10.0)
@@ -67,7 +67,7 @@ float4 main() : sv_target
}
[test]
todo(msl) draw quad
draw quad
probe (0, 0) rgba (3.0, 4.0, -1.0, -1.0)
@@ -88,7 +88,7 @@ float4 main() : sv_target
}
[test]
todo(msl) draw quad
draw quad
probe (0, 0) rgba (4.0, 5.0, 6.0, 7.0)
@@ -101,7 +101,7 @@ float4 main() : sv_target
}
[test]
todo(msl) draw quad
draw quad
probe (0, 0) rgba (8.0, 9.0, 10.0, 11.0)
@@ -138,10 +138,10 @@ float4 main() : sv_target
[test]
uniform 0 int 2
todo(msl) draw quad
draw quad
probe (0, 0) rgba (8.0, 9.0, 10.0, 11.0)
uniform 0 int 0
todo(msl) draw quad
draw quad
probe (0, 0) rgba (0.0, 1.0, 2.0, 3.0)

View File

@@ -76,6 +76,7 @@ static MTLPixelFormat get_metal_pixel_format(DXGI_FORMAT format)
return MTLPixelFormatR32Float;
case DXGI_FORMAT_R32_SINT:
return MTLPixelFormatR32Sint;
case DXGI_FORMAT_UNKNOWN:
case DXGI_FORMAT_R32_TYPELESS:
case DXGI_FORMAT_R32_UINT:
return MTLPixelFormatR32Uint;
@@ -232,18 +233,6 @@ static void init_resource_texture(struct metal_runner *runner,
id<MTLDevice> device = runner->device;
MTLTextureDescriptor *desc;
switch (params->desc.type)
{
case RESOURCE_TYPE_RENDER_TARGET:
case RESOURCE_TYPE_DEPTH_STENCIL:
case RESOURCE_TYPE_TEXTURE:
break;
case RESOURCE_TYPE_UAV:
case RESOURCE_TYPE_VERTEX_BUFFER:
return;
}
if (params->desc.sample_count > 1)
{
if (params->desc.level_count > 1)
@@ -260,6 +249,9 @@ static void init_resource_texture(struct metal_runner *runner,
desc = [[MTLTextureDescriptor alloc] init];
switch (params->desc.dimension)
{
case RESOURCE_DIMENSION_BUFFER:
desc.textureType = MTLTextureTypeTextureBuffer;
break;
case RESOURCE_DIMENSION_2D:
if (params->desc.sample_count > 1)
desc.textureType = params->desc.layer_count > 1 ? MTLTextureType2DMultisampleArray
@@ -360,10 +352,21 @@ static struct resource *metal_runner_create_resource(struct shader_runner *r, co
resource = calloc(1, sizeof(*resource));
init_resource(&resource->r, params);
if (params->desc.dimension == RESOURCE_DIMENSION_BUFFER)
init_resource_buffer(runner, resource, params);
else
init_resource_texture(runner, resource, params);
switch (params->desc.type)
{
case RESOURCE_TYPE_RENDER_TARGET:
case RESOURCE_TYPE_DEPTH_STENCIL:
case RESOURCE_TYPE_TEXTURE:
init_resource_texture(runner, resource, params);
break;
case RESOURCE_TYPE_VERTEX_BUFFER:
init_resource_buffer(runner, resource, params);
break;
case RESOURCE_TYPE_UAV:
break;
}
return &resource->r;
}
@@ -581,11 +584,6 @@ static bool encode_argument_buffer(struct metal_runner *runner,
{
case RESOURCE_TYPE_TEXTURE:
[encoder setTexture:resource->texture atIndex:index++];
if (!resource->texture)
{
trace("Unsupported buffer texture\n");
return false;
}
[command_encoder useResource:resource->texture
usage:MTLResourceUsageRead
stages:MTLRenderStageVertex | MTLRenderStageFragment];