util/sha1: rework _mesa_sha1_{init,final}
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>
This commit is contained in:

committed by
Emil Velikov

parent
c96127e873
commit
a9a4028fd7
@@ -187,7 +187,7 @@ VkResult radv_CreatePipelineLayout(
|
|||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_device, device, _device);
|
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||||
struct radv_pipeline_layout *layout;
|
struct radv_pipeline_layout *layout;
|
||||||
struct mesa_sha1 *ctx;
|
struct mesa_sha1 ctx;
|
||||||
|
|
||||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO);
|
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO);
|
||||||
|
|
||||||
@@ -201,7 +201,7 @@ VkResult radv_CreatePipelineLayout(
|
|||||||
unsigned dynamic_offset_count = 0;
|
unsigned dynamic_offset_count = 0;
|
||||||
|
|
||||||
|
|
||||||
ctx = _mesa_sha1_init();
|
_mesa_sha1_init(&ctx);
|
||||||
for (uint32_t set = 0; set < pCreateInfo->setLayoutCount; set++) {
|
for (uint32_t set = 0; set < pCreateInfo->setLayoutCount; set++) {
|
||||||
RADV_FROM_HANDLE(radv_descriptor_set_layout, set_layout,
|
RADV_FROM_HANDLE(radv_descriptor_set_layout, set_layout,
|
||||||
pCreateInfo->pSetLayouts[set]);
|
pCreateInfo->pSetLayouts[set]);
|
||||||
@@ -211,7 +211,7 @@ VkResult radv_CreatePipelineLayout(
|
|||||||
for (uint32_t b = 0; b < set_layout->binding_count; b++) {
|
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;
|
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);
|
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);
|
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));
|
sizeof(layout->push_constant_size));
|
||||||
_mesa_sha1_final(ctx, layout->sha1);
|
_mesa_sha1_final(&ctx, layout->sha1);
|
||||||
*pPipelineLayout = radv_pipeline_layout_to_handle(layout);
|
*pPipelineLayout = radv_pipeline_layout_to_handle(layout);
|
||||||
|
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
|
@@ -91,22 +91,22 @@ radv_hash_shader(unsigned char *hash, struct radv_shader_module *module,
|
|||||||
const union ac_shader_variant_key *key,
|
const union ac_shader_variant_key *key,
|
||||||
uint32_t is_geom_copy_shader)
|
uint32_t is_geom_copy_shader)
|
||||||
{
|
{
|
||||||
struct mesa_sha1 *ctx;
|
struct mesa_sha1 ctx;
|
||||||
|
|
||||||
ctx = _mesa_sha1_init();
|
_mesa_sha1_init(&ctx);
|
||||||
if (key)
|
if (key)
|
||||||
_mesa_sha1_update(ctx, key, sizeof(*key));
|
_mesa_sha1_update(&ctx, key, sizeof(*key));
|
||||||
_mesa_sha1_update(ctx, module->sha1, sizeof(module->sha1));
|
_mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1));
|
||||||
_mesa_sha1_update(ctx, entrypoint, strlen(entrypoint));
|
_mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint));
|
||||||
if (layout)
|
if (layout)
|
||||||
_mesa_sha1_update(ctx, layout->sha1, sizeof(layout->sha1));
|
_mesa_sha1_update(&ctx, layout->sha1, sizeof(layout->sha1));
|
||||||
if (spec_info) {
|
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]);
|
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_update(&ctx, &is_geom_copy_shader, 4);
|
||||||
_mesa_sha1_final(ctx, hash);
|
_mesa_sha1_final(&ctx, hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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++) {
|
for (unsigned s = 0; s < layout->num_sets; s++) {
|
||||||
sha1_update_descriptor_set_layout(ctx, layout->set[s].layout);
|
sha1_update_descriptor_set_layout(&ctx, layout->set[s].layout);
|
||||||
_mesa_sha1_update(ctx, &layout->set[s].dynamic_offset_start,
|
_mesa_sha1_update(&ctx, &layout->set[s].dynamic_offset_start,
|
||||||
sizeof(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++) {
|
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));
|
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);
|
*pPipelineLayout = anv_pipeline_layout_to_handle(layout);
|
||||||
|
|
||||||
|
@@ -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 struct anv_pipeline_layout *pipeline_layout,
|
||||||
const VkSpecializationInfo *spec_info)
|
const VkSpecializationInfo *spec_info)
|
||||||
{
|
{
|
||||||
struct mesa_sha1 *ctx;
|
struct mesa_sha1 ctx;
|
||||||
|
|
||||||
ctx = _mesa_sha1_init();
|
_mesa_sha1_init(&ctx);
|
||||||
_mesa_sha1_update(ctx, key, key_size);
|
_mesa_sha1_update(&ctx, key, key_size);
|
||||||
_mesa_sha1_update(ctx, module->sha1, sizeof(module->sha1));
|
_mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1));
|
||||||
_mesa_sha1_update(ctx, entrypoint, strlen(entrypoint));
|
_mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint));
|
||||||
if (pipeline_layout) {
|
if (pipeline_layout) {
|
||||||
_mesa_sha1_update(ctx, pipeline_layout->sha1,
|
_mesa_sha1_update(&ctx, pipeline_layout->sha1,
|
||||||
sizeof(pipeline_layout->sha1));
|
sizeof(pipeline_layout->sha1));
|
||||||
}
|
}
|
||||||
/* hash in shader stage, pipeline layout? */
|
/* hash in shader stage, pipeline layout? */
|
||||||
if (spec_info) {
|
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]);
|
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 *
|
static struct anv_shader_bin *
|
||||||
|
@@ -27,45 +27,21 @@
|
|||||||
#include "sha1/sha1.h"
|
#include "sha1/sha1.h"
|
||||||
#include "mesa-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
|
int
|
||||||
_mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size)
|
_mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size)
|
||||||
{
|
{
|
||||||
SHA1_CTX *sha1_ctx = (SHA1_CTX *) ctx;
|
SHA1Update(ctx, data, size);
|
||||||
|
|
||||||
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);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_mesa_sha1_compute(const void *data, size_t size, unsigned char result[20])
|
_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_init(&ctx);
|
||||||
_mesa_sha1_update(ctx, data, size);
|
_mesa_sha1_update(&ctx, data, size);
|
||||||
_mesa_sha1_final(ctx, result);
|
_mesa_sha1_final(&ctx, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
@@ -24,21 +24,24 @@
|
|||||||
#define SHA1_H
|
#define SHA1_H
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "sha1/sha1.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct mesa_sha1;
|
#define mesa_sha1 _SHA1_CTX
|
||||||
|
|
||||||
struct mesa_sha1 *
|
#define _mesa_sha1_init SHA1Init
|
||||||
_mesa_sha1_init(void);
|
|
||||||
|
|
||||||
int
|
int
|
||||||
_mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size);
|
_mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size);
|
||||||
|
|
||||||
int
|
static inline void
|
||||||
_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20]);
|
_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20])
|
||||||
|
{
|
||||||
|
SHA1Final(result, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
_mesa_sha1_format(char *buf, const unsigned char *sha1);
|
_mesa_sha1_format(char *buf, const unsigned char *sha1);
|
||||||
|
Reference in New Issue
Block a user