mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
tests/shader_runner_metal: Do not use shared buffers.
They are not supported on non-Apple discrete GPUs. Instead make them managed (if they are short lived) or private.
This commit is contained in:
committed by
Henri Verbeet
parent
e5bb3a5233
commit
ed677a8f32
Notes:
Henri Verbeet
2025-04-14 17:16:19 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1448
@@ -27,7 +27,6 @@
|
|||||||
#undef BOOL
|
#undef BOOL
|
||||||
|
|
||||||
static const MTLResourceOptions DEFAULT_BUFFER_RESOURCE_OPTIONS = MTLResourceCPUCacheModeDefaultCache
|
static const MTLResourceOptions DEFAULT_BUFFER_RESOURCE_OPTIONS = MTLResourceCPUCacheModeDefaultCache
|
||||||
| MTLResourceStorageModeShared
|
|
||||||
| MTLResourceHazardTrackingModeDefault;
|
| MTLResourceHazardTrackingModeDefault;
|
||||||
|
|
||||||
struct metal_resource
|
struct metal_resource
|
||||||
@@ -164,12 +163,29 @@ static void init_resource_buffer(struct metal_runner *runner,
|
|||||||
{
|
{
|
||||||
id<MTLDevice> device = runner->device;
|
id<MTLDevice> device = runner->device;
|
||||||
|
|
||||||
|
resource->buffer = [device newBufferWithLength:params->data_size
|
||||||
|
options:DEFAULT_BUFFER_RESOURCE_OPTIONS | MTLResourceStorageModePrivate];
|
||||||
|
|
||||||
if (params->data)
|
if (params->data)
|
||||||
resource->buffer = [device newBufferWithBytes:params->data
|
{
|
||||||
|
id<MTLCommandBuffer> command_buffer;
|
||||||
|
id<MTLBlitCommandEncoder> blit;
|
||||||
|
id<MTLBuffer> upload_buffer;
|
||||||
|
|
||||||
|
upload_buffer = [[device newBufferWithBytes:params->data
|
||||||
length:params->data_size
|
length:params->data_size
|
||||||
options:DEFAULT_BUFFER_RESOURCE_OPTIONS];
|
options:DEFAULT_BUFFER_RESOURCE_OPTIONS | MTLResourceStorageModeManaged] autorelease];
|
||||||
else
|
|
||||||
resource->buffer = [device newBufferWithLength:params->data_size options:DEFAULT_BUFFER_RESOURCE_OPTIONS];
|
command_buffer = [runner->queue commandBuffer];
|
||||||
|
|
||||||
|
blit = [command_buffer blitCommandEncoder];
|
||||||
|
[blit copyFromBuffer:upload_buffer sourceOffset:0 toBuffer:resource->buffer
|
||||||
|
destinationOffset:0 size:params->data_size];
|
||||||
|
[blit endEncoding];
|
||||||
|
|
||||||
|
[command_buffer commit];
|
||||||
|
[command_buffer waitUntilCompleted];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_resource_texture(struct metal_runner *runner,
|
static void init_resource_texture(struct metal_runner *runner,
|
||||||
@@ -344,7 +360,7 @@ static void encode_argument_buffer(struct metal_runner *runner,
|
|||||||
|
|
||||||
encoder = [[device newArgumentEncoderWithArguments:argument_descriptors] autorelease];
|
encoder = [[device newArgumentEncoderWithArguments:argument_descriptors] autorelease];
|
||||||
argument_buffer = [[device newBufferWithLength:encoder.encodedLength
|
argument_buffer = [[device newBufferWithLength:encoder.encodedLength
|
||||||
options:DEFAULT_BUFFER_RESOURCE_OPTIONS] autorelease];
|
options:DEFAULT_BUFFER_RESOURCE_OPTIONS | MTLResourceStorageModeManaged] autorelease];
|
||||||
[encoder setArgumentBuffer:argument_buffer offset:0];
|
[encoder setArgumentBuffer:argument_buffer offset:0];
|
||||||
|
|
||||||
if (runner->r.uniform_count)
|
if (runner->r.uniform_count)
|
||||||
@@ -353,13 +369,15 @@ static void encode_argument_buffer(struct metal_runner *runner,
|
|||||||
|
|
||||||
cb = [[device newBufferWithBytes:runner->r.uniforms
|
cb = [[device newBufferWithBytes:runner->r.uniforms
|
||||||
length:runner->r.uniform_count * sizeof(*runner->r.uniforms)
|
length:runner->r.uniform_count * sizeof(*runner->r.uniforms)
|
||||||
options:DEFAULT_BUFFER_RESOURCE_OPTIONS] autorelease];
|
options:DEFAULT_BUFFER_RESOURCE_OPTIONS | MTLResourceStorageModeManaged] autorelease];
|
||||||
[encoder setBuffer:cb offset:0 atIndex:0];
|
[encoder setBuffer:cb offset:0 atIndex:0];
|
||||||
[command_encoder useResource:cb
|
[command_encoder useResource:cb
|
||||||
usage:MTLResourceUsageRead
|
usage:MTLResourceUsageRead
|
||||||
stages:MTLRenderStageVertex | MTLRenderStageFragment];
|
stages:MTLRenderStageVertex | MTLRenderStageFragment];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[argument_buffer didModifyRange:NSMakeRange(0, encoder.encodedLength)];
|
||||||
|
|
||||||
[command_encoder setVertexBuffer:argument_buffer offset:0 atIndex:0];
|
[command_encoder setVertexBuffer:argument_buffer offset:0 atIndex:0];
|
||||||
[command_encoder setFragmentBuffer:argument_buffer offset:0 atIndex:0];
|
[command_encoder setFragmentBuffer:argument_buffer offset:0 atIndex:0];
|
||||||
}
|
}
|
||||||
@@ -618,7 +636,7 @@ static struct resource_readback *metal_runner_get_resource_readback(struct shade
|
|||||||
rb->rb.depth = 1;
|
rb->rb.depth = 1;
|
||||||
rb->rb.row_pitch = rb->rb.width * resource->r.desc.texel_size;
|
rb->rb.row_pitch = rb->rb.width * resource->r.desc.texel_size;
|
||||||
rb->buffer = [runner->device newBufferWithLength:rb->rb.row_pitch * rb->rb.height
|
rb->buffer = [runner->device newBufferWithLength:rb->rb.row_pitch * rb->rb.height
|
||||||
options:DEFAULT_BUFFER_RESOURCE_OPTIONS];
|
options:DEFAULT_BUFFER_RESOURCE_OPTIONS | MTLResourceStorageModeManaged];
|
||||||
|
|
||||||
level = sub_resource_idx % resource->r.desc.level_count;
|
level = sub_resource_idx % resource->r.desc.level_count;
|
||||||
layer = sub_resource_idx / resource->r.desc.level_count;
|
layer = sub_resource_idx / resource->r.desc.level_count;
|
||||||
@@ -637,6 +655,7 @@ static struct resource_readback *metal_runner_get_resource_readback(struct shade
|
|||||||
destinationOffset:0
|
destinationOffset:0
|
||||||
destinationBytesPerRow:rb->rb.row_pitch
|
destinationBytesPerRow:rb->rb.row_pitch
|
||||||
destinationBytesPerImage:0];
|
destinationBytesPerImage:0];
|
||||||
|
[blit synchronizeResource:rb->buffer];
|
||||||
[blit endEncoding];
|
[blit endEncoding];
|
||||||
|
|
||||||
[command_buffer commit];
|
[command_buffer commit];
|
||||||
|
Reference in New Issue
Block a user