Home | History | Annotate | Line # | Download | only in panfrost
      1 /*
      2  * Copyright (C) 2019 Alyssa Rosenzweig
      3  * Copyright (C) 2014-2017 Broadcom
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the "Software"),
      7  * to deal in the Software without restriction, including without limitation
      8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      9  * and/or sell copies of the Software, and to permit persons to whom the
     10  * Software is furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice (including the next
     13  * paragraph) shall be included in all copies or substantial portions of the
     14  * Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     22  * SOFTWARE.
     23  *
     24  */
     25 
     26 #ifndef __PAN_JOB_H__
     27 #define __PAN_JOB_H__
     28 
     29 /* Used as a hash table key */
     30 
     31 struct panfrost_job_key {
     32         struct pipe_surface *cbufs[4];
     33         struct pipe_surface *zsbuf;
     34 };
     35 
     36 #define PAN_REQ_MSAA            (1 << 0)
     37 #define PAN_REQ_DEPTH_WRITE     (1 << 1)
     38 
     39 /* A panfrost_job corresponds to a bound FBO we're rendering to,
     40  * collecting over multiple draws. */
     41 
     42 struct panfrost_job {
     43         struct panfrost_context *ctx;
     44         struct panfrost_job_key key;
     45 
     46         /* Buffers cleared (PIPE_CLEAR_* bitmask) */
     47         unsigned clear;
     48 
     49         /* Packed clear values */
     50         uint32_t clear_color;
     51         float clear_depth;
     52         unsigned clear_stencil;
     53 
     54         /* Whether this job uses the corresponding requirement (PAN_REQ_*
     55          * bitmask) */
     56         unsigned requirements;
     57 
     58         /* BOs referenced -- will be used for flushing logic */
     59         struct set *bos;
     60 };
     61 
     62 /* Functions for managing the above */
     63 
     64 struct panfrost_job *
     65 panfrost_create_job(struct panfrost_context *ctx);
     66 
     67 void
     68 panfrost_free_job(struct panfrost_context *ctx, struct panfrost_job *job);
     69 
     70 struct panfrost_job *
     71 panfrost_get_job(struct panfrost_context *ctx,
     72                 struct pipe_surface **cbufs, struct pipe_surface *zsbuf);
     73 
     74 struct panfrost_job *
     75 panfrost_get_job_for_fbo(struct panfrost_context *ctx);
     76 
     77 void
     78 panfrost_job_init(struct panfrost_context *ctx);
     79 
     80 void
     81 panfrost_job_add_bo(struct panfrost_job *job, struct panfrost_bo *bo);
     82 
     83 void
     84 panfrost_flush_jobs_writing_resource(struct panfrost_context *panfrost,
     85                                 struct pipe_resource *prsc);
     86 
     87 void
     88 panfrost_flush_jobs_reading_resource(struct panfrost_context *panfrost,
     89                                 struct pipe_resource *prsc);
     90 
     91 #endif
     92