nir/serialize: don't expand 16-bit variable state slots to 32 bits
authorMarek Olšák <marek.olsak@amd.com>
Fri, 25 Oct 2019 16:01:27 +0000 (12:01 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 6 Nov 2019 04:35:31 +0000 (23:35 -0500)
the swizzle also needs only 16 bits

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_serialize.c

index 3aa72a6a5c6d6580a044c70155de6c2b893cebe2..0dc604cce41282b54fce0b5460bd790b33a9066e 100644 (file)
@@ -94,7 +94,7 @@ struct nir_builder;
  */
 typedef struct {
    gl_state_index16 tokens[STATE_LENGTH];
-   int swizzle;
+   uint16_t swizzle;
 } nir_state_slot;
 
 typedef enum {
index 558bd6c97a3fdf42e7136df8a850da4e2d648d4a..6c0d07f657e7ff3dbbbb7dc1e4776cd7860a317b 100644 (file)
@@ -142,9 +142,8 @@ write_variable(write_ctx *ctx, const nir_variable *var)
    blob_write_bytes(ctx->blob, (uint8_t *) &var->data, sizeof(var->data));
    blob_write_uint32(ctx->blob, var->num_state_slots);
    for (unsigned i = 0; i < var->num_state_slots; i++) {
-      for (unsigned j = 0; j < STATE_LENGTH; j++)
-         blob_write_uint32(ctx->blob, var->state_slots[i].tokens[j]);
-      blob_write_uint32(ctx->blob, var->state_slots[i].swizzle);
+      blob_write_bytes(ctx->blob, &var->state_slots[i],
+                       sizeof(var->state_slots[i]));
    }
    blob_write_uint32(ctx->blob, !!(var->constant_initializer));
    if (var->constant_initializer)
@@ -179,9 +178,8 @@ read_variable(read_ctx *ctx)
       var->state_slots = ralloc_array(var, nir_state_slot,
                                       var->num_state_slots);
       for (unsigned i = 0; i < var->num_state_slots; i++) {
-         for (unsigned j = 0; j < STATE_LENGTH; j++)
-            var->state_slots[i].tokens[j] = blob_read_uint32(ctx->blob);
-         var->state_slots[i].swizzle = blob_read_uint32(ctx->blob);
+         blob_copy_bytes(ctx->blob, &var->state_slots[i],
+                         sizeof(var->state_slots[i]));
       }
    }
    bool has_const_initializer = blob_read_uint32(ctx->blob);