Mesa (master): radv: Pointer arithmetic on char/uint8_t, not void

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 26 09:25:38 UTC 2021


Module: Mesa
Branch: master
Commit: 2e81ed2a47133f4792a29e4388d54361eb7a17fa
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2e81ed2a47133f4792a29e4388d54361eb7a17fa

Author: James Park <jpark37 at lagfreegames.com>
Date:   Thu Nov 26 19:32:48 2020 -0800

radv: Pointer arithmetic on char/uint8_t, not void

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7793>

---

 src/amd/vulkan/radv_device.c         |  2 +-
 src/amd/vulkan/radv_pass.c           |  4 ++--
 src/amd/vulkan/radv_pipeline_cache.c | 14 +++++++-------
 src/amd/vulkan/radv_shader.c         |  4 ++--
 src/amd/vulkan/radv_sqtt.c           |  4 ++--
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 33ff3b6f214..4f3e57c884a 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -5594,7 +5594,7 @@ VkResult radv_MapMemory(
 		*ppData = device->ws->buffer_map(mem->bo);
 
 	if (*ppData) {
-		*ppData += offset;
+		*ppData = (uint8_t*)*ppData + offset;
 		return VK_SUCCESS;
 	}
 
diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c
index 63cfaa0259d..56013b629f3 100644
--- a/src/amd/vulkan/radv_pass.c
+++ b/src/amd/vulkan/radv_pass.c
@@ -341,7 +341,7 @@ VkResult radv_CreateRenderPass(
 
 	pass->attachment_count = pCreateInfo->attachmentCount;
 	pass->subpass_count = pCreateInfo->subpassCount;
-	pass->attachments = (void *) pass + attachments_offset;
+	pass->attachments = (struct radv_render_pass_attachment *)((uint8_t *) pass + attachments_offset);
 
 	vk_foreach_struct(ext, pCreateInfo->pNext) {
 		switch(ext->sType) {
@@ -590,7 +590,7 @@ VkResult radv_CreateRenderPass2(
 
 	pass->attachment_count = pCreateInfo->attachmentCount;
 	pass->subpass_count = pCreateInfo->subpassCount;
-	pass->attachments = (void *) pass + attachments_offset;
+	pass->attachments = (struct radv_render_pass_attachment *)((uint8_t *) pass + attachments_offset);
 
 	for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++) {
 		struct radv_render_pass_attachment *att = &pass->attachments[i];
diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c
index 67bb6cef541..9062d5611f6 100644
--- a/src/amd/vulkan/radv_pipeline_cache.c
+++ b/src/amd/vulkan/radv_pipeline_cache.c
@@ -477,8 +477,8 @@ radv_pipeline_cache_load(struct radv_pipeline_cache *cache,
 	if (memcmp(header.uuid, device->physical_device->cache_uuid, VK_UUID_SIZE) != 0)
 		return false;
 
-	char *end = (void *) data + size;
-	char *p = (void *) data + header.header_size;
+	char *end = (char *) data + size;
+	char *p = (char *) data + header.header_size;
 
 	while (end - p >= sizeof(struct cache_entry)) {
 		struct cache_entry *entry = (struct cache_entry*)p;
@@ -580,14 +580,14 @@ VkResult radv_GetPipelineCacheData(
 		*pDataSize = 0;
 		return VK_INCOMPLETE;
 	}
-	void *p = pData, *end = pData + *pDataSize;
+	void *p = pData, *end = (char *) pData + *pDataSize;
 	header = p;
 	header->header_size = align(sizeof(*header), alignof(struct cache_entry));
 	header->header_version = VK_PIPELINE_CACHE_HEADER_VERSION_ONE;
 	header->vendor_id = ATI_VENDOR_ID;
 	header->device_id = device->physical_device->rad_info.pci_id;
 	memcpy(header->uuid, device->physical_device->cache_uuid, VK_UUID_SIZE);
-	p += header->header_size;
+	p = (char *)p + header->header_size;
 
 	struct cache_entry *entry;
 	for (uint32_t i = 0; i < cache->table_size; i++) {
@@ -595,7 +595,7 @@ VkResult radv_GetPipelineCacheData(
 			continue;
 		entry = cache->hash_table[i];
 		const uint32_t size_of_entry = entry_size(entry);
-		if (end < p + size_of_entry) {
+		if ((char *)end < (char *)p + size_of_entry) {
 			result = VK_INCOMPLETE;
 			break;
 		}
@@ -603,9 +603,9 @@ VkResult radv_GetPipelineCacheData(
 		memcpy(p, entry, size_of_entry);
 		for(int j = 0; j < MESA_SHADER_STAGES; ++j)
 			((struct cache_entry*)p)->variants[j] = NULL;
-		p += size_of_entry;
+		p = (char *)p + size_of_entry;
 	}
-	*pDataSize = p - pData;
+	*pDataSize = (char *)p - (char *)pData;
 
 	radv_pipeline_cache_unlock(cache);
 	return result;
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index cfe6c6af8ce..3ecb8cbbe6f 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -412,8 +412,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
 			spec_entries = calloc(num_spec_entries, sizeof(*spec_entries));
 			for (uint32_t i = 0; i < num_spec_entries; i++) {
 				VkSpecializationMapEntry entry = spec_info->pMapEntries[i];
-				const void *data = spec_info->pData + entry.offset;
-				assert(data + entry.size <= spec_info->pData + spec_info->dataSize);
+				const void *data = (uint8_t *)spec_info->pData + entry.offset;
+				assert((uint8_t *)data + entry.size <= (uint8_t *)spec_info->pData + spec_info->dataSize);
 
 				spec_entries[i].id = spec_info->pMapEntries[i].constantID;
 				switch (entry.size) {
diff --git a/src/amd/vulkan/radv_sqtt.c b/src/amd/vulkan/radv_sqtt.c
index acfe9e09a49..abd0a624231 100644
--- a/src/amd/vulkan/radv_sqtt.c
+++ b/src/amd/vulkan/radv_sqtt.c
@@ -579,8 +579,8 @@ radv_get_thread_trace(struct radv_queue *queue,
 	for (unsigned se = 0; se < max_se; se++) {
 		uint64_t info_offset = ac_thread_trace_get_info_offset(se);
 		uint64_t data_offset = ac_thread_trace_get_data_offset(&device->thread_trace, se);
-		void *info_ptr = thread_trace_ptr + info_offset;
-		void *data_ptr = thread_trace_ptr + data_offset;
+		void *info_ptr = (uint8_t *)thread_trace_ptr + info_offset;
+		void *data_ptr = (uint8_t *)thread_trace_ptr + data_offset;
 		struct ac_thread_trace_info *info =
 			(struct ac_thread_trace_info *)info_ptr;
 		struct ac_thread_trace_se thread_trace_se = {0};



More information about the mesa-commit mailing list