util/sha1: rework _mesa_sha1_{init,final}
authorEmil Velikov <emil.velikov@collabora.com>
Tue, 24 Jan 2017 21:21:09 +0000 (21:21 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 15 Mar 2017 11:18:43 +0000 (11:18 +0000)
Rather than having an extra memory allocation [that we currently do not
and act accordingly] just make the API take an pointer to a stack
allocated instance.

This and follow-up steps will effectively make the _mesa_sha1_foo simple
define/inlines around their SHA1 counterparts.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Grazvydas Ignotas <notasas@gmail.com>
src/amd/vulkan/radv_descriptor_set.c
src/amd/vulkan/radv_pipeline_cache.c
src/intel/vulkan/anv_descriptor_set.c
src/intel/vulkan/anv_pipeline_cache.c
src/util/mesa-sha1.c
src/util/mesa-sha1.h

index 7dade3eeed3fea2fe4359a3598583d5350bbe128..9afc025d84d5c3266ca6830035887bf8450b2083 100644 (file)
@@ -187,7 +187,7 @@ VkResult radv_CreatePipelineLayout(
 {
        RADV_FROM_HANDLE(radv_device, device, _device);
        struct radv_pipeline_layout *layout;
-       struct mesa_sha1 *ctx;
+       struct mesa_sha1 ctx;
 
        assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO);
 
@@ -201,7 +201,7 @@ VkResult radv_CreatePipelineLayout(
        unsigned dynamic_offset_count = 0;
 
 
-       ctx = _mesa_sha1_init();
+       _mesa_sha1_init(&ctx);
        for (uint32_t set = 0; set < pCreateInfo->setLayoutCount; set++) {
                RADV_FROM_HANDLE(radv_descriptor_set_layout, set_layout,
                                 pCreateInfo->pSetLayouts[set]);
@@ -211,7 +211,7 @@ VkResult radv_CreatePipelineLayout(
                for (uint32_t b = 0; b < set_layout->binding_count; b++) {
                        dynamic_offset_count += set_layout->binding[b].array_size * set_layout->binding[b].dynamic_offset_count;
                }
-               _mesa_sha1_update(ctx, set_layout->binding,
+               _mesa_sha1_update(&ctx, set_layout->binding,
                                  sizeof(set_layout->binding[0]) * set_layout->binding_count);
        }
 
@@ -224,9 +224,9 @@ VkResult radv_CreatePipelineLayout(
        }
 
        layout->push_constant_size = align(layout->push_constant_size, 16);
-       _mesa_sha1_update(ctx, &layout->push_constant_size,
+       _mesa_sha1_update(&ctx, &layout->push_constant_size,
                          sizeof(layout->push_constant_size));
-       _mesa_sha1_final(ctx, layout->sha1);
+       _mesa_sha1_final(&ctx, layout->sha1);
        *pPipelineLayout = radv_pipeline_layout_to_handle(layout);
 
        return VK_SUCCESS;
index 30f2dc16d3f984f430afd0a19ddd5c9683d58ccd..83bf3cb6af4ae40a0ad636cd5e665584c8957070 100644 (file)
@@ -91,22 +91,22 @@ radv_hash_shader(unsigned char *hash, struct radv_shader_module *module,
                 const union ac_shader_variant_key *key,
                 uint32_t is_geom_copy_shader)
 {
-       struct mesa_sha1 *ctx;
+       struct mesa_sha1 ctx;
 
-       ctx = _mesa_sha1_init();
+       _mesa_sha1_init(&ctx);
        if (key)
-               _mesa_sha1_update(ctx, key, sizeof(*key));
-       _mesa_sha1_update(ctx, module->sha1, sizeof(module->sha1));
-       _mesa_sha1_update(ctx, entrypoint, strlen(entrypoint));
+               _mesa_sha1_update(&ctx, key, sizeof(*key));
+       _mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1));
+       _mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint));
        if (layout)
-               _mesa_sha1_update(ctx, layout->sha1, sizeof(layout->sha1));
+               _mesa_sha1_update(&ctx, layout->sha1, sizeof(layout->sha1));
        if (spec_info) {
-               _mesa_sha1_update(ctx, spec_info->pMapEntries,
+               _mesa_sha1_update(&ctx, spec_info->pMapEntries,
                                  spec_info->mapEntryCount * sizeof spec_info->pMapEntries[0]);
-               _mesa_sha1_update(ctx, spec_info->pData, spec_info->dataSize);
+               _mesa_sha1_update(&ctx, spec_info->pData, spec_info->dataSize);
        }
-       _mesa_sha1_update(ctx, &is_geom_copy_shader, 4);
-       _mesa_sha1_final(ctx, hash);
+       _mesa_sha1_update(&ctx, &is_geom_copy_shader, 4);
+       _mesa_sha1_final(&ctx, hash);
 }
 
 
index 175efdbcb91ed25d2c59f7c393f50131892dc2e2..56a08ce76aeac698327759061db1f605637fa5ef 100644 (file)
@@ -259,18 +259,19 @@ VkResult anv_CreatePipelineLayout(
       }
    }
 
-   struct mesa_sha1 *ctx = _mesa_sha1_init();
+   struct mesa_sha1 ctx;
+   _mesa_sha1_init(&ctx);
    for (unsigned s = 0; s < layout->num_sets; s++) {
-      sha1_update_descriptor_set_layout(ctx, layout->set[s].layout);
-      _mesa_sha1_update(ctx, &layout->set[s].dynamic_offset_start,
+      sha1_update_descriptor_set_layout(&ctx, layout->set[s].layout);
+      _mesa_sha1_update(&ctx, &layout->set[s].dynamic_offset_start,
                         sizeof(layout->set[s].dynamic_offset_start));
    }
-   _mesa_sha1_update(ctx, &layout->num_sets, sizeof(layout->num_sets));
+   _mesa_sha1_update(&ctx, &layout->num_sets, sizeof(layout->num_sets));
    for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
-      _mesa_sha1_update(ctx, &layout->stage[s].has_dynamic_offsets,
+      _mesa_sha1_update(&ctx, &layout->stage[s].has_dynamic_offsets,
                         sizeof(layout->stage[s].has_dynamic_offsets));
    }
-   _mesa_sha1_final(ctx, layout->sha1);
+   _mesa_sha1_final(&ctx, layout->sha1);
 
    *pPipelineLayout = anv_pipeline_layout_to_handle(layout);
 
index a8ea80f51f5c63bc42bab5f3393093a6c9415745..0b677a49f3de6297053112eaee16c8b636710a88 100644 (file)
@@ -205,23 +205,23 @@ anv_hash_shader(unsigned char *hash, const void *key, size_t key_size,
                 const struct anv_pipeline_layout *pipeline_layout,
                 const VkSpecializationInfo *spec_info)
 {
-   struct mesa_sha1 *ctx;
+   struct mesa_sha1 ctx;
 
-   ctx = _mesa_sha1_init();
-   _mesa_sha1_update(ctx, key, key_size);
-   _mesa_sha1_update(ctx, module->sha1, sizeof(module->sha1));
-   _mesa_sha1_update(ctx, entrypoint, strlen(entrypoint));
+   _mesa_sha1_init(&ctx);
+   _mesa_sha1_update(&ctx, key, key_size);
+   _mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1));
+   _mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint));
    if (pipeline_layout) {
-      _mesa_sha1_update(ctx, pipeline_layout->sha1,
+      _mesa_sha1_update(&ctx, pipeline_layout->sha1,
                         sizeof(pipeline_layout->sha1));
    }
    /* hash in shader stage, pipeline layout? */
    if (spec_info) {
-      _mesa_sha1_update(ctx, spec_info->pMapEntries,
+      _mesa_sha1_update(&ctx, spec_info->pMapEntries,
                         spec_info->mapEntryCount * sizeof spec_info->pMapEntries[0]);
-      _mesa_sha1_update(ctx, spec_info->pData, spec_info->dataSize);
+      _mesa_sha1_update(&ctx, spec_info->pData, spec_info->dataSize);
    }
-   _mesa_sha1_final(ctx, hash);
+   _mesa_sha1_final(&ctx, hash);
 }
 
 static struct anv_shader_bin *
index e8f1bad22f08c78882818e69463b2c278257b633..eb882e8bd0042bef21a82478861eb399bf3c5e34 100644 (file)
 #include "sha1/sha1.h"
 #include "mesa-sha1.h"
 
-struct mesa_sha1 *
-_mesa_sha1_init(void)
-{
-   SHA1_CTX *ctx = malloc(sizeof(*ctx));
-
-   if (!ctx)
-      return NULL;
-
-   SHA1Init(ctx);
-   return (struct mesa_sha1 *) ctx;
-}
-
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size)
 {
-   SHA1_CTX *sha1_ctx = (SHA1_CTX *) ctx;
-
-   SHA1Update(sha1_ctx, data, size);
-   return 1;
-}
-
-int
-_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20])
-{
-   SHA1_CTX *sha1_ctx = (SHA1_CTX *) ctx;
-
-   SHA1Final(result, sha1_ctx);
-   free(sha1_ctx);
+   SHA1Update(ctx, data, size);
    return 1;
 }
 
 void
 _mesa_sha1_compute(const void *data, size_t size, unsigned char result[20])
 {
-   struct mesa_sha1 *ctx;
+   struct mesa_sha1 ctx;
 
-   ctx = _mesa_sha1_init();
-   _mesa_sha1_update(ctx, data, size);
-   _mesa_sha1_final(ctx, result);
+   _mesa_sha1_init(&ctx);
+   _mesa_sha1_update(&ctx, data, size);
+   _mesa_sha1_final(&ctx, result);
 }
 
 char *
index 0be5485f3132974efd5e30ee8b8a80a3e40215ae..f927d5772dbfa0e39c7f0f92352a4272090820cb 100644 (file)
 #define SHA1_H
 
 #include <stdlib.h>
+#include "sha1/sha1.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-struct mesa_sha1;
+#define mesa_sha1 _SHA1_CTX
 
-struct mesa_sha1 *
-_mesa_sha1_init(void);
+#define _mesa_sha1_init SHA1Init
 
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size);
 
-int
-_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20]);
+static inline void
+_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20])
+{
+   SHA1Final(result, ctx);
+}
 
 char *
 _mesa_sha1_format(char *buf, const unsigned char *sha1);