1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Copyright (C) Intel Corp. 2006. All Rights Reserved. 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org develop this 3D driver. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Permission is hereby granted, free of charge, to any person obtaining 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org a copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org distribute, sublicense, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next paragraph) shall be included in all copies or substantial 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **********************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors: 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Keith Whitwell <keith@tungstengraphics.com> 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/samplerobj.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "program/prog_parameter.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_mipmap_tree.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_batchbuffer.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_tex.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_fbo.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_buffer_objects.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_context.h" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_state.h" 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_defines.h" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_wm.h" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLuint 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtranslate_tex_target(GLenum target) 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (target) { 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D: 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D_ARRAY_EXT: 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_1D; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_RECTANGLE_NV: 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_2D; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D: 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D_ARRAY_EXT: 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_EXTERNAL_OES: 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_2D; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_3D: 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_3D; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_CUBE_MAP: 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_CUBE; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct surface_format_info { 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool exists; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int sampling; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int filtering; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int shadow_compare; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int chroma_key; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int render_target; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int alpha_blend; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int input_vb; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int streamed_output_vb; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int color_processing; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This macro allows us to write the table almost as it appears in the PRM, 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * while restructuring it to turn it into the C code we want. 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \ 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color }, 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define Y 0 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define x 999 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the table of support for surface (texture, renderbuffer, and vertex 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer, but not depthbuffer) formats across the various hardware generations. 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The table is formatted to match the documentation, except that the docs have 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this ridiculous mapping of Y[*+~^#&] for "supported on DevWhatever". To put 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * it in our table, here's the mapping: 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Y*: 45 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Y+: 45 (g45/gm45) 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Y~: 50 (gen5) 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Y^: 60 (gen6) 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Y#: 70 (gen7) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See page 88 of the Sandybridge PRM VOL4_Part1 PDF. 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct surface_format_info surface_formats[] = { 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* smpl filt shad CK RT AB VB SO color */ 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_FLOAT) 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_SINT) 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_UINT) 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_UNORM) 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SNORM) 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64_FLOAT) 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT) 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SSCALED) 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_USCALED) 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_FLOAT) 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_SINT) 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_UINT) 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_UNORM) 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SNORM) 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SSCALED) 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_USCALED) 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 45, Y, x, 60, BRW_SURFACEFORMAT_R16G16B16A16_UNORM) 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SNORM) 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SINT) 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_UINT) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_FLOAT) 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32_FLOAT) 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_SINT) 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_UINT) 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS) 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT) 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32A32_FLOAT) 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_UNORM) 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SNORM) 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64_FLOAT) 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_UNORM) 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT) 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32X32_FLOAT) 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32X32_FLOAT) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32X32_FLOAT) 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SSCALED) 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_USCALED) 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SSCALED) 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_USCALED) 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_B8G8R8A8_UNORM) 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB) 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* smpl filt shad CK RT AB VB SO color */ 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM) 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB) 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10A2_UINT) 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, Y, Y, x, x, BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM) 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM) 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB) 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SNORM) 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SINT) 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_UINT) 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 45, Y, x, x, BRW_SURFACEFORMAT_R16G16_UNORM) 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16_SNORM) 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SINT) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_UINT) 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16_FLOAT) 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM) 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB) 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R11G11B10_FLOAT) 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_SINT) 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_UINT) 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32_FLOAT) 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT) 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_UNORM) 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I24X8_UNORM) 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L24X8_UNORM) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A24X8_UNORM) 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32_FLOAT) 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32_FLOAT) 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32_FLOAT) 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, 60, BRW_SURFACEFORMAT_B8G8R8X8_UNORM) 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB) 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM) 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB) 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP) 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10X2_UNORM) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_FLOAT) 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_UNORM) 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SNORM) 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* smpl filt shad CK RT AB VB SO color */ 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10X2_USCALED) 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SSCALED) 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_USCALED) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SSCALED) 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_USCALED) 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SSCALED) 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_USCALED) 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB) 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM) 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB) 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM) 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB) 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8G8_UNORM) 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8_SNORM) 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SINT) 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_UINT) 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, Y, 45, Y, x, 70, BRW_SURFACEFORMAT_R16_UNORM) 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16_SNORM) 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_SINT) 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_UINT) 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16_FLOAT) 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_UNORM) 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_UNORM) 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_UNORM) 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM) 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_FLOAT) 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_FLOAT) 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_FLOAT) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM_SRGB) 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM) 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM) 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB) 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SSCALED) 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_USCALED) 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* smpl filt shad CK RT AB VB SO color */ 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_SSCALED) 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_USCALED) 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, 45, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8_UNORM) 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8_SNORM) 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_SINT) 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_UINT) 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_A8_UNORM) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I8_UNORM) 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM) 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P4A4_UNORM) 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A4P4_UNORM) 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_SSCALED) 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_USCALED) 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM_SRGB) 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB_SRGB) 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R1_UINT) 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_NORMAL) 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUVY) 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM) 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM) 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM) 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_UNORM) 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_UNORM) 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM_SRGB) 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM_SRGB) 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM_SRGB) 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_MONO8) 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUV) 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPY) 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB) 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* smpl filt shad CK RT AB VB SO color */ 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_FXT1) 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_UNORM) 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SNORM) 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SSCALED) 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_USCALED) 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64A64_FLOAT) 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64_FLOAT) 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_SNORM) 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_SNORM) 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_UNORM) 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SNORM) 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SSCALED) 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_USCALED) 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef x 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef Y 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_format_for_mesa_format(gl_format mesa_format) 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This table is ordered according to the enum ordering in formats.h. We do 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * expect that enum to be extended without our explicit initialization 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * staying in sync, so we initialize to 0 even though 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to also be 0. 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const uint32_t table[MESA_FORMAT_COUNT] = 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA8888] = 0, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_UNORM, 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB8888] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM, 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB8888_REV] = 0, 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBX8888] = 0, 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBX8888_REV] = BRW_SURFACEFORMAT_R8G8B8X8_UNORM, 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_XRGB8888] = BRW_SURFACEFORMAT_B8G8R8X8_UNORM, 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_XRGB8888_REV] = 0, 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB888] = 0, 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_BGR888] = 0, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB565] = BRW_SURFACEFORMAT_B5G6R5_UNORM, 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB565_REV] = 0, 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB4444] = BRW_SURFACEFORMAT_B4G4R4A4_UNORM, 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB4444_REV] = 0, 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA5551] = 0, 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB1555] = BRW_SURFACEFORMAT_B5G5R5A1_UNORM, 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB1555_REV] = 0, 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_AL44] = 0, 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_AL88] = BRW_SURFACEFORMAT_L8A8_UNORM, 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_AL88_REV] = 0, 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_AL1616] = BRW_SURFACEFORMAT_L16A16_UNORM, 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_AL1616_REV] = 0, 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB332] = 0, 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_A8] = BRW_SURFACEFORMAT_A8_UNORM, 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_A16] = BRW_SURFACEFORMAT_A16_UNORM, 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_L8] = BRW_SURFACEFORMAT_L8_UNORM, 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_L16] = BRW_SURFACEFORMAT_L16_UNORM, 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_I8] = BRW_SURFACEFORMAT_I8_UNORM, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_I16] = BRW_SURFACEFORMAT_I16_UNORM, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_YCBCR_REV] = BRW_SURFACEFORMAT_YCRCB_NORMAL, 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_YCBCR] = BRW_SURFACEFORMAT_YCRCB_SWAPUVY, 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R8] = BRW_SURFACEFORMAT_R8_UNORM, 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_GR88] = BRW_SURFACEFORMAT_R8G8_UNORM, 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG88] = 0, 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R16] = BRW_SURFACEFORMAT_R16_UNORM, 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG1616] = BRW_SURFACEFORMAT_R16G16_UNORM, 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG1616_REV] = 0, 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ARGB2101010] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM, 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ABGR2101010_UINT] = BRW_SURFACEFORMAT_R10G10B10A2_UINT, 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z24_S8] = 0, 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_S8_Z24] = 0, 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z16] = 0, 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_X8_Z24] = 0, 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z24_X8] = 0, 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z32] = 0, 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_S8] = 0, 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGB8] = 0, 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGBA8] = 0, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SARGB8] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SL8] = BRW_SURFACEFORMAT_L8_UNORM_SRGB, 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SLA8] = BRW_SURFACEFORMAT_L8A8_UNORM_SRGB, 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB_SRGB, 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM_SRGB, 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM_SRGB, 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SRGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM_SRGB, 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_FXT1] = BRW_SURFACEFORMAT_FXT1, 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_FXT1] = BRW_SURFACEFORMAT_FXT1, 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB, 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM, 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM, 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM, 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_FLOAT32] = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_FLOAT16] = BRW_SURFACEFORMAT_R16G16B16A16_FLOAT, 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_FLOAT32] = 0, 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_FLOAT16] = 0, 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_A32_FLOAT, 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_A16_FLOAT, 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_FLOAT32] = BRW_SURFACEFORMAT_L32_FLOAT, 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_FLOAT16] = BRW_SURFACEFORMAT_L16_FLOAT, 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_L32A32_FLOAT, 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_L16A16_FLOAT, 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_FLOAT32] = BRW_SURFACEFORMAT_I32_FLOAT, 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_FLOAT16] = BRW_SURFACEFORMAT_I16_FLOAT, 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_FLOAT32] = BRW_SURFACEFORMAT_R32_FLOAT, 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_FLOAT16] = BRW_SURFACEFORMAT_R16_FLOAT, 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_FLOAT32] = BRW_SURFACEFORMAT_R32G32_FLOAT, 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_FLOAT16] = BRW_SURFACEFORMAT_R16G16_FLOAT, 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_UINT8] = 0, 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_UINT16] = 0, 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_UINT32] = 0, 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_INT8] = 0, 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_INT16] = 0, 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_ALPHA_INT32] = 0, 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_UINT8] = 0, 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_UINT16] = 0, 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_UINT32] = 0, 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_INT8] = 0, 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_INT16] = 0, 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_INTENSITY_INT32] = 0, 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_UINT8] = 0, 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_UINT16] = 0, 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_UINT32] = 0, 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_INT8] = 0, 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_INT16] = 0, 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_INT32] = 0, 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = 0, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = 0, 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = 0, 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = 0, 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = 0, 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = 0, 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_INT8] = BRW_SURFACEFORMAT_R8_SINT, 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_INT8] = BRW_SURFACEFORMAT_R8G8_SINT, 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_INT8] = 0, 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_INT8] = BRW_SURFACEFORMAT_R8G8B8A8_SINT, 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_INT16] = BRW_SURFACEFORMAT_R16_SINT, 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_INT16] = BRW_SURFACEFORMAT_R16G16_SINT, 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_INT16] = 0, 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_INT16] = BRW_SURFACEFORMAT_R16G16B16A16_SINT, 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_INT32] = BRW_SURFACEFORMAT_R32_SINT, 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_INT32] = BRW_SURFACEFORMAT_R32G32_SINT, 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_INT32] = BRW_SURFACEFORMAT_R32G32B32_SINT, 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_INT32] = BRW_SURFACEFORMAT_R32G32B32A32_SINT, 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_UINT8] = BRW_SURFACEFORMAT_R8_UINT, 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_UINT8] = BRW_SURFACEFORMAT_R8G8_UINT, 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_UINT8] = 0, 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_UINT8] = BRW_SURFACEFORMAT_R8G8B8A8_UINT, 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_UINT16] = BRW_SURFACEFORMAT_R16_UINT, 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_UINT16] = BRW_SURFACEFORMAT_R16G16_UINT, 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_UINT16] = 0, 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_UINT16] = BRW_SURFACEFORMAT_R16G16B16A16_UINT, 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R_UINT32] = BRW_SURFACEFORMAT_R32_UINT, 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_UINT32] = BRW_SURFACEFORMAT_R32G32_UINT, 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB_UINT32] = BRW_SURFACEFORMAT_R32G32B32_UINT, 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_UINT32] = BRW_SURFACEFORMAT_R32G32B32A32_UINT, 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_DUDV8] = BRW_SURFACEFORMAT_R8G8_SNORM, 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_R8] = BRW_SURFACEFORMAT_R8_SNORM, 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RG88_REV] = BRW_SURFACEFORMAT_R8G8_SNORM, 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RGBX8888] = 0, 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RGBA8888] = 0, 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_SNORM, 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_R16] = BRW_SURFACEFORMAT_R16_SNORM, 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_GR1616] = BRW_SURFACEFORMAT_R16G16_SNORM, 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RGB_16] = 0, 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_SNORM, 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_UNORM, 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_UNORM, 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_SNORM, 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_UNORM, 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_SNORM, 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_L_LATC1] = 0, 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_L_LATC1] = 0, 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_LA_LATC2] = 0, 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_LA_LATC2] = 0, 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_A8] = 0, 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_L8] = 0, 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_AL88] = 0, 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_I8] = 0, 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_A16] = 0, 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_L16] = 0, 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_AL1616] = 0, 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_SIGNED_I16] = 0, 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_RGB9_E5_FLOAT] = BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP, 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_R11_G11_B10_FLOAT] = BRW_SURFACEFORMAT_R11G11B10_FLOAT, 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z32_FLOAT] = 0, 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org [MESA_FORMAT_Z32_FLOAT_X24S8] = 0, 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(mesa_format < MESA_FORMAT_COUNT); 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return table[mesa_format]; 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_init_surface_formats(struct brw_context *brw) 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &intel->ctx; 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int gen; 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format format; 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gen = intel->gen * 10; 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->is_g4x) 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gen += 5; 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (format = MESA_FORMAT_NONE + 1; format < MESA_FORMAT_COUNT; format++) { 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t texture, render; 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct surface_format_info *rinfo, *tinfo; 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool is_integer = _mesa_is_format_integer_color(format); 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org render = texture = brw_format_for_mesa_format(format); 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tinfo = &surface_formats[texture]; 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The value of BRW_SURFACEFORMAT_R32G32B32A32_FLOAT is 0, so don't skip 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * it. 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texture == 0 && format != MESA_FORMAT_RGBA_FLOAT32) 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (gen >= tinfo->sampling && (gen >= tinfo->filtering || is_integer)) 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[format] = true; 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Re-map some render target formats to make them supported when they 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * wouldn't be using their format for texturing. 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (render) { 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For these formats, we just need to read/write the first 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * channel into R, which is to say that we just treat them as 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_RED. 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case BRW_SURFACEFORMAT_I32_FLOAT: 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case BRW_SURFACEFORMAT_L32_FLOAT: 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org render = BRW_SURFACEFORMAT_R32_FLOAT; 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case BRW_SURFACEFORMAT_I16_FLOAT: 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case BRW_SURFACEFORMAT_L16_FLOAT: 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org render = BRW_SURFACEFORMAT_R16_FLOAT; 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case BRW_SURFACEFORMAT_B8G8R8X8_UNORM: 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XRGB is handled as ARGB because the chips in this family 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * cannot render to XRGB targets. This means that we have to 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * mask writes to alpha (ala glColorMask) and reconfigure the 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * alpha blending hardware to use GL_ONE (or GL_ZERO) for 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * used. 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org render = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rinfo = &surface_formats[render]; 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note that GL_EXT_texture_integer says that blending doesn't occur for 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * integer, so we don't need hardware support for blending on it. Other 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * than that, GL in general requires alpha blending for render targets, 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * even though we don't support it for some formats. 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (gen >= rinfo->render_target && 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (gen >= rinfo->alpha_blend || is_integer)) { 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->render_target_format[format] = render; 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[format] = true; 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* We will check this table for FBO completeness, but the surface format 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * table above only covered color rendering. 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_S8_Z24] = true; 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_X8_Z24] = true; 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_S8] = true; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_Z16] = true; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT] = true; 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT_X24S8] = true; 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* We remap depth formats to a supported texturing format in 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * translate_tex_format(). 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = true; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = true; 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT] = true; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8] = true; 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_Z16] = true; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* On hardware that lacks support for ETC1, we map ETC1 to RGBX 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * during glCompressedTexImage2D(). See intel_mipmap_tree::wraps_etc1. 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->TextureFormatSupported[MESA_FORMAT_ETC1_RGB8] = true; 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_render_target_supported(struct intel_context *intel, 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *rb) 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_context *brw = brw_context(&intel->ctx); 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format format = rb->Format; 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Many integer formats are promoted to RGBA (like XRGB8888 is), which means 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * we would consider them renderable even though we don't have surface 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * support for their alpha behavior and don't have the blending unit 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * available to fake it like we do for XRGB8888. Force them to being 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unsupported. 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((rb->_BaseFormat != GL_RGBA && 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb->_BaseFormat != GL_RG && 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb->_BaseFormat != GL_RED) && _mesa_is_format_integer_color(format)) 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return false; 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Under some conditions, MSAA is not supported for formats whose width is 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * more than 64 bits. 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb->NumSamples > 0 && _mesa_get_format_bytes(format) > 8) { 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Gen6: MSAA on >64 bit formats is unsupported. */ 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen <= 6) 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return false; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Gen7: 8x MSAA on >64 bit formats is unsupported. */ 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb->NumSamples >= 8) 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return false; 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return brw->format_supported_as_render_target[format]; 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLuint 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtranslate_tex_format(gl_format mesa_format, 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum internal_format, 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum depth_mode, 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum srgb_decode) 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (srgb_decode == GL_SKIP_DECODE_EXT) 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mesa_format = _mesa_get_srgb_format_linear(mesa_format); 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch( mesa_format ) { 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_Z16: 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACEFORMAT_I16_UNORM; 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_S8_Z24: 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_X8_Z24: 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACEFORMAT_I24X8_UNORM; 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_Z32_FLOAT: 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACEFORMAT_I32_FLOAT; 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_Z32_FLOAT_X24S8: 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACEFORMAT_R32G32_FLOAT; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_RGBA_FLOAT32: 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The value of this BRW_SURFACEFORMAT is 0, which tricks the 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * assertion below. 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(brw_format_for_mesa_format(mesa_format) != 0); 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return brw_format_for_mesa_format(mesa_format); 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_get_surface_tiling_bits(uint32_t tiling) 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (tiling) { 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_TILING_X: 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_TILED; 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_TILING_Y: 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y; 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_get_surface_num_multisamples(unsigned num_samples) 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (num_samples > 1) 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_MULTISAMPLECOUNT_4; 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return BRW_SURFACE_MULTISAMPLECOUNT_1; 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Compute the combination of DEPTH_TEXTURE_MODE and EXT_texture_swizzle 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * swizzling. 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_get_texture_swizzle(const struct gl_texture_object *t) 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_texture_image *img = t->Image[0][t->BaseLevel]; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int swizzles[SWIZZLE_NIL + 1] = { 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_X, 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_Y, 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_Z, 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_W, 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_ZERO, 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_ONE, 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWIZZLE_NIL 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (img->_BaseFormat == GL_DEPTH_COMPONENT || 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org img->_BaseFormat == GL_DEPTH_STENCIL) { 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (t->DepthMode) { 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[0] = SWIZZLE_ZERO; 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[1] = SWIZZLE_ZERO; 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[2] = SWIZZLE_ZERO; 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[3] = SWIZZLE_X; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[0] = SWIZZLE_X; 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[1] = SWIZZLE_X; 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[2] = SWIZZLE_X; 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[3] = SWIZZLE_ONE; 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY: 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[0] = SWIZZLE_X; 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[1] = SWIZZLE_X; 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[2] = SWIZZLE_X; 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[3] = SWIZZLE_X; 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[0] = SWIZZLE_X; 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[1] = SWIZZLE_ZERO; 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[2] = SWIZZLE_ZERO; 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[3] = SWIZZLE_ONE; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MAKE_SWIZZLE4(swizzles[GET_SWZ(t->_Swizzle, 0)], 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[GET_SWZ(t->_Swizzle, 1)], 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[GET_SWZ(t->_Swizzle, 2)], 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[GET_SWZ(t->_Swizzle, 3)]); 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_buffer_texture_surface(struct gl_context *ctx, 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *binding_table, 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned surf_index) 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_context *brw = brw_context(ctx); 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current; 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf; 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_buffer_object *intel_obj = 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_buffer_object(tObj->BufferObject); 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo = intel_obj ? intel_obj->buffer : NULL; 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format format = tObj->_BufferObjectFormat; 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t brw_format = brw_format_for_mesa_format(format); 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int texel_size = _mesa_get_format_bytes(format); 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (brw_format == 0 && format != MESA_FORMAT_RGBA_FLOAT32) { 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_problem(NULL, "bad format %s for texture buffer\n", 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_get_format_name(format)); 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6 * 4, 32, &binding_table[surf_index]); 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (brw_format_for_mesa_format(format) << BRW_SURFACE_FORMAT_SHIFT)); 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen >= 6) 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= BRW_SURFACE_RC_READ_WRITE; 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bo) { 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = bo->offset; /* reloc */ 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Emit relocation to surface contents. */ 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org binding_table[surf_index] + 4, 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bo, 0, I915_GEM_DOMAIN_SAMPLER, 0); 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int w = intel_obj->Base.Size / texel_size; 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = ((w & 0x7f) << BRW_SURFACE_WIDTH_SHIFT | 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT); 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT | 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (texel_size - 1) << BRW_SURFACE_PITCH_SHIFT); 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = 0; 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = 0; 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = 0; 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = 0; 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = 0; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_texture_surface(struct gl_context *ctx, 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *binding_table, 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned surf_index) 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_context *brw = brw_context(ctx); 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_object *intelObj = intel_texture_object(tObj); 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_mipmap_tree *mt = intelObj->mt; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *firstImage = tObj->Image[0][tObj->BaseLevel]; 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit); 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width, height, depth; 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tObj->Target == GL_TEXTURE_BUFFER) { 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw_update_buffer_texture_surface(ctx, unit, binding_table, surf_index); 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_get_dimensions_for_image(firstImage, &width, &height, &depth); 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6 * 4, 32, &binding_table[surf_index]); 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT | 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_CUBEFACE_ENABLES | 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (translate_tex_format(mt->format, 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org firstImage->InternalFormat, 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tObj->DepthMode, 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sampler->sRGBDecode) << 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_FORMAT_SHIFT)); 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = intelObj->mt->region->bo->offset + intelObj->mt->offset; /* reloc */ 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = ((intelObj->_MaxLevel - tObj->BaseLevel) << BRW_SURFACE_LOD_SHIFT | 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (width - 1) << BRW_SURFACE_WIDTH_SHIFT | 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (brw_get_surface_tiling_bits(intelObj->mt->region->tiling) | 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (depth - 1) << BRW_SURFACE_DEPTH_SHIFT | 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((intelObj->mt->region->pitch * intelObj->mt->cpp) - 1) << 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_PITCH_SHIFT); 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = 0; 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = (mt->align_h == 4) ? BRW_SURFACE_VERTICAL_ALIGN_ENABLE : 0; 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Emit relocation to surface contents */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org binding_table[surf_index] + 4, 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelObj->mt->region->bo, 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelObj->mt->offset, 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_SAMPLER, 0); 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create the constant buffer surface. Vertex/fragment shader constants will be 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * read from this buffer with Data Port Read instructions/messages. 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_create_constant_surface(struct brw_context *brw, 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo, 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset, 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width, 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *out_offset) 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLint w = width - 1; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf; 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6 * 4, 32, out_offset); 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_SURFACE_FORMAT_SHIFT); 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen >= 6) 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= BRW_SURFACE_RC_READ_WRITE; 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = bo->offset + offset; /* reloc */ 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = ((w & 0x7f) << BRW_SURFACE_WIDTH_SHIFT | 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT); 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT | 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (16 - 1) << BRW_SURFACE_PITCH_SHIFT); /* ignored */ 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = 0; 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = 0; 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Emit relocation to surface contents. Section 5.1.1 of the gen4 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * bspec ("Data Cache") says that the data cache does not exist as 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a separate cache and is just the sampler cache. 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *out_offset + 4, 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bo, offset, 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_SAMPLER, 0); 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Set up a binding table entry for use by stream output logic (transform 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * feedback). 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer_size_minus_1 must me less than BRW_MAX_NUM_BUFFER_ENTRIES. 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_sol_surface(struct brw_context *brw, 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *buffer_obj, 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *out_offset, unsigned num_vector_components, 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride_dwords, unsigned offset_dwords) 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_buffer_object *intel_bo = intel_buffer_object(buffer_obj); 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo = 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_bufferobj_buffer(intel, intel_bo, INTEL_WRITE_PART); 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32, 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org out_offset); 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t pitch_minus_1 = 4*stride_dwords - 1; 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset_bytes = 4 * offset_dwords; 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t size_dwords = buffer_obj->Size / 4; 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t buffer_size_minus_1, width, height, depth, surface_format; 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FIXME: can we rely on core Mesa to ensure that the buffer isn't 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * too big to map using a single binding table entry? 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert((size_dwords - offset_dwords) / stride_dwords 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org <= BRW_MAX_NUM_BUFFER_ENTRIES); 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (size_dwords > offset_dwords + num_vector_components) { 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* There is room for at least 1 transform feedback output in the buffer. 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Compute the number of additional transform feedback outputs the 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer has room for. 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buffer_size_minus_1 = 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (size_dwords - offset_dwords - num_vector_components) / stride_dwords; 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* There isn't even room for a single transform feedback output in the 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer. We can't configure the binding table entry to prevent output 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * entirely; we'll have to rely on the geometry shader to detect 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * overflow. But to minimize the damage in case of a bug, set up the 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * binding table entry to just allow a single output. 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buffer_size_minus_1 = 0; 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = buffer_size_minus_1 & 0x7f; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height = (buffer_size_minus_1 & 0xfff80) >> 7; 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth = (buffer_size_minus_1 & 0x7f00000) >> 20; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (num_vector_components) { 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format = BRW_SURFACEFORMAT_R32_FLOAT; 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format = BRW_SURFACEFORMAT_R32G32_FLOAT; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format = BRW_SURFACEFORMAT_R32G32B32_FLOAT; 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!"Invalid vector size for transform feedback output"); 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format = BRW_SURFACEFORMAT_R32_FLOAT; 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_format << BRW_SURFACE_FORMAT_SHIFT | 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACE_RC_READ_WRITE; 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = bo->offset + offset_bytes; /* reloc */ 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = (width << BRW_SURFACE_WIDTH_SHIFT | 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height << BRW_SURFACE_HEIGHT_SHIFT); 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (depth << BRW_SURFACE_DEPTH_SHIFT | 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pitch_minus_1 << BRW_SURFACE_PITCH_SHIFT); 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = 0; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = 0; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Emit relocation to surface contents. */ 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *out_offset + 4, 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bo, offset_bytes, 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER); 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Creates a new WM constant buffer reflecting the current fragment program's 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * constants, if needed by the fragment program. 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Otherwise, constants go through the CURBEs using the brw_constant_buffer 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * state atom. 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_upload_wm_pull_constants(struct brw_context *brw) 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &brw->intel.ctx; 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* BRW_NEW_FRAGMENT_PROGRAM */ 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_fragment_program *fp = 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (struct brw_fragment_program *) brw->fragment_program; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_parameter_list *params = fp->program.Base.Parameters; 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int size = brw->wm.prog_data->nr_pull_params * sizeof(float); 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int surf_index = SURF_INDEX_FRAG_CONST_BUFFER; 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float *constants; 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int i; 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_load_state_parameters(ctx, params); 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* CACHE_NEW_WM_PROG */ 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (brw->wm.prog_data->nr_pull_params == 0) { 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (brw->wm.const_bo) { 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_unreference(brw->wm.const_bo); 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.const_bo = NULL; 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.surf_offset[surf_index] = 0; 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_SURFACES; 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_unreference(brw->wm.const_bo); 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.const_bo = drm_intel_bo_alloc(intel->bufmgr, "WM const bo", 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size, 64); 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_PROGRAM_CONSTANTS */ 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_gem_bo_map_gtt(brw->wm.const_bo); 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org constants = brw->wm.const_bo->virtual; 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < brw->wm.prog_data->nr_pull_params; i++) { 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org constants[i] = *brw->wm.prog_data->pull_param[i]; 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_gem_bo_unmap_gtt(brw->wm.const_bo); 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.create_constant_surface(brw, brw->wm.const_bo, 0, 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org params->NumParameters, 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &brw->wm.surf_offset[surf_index]); 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_SURFACES; 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state brw_wm_pull_constants = { 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = (_NEW_PROGRAM_CONSTANTS), 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = (BRW_NEW_BATCH | BRW_NEW_FRAGMENT_PROGRAM), 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = CACHE_NEW_WM_PROG, 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_upload_wm_pull_constants, 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_null_renderbuffer_surface(struct brw_context *brw, unsigned int unit) 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* From the Sandy bridge PRM, Vol4 Part1 p71 (Surface Type: Programming 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Notes): 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A null surface will be used in instances where an actual surface is 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * not bound. When a write message is generated to a null surface, no 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * actual surface is written to. When a read message (including any 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sampling engine message) is generated to a null surface, the result 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * is all zeros. Note that a null surface type is allowed to be used 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * with all messages, even if it is not specificially indicated as 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * supported. All of the remaining fields in surface state are ignored 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for null surfaces, with the following exceptions: 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - [DevSNB+]: Width, Height, Depth, and LOD fields must match the 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * depth buffer’s corresponding state for all render target surfaces, 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * including null. 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - Surface Format must be R8G8B8A8_UNORM. 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &intel->ctx; 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf; 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned surface_type = BRW_SURFACE_NULL; 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo = NULL; 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pitch_minus_1 = 0; 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t multisampling_state = 0; 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_BUFFERS */ 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_framebuffer *fb = ctx->DrawBuffer; 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6 * 4, 32, &brw->wm.surf_offset[unit]); 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fb->Visual.samples > 1) { 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* On Gen6, null render targets seem to cause GPU hangs when 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * multisampling. So work around this problem by rendering into dummy 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * color buffer. 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * To decrease the amount of memory needed by the workaround buffer, we 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * set its pitch to 128 bytes (the width of a Y tile). This means that 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the amount of memory needed for the workaround buffer is 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (width_in_tiles + height_in_tiles - 1) tiles. 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that since the workaround buffer will be interpreted by the 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * hardware as an interleaved multisampled buffer, we need to compute 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * width_in_tiles and height_in_tiles by dividing the width and height 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * by 16 rather than the normal Y-tile size of 32. 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width_in_tiles = ALIGN(fb->Width, 16) / 16; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned height_in_tiles = ALIGN(fb->Height, 16) / 16; 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size_needed = (width_in_tiles + height_in_tiles - 1) * 4096; 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw_get_scratch_bo(intel, &brw->wm.multisampled_null_render_target_bo, 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_needed); 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bo = brw->wm.multisampled_null_render_target_bo; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surface_type = BRW_SURFACE_2D; 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pitch_minus_1 = 127; 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org multisampling_state = 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw_get_surface_num_multisamples(fb->Visual.samples); 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = (surface_type << BRW_SURFACE_TYPE_SHIFT | 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SURFACEFORMAT_B8G8R8A8_UNORM << BRW_SURFACE_FORMAT_SHIFT); 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen < 6) { 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= (1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT | 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT | 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT | 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT); 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = bo ? bo->offset : 0; 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = ((fb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (fb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* From Sandy bridge PRM, Vol4 Part1 p82 (Tiled Surface: Programming 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Notes): 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If Surface Type is SURFTYPE_NULL, this field must be TRUE 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y | 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pitch_minus_1 << BRW_SURFACE_PITCH_SHIFT); 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = multisampling_state; 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = 0; 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bo) { 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.surf_offset[unit] + 4, 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bo, 0, 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER); 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Sets up a surface state structure to point at the given region. 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * While it is only used for the front/back buffer currently, it should be 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * usable for further buffers when doing ARB_draw_buffer support. 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_renderbuffer_surface(struct brw_context *brw, 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *rb, 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int unit) 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &intel->ctx; 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_renderbuffer *irb = intel_renderbuffer(rb); 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_mipmap_tree *mt = irb->mt; 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_region *region; 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf; 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t tile_x, tile_y; 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t format = 0; 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format rb_format = intel_rb_format(irb); 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (irb->tex_image && !brw->has_surface_tile_offset) { 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y); 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tile_x != 0 || tile_y != 0) { 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Original gen4 hardware couldn't draw to a non-tile-aligned 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * destination in a miptree unless you actually setup your renderbuffer 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * as a miptree and used the fragile lod/array_index/etc. controls to 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * select the image. So, instead, we just make a new single-level 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * miptree and render into that. 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = intel_context(ctx); 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_image *intel_image = 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_texture_image(irb->tex_image); 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_mipmap_tree *new_mt; 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width, height, depth; 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_get_dimensions_for_image(irb->tex_image, &width, &height, &depth); 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org new_mt = intel_miptree_create(intel, irb->tex_image->TexObject->Target, 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image->base.Base.TexFormat, 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image->base.Base.Level, 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image->base.Base.Level, 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width, height, depth, 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org true, 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0 /* num_samples */, 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INTEL_MSAA_LAYOUT_NONE); 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_copy_teximage(intel, intel_image, new_mt); 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_reference(&irb->mt, intel_image->mt); 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_renderbuffer_set_draw_offset(irb); 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_release(&new_mt); 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mt = irb->mt; 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org region = irb->mt->region; 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6 * 4, 32, &brw->wm.surf_offset[unit]); 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (rb_format) { 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_FORMAT_SARGB8: 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_BUFFERS 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB surfaces to the 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * blend/update as sRGB. 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.sRGBEnabled) 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format = brw_format_for_mesa_format(rb_format); 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format = brw->render_target_format[rb_format]; 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (unlikely(!brw->format_supported_as_render_target[rb_format])) { 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n", 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, _mesa_get_format_name(rb_format)); 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT | 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format << BRW_SURFACE_FORMAT_SHIFT); 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* reloc */ 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] = (intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y) + 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org region->bo->offset); 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[2] = ((rb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (rb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[3] = (brw_get_surface_tiling_bits(region->tiling) | 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((region->pitch * region->cpp) - 1) << BRW_SURFACE_PITCH_SHIFT); 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[4] = brw_get_surface_num_multisamples(mt->num_samples); 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0)); 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note that the low bits of these fields are missing, so 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * there's the possibility of getting in trouble. 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(tile_x % 4 == 0); 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(tile_y % 2 == 0); 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[5] = ((tile_x / 4) << BRW_SURFACE_X_OFFSET_SHIFT | 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (tile_y / 2) << BRW_SURFACE_Y_OFFSET_SHIFT | 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (mt->align_h == 4 ? BRW_SURFACE_VERTICAL_ALIGN_ENABLE : 0)); 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen < 6) { 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_COLOR */ 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Color.ColorLogicOpEnabled && 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->Color.BlendEnabled & (1 << unit))) 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= BRW_SURFACE_BLEND_ENABLED; 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Color.ColorMask[unit][0]) 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT; 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Color.ColorMask[unit][1]) 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT; 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Color.ColorMask[unit][2]) 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT; 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* As mentioned above, disable writes to the alpha component when the 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * renderbuffer is XRGB. 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->DrawBuffer->Visual.alphaBits == 0 || 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !ctx->Color.ColorMask[unit][3]) { 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT; 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(brw->intel.batch.bo, 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.surf_offset[unit] + 4, 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org region->bo, 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf[1] - region->bo->offset, 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_RENDER, 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_RENDER); 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Construct SURFACE_STATE objects for renderbuffers/draw buffers. 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_renderbuffer_surfaces(struct brw_context *brw) 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &brw->intel.ctx; 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_BUFFERS | _NEW_COLOR */ 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Update surfaces for drawing buffers */ 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_renderbuffer_surface(brw, ctx->DrawBuffer->_ColorDrawBuffers[i], i); 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_null_renderbuffer_surface(brw, i); 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_null_renderbuffer_surface(brw, 0); 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_SURFACES; 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state brw_renderbuffer_surfaces = { 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = (_NEW_COLOR | 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_BUFFERS), 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = BRW_NEW_BATCH, 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = 0 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_update_renderbuffer_surfaces, 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state gen6_renderbuffer_surfaces = { 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = _NEW_BUFFERS, 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = BRW_NEW_BATCH, 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = 0 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_update_renderbuffer_surfaces, 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Construct SURFACE_STATE objects for enabled textures. 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_texture_surfaces(struct brw_context *brw) 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &intel->ctx; 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* BRW_NEW_VERTEX_PROGRAM and BRW_NEW_FRAGMENT_PROGRAM: 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unfortunately, we're stuck using the gl_program structs until the 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ARB_fragment_program front-end gets converted to GLSL IR. These 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * have the downside that SamplerUnits is split and only contains the 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * mappings for samplers active in that stage. 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program *vs = (struct gl_program *) brw->vertex_program; 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program *fs = (struct gl_program *) brw->fragment_program; 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers = _mesa_fls(vs->SamplersUsed | fs->SamplersUsed); 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unsigned s = 0; s < num_samplers; s++) { 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->vs.surf_offset[SURF_INDEX_VS_TEXTURE(s)] = 0; 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.surf_offset[SURF_INDEX_TEXTURE(s)] = 0; 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vs->SamplersUsed & (1 << s)) { 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned unit = vs->SamplerUnits[s]; 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_TEXTURE */ 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Texture.Unit[unit]._ReallyEnabled) { 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_texture_surface(ctx, unit, 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->vs.surf_offset, 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SURF_INDEX_VS_TEXTURE(s)); 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fs->SamplersUsed & (1 << s)) { 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned unit = fs->SamplerUnits[s]; 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_TEXTURE */ 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Texture.Unit[unit]._ReallyEnabled) { 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_texture_surface(ctx, unit, 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->wm.surf_offset, 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SURF_INDEX_TEXTURE(s)); 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_SURFACES; 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state brw_texture_surfaces = { 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = _NEW_TEXTURE, 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = BRW_NEW_BATCH | 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_NEW_VERTEX_PROGRAM | 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_NEW_FRAGMENT_PROGRAM, 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = 0 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_update_texture_surfaces, 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_upload_ubo_surfaces(struct brw_context *brw, 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader *shader, 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf_offsets) 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &brw->intel.ctx; 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!shader) 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (int i = 0; i < shader->NumUniformBlocks; i++) { 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_buffer_binding *binding; 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_buffer_object *intel_bo; 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org binding = &ctx->UniformBufferBindings[shader->UniformBlocks[i].Binding]; 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_bo = intel_buffer_object(binding->BufferObject); 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo = intel_bufferobj_buffer(intel, intel_bo, INTEL_READ); 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Because behavior for referencing outside of the binding's size in the 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBindBufferRange case is undefined, we can just bind the whole buffer 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBindBufferBase wants and be a correct implementation. 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int size = bo->size - binding->Offset; 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size = ALIGN(size, 16) / 16; /* The interface takes a number of vec4s */ 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.create_constant_surface(brw, bo, binding->Offset, 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size, 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &surf_offsets[i]); 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (shader->NumUniformBlocks) 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_SURFACES; 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_upload_wm_ubo_surfaces(struct brw_context *brw) 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &brw->intel.ctx; 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_PROGRAM */ 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *prog = ctx->Shader._CurrentFragmentProgram; 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!prog) 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_FRAGMENT], 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &brw->wm.surf_offset[SURF_INDEX_WM_UBO(0)]); 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state brw_wm_ubo_surfaces = { 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = (_NEW_PROGRAM | 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_BUFFER_OBJECT), 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = BRW_NEW_BATCH, 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = 0, 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_upload_wm_ubo_surfaces, 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Constructs the binding table for the WM surface state, which maps unit 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * numbers to surface state objects. 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_upload_wm_binding_table(struct brw_context *brw) 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *bind; 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Might want to calculate nr_surfaces first, to avoid taking up so much 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * space for the binding table. 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bind = brw_state_batch(brw, AUB_TRACE_BINDING_TABLE, 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(uint32_t) * BRW_MAX_WM_SURFACES, 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32, &brw->wm.bind_bo_offset); 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* BRW_NEW_SURFACES */ 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < BRW_MAX_WM_SURFACES; i++) { 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bind[i] = brw->wm.surf_offset[i]; 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->state.dirty.brw |= BRW_NEW_PS_BINDING_TABLE; 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct brw_tracked_state brw_wm_binding_table = { 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .dirty = { 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .mesa = 0, 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .brw = (BRW_NEW_BATCH | 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_NEW_SURFACES), 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .cache = 0 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .emit = brw_upload_wm_binding_table, 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen4_init_vtable_surface_functions(struct brw_context *brw) 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_texture_surface = brw_update_texture_surface; 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_renderbuffer_surface = brw_update_renderbuffer_surface; 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.update_null_renderbuffer_surface = 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw_update_null_renderbuffer_surface; 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel->vtbl.create_constant_surface = brw_create_constant_surface; 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1457