1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2012 Red Hat Inc. 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included in 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * all copies or substantial portions of the Software. 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors: Ben Skeggs 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_defines.h" 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_pack_color.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nouveau_gldefs.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nv_object.xml.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv30-40_3d.xml.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv30_context.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv30_format.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE uint32_t 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpack_rgba(enum pipe_format format, const float *rgba) 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union util_color uc; 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org util_pack_color(rgba, format, &uc); 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return uc.ui; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE uint32_t 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpack_zeta(enum pipe_format format, double depth, unsigned stencil) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t zuint = (uint32_t)(depth * 4294967295.0); 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format != PIPE_FORMAT_Z16_UNORM) 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (zuint & 0xffffff00) | (stencil & 0xff); 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return zuint >> 16; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv30_clear(struct pipe_context *pipe, unsigned buffers, 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, double depth, unsigned stencil) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_context *nv30 = nv30_context(pipe); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_pushbuf *push = nv30->base.pushbuf; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_framebuffer_state *fb = &nv30->framebuffer; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t colr = 0, zeta = 0, mode = 0; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!nv30_state_validate(nv30, TRUE)) 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffers & PIPE_CLEAR_COLOR && fb->nr_cbufs) { 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org colr = pack_rgba(fb->cbufs[0]->format, color->f); 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode |= NV30_3D_CLEAR_BUFFERS_COLOR_R | 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_G | 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_B | 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_A; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fb->zsbuf) { 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zeta = pack_zeta(fb->zsbuf->format, depth, stencil); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffers & PIPE_CLEAR_DEPTH) 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode |= NV30_3D_CLEAR_BUFFERS_DEPTH; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffers & PIPE_CLEAR_STENCIL) 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode |= NV30_3D_CLEAR_BUFFERS_STENCIL; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*XXX: wtf? fixes clears sometimes not clearing on nv3x... */ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nv30->screen->eng3d->oclass < NV40_3D_CLASS) { 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(CLEAR_DEPTH_VALUE), 3); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, zeta); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, colr); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, mode); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(CLEAR_DEPTH_VALUE), 3); 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, zeta); 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, colr); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, mode); 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nv30_state_release(nv30); 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv30_clear_render_target(struct pipe_context *pipe, struct pipe_surface *ps, 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned x, unsigned y, unsigned w, unsigned h) 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_context *nv30 = nv30_context(pipe); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_surface *sf = nv30_surface(ps); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_miptree *mt = nv30_miptree(ps->texture); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_pushbuf *push = nv30->base.pushbuf; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_object *eng3d = nv30->screen->eng3d; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_pushbuf_refn refn; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t rt_format; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format = nv30_format(pipe->screen, ps->format)->hw; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (util_format_get_blocksize(ps->format) == 4) 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_ZETA_Z24S8; 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_ZETA_Z16; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nv30_miptree(ps->texture)->swizzled) { 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_TYPE_SWIZZLED; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= util_logbase2(sf->width) << 16; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= util_logbase2(sf->height) << 24; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_TYPE_LINEAR; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org refn.bo = mt->base.bo; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org refn.flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_WR; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nouveau_pushbuf_space(push, 16, 1, 0) || 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nouveau_pushbuf_refn (push, &refn, 1)) 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(RT_ENABLE), 1); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, NV30_3D_RT_ENABLE_COLOR0); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(RT_HORIZ), 3); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->width << 16); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->height << 16); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, rt_format); 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(COLOR0_PITCH), 2); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (eng3d->oclass < NV40_3D_CLASS) 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (sf->pitch << 16) | sf->pitch); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->pitch); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_RELOC(push, mt->base.bo, sf->offset, NOUVEAU_BO_LOW, 0, 0); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(SCISSOR_HORIZ), 2); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (w << 16) | x); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (h << 16) | y); 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(CLEAR_COLOR_VALUE), 2); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, pack_rgba(ps->format, color->f)); 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, NV30_3D_CLEAR_BUFFERS_COLOR_R | 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_G | 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_B | 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NV30_3D_CLEAR_BUFFERS_COLOR_A); 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nv30->dirty |= NV30_NEW_FRAMEBUFFER | NV30_NEW_SCISSOR; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv30_clear_depth_stencil(struct pipe_context *pipe, struct pipe_surface *ps, 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffers, double depth, unsigned stencil, 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned x, unsigned y, unsigned w, unsigned h) 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_context *nv30 = nv30_context(pipe); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_surface *sf = nv30_surface(ps); 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv30_miptree *mt = nv30_miptree(ps->texture); 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_pushbuf *push = nv30->base.pushbuf; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_object *eng3d = nv30->screen->eng3d; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nouveau_pushbuf_refn refn; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t rt_format, mode = 0; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format = nv30_format(pipe->screen, ps->format)->hw; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (util_format_get_blocksize(ps->format) == 4) 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_COLOR_A8R8G8B8; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_COLOR_R5G6B5; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nv30_miptree(ps->texture)->swizzled) { 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_TYPE_SWIZZLED; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= util_logbase2(sf->width) << 16; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= util_logbase2(sf->height) << 24; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rt_format |= NV30_3D_RT_FORMAT_TYPE_LINEAR; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffers & PIPE_CLEAR_DEPTH) 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode |= NV30_3D_CLEAR_BUFFERS_DEPTH; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffers & PIPE_CLEAR_STENCIL) 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode |= NV30_3D_CLEAR_BUFFERS_STENCIL; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org refn.bo = mt->base.bo; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org refn.flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_WR; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nouveau_pushbuf_space(push, 32, 1, 0) || 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nouveau_pushbuf_refn (push, &refn, 1)) 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(RT_ENABLE), 1); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, 0); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(RT_HORIZ), 3); 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->width << 16); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->height << 16); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, rt_format); 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (eng3d->oclass < NV40_3D_CLASS) { 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(COLOR0_PITCH), 1); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (sf->pitch << 16) | sf->pitch); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV40_3D(ZETA_PITCH), 1); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, sf->pitch); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(ZETA_OFFSET), 1); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_RELOC(push, mt->base.bo, sf->offset, NOUVEAU_BO_LOW, 0, 0); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(SCISSOR_HORIZ), 2); 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (w << 16) | x); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, (h << 16) | y); 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(CLEAR_DEPTH_VALUE), 1); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, pack_zeta(ps->format, depth, stencil)); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BEGIN_NV04(push, NV30_3D(CLEAR_BUFFERS), 1); 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PUSH_DATA (push, mode); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nv30->dirty |= NV30_NEW_FRAMEBUFFER | NV30_NEW_SCISSOR; 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv30_clear_init(struct pipe_context *pipe) 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear = nv30_clear; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear_render_target = nv30_clear_render_target; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear_depth_stencil = nv30_clear_depth_stencil; 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 227