iris: Create an "iris_surface_state" wrapper struct
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 15 Nov 2019 00:06:10 +0000 (16:06 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 25 Nov 2019 23:54:54 +0000 (15:54 -0800)
Today, we only have a state reference to the GPU buffer containing our
uploaded SURFACE_STATEs.  However, we're going to want a CPU-side copy
soon.  Making a wrapper struct means we can talk about both together,
and also put both in the field called "surface_state".

src/gallium/drivers/iris/iris_resource.h
src/gallium/drivers/iris/iris_state.c

index 39cbaba71e7663dc65486d86f5d65461d2690703..4eac653bd3af29bb3a50ba73760bbacfb31c296b 100644 (file)
@@ -179,6 +179,14 @@ struct iris_state_ref {
    uint32_t offset;
 };
 
+/**
+ * The SURFACE_STATE descriptors for a resource.
+ */
+struct iris_surface_state {
+   /** A reference to the GPU buffer holding our uploaded SURFACE_STATE */
+   struct iris_state_ref ref;
+};
+
 /**
  * Gallium CSO for sampler views (texture views).
  *
@@ -200,7 +208,7 @@ struct iris_sampler_view {
    struct iris_resource *res;
 
    /** The resource (BO) holding our SURFACE_STATE. */
-   struct iris_state_ref surface_state;
+   struct iris_surface_state surface_state;
 };
 
 /**
@@ -210,7 +218,7 @@ struct iris_image_view {
    struct pipe_image_view base;
 
    /** The resource (BO) holding our SURFACE_STATE. */
-   struct iris_state_ref surface_state;
+   struct iris_surface_state surface_state;
 };
 
 /**
@@ -226,9 +234,9 @@ struct iris_surface {
    union isl_color_value clear_color;
 
    /** The resource (BO) holding our SURFACE_STATE. */
-   struct iris_state_ref surface_state;
+   struct iris_surface_state surface_state;
    /** The resource (BO) holding our SURFACE_STATE for read. */
