X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Firis%2Firis_resource.h;h=826c959eb46287b44c08c04b49f1b09d72bcafc9;hb=dd83ef0d1a14b144c562129b5572f9ebdbe56042;hp=419122c8bbd65a5e59a7393f37033bf83bbfd4b3;hpb=d4a4384b315a4b74357b30f868f4d1c25a571083;p=mesa.git diff --git a/src/gallium/drivers/iris/iris_resource.h b/src/gallium/drivers/iris/iris_resource.h index 419122c8bbd..826c959eb46 100644 --- a/src/gallium/drivers/iris/iris_resource.h +++ b/src/gallium/drivers/iris/iris_resource.h @@ -77,6 +77,12 @@ struct iris_resource { */ unsigned bind_history; + /** + * A bitfield of MESA_SHADER_* stages indicating where this resource + * was bound. + */ + unsigned bind_stages; + /** * For PIPE_BUFFER resources, a range which may contain valid data. * @@ -209,10 +215,13 @@ struct iris_image_view { struct iris_surface { struct pipe_surface base; struct isl_view view; + struct isl_view read_view; union isl_color_value clear_color; /** The resource (BO) holding our SURFACE_STATE. */ struct iris_state_ref surface_state; + /** The resource (BO) holding our SURFACE_STATE for read. */ + struct iris_state_ref surface_state_read; }; /** @@ -229,6 +238,8 @@ struct iris_transfer { struct blorp_context *blorp; struct iris_batch *batch; + bool dest_had_defined_contents; + void (*unmap)(struct iris_transfer *); }; @@ -268,6 +279,7 @@ uint32_t iris_flush_bits_for_history(struct iris_resource *res); void iris_flush_and_dirty_for_history(struct iris_context *ice, struct iris_batch *batch, struct iris_resource *res, + uint32_t extra_flags, const char *reason); unsigned iris_get_num_logical_layers(const struct iris_resource *res, @@ -391,6 +403,13 @@ iris_resource_access_raw(struct iris_context *ice, } } +enum isl_dim_layout iris_get_isl_dim_layout(const struct gen_device_info *devinfo, + enum isl_tiling tiling, + enum pipe_texture_target target); +enum isl_surf_dim target_to_isl_surf_dim(enum pipe_texture_target target); +uint32_t iris_resource_get_tile_offsets(const struct iris_resource *res, + uint32_t level, uint32_t z, + uint32_t *tile_x, uint32_t *tile_y); enum isl_aux_usage iris_resource_texture_aux_usage(struct iris_context *ice, const struct iris_resource *res, enum isl_format view_fmt, @@ -406,11 +425,28 @@ void iris_resource_prepare_image(struct iris_context *ice, struct iris_batch *batch, struct iris_resource *res); +static inline bool +iris_resource_unfinished_aux_import(struct iris_resource *res) +{ + return res->base.next != NULL && res->mod_info && + res->mod_info->aux_usage != ISL_AUX_USAGE_NONE; +} + +void iris_resource_finish_aux_import(struct pipe_screen *pscreen, + struct iris_resource *res); + +bool iris_has_color_unresolved(const struct iris_resource *res, + unsigned start_level, unsigned num_levels, + unsigned start_layer, unsigned num_layers); + void iris_resource_check_level_layer(const struct iris_resource *res, uint32_t level, uint32_t layer); bool iris_resource_level_has_hiz(const struct iris_resource *res, uint32_t level); +bool iris_has_color_unresolved(const struct iris_resource *res, + unsigned start_level, unsigned num_levels, + unsigned start_layer, unsigned num_layers); enum isl_aux_usage iris_resource_render_aux_usage(struct iris_context *ice, struct iris_resource *res,