diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-03-12 03:32:17 +0000 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-03-14 22:47:11 +0000 |
commit | 9dd84db7a5d7ae74f7fca835ae51fa6a88313d09 (patch) | |
tree | 1c077d4d8e8de71a4e7191a8cb3c2b9a7ef31f50 /src/gallium/drivers/panfrost/pan_fragment.c | |
parent | 4d1a356a570dfcec1dbde6790bcb9a3e7598c53e (diff) |
panfrost: Break out fragment to SFBD/MFBD files
This substantially cleans up the corresponding logic at the expense of a
bit of code duplication; nevertheless, it's a net win since otherwise
incompatible hardware code is mixed confusingly.
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/gallium/drivers/panfrost/pan_fragment.c')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_fragment.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/gallium/drivers/panfrost/pan_fragment.c b/src/gallium/drivers/panfrost/pan_fragment.c new file mode 100644 index 00000000000..16405a4ed21 --- /dev/null +++ b/src/gallium/drivers/panfrost/pan_fragment.c @@ -0,0 +1,63 @@ +/* + * Copyright 2018-2019 Alyssa Rosenzweig + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + */ + +#include "pan_context.h" +#include "pan_util.h" +#include "pan_format.h" + +#include "util/u_format.h" + +/* Generate a fragment job. This should be called once per frame. (According to + * presentations, this is supposed to correspond to eglSwapBuffers) */ + +mali_ptr +panfrost_fragment_job(struct panfrost_context *ctx) +{ + mali_ptr framebuffer = ctx->require_sfbd ? + panfrost_sfbd_fragment(ctx) : + panfrost_mfbd_fragment(ctx); + + struct mali_job_descriptor_header header = { + .job_type = JOB_TYPE_FRAGMENT, + .job_index = 1, +#ifdef __LP64__ + .job_descriptor_size = 1 +#endif + }; + + struct mali_payload_fragment payload = { + .min_tile_coord = MALI_COORDINATE_TO_TILE_MIN(0, 0), + .max_tile_coord = MALI_COORDINATE_TO_TILE_MAX(ctx->pipe_framebuffer.width, ctx->pipe_framebuffer.height), + .framebuffer = framebuffer, + }; + + /* Normally, there should be no padding. However, fragment jobs are + * shared with 64-bit Bifrost systems, and accordingly there is 4-bytes + * of zero padding in between. */ + + struct panfrost_transfer transfer = panfrost_allocate_transient(ctx, sizeof(header) + sizeof(payload)); + memcpy(transfer.cpu, &header, sizeof(header)); + memcpy(transfer.cpu + sizeof(header), &payload, sizeof(payload)); + return transfer.gpu; +} |