-   struct iris_state_ref surface_state_read;
+   struct iris_surface_state surface_state_read;
 };
 
 /**
index 37f1ae26c1717189e0dd63c59570a5580e98a146..8336e33e7445dd4318c9f693f789fc6ec66b4dc3 100644 (file)
@@ -2264,7 +2264,7 @@ iris_create_sampler_view(struct pipe_context *ctx,
    isv->res = (struct iris_resource *) tex;
 
    void *map = alloc_surface_states(ice->state.surface_uploader,
-                                    &isv->surface_state,
+                                    &isv->surface_state.ref,
                                     isv->res->aux.sampler_usages);
    if (!unlikely(map))
       return NULL;
@@ -2330,7 +2330,7 @@ iris_sampler_view_destroy(struct pipe_context *ctx,
 {
    struct iris_sampler_view *isv = (void *) state;
    pipe_resource_reference(&state->texture, NULL);
-   pipe_resource_reference(&isv->surface_state.res, NULL);
+   pipe_resource_reference(&isv->surface_state.ref.res, NULL);
    free(isv);
 }
 
@@ -2427,19 +2427,19 @@ iris_create_surface(struct pipe_context *ctx,
 
 
    void *map = alloc_surface_states(ice->state.surface_uploader,
-                                    &surf->surface_state,
+                                    &surf->surface_state.ref,
                                     res->aux.possible_usages);
    if (!unlikely(map)) {
-      pipe_resource_reference(&surf->surface_state.res, NULL);
+      pipe_resource_reference(&surf->surface_state.ref.res, NULL);
       return NULL;
    }
 
 #if GEN_GEN == 8
    void *map_read = alloc_surface_states(ice->state.surface_uploader,
-                                         &surf->surface_state_read,
+                                         &surf->surface_state_read.ref,
                                          res->aux.possible_usages);
    if (!unlikely(map_read)) {
-      pipe_resource_reference(&surf->surface_state_read.res, NULL);
+      pipe_resource_reference(&surf->surface_state_read.ref.res, NULL);
       return NULL;
    }
 #endif
@@ -2611,7 +2611,7 @@ iris_set_shader_images(struct pipe_context *ctx,
 
          void *map =
             alloc_surface_states(ice->state.surface_uploader,
-                                 &iv->surface_state, 1 << ISL_AUX_USAGE_NONE);
+                                 &iv->surface_state.ref, 1 << ISL_AUX_USAGE_NONE);
          if (!unlikely(map))
             return;
 
@@ -2685,7 +2685,7 @@ iris_set_shader_images(struct pipe_context *ctx,
          }
       } else {
          pipe_resource_reference(&iv->base.resource, NULL);
-         pipe_resource_reference(&iv->surface_state.res, NULL);
+         pipe_resource_reference(&iv->surface_state.ref.res, NULL);
          fill_default_image_param(&image_params[start_slot + i]);
       }
    }
@@ -2760,8 +2760,8 @@ iris_surface_destroy(struct pipe_context *ctx, struct pipe_surface *p_surf)
 {
    struct iris_surface *surf = (void *) p_surf;
    pipe_resource_reference(&p_surf->texture, NULL);
-   pipe_resource_reference(&surf->surface_state.res, NULL);
-   pipe_resource_reference(&surf->surface_state_read.res, NULL);
+   pipe_resource_reference(&surf->surface_state.ref.res, NULL);
+   pipe_resource_reference(&surf->surface_state_read.ref.res, NULL);
    free(surf);
 }
 
@@ -4491,9 +4491,9 @@ use_surface(struct iris_context *ice,
 
    iris_use_pinned_bo(batch, iris_resource_bo(p_surf->texture), writeable);
    if (GEN_GEN == 8 && is_read_surface) {
-      iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state_read.res), false);
+      iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state_read.ref.res), false);
    } else {
-      iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state.res), false);
+      iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state.ref.res), false);
    }
 
    if (res->aux.bo) {
@@ -4503,18 +4503,19 @@ use_surface(struct iris_context *ice,
 
       if (memcmp(&res->aux.clear_color, &surf->clear_color,
                  sizeof(surf->clear_color)) != 0) {
-         update_clear_value(ice, batch, res, &surf->surface_state,
+         update_clear_value(ice, batch, res, &surf->surface_state.ref,
                             res->aux.possible_usages, &surf->view);
          if (GEN_GEN == 8) {
-            update_clear_value(ice, batch, res, &surf->surface_state_read,
+            update_clear_value(ice, batch, res, &surf->surface_state_read.ref,
                                res->aux.possible_usages, &surf->read_view);
          }
          surf->clear_color = res->aux.clear_color;
       }
    }
 
-   offset = (GEN_GEN == 8 && is_read_surface) ? surf->surface_state_read.offset
-                                              : surf->surface_state.offset;
+   offset = (GEN_GEN == 8 && is_read_surface)
+               ? surf->surface_state_read.ref.offset
+               : surf->surface_state.ref.offset;
 
    return offset +
           surf_state_offset_for_aux(res, res->aux.possible_usages, aux_usage);
@@ -4530,7 +4531,7 @@ use_sampler_view(struct iris_context *ice,
       iris_resource_texture_aux_usage(ice, isv->res, isv->view.format, 0);
 
    iris_use_pinned_bo(batch, isv->res->bo, false);
-   iris_use_pinned_bo(batch, iris_resource_bo(isv->surface_state.res), false);
+   iris_use_pinned_bo(batch, iris_resource_bo(isv->surface_state.ref.res), false);
 
    if (isv->res->aux.bo) {
       iris_use_pinned_bo(batch, isv->res->aux.bo, false);
@@ -4538,13 +4539,13 @@ use_sampler_view(struct iris_context *ice,
          iris_use_pinned_bo(batch, isv->res->aux.clear_color_bo, false);
       if (memcmp(&isv->res->aux.clear_color, &isv->clear_color,
                  sizeof(isv->clear_color)) != 0) {
-         update_clear_value(ice, batch, isv->res, &isv->surface_state,
+         update_clear_value(ice, batch, isv->res, &isv->surface_state.ref,
                             isv->res->aux.sampler_usages, &isv->view);
          isv->clear_color = isv->res->aux.clear_color;
       }
    }
 
-   return isv->surface_state.offset +
+   return isv->surface_state.ref.offset +
           surf_state_offset_for_aux(isv->res, isv->res->aux.sampler_usages,
                                     aux_usage);
 }
@@ -4578,12 +4579,12 @@ use_image(struct iris_batch *batch, struct iris_context *ice,
    bool write = iv->base.shader_access & PIPE_IMAGE_ACCESS_WRITE;
 
    iris_use_pinned_bo(batch, res->bo, write);
-   iris_use_pinned_bo(batch, iris_resource_bo(iv->surface_state.res), false);
+   iris_use_pinned_bo(batch, iris_resource_bo(iv->surface_state.ref.res), false);
 
    if (res->aux.bo)
       iris_use_pinned_bo(batch, res->aux.bo, write);
 
-   return iv->surface_state.offset;
+   return iv->surface_state.ref.offset;
 }
 
 #define push_bt_entry(addr) \
@@ -6336,7 +6337,7 @@ iris_destroy_state(struct iris_context *ice)
       }
       for (int i = 0; i < PIPE_MAX_SHADER_IMAGES; i++) {
          pipe_resource_reference(&shs->image[i].base.resource, NULL);
-         pipe_resource_reference(&shs->image[i].surface_state.res, NULL);
+         pipe_resource_reference(&shs->image[i].surface_state.ref.res, NULL);
       }
       for (int i = 0; i < PIPE_MAX_SHADER_BUFFERS; i++) {
          pipe_resource_reference(&shs->ssbo[i].buffer, NULL);
@@ -6467,7 +6468,7 @@ iris_rebind_buffer(struct iris_context *ice,
 
             if (res->bo == iris_resource_bo(isv->base.texture)) {
                void *map = alloc_surface_states(ice->state.surface_uploader,
-                                                &isv->surface_state,
+                                                &isv->surface_state.ref,
                                                 isv->res->aux.sampler_usages);
                assert(map);
                fill_buffer_surface_state(&screen->isl_dev, isv->res, map,