[magma] Distinguish verbatim vs. modified methods
This change clarifies the distinction between magma methods that are
proxied verbatim vs. those that have modified signatures. Initially,
only a few methods need this treatment due to their use of nested
pointers, which cannot be serialized by emugen.
This change also adds no-op implementations for magma decoder methods.
Test: m libgfxstream_backend
Change-Id: I7ca8f500d58942642096374565ae73df960b5f69
diff --git a/protocols/magma/README b/protocols/magma/README
index f3e03f3..527041d 100644
--- a/protocols/magma/README
+++ b/protocols/magma/README
@@ -2,4 +2,5 @@
third-party/fuchsia/magma/regen.py and reflect the standard magma protocol.
However, as emugen does not have the ability to generate binding code for nested
pointers, some method signatures must be modified to use a packed format. For
-clarity, these are defined alongside the original (disabled) signatures.
+clarity, these are defined alongside the original (disabled) signatures and
+labeled "fudge" methods.
diff --git a/protocols/magma/magma.attrib b/protocols/magma/magma.attrib
index 288b6f2..edbda0c 100644
--- a/protocols/magma/magma.attrib
+++ b/protocols/magma/magma.attrib
@@ -64,8 +64,8 @@
len cache_policy_out sizeof(magma_cache_policy_t)
magma_buffer_get_info
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
+ dir info_out out
+ len info_out sizeof(magma_buffer_info)
magma_buffer_get_handle
dir handle_out out
@@ -98,33 +98,35 @@
len result_flags_out sizeof(uint32_t)
magma_connection_execute_command
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
+ dir descriptor in
+ len descriptor sizeof(magma_command_descriptor_t)
+
+magma_connection_execute_command_fudge
+ dir descriptor in
+ len descriptor descriptor_size
magma_connection_execute_immediate_commands
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
+ dir command_buffers in
+ len command_buffers command_count * sizeof(magma_inline_command_buffer_t)
+
+magma_connection_execute_immediate_commands_fudge
+ dir command_buffers in
+ len command_buffers command_buffers_size
+ dir command_buffer_offsets in
+ len command_buffer_offsets command_count * sizeof(uint64_t)
magma_buffer_set_name
dir name in
+ len name 1
+
+magma_buffer_set_name_fudge
+ dir name in
len name name_size
-magma_virt_connection_create_image
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
-
-magma_virt_connection_get_image_info
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
-
magma_poll
dir items inout
len items count * sizeof(magma_poll_item_t)
-magma_connection_add_performance_counter_buffer_offsets_to_pool
- dir parameters inout
- len parameters parameter_count * sizeof(uint64_t)
-
magma_connection_enable_performance_counters
dir counters in
len counters counters_count * sizeof(uint64_t)
@@ -132,3 +134,21 @@
magma_connection_clear_performance_counters
dir counters in
len counters counters_count * sizeof(uint64_t)
+
+magma_connection_add_performance_counter_buffer_offsets_to_pool
+ dir offsets in
+ len offsets offsets_count * sizeof(magma_buffer_offset_t)
+
+magma_virt_connection_create_image
+ dir create_info in
+ len create_info sizeof(magma_image_create_info_t)
+ dir size_out out
+ len size_out sizeof(uint64_t)
+ dir image_out out
+ len image_out sizeof(magma_buffer_t)
+ dir buffer_id_out out
+ len buffer_id_out sizeof(magma_buffer_id_t)
+
+magma_virt_connection_get_image_info
+ dir image_info_out out
+ len image_info_out sizeof(magma_image_info_t)
diff --git a/protocols/magma/magma.in b/protocols/magma/magma.in
index 404b767..b76a669 100644
--- a/protocols/magma/magma.in
+++ b/protocols/magma/magma.in
@@ -15,20 +15,19 @@
MAGMA(magma_status_t, magma_connection_perform_buffer_op, magma_connection_t connection, magma_buffer_t buffer, uint32_t options, uint64_t start_offset, uint64_t length)
MAGMA(magma_status_t, magma_connection_map_buffer, magma_connection_t connection, uint64_t hw_va, magma_buffer_t buffer, uint64_t offset, uint64_t length, uint64_t map_flags)
MAGMA(void, magma_connection_unmap_buffer, magma_connection_t connection, uint64_t hw_va, magma_buffer_t buffer)
-# MAGMA(magma_status_t, magma_connection_execute_command, magma_connection_t connection, uint32_t context_id, magma_command_descriptor_t* descriptor)
-MAGMA(magma_status_t, magma_connection_execute_command, uint64_t* parameters, uint64_t parameter_count)
-# MAGMA(magma_status_t, magma_connection_execute_immediate_commands, magma_connection_t connection, uint32_t context_id, uint64_t command_count, magma_inline_command_buffer_t* command_buffers)
-MAGMA(magma_status_t, magma_connection_execute_immediate_commands, uint64_t* parameters, uint64_t parameter_count)
+MAGMA(magma_status_t, magma_connection_execute_command, magma_connection_t connection, uint32_t context_id, magma_command_descriptor_t* descriptor)
+MAGMA(magma_status_t, magma_connection_execute_command_fudge, magma_connection_t connection, uint32_t context_id, void* descriptor, uint64_t descriptor_size)
+MAGMA(magma_status_t, magma_connection_execute_immediate_commands, magma_connection_t connection, uint32_t context_id, uint64_t command_count, magma_inline_command_buffer_t* command_buffers)
+MAGMA(magma_status_t, magma_connection_execute_immediate_commands_fudge, magma_connection_t connection, uint32_t context_id, uint64_t command_count, void* command_buffers, uint64_t command_buffers_size, uint64_t* command_buffer_offsets)
MAGMA(magma_status_t, magma_connection_flush, magma_connection_t connection)
MAGMA(magma_handle_t, magma_connection_get_notification_channel_handle, magma_connection_t connection)
MAGMA(magma_status_t, magma_connection_read_notification_channel, magma_connection_t connection, void* buffer, uint64_t buffer_size, uint64_t* buffer_size_out, magma_bool_t* more_data_out)
MAGMA(magma_status_t, magma_buffer_clean_cache, magma_buffer_t buffer, uint64_t offset, uint64_t size, magma_cache_operation_t operation)
MAGMA(magma_status_t, magma_buffer_set_cache_policy, magma_buffer_t buffer, magma_cache_policy_t policy)
MAGMA(magma_status_t, magma_buffer_get_cache_policy, magma_buffer_t buffer, magma_cache_policy_t* cache_policy_out)
-# MAGMA(magma_status_t, magma_buffer_set_name, magma_buffer_t buffer, const char* name)
-MAGMA(magma_status_t, magma_buffer_set_name, magma_buffer_t buffer, void* name, uint64_t name_size)
-# MAGMA(magma_status_t, magma_buffer_get_info, magma_buffer_t buffer, magma_buffer_info_t* info_out)
-MAGMA(magma_status_t, magma_buffer_get_info, uint64_t* parameters, uint64_t parameter_count)
+MAGMA(magma_status_t, magma_buffer_set_name, magma_buffer_t buffer, const char* name)
+MAGMA(magma_status_t, magma_buffer_set_name_fudge, magma_buffer_t buffer, void* name, uint64_t name_size)
+MAGMA(magma_status_t, magma_buffer_get_info, magma_buffer_t buffer, magma_buffer_info_t* info_out)
MAGMA(magma_status_t, magma_buffer_get_handle, magma_buffer_t buffer, magma_handle_t* handle_out)
MAGMA(magma_status_t, magma_buffer_export, magma_buffer_t buffer, magma_handle_t* buffer_handle_out)
MAGMA(void, magma_semaphore_signal, magma_semaphore_t semaphore)
@@ -41,13 +40,10 @@
MAGMA(magma_status_t, magma_connection_enable_performance_counters, magma_connection_t connection, uint64_t* counters, uint64_t counters_count)
MAGMA(magma_status_t, magma_connection_create_performance_counter_buffer_pool, magma_connection_t connection, magma_perf_count_pool_t* pool_id_out, magma_handle_t* notification_handle_out)
MAGMA(magma_status_t, magma_connection_release_performance_counter_buffer_pool, magma_connection_t connection, magma_perf_count_pool_t pool_id)
-# MAGMA(magma_status_t, magma_connection_add_performance_counter_buffer_offsets_to_pool, magma_connection_t connection, magma_perf_count_pool_t pool_id, const magma_buffer_offset_t* offsets, uint64_t offsets_count)
-MAGMA(magma_status_t, magma_connection_add_performance_counter_buffer_offsets_to_pool, uint64_t* parameters, uint64_t parameter_count)
+MAGMA(magma_status_t, magma_connection_add_performance_counter_buffer_offsets_to_pool, magma_connection_t connection, magma_perf_count_pool_t pool_id, const magma_buffer_offset_t* offsets, uint64_t offsets_count)
MAGMA(magma_status_t, magma_connection_remove_performance_counter_buffer_from_pool, magma_connection_t connection, magma_perf_count_pool_t pool_id, magma_buffer_t buffer)
MAGMA(magma_status_t, magma_connection_dump_performance_counters, magma_connection_t connection, magma_perf_count_pool_t pool_id, uint32_t trigger_id)
MAGMA(magma_status_t, magma_connection_clear_performance_counters, magma_connection_t connection, uint64_t* counters, uint64_t counters_count)
MAGMA(magma_status_t, magma_connection_read_performance_counter_completion, magma_connection_t connection, magma_perf_count_pool_t pool_id, uint32_t* trigger_id_out, uint64_t* buffer_id_out, uint32_t* buffer_offset_out, uint64_t* time_out, uint32_t* result_flags_out)
-# MAGMA(magma_status_t, magma_virt_connection_create_image, magma_connection_t connection, magma_image_create_info_t* create_info, uint64_t* size_out, magma_buffer_t* image_out, magma_buffer_id_t* buffer_id_out)
-MAGMA(magma_status_t, magma_virt_connection_create_image, uint64_t* parameters, uint64_t parameter_count)
-# MAGMA(magma_status_t, magma_virt_connection_get_image_info, magma_connection_t connection, magma_buffer_t image, magma_image_info_t* image_info_out)
-MAGMA(magma_status_t, magma_virt_connection_get_image_info, uint64_t* parameters, uint64_t parameter_count)
+MAGMA(magma_status_t, magma_virt_connection_create_image, magma_connection_t connection, magma_image_create_info_t* create_info, uint64_t* size_out, magma_buffer_t* image_out, magma_buffer_id_t* buffer_id_out)
+MAGMA(magma_status_t, magma_virt_connection_get_image_info, magma_connection_t connection, magma_buffer_t image, magma_image_info_t* image_info_out)
diff --git a/protocols/magma/magma.types b/protocols/magma/magma.types
index 3267aaf..6ed6193 100644
--- a/protocols/magma/magma.types
+++ b/protocols/magma/magma.types
@@ -1,50 +1,39 @@
-# Derived from magma_common_defs.h
-
-void* 64 %p true
-uint32_t 32 %u false
-uint32_t* 64 %p true
-uint64_t 64 %lu false
-uint64_t* 64 %p true
-magma_query_t 64 %lu false
-magma_query_t* 64 %p true
-magma_status_t 32 %d false
-magma_cache_operation_t 32 %d false
-magma_cache_policy_t 32 %d false
-magma_cache_policy_t* 64 %p true
-magma_format_t 32 %d false
-magma_format_modifier_t 64 %lu false
-magma_colorspace_t 32 %d false
-magma_coherency_domain_t 32 %d false
-magma_buffer_range_op_t 32 %d false
-magma_bool_t 8 %d false
-magma_bool_t* 64 %p true
-magma_device_t 64 %lu false
-magma_device_t* 64 %p true
+# Magma types.
magma_buffer_t 64 %lu false
-magma_buffer_t* 64 %p true
-magma_semaphore_t 64 %lu false
-magma_semaphore_t* 64 %p true
-magma_perf_count_pool_t 64 %lu false
-magma_perf_count_pool_t* 64 %p true
+magma_cache_operation_t 32 %u false
+magma_cache_policy_t 32 %u false
magma_connection_t 64 %lu false
-magma_connection_t* 64 %p true
-magma_sysmem_connection_t 64 %lu false
-magma_sysmem_connection_t* 64 %p true
-magma_handle_t 32 0x%x false
-magma_handle_t* 64 %p true
-magma_poll_item_t* 64 %p true
-magma_buffer_id_t 64 %lu false
-magma_buffer_id_t* 64 %p true
-magma_semaphore_id_t 64 %lu false
-magma_semaphore_id_t* 64 %p true
+magma_device_t 64 %lu false
+magma_handle_t 32 %u false
+magma_perf_count_pool_t 64 %lu false
+magma_semaphore_t 64 %lu false
+magma_status_t 32 %d false
+uint32_t 32 %u false
+uint64_t 64 %lu false
-# complex types are manually serialized:
-# magma_exec_resource_t
-# magma_exec_command_buffer_t
-# magma_command_descriptor_t
-# magma_inline_command_buffer_t
-# magma_total_time_query_result_t
-# magma_buffer_offset_t
-# magma_buffer_info_t
-# magma_image_create_info_t
-# magma_image_info_t
+# Pointer types.
+magma_bool_t* 64 %p true
+magma_buffer_id_t* 64 %p true
+magma_buffer_info_t* 64 %p true
+magma_buffer_offset_t* 64 %p true
+magma_buffer_t* 64 %p true
+magma_cache_policy_t* 64 %p true
+magma_connection_t* 64 %p true
+magma_device_t* 64 %p true
+magma_handle_t* 64 %p true
+magma_image_create_info_t* 64 %p true
+magma_image_info_t* 64 %p true
+magma_perf_count_pool_t* 64 %p true
+magma_poll_item_t* 64 %p true
+magma_semaphore_id_t* 64 %p true
+magma_semaphore_t* 64 %p true
+uint32_t* 64 %p true
+uint64_t* 64 %p true
+void* 64 %p true
+
+# Do not use these non-trivial types. They must be manually serialized using
+# fudged methods. Placeholder serialization info is used to simplify fallback
+# implementation.
+char* 64 %p true
+magma_command_descriptor_t* 64 %p true
+magma_inline_command_buffer_t* 64 %p true