brw_wm_surface_state.c revision 85e8e9e000732908b259a7e2cbc1724a1be2d447
1562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* 2562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project Copyright (C) Intel Corp. 2006. All Rights Reserved. 3562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to 4562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project develop this 3D driver. 5562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project Permission is hereby granted, free of charge, to any person obtaining 7562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project a copy of this software and associated documentation files (the 8562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "Software"), to deal in the Software without restriction, including 9562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project without limitation the rights to use, copy, modify, merge, publish, 10562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project distribute, sublicense, and/or sell copies of the Software, and to 11562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project permit persons to whom the Software is furnished to do so, subject to 12562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project the following conditions: 13562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 14562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project The above copyright notice and this permission notice (including the 15562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project next paragraph) shall be included in all copies or substantial 16562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project portions of the Software. 17562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 18562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 26562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project **********************************************************************/ 27562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* 28562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Authors: 29562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Keith Whitwell <keith@tungstengraphics.com> 30562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 31562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 32562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 33562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "main/mtypes.h" 34562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "main/samplerobj.h" 35562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "program/prog_parameter.h" 36562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 37562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "intel_mipmap_tree.h" 38562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "intel_batchbuffer.h" 39562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "intel_tex.h" 40562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "intel_fbo.h" 41562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "intel_buffer_objects.h" 42562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 43562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "brw_context.h" 44562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "brw_state.h" 45562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "brw_defines.h" 46562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "brw_wm.h" 47562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 48562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectGLuint 49562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projecttranslate_tex_target(GLenum target) 50562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 51562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch (target) { 52562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_1D: 53562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_1D_ARRAY_EXT: 54562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_1D; 55562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 56562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_RECTANGLE_NV: 57562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_2D; 58562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 59562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_2D: 60562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_2D_ARRAY_EXT: 61562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_EXTERNAL_OES: 62562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_2D; 63562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 64562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_3D: 65562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_3D; 66562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 67562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case GL_TEXTURE_CUBE_MAP: 68562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_CUBE; 69562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 70562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project default: 71562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(0); 72562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return 0; 73562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 74562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 75562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 76562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstruct surface_format_info { 77562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool exists; 78562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int sampling; 79562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int filtering; 80562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int shadow_compare; 81562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int chroma_key; 82562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int render_target; 83562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int alpha_blend; 84562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int input_vb; 85562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int streamed_output_vb; 86562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int color_processing; 87562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 88562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 89562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* This macro allows us to write the table almost as it appears in the PRM, 90562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * while restructuring it to turn it into the C code we want. 91562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 92562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \ 93562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color }, 94562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 95562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#define Y 0 96562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#define x 999 97562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 98562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * This is the table of support for surface (texture, renderbuffer, and vertex 99562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * buffer, but not depthbuffer) formats across the various hardware generations. 100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * The table is formatted to match the documentation, except that the docs have 102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * this ridiculous mapping of Y[*+~^#&] for "supported on DevWhatever". To put 103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * it in our table, here's the mapping: 104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Y*: 45 106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Y+: 45 (g45/gm45) 107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Y~: 50 (gen5) 108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Y^: 60 (gen6) 109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Y#: 70 (gen7) 110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * See page 88 of the Sandybridge PRM VOL4_Part1 PDF. 112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct surface_format_info surface_formats[] = { 114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* smpl filt shad CK RT AB VB SO color */ 115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_FLOAT) 116562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_SINT) 117562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_UINT) 118562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_UNORM) 119562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SNORM) 120562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64_FLOAT) 121562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT) 122562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SSCALED) 123562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_USCALED) 124562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_FLOAT) 125562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_SINT) 126562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_UINT) 127562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_UNORM) 128562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SNORM) 129562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SSCALED) 130562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_USCALED) 131562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 45, Y, x, 60, BRW_SURFACEFORMAT_R16G16B16A16_UNORM) 132562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SNORM) 133562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SINT) 134562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_UINT) 135562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_FLOAT) 136562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32_FLOAT) 137562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_SINT) 138562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_UINT) 139562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS) 140562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT) 141562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32A32_FLOAT) 142562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_UNORM) 143562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SNORM) 144562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64_FLOAT) 145562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_UNORM) 146562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT) 147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32X32_FLOAT) 148562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32X32_FLOAT) 149562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32X32_FLOAT) 150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SSCALED) 151562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_USCALED) 152562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SSCALED) 153562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_USCALED) 154562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_B8G8R8A8_UNORM) 155562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB) 156562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* smpl filt shad CK RT AB VB SO color */ 157562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM) 158562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB) 159562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10A2_UINT) 160562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, Y, Y, x, x, BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM) 161562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM) 162562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB) 163562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SNORM) 164562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SINT) 165562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_UINT) 166562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 45, Y, x, x, BRW_SURFACEFORMAT_R16G16_UNORM) 167562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16_SNORM) 168562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SINT) 169562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_UINT) 170562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16_FLOAT) 171562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM) 172562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB) 173562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R11G11B10_FLOAT) 174562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_SINT) 175562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_UINT) 176562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32_FLOAT) 177562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS) 178562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT) 179562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_UNORM) 180562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I24X8_UNORM) 181562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L24X8_UNORM) 182562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A24X8_UNORM) 183562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32_FLOAT) 184562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32_FLOAT) 185562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32_FLOAT) 186562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, 60, BRW_SURFACEFORMAT_B8G8R8X8_UNORM) 187562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB) 188562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM) 189562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB) 190562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP) 191562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10X2_UNORM) 192562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_FLOAT) 193562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_UNORM) 194562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SNORM) 195562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* smpl filt shad CK RT AB VB SO color */ 196562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10X2_USCALED) 197562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SSCALED) 198562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_USCALED) 199562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SSCALED) 200562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_USCALED) 201562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SSCALED) 202562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_USCALED) 203562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM) 204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB) 205562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM) 206562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB) 207562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM) 208562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB) 209562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8G8_UNORM) 210562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8_SNORM) 211562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SINT) 212562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_UINT) 213562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, Y, 45, Y, x, 70, BRW_SURFACEFORMAT_R16_UNORM) 214562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16_SNORM) 215562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_SINT) 216562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_UINT) 217562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16_FLOAT) 218562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_UNORM) 219562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_UNORM) 220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_UNORM) 221562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM) 222562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_FLOAT) 223562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_FLOAT) 224562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_FLOAT) 225562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM_SRGB) 226562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM) 227562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM) 228562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB) 229562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SSCALED) 230562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_USCALED) 231562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* smpl filt shad CK RT AB VB SO color */ 232562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_SSCALED) 233562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_USCALED) 234562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, 45, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8_UNORM) 235562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8_SNORM) 236562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_SINT) 237562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_UINT) 238562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_A8_UNORM) 239562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I8_UNORM) 240562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM) 241562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P4A4_UNORM) 242562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A4P4_UNORM) 243562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_SSCALED) 244562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_USCALED) 245562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM_SRGB) 246562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB_SRGB) 247562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R1_UINT) 248562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_NORMAL) 249562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUVY) 250562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM) 251562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM) 252562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM) 253562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_UNORM) 254562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_UNORM) 255562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM_SRGB) 256562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM_SRGB) 257562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM_SRGB) 258562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_MONO8) 259562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUV) 260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPY) 261562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB) 262562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* smpl filt shad CK RT AB VB SO color */ 263562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_FXT1) 264562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_UNORM) 265562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SNORM) 266562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SSCALED) 267562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_USCALED) 268562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64A64_FLOAT) 269562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64_FLOAT) 270562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_SNORM) 271562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_SNORM) 272562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_UNORM) 273562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SNORM) 274562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SSCALED) 275562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_USCALED) 276562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 277562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#undef x 278562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#undef Y 279562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 280562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectuint32_t 281562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_format_for_mesa_format(gl_format mesa_format) 282562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 283562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* This table is ordered according to the enum ordering in formats.h. We do 284562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * expect that enum to be extended without our explicit initialization 285562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * staying in sync, so we initialize to 0 even though 286562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to also be 0. 287562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 288562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project static const uint32_t table[MESA_FORMAT_COUNT] = 289562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 290562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA8888] = 0, 291562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_UNORM, 292562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB8888] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM, 293562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB8888_REV] = 0, 294562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBX8888] = 0, 295562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBX8888_REV] = BRW_SURFACEFORMAT_R8G8B8X8_UNORM, 296562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_XRGB8888] = BRW_SURFACEFORMAT_B8G8R8X8_UNORM, 297562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_XRGB8888_REV] = 0, 298562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB888] = 0, 299562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_BGR888] = 0, 300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB565] = BRW_SURFACEFORMAT_B5G6R5_UNORM, 301562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB565_REV] = 0, 302562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB4444] = BRW_SURFACEFORMAT_B4G4R4A4_UNORM, 303562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB4444_REV] = 0, 304562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA5551] = 0, 305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB1555] = BRW_SURFACEFORMAT_B5G5R5A1_UNORM, 306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB1555_REV] = 0, 307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_AL44] = 0, 308562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_AL88] = BRW_SURFACEFORMAT_L8A8_UNORM, 309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_AL88_REV] = 0, 310562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_AL1616] = BRW_SURFACEFORMAT_L16A16_UNORM, 311562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_AL1616_REV] = 0, 312562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB332] = 0, 313562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_A8] = BRW_SURFACEFORMAT_A8_UNORM, 314562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_A16] = BRW_SURFACEFORMAT_A16_UNORM, 315562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_L8] = BRW_SURFACEFORMAT_L8_UNORM, 316562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_L16] = BRW_SURFACEFORMAT_L16_UNORM, 317562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_I8] = BRW_SURFACEFORMAT_I8_UNORM, 318562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_I16] = BRW_SURFACEFORMAT_I16_UNORM, 319562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_YCBCR_REV] = BRW_SURFACEFORMAT_YCRCB_NORMAL, 320562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_YCBCR] = BRW_SURFACEFORMAT_YCRCB_SWAPUVY, 321562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R8] = BRW_SURFACEFORMAT_R8_UNORM, 322562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_GR88] = BRW_SURFACEFORMAT_R8G8_UNORM, 323562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG88] = 0, 324562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R16] = BRW_SURFACEFORMAT_R16_UNORM, 325562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG1616] = BRW_SURFACEFORMAT_R16G16_UNORM, 326562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG1616_REV] = 0, 327562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ARGB2101010] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM, 328562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ABGR2101010_UINT] = BRW_SURFACEFORMAT_R10G10B10A2_UINT, 329562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z24_S8] = 0, 330562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_S8_Z24] = 0, 331562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z16] = 0, 332562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_X8_Z24] = 0, 333562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z24_X8] = 0, 334562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z32] = 0, 335562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_S8] = 0, 336562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 337562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGB8] = 0, 338562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGBA8] = 0, 339562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SARGB8] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, 340562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SL8] = BRW_SURFACEFORMAT_L8_UNORM_SRGB, 341562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SLA8] = BRW_SURFACEFORMAT_L8A8_UNORM_SRGB, 342562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB_SRGB, 343562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM_SRGB, 344562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM_SRGB, 345562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SRGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM_SRGB, 346562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 347562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_FXT1] = BRW_SURFACEFORMAT_FXT1, 348562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_FXT1] = BRW_SURFACEFORMAT_FXT1, 349562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB, 350562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM, 351562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM, 352562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM, 353562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 354562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_FLOAT32] = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, 355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_FLOAT16] = BRW_SURFACEFORMAT_R16G16B16A16_FLOAT, 356562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_FLOAT32] = 0, 357562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_FLOAT16] = 0, 358562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_A32_FLOAT, 359562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_A16_FLOAT, 360562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_FLOAT32] = BRW_SURFACEFORMAT_L32_FLOAT, 361562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_FLOAT16] = BRW_SURFACEFORMAT_L16_FLOAT, 362562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_L32A32_FLOAT, 363562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_L16A16_FLOAT, 364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_FLOAT32] = BRW_SURFACEFORMAT_I32_FLOAT, 365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_FLOAT16] = BRW_SURFACEFORMAT_I16_FLOAT, 366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_FLOAT32] = BRW_SURFACEFORMAT_R32_FLOAT, 367562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_FLOAT16] = BRW_SURFACEFORMAT_R16_FLOAT, 368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_FLOAT32] = BRW_SURFACEFORMAT_R32G32_FLOAT, 369562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_FLOAT16] = BRW_SURFACEFORMAT_R16G16_FLOAT, 370562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 371562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_UINT8] = 0, 372562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_UINT16] = 0, 373562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_UINT32] = 0, 374562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_INT8] = 0, 375562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_INT16] = 0, 376562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_ALPHA_INT32] = 0, 377562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 378562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_UINT8] = 0, 379562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_UINT16] = 0, 380562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_UINT32] = 0, 381562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_INT8] = 0, 382562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_INT16] = 0, 383562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_INTENSITY_INT32] = 0, 384562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 385562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_UINT8] = 0, 386562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_UINT16] = 0, 387562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_UINT32] = 0, 388562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_INT8] = 0, 389562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_INT16] = 0, 390562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_INT32] = 0, 391562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 392562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = 0, 393562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = 0, 394562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = 0, 395562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = 0, 396562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = 0, 397562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = 0, 398562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 399562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_INT8] = BRW_SURFACEFORMAT_R8_SINT, 400562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_INT8] = BRW_SURFACEFORMAT_R8G8_SINT, 401562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_INT8] = 0, 402562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_INT8] = BRW_SURFACEFORMAT_R8G8B8A8_SINT, 403562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_INT16] = BRW_SURFACEFORMAT_R16_SINT, 404562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_INT16] = BRW_SURFACEFORMAT_R16G16_SINT, 405562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_INT16] = 0, 406562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_INT16] = BRW_SURFACEFORMAT_R16G16B16A16_SINT, 407562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_INT32] = BRW_SURFACEFORMAT_R32_SINT, 408562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_INT32] = BRW_SURFACEFORMAT_R32G32_SINT, 409562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_INT32] = BRW_SURFACEFORMAT_R32G32B32_SINT, 410562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_INT32] = BRW_SURFACEFORMAT_R32G32B32A32_SINT, 411562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 412562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_UINT8] = BRW_SURFACEFORMAT_R8_UINT, 413562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_UINT8] = BRW_SURFACEFORMAT_R8G8_UINT, 414562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_UINT8] = 0, 415562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_UINT8] = BRW_SURFACEFORMAT_R8G8B8A8_UINT, 416562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_UINT16] = BRW_SURFACEFORMAT_R16_UINT, 417562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_UINT16] = BRW_SURFACEFORMAT_R16G16_UINT, 418562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_UINT16] = 0, 419562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_UINT16] = BRW_SURFACEFORMAT_R16G16B16A16_UINT, 420562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R_UINT32] = BRW_SURFACEFORMAT_R32_UINT, 421562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_UINT32] = BRW_SURFACEFORMAT_R32G32_UINT, 422562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB_UINT32] = BRW_SURFACEFORMAT_R32G32B32_UINT, 423562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_UINT32] = BRW_SURFACEFORMAT_R32G32B32A32_UINT, 424562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 425562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_DUDV8] = BRW_SURFACEFORMAT_R8G8_SNORM, 426562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_R8] = BRW_SURFACEFORMAT_R8_SNORM, 427562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RG88_REV] = BRW_SURFACEFORMAT_R8G8_SNORM, 428562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RGBX8888] = 0, 429562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RGBA8888] = 0, 430562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_SNORM, 431562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_R16] = BRW_SURFACEFORMAT_R16_SNORM, 432562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_GR1616] = BRW_SURFACEFORMAT_R16G16_SNORM, 433562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RGB_16] = 0, 434562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_SNORM, 435562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_UNORM, 436562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 437562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_UNORM, 438562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_SNORM, 439562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_UNORM, 440562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_SNORM, 441562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 442562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_L_LATC1] = 0, 443562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_L_LATC1] = 0, 444562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_LA_LATC2] = 0, 445562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_LA_LATC2] = 0, 446562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 447562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_A8] = 0, 448562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_L8] = 0, 449562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_AL88] = 0, 450562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_I8] = 0, 451562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_A16] = 0, 452562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_L16] = 0, 453562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_AL1616] = 0, 454562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_SIGNED_I16] = 0, 455562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 456562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_RGB9_E5_FLOAT] = BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP, 457562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_R11_G11_B10_FLOAT] = BRW_SURFACEFORMAT_R11G11B10_FLOAT, 458562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 459562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z32_FLOAT] = 0, 460562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project [MESA_FORMAT_Z32_FLOAT_X24S8] = 0, 461562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }; 462562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(mesa_format < MESA_FORMAT_COUNT); 463562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return table[mesa_format]; 464562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 465562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 466562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 467562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_init_surface_formats(struct brw_context *brw) 468562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 469562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 470562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &intel->ctx; 471562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int gen; 472562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gl_format format; 473562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 474562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gen = intel->gen * 10; 475562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->is_g4x) 476562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gen += 5; 477562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 478562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (format = MESA_FORMAT_NONE + 1; format < MESA_FORMAT_COUNT; format++) { 479562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t texture, render; 480562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const struct surface_format_info *rinfo, *tinfo; 481562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool is_integer = _mesa_is_format_integer_color(format); 482562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 483562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project render = texture = brw_format_for_mesa_format(format); 484562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project tinfo = &surface_formats[texture]; 485562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 486562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* The value of BRW_SURFACEFORMAT_R32G32B32A32_FLOAT is 0, so don't skip 487562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * it. 488562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 489562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (texture == 0 && format != MESA_FORMAT_RGBA_FLOAT32) 490562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project continue; 491562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 492562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (gen >= tinfo->sampling && (gen >= tinfo->filtering || is_integer)) 493562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[format] = true; 494562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 495562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Re-map some render target formats to make them supported when they 496562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * wouldn't be using their format for texturing. 497562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 498562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch (render) { 499562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* For these formats, we just need to read/write the first 500562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * channel into R, which is to say that we just treat them as 501562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * GL_RED. 502562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 503562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case BRW_SURFACEFORMAT_I32_FLOAT: 504562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case BRW_SURFACEFORMAT_L32_FLOAT: 505562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project render = BRW_SURFACEFORMAT_R32_FLOAT; 506562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 507562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case BRW_SURFACEFORMAT_I16_FLOAT: 508562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case BRW_SURFACEFORMAT_L16_FLOAT: 509562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project render = BRW_SURFACEFORMAT_R16_FLOAT; 510562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 511562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case BRW_SURFACEFORMAT_B8G8R8X8_UNORM: 512562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* XRGB is handled as ARGB because the chips in this family 513562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * cannot render to XRGB targets. This means that we have to 514562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * mask writes to alpha (ala glColorMask) and reconfigure the 515562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * alpha blending hardware to use GL_ONE (or GL_ZERO) for 516562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is 517562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * used. 518562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 519562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project render = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; 520562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 521562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 522562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 523562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project rinfo = &surface_formats[render]; 524562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 525562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Note that GL_EXT_texture_integer says that blending doesn't occur for 526562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * integer, so we don't need hardware support for blending on it. Other 527562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * than that, GL in general requires alpha blending for render targets, 528562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * even though we don't support it for some formats. 529562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 530562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (gen >= rinfo->render_target && 531562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (gen >= rinfo->alpha_blend || is_integer)) { 532562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->render_target_format[format] = render; 533562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[format] = true; 534562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 535562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 536562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 537562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* We will check this table for FBO completeness, but the surface format 538562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * table above only covered color rendering. 539562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 540562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_S8_Z24] = true; 541562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_X8_Z24] = true; 542562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_S8] = true; 543562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_Z16] = true; 544562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT] = true; 545562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT_X24S8] = true; 546562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 547562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* We remap depth formats to a supported texturing format in 548562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * translate_tex_format(). 549562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 550562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = true; 551562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = true; 552562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT] = true; 553562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8] = true; 554562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_Z16] = true; 555562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 556562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* On hardware that lacks support for ETC1, we map ETC1 to RGBX 557562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * during glCompressedTexImage2D(). See intel_mipmap_tree::wraps_etc1. 558562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 559562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ctx->TextureFormatSupported[MESA_FORMAT_ETC1_RGB8] = true; 560562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 561562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 562562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool 563562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_render_target_supported(struct intel_context *intel, 564562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_renderbuffer *rb) 565562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 566562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct brw_context *brw = brw_context(&intel->ctx); 567562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gl_format format = rb->Format; 568562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 569562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Many integer formats are promoted to RGBA (like XRGB8888 is), which means 570562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * we would consider them renderable even though we don't have surface 571562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * support for their alpha behavior and don't have the blending unit 572562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * available to fake it like we do for XRGB8888. Force them to being 573562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * unsupported. 574562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 575562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ((rb->_BaseFormat != GL_RGBA && 576562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project rb->_BaseFormat != GL_RG && 577562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project rb->_BaseFormat != GL_RED) && _mesa_is_format_integer_color(format)) 578562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return false; 579562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 580562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Under some conditions, MSAA is not supported for formats whose width is 581562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * more than 64 bits. 582562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 583562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (rb->NumSamples > 0 && _mesa_get_format_bytes(format) > 8) { 584562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Gen6: MSAA on >64 bit formats is unsupported. */ 585562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->gen <= 6) 586562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return false; 587562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 588562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Gen7: 8x MSAA on >64 bit formats is unsupported. */ 589562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (rb->NumSamples >= 8) 590562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return false; 591562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 592562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 593562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return brw->format_supported_as_render_target[format]; 594562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 595562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 596562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectGLuint 597562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projecttranslate_tex_format(gl_format mesa_format, 598562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project GLenum internal_format, 599562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project GLenum depth_mode, 600562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project GLenum srgb_decode) 601562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 602562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (srgb_decode == GL_SKIP_DECODE_EXT) 603562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project mesa_format = _mesa_get_srgb_format_linear(mesa_format); 604562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 605562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch( mesa_format ) { 606562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 607562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_Z16: 608562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACEFORMAT_I16_UNORM; 609562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 610562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_S8_Z24: 611562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_X8_Z24: 612562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACEFORMAT_I24X8_UNORM; 613562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 614562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_Z32_FLOAT: 615562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACEFORMAT_I32_FLOAT; 616562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 617562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_Z32_FLOAT_X24S8: 618562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACEFORMAT_R32G32_FLOAT; 619562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 620562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_RGBA_FLOAT32: 621562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* The value of this BRW_SURFACEFORMAT is 0, which tricks the 622562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * assertion below. 623562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 624562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; 625562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 626562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project default: 627562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(brw_format_for_mesa_format(mesa_format) != 0); 628562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return brw_format_for_mesa_format(mesa_format); 629562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 630562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 631562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 632562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectuint32_t 633562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_get_surface_tiling_bits(uint32_t tiling) 634562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 635562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch (tiling) { 636562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case I915_TILING_X: 637562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_TILED; 638562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case I915_TILING_Y: 639562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y; 640562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project default: 641562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return 0; 642562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 643562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 644562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 645562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 646562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectuint32_t 647562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_get_surface_num_multisamples(unsigned num_samples) 648562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 649562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (num_samples > 1) 650562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_MULTISAMPLECOUNT_4; 651562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 652562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return BRW_SURFACE_MULTISAMPLECOUNT_1; 653562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 654562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 655562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 656562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 657562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_buffer_texture_surface(struct gl_context *ctx, 658562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned unit, 659562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *binding_table, 660562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned surf_index) 661562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 662562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct brw_context *brw = brw_context(ctx); 663562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 664562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current; 665562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf; 666562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_buffer_object *intel_obj = 667562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_buffer_object(tObj->BufferObject); 668562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo *bo = intel_obj ? intel_obj->buffer : NULL; 669562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gl_format format = tObj->_BufferObjectFormat; 670562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t brw_format = brw_format_for_mesa_format(format); 671562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int texel_size = _mesa_get_format_bytes(format); 672562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 673562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (brw_format == 0 && format != MESA_FORMAT_RGBA_FLOAT32) { 674562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _mesa_problem(NULL, "bad format %s for texture buffer\n", 675562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _mesa_get_format_name(format)); 676562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 677562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 678562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 679562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6 * 4, 32, &binding_table[surf_index]); 680562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 681562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 682562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (brw_format_for_mesa_format(format) << BRW_SURFACE_FORMAT_SHIFT)); 683562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 684562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->gen >= 6) 685562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= BRW_SURFACE_RC_READ_WRITE; 686562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 687562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (bo) { 688562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = bo->offset; /* reloc */ 689562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 690562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Emit relocation to surface contents. */ 691562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 692562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project binding_table[surf_index] + 4, 693562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bo, 0, I915_GEM_DOMAIN_SAMPLER, 0); 694562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 695562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int w = intel_obj->Base.Size / texel_size; 696562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = ((w & 0x7f) << BRW_SURFACE_WIDTH_SHIFT | 697562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT); 698562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT | 699562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (texel_size - 1) << BRW_SURFACE_PITCH_SHIFT); 700562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } else { 701562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = 0; 702562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = 0; 703562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = 0; 704562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 705562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 706562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = 0; 707562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = 0; 708562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 709562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 710562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 711562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_texture_surface(struct gl_context *ctx, 712562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned unit, 713562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *binding_table, 714562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned surf_index) 715562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 716562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct brw_context *brw = brw_context(ctx); 717562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current; 718562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_texture_object *intelObj = intel_texture_object(tObj); 719562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_mipmap_tree *mt = intelObj->mt; 720562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_texture_image *firstImage = tObj->Image[0][tObj->BaseLevel]; 721562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit); 722562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf; 723562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int width, height, depth; 724562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 725562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (tObj->Target == GL_TEXTURE_BUFFER) { 726562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw_update_buffer_texture_surface(ctx, unit, binding_table, surf_index); 727562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return; 728562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 729562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 730562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_miptree_get_dimensions_for_image(firstImage, &width, &height, &depth); 731562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 732562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 733562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6 * 4, 32, &binding_table[surf_index]); 734562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 735562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT | 736562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 737562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_CUBEFACE_ENABLES | 738562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (translate_tex_format(mt->format, 739562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project firstImage->InternalFormat, 740562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project tObj->DepthMode, 741562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project sampler->sRGBDecode) << 742562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_FORMAT_SHIFT)); 743562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 744562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = intelObj->mt->region->bo->offset + intelObj->mt->offset; /* reloc */ 745562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 746562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = ((intelObj->_MaxLevel - tObj->BaseLevel) << BRW_SURFACE_LOD_SHIFT | 747562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (width - 1) << BRW_SURFACE_WIDTH_SHIFT | 748562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 749562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 750562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (brw_get_surface_tiling_bits(intelObj->mt->region->tiling) | 751562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (depth - 1) << BRW_SURFACE_DEPTH_SHIFT | 752562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ((intelObj->mt->region->pitch * intelObj->mt->cpp) - 1) << 753562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_PITCH_SHIFT); 754562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 755562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = 0; 756562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 757562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = (mt->align_h == 4) ? BRW_SURFACE_VERTICAL_ALIGN_ENABLE : 0; 758562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 759562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Emit relocation to surface contents */ 760562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 761562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project binding_table[surf_index] + 4, 762562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intelObj->mt->region->bo, 763562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intelObj->mt->offset, 764562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_SAMPLER, 0); 765562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 766562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 767562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 768562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Create the constant buffer surface. Vertex/fragment shader constants will be 769562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * read from this buffer with Data Port Read instructions/messages. 770562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 771562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 772562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_create_constant_surface(struct brw_context *brw, 773562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo *bo, 774562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t offset, 775562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int width, 776562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *out_offset) 777562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 778562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 779562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const GLint w = width - 1; 780562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf; 781562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 782562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 783562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6 * 4, 32, out_offset); 784562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 785562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 786562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 787562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_SURFACE_FORMAT_SHIFT); 788562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 789562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->gen >= 6) 790562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= BRW_SURFACE_RC_READ_WRITE; 791562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 792562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = bo->offset + offset; /* reloc */ 793562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 794562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = ((w & 0x7f) << BRW_SURFACE_WIDTH_SHIFT | 795562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT); 796562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 797562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT | 798562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (16 - 1) << BRW_SURFACE_PITCH_SHIFT); /* ignored */ 799562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 800562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = 0; 801562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = 0; 802562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 803562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Emit relocation to surface contents. Section 5.1.1 of the gen4 804562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * bspec ("Data Cache") says that the data cache does not exist as 805562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * a separate cache and is just the sampler cache. 806562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 807562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 808562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project *out_offset + 4, 809562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bo, offset, 810562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_SAMPLER, 0); 811562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 812562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 813562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 814562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Set up a binding table entry for use by stream output logic (transform 815562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * feedback). 816562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 817562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * buffer_size_minus_1 must me less than BRW_MAX_NUM_BUFFER_ENTRIES. 818562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 819562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 820562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_sol_surface(struct brw_context *brw, 821562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_buffer_object *buffer_obj, 822562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *out_offset, unsigned num_vector_components, 823562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned stride_dwords, unsigned offset_dwords) 824562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 825562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 826562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_buffer_object *intel_bo = intel_buffer_object(buffer_obj); 827562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo *bo = 828562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_bufferobj_buffer(intel, intel_bo, INTEL_WRITE_PART); 829562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32, 830562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project out_offset); 831562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t pitch_minus_1 = 4*stride_dwords - 1; 832562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t offset_bytes = 4 * offset_dwords; 833562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project size_t size_dwords = buffer_obj->Size / 4; 834562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t buffer_size_minus_1, width, height, depth, surface_format; 835562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 836562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* FIXME: can we rely on core Mesa to ensure that the buffer isn't 837562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * too big to map using a single binding table entry? 838562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 839562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert((size_dwords - offset_dwords) / stride_dwords 840562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project <= BRW_MAX_NUM_BUFFER_ENTRIES); 841562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 842562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (size_dwords > offset_dwords + num_vector_components) { 843562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* There is room for at least 1 transform feedback output in the buffer. 844562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Compute the number of additional transform feedback outputs the 845562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * buffer has room for. 846562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 847562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project buffer_size_minus_1 = 848562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (size_dwords - offset_dwords - num_vector_components) / stride_dwords; 849562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } else { 850562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* There isn't even room for a single transform feedback output in the 851562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * buffer. We can't configure the binding table entry to prevent output 852562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * entirely; we'll have to rely on the geometry shader to detect 853562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * overflow. But to minimize the damage in case of a bug, set up the 854562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * binding table entry to just allow a single output. 855562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 856562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project buffer_size_minus_1 = 0; 857562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 858562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project width = buffer_size_minus_1 & 0x7f; 859562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project height = (buffer_size_minus_1 & 0xfff80) >> 7; 860562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project depth = (buffer_size_minus_1 & 0x7f00000) >> 20; 861562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 862562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch (num_vector_components) { 863562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case 1: 864562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format = BRW_SURFACEFORMAT_R32_FLOAT; 865562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 866562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case 2: 867562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format = BRW_SURFACEFORMAT_R32G32_FLOAT; 868562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 869562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case 3: 870562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format = BRW_SURFACEFORMAT_R32G32B32_FLOAT; 871562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 872562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case 4: 873562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; 874562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 875562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project default: 876562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(!"Invalid vector size for transform feedback output"); 877562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format = BRW_SURFACEFORMAT_R32_FLOAT; 878562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 879562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 880562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 881562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | 882562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | 883562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_format << BRW_SURFACE_FORMAT_SHIFT | 884562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACE_RC_READ_WRITE; 885562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = bo->offset + offset_bytes; /* reloc */ 886562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = (width << BRW_SURFACE_WIDTH_SHIFT | 887562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project height << BRW_SURFACE_HEIGHT_SHIFT); 888562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (depth << BRW_SURFACE_DEPTH_SHIFT | 889562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project pitch_minus_1 << BRW_SURFACE_PITCH_SHIFT); 890562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = 0; 891562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = 0; 892562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 893562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Emit relocation to surface contents. */ 894562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 895562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project *out_offset + 4, 896562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bo, offset_bytes, 897562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER); 898562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 899562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 900562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* Creates a new WM constant buffer reflecting the current fragment program's 901562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * constants, if needed by the fragment program. 902562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 903562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Otherwise, constants go through the CURBEs using the brw_constant_buffer 904562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * state atom. 905562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 906562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 907562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_upload_wm_pull_constants(struct brw_context *brw) 908562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 909562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &brw->intel.ctx; 910562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 911562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* BRW_NEW_FRAGMENT_PROGRAM */ 912562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct brw_fragment_program *fp = 913562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (struct brw_fragment_program *) brw->fragment_program; 914562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_program_parameter_list *params = fp->program.Base.Parameters; 915562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const int size = brw->wm.prog_data->nr_pull_params * sizeof(float); 916562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const int surf_index = SURF_INDEX_FRAG_CONST_BUFFER; 917562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project float *constants; 918562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned int i; 919562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 920562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _mesa_load_state_parameters(ctx, params); 921562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 922562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* CACHE_NEW_WM_PROG */ 923562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (brw->wm.prog_data->nr_pull_params == 0) { 924562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (brw->wm.const_bo) { 925562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_unreference(brw->wm.const_bo); 926562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.const_bo = NULL; 927562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.surf_offset[surf_index] = 0; 928562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_SURFACES; 929562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 930562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return; 931562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 932562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 933562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_unreference(brw->wm.const_bo); 934562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.const_bo = drm_intel_bo_alloc(intel->bufmgr, "WM const bo", 935562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project size, 64); 936562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 937562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_PROGRAM_CONSTANTS */ 938562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_gem_bo_map_gtt(brw->wm.const_bo); 939562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project constants = brw->wm.const_bo->virtual; 940562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (i = 0; i < brw->wm.prog_data->nr_pull_params; i++) { 941562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project constants[i] = *brw->wm.prog_data->pull_param[i]; 942562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 943562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_gem_bo_unmap_gtt(brw->wm.const_bo); 944562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 945562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.create_constant_surface(brw, brw->wm.const_bo, 0, 946562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project params->NumParameters, 947562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project &brw->wm.surf_offset[surf_index]); 948562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 949562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_SURFACES; 950562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 951562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 952562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state brw_wm_pull_constants = { 953562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 954562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = (_NEW_PROGRAM_CONSTANTS), 955562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = (BRW_NEW_BATCH | BRW_NEW_FRAGMENT_PROGRAM), 956562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = CACHE_NEW_WM_PROG, 957562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 958562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_upload_wm_pull_constants, 959562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 960562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 961562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 962562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_null_renderbuffer_surface(struct brw_context *brw, unsigned int unit) 963562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 964562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* From the Sandy bridge PRM, Vol4 Part1 p71 (Surface Type: Programming 965562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Notes): 966562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 967562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * A null surface will be used in instances where an actual surface is 968562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * not bound. When a write message is generated to a null surface, no 969562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * actual surface is written to. When a read message (including any 970562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * sampling engine message) is generated to a null surface, the result 971562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * is all zeros. Note that a null surface type is allowed to be used 972562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * with all messages, even if it is not specificially indicated as 973562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * supported. All of the remaining fields in surface state are ignored 974562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * for null surfaces, with the following exceptions: 975562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 976562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * - [DevSNB+]: Width, Height, Depth, and LOD fields must match the 977562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * depth buffer’s corresponding state for all render target surfaces, 978562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * including null. 979562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 980562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * - Surface Format must be R8G8B8A8_UNORM. 981562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 982562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 983562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &intel->ctx; 984562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf; 985562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned surface_type = BRW_SURFACE_NULL; 986562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo *bo = NULL; 987562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned pitch_minus_1 = 0; 988562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t multisampling_state = 0; 989562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 990562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_BUFFERS */ 991562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const struct gl_framebuffer *fb = ctx->DrawBuffer; 992562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 993562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 994562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6 * 4, 32, &brw->wm.surf_offset[unit]); 995562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 996562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (fb->Visual.samples > 1) { 997562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* On Gen6, null render targets seem to cause GPU hangs when 998562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * multisampling. So work around this problem by rendering into dummy 999562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * color buffer. 1000562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 1001562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * To decrease the amount of memory needed by the workaround buffer, we 1002562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * set its pitch to 128 bytes (the width of a Y tile). This means that 1003562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * the amount of memory needed for the workaround buffer is 1004562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * (width_in_tiles + height_in_tiles - 1) tiles. 1005562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 1006562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Note that since the workaround buffer will be interpreted by the 1007562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * hardware as an interleaved multisampled buffer, we need to compute 1008562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * width_in_tiles and height_in_tiles by dividing the width and height 1009562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * by 16 rather than the normal Y-tile size of 32. 1010562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1011562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned width_in_tiles = ALIGN(fb->Width, 16) / 16; 1012562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned height_in_tiles = ALIGN(fb->Height, 16) / 16; 1013562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned size_needed = (width_in_tiles + height_in_tiles - 1) * 4096; 1014562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw_get_scratch_bo(intel, &brw->wm.multisampled_null_render_target_bo, 1015562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project size_needed); 1016562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bo = brw->wm.multisampled_null_render_target_bo; 1017562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surface_type = BRW_SURFACE_2D; 1018562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project pitch_minus_1 = 127; 1019562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project multisampling_state = 1020562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw_get_surface_num_multisamples(fb->Visual.samples); 1021562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1022562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1023562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = (surface_type << BRW_SURFACE_TYPE_SHIFT | 1024562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_SURFACEFORMAT_B8G8R8A8_UNORM << BRW_SURFACE_FORMAT_SHIFT); 1025562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->gen < 6) { 1026562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= (1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT | 1027562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT | 1028562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT | 1029562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT); 1030562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1031562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = bo ? bo->offset : 0; 1032562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = ((fb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | 1033562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (fb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 1034562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1035562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* From Sandy bridge PRM, Vol4 Part1 p82 (Tiled Surface: Programming 1036562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Notes): 1037562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 1038562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * If Surface Type is SURFTYPE_NULL, this field must be TRUE 1039562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1040562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y | 1041562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project pitch_minus_1 << BRW_SURFACE_PITCH_SHIFT); 1042562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = multisampling_state; 1043562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = 0; 1044562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1045562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (bo) { 1046562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 1047562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.surf_offset[unit] + 4, 1048562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bo, 0, 1049562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER); 1050562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1051562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1052562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1053562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 1054562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Sets up a surface state structure to point at the given region. 1055562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * While it is only used for the front/back buffer currently, it should be 1056562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * usable for further buffers when doing ARB_draw_buffer support. 1057562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1058562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 1059562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_renderbuffer_surface(struct brw_context *brw, 1060562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_renderbuffer *rb, 1061562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned int unit) 1062562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1063562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 1064562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &intel->ctx; 1065562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_renderbuffer *irb = intel_renderbuffer(rb); 1066562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_mipmap_tree *mt = irb->mt; 1067562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_region *region; 1068562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf; 1069562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t tile_x, tile_y; 1070562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t format = 0; 1071562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project gl_format rb_format = intel_rb_format(irb); 1072562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1073562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (irb->tex_image && !brw->has_surface_tile_offset) { 1074562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y); 1075562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1076562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (tile_x != 0 || tile_y != 0) { 1077562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Original gen4 hardware couldn't draw to a non-tile-aligned 1078562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * destination in a miptree unless you actually setup your renderbuffer 1079562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * as a miptree and used the fragile lod/array_index/etc. controls to 1080562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * select the image. So, instead, we just make a new single-level 1081562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * miptree and render into that. 1082562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1083562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = intel_context(ctx); 1084562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_texture_image *intel_image = 1085562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_texture_image(irb->tex_image); 1086562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_mipmap_tree *new_mt; 1087562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int width, height, depth; 1088562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1089562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_miptree_get_dimensions_for_image(irb->tex_image, &width, &height, &depth); 1090562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1091562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project new_mt = intel_miptree_create(intel, irb->tex_image->TexObject->Target, 1092562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_image->base.Base.TexFormat, 1093562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_image->base.Base.Level, 1094562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_image->base.Base.Level, 1095562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project width, height, depth, 1096562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true, 1097562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 0 /* num_samples */, 1098562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project INTEL_MSAA_LAYOUT_NONE); 1099562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_miptree_copy_teximage(intel, intel_image, new_mt); 1101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_miptree_reference(&irb->mt, intel_image->mt); 1102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_renderbuffer_set_draw_offset(irb); 1103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_miptree_release(&new_mt); 1104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project mt = irb->mt; 1106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project region = irb->mt->region; 1110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 1112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6 * 4, 32, &brw->wm.surf_offset[unit]); 1113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project switch (rb_format) { 1115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project case MESA_FORMAT_SARGB8: 1116562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_BUFFERS 1117562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * 1118562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB surfaces to the 1119562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * blend/update as sRGB. 1120562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1121562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (ctx->Color.sRGBEnabled) 1122562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project format = brw_format_for_mesa_format(rb_format); 1123562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 1124562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; 1125562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 1126562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project default: 1127562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project format = brw->render_target_format[rb_format]; 1128562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (unlikely(!brw->format_supported_as_render_target[rb_format])) { 1129562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n", 1130562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project __FUNCTION__, _mesa_get_format_name(rb_format)); 1131562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1132562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 1133562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1134562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1135562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT | 1136562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project format << BRW_SURFACE_FORMAT_SHIFT); 1137562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1138562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* reloc */ 1139562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] = (intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y) + 1140562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project region->bo->offset); 1141562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1142562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[2] = ((rb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | 1143562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (rb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); 1144562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1145562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[3] = (brw_get_surface_tiling_bits(region->tiling) | 1146562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ((region->pitch * region->cpp) - 1) << BRW_SURFACE_PITCH_SHIFT); 1147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1148562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[4] = brw_get_surface_num_multisamples(mt->num_samples); 1149562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0)); 1151562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Note that the low bits of these fields are missing, so 1152562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * there's the possibility of getting in trouble. 1153562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1154562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(tile_x % 4 == 0); 1155562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert(tile_y % 2 == 0); 1156562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[5] = ((tile_x / 4) << BRW_SURFACE_X_OFFSET_SHIFT | 1157562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (tile_y / 2) << BRW_SURFACE_Y_OFFSET_SHIFT | 1158562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (mt->align_h == 4 ? BRW_SURFACE_VERTICAL_ALIGN_ENABLE : 0)); 1159562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1160562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel->gen < 6) { 1161562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_COLOR */ 1162562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!ctx->Color.ColorLogicOpEnabled && 1163562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project (ctx->Color.BlendEnabled & (1 << unit))) 1164562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= BRW_SURFACE_BLEND_ENABLED; 1165562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1166562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!ctx->Color.ColorMask[unit][0]) 1167562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT; 1168562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!ctx->Color.ColorMask[unit][1]) 1169562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT; 1170562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!ctx->Color.ColorMask[unit][2]) 1171562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT; 1172562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1173562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* As mentioned above, disable writes to the alpha component when the 1174562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * renderbuffer is XRGB. 1175562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1176562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (ctx->DrawBuffer->Visual.alphaBits == 0 || 1177562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project !ctx->Color.ColorMask[unit][3]) { 1178562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT; 1179562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1180562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1181562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1182562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo_emit_reloc(brw->intel.batch.bo, 1183562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.surf_offset[unit] + 4, 1184562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project region->bo, 1185562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project surf[1] - region->bo->offset, 1186562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_RENDER, 1187562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project I915_GEM_DOMAIN_RENDER); 1188562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1189562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1190562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 1191562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Construct SURFACE_STATE objects for renderbuffers/draw buffers. 1192562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1193562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 1194562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_renderbuffer_surfaces(struct brw_context *brw) 1195562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1196562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 1197562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &brw->intel.ctx; 1198562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project GLuint i; 1199562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1200562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_BUFFERS | _NEW_COLOR */ 1201562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Update surfaces for drawing buffers */ 1202562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { 1203562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { 1204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { 1205562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_renderbuffer_surface(brw, ctx->DrawBuffer->_ColorDrawBuffers[i], i); 1206562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } else { 1207562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_null_renderbuffer_surface(brw, i); 1208562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1209562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1210562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } else { 1211562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_null_renderbuffer_surface(brw, 0); 1212562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1213562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_SURFACES; 1214562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1215562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1216562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state brw_renderbuffer_surfaces = { 1217562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 1218562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = (_NEW_COLOR | 1219562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _NEW_BUFFERS), 1220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = BRW_NEW_BATCH, 1221562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = 0 1222562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 1223562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_update_renderbuffer_surfaces, 1224562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 1225562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1226562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state gen6_renderbuffer_surfaces = { 1227562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 1228562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = _NEW_BUFFERS, 1229562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = BRW_NEW_BATCH, 1230562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = 0 1231562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 1232562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_update_renderbuffer_surfaces, 1233562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 1234562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1235562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 1236562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Construct SURFACE_STATE objects for enabled textures. 1237562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1238562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 1239562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_update_texture_surfaces(struct brw_context *brw) 1240562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1241562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 1242562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &intel->ctx; 1243562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1244562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* BRW_NEW_VERTEX_PROGRAM and BRW_NEW_FRAGMENT_PROGRAM: 1245562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Unfortunately, we're stuck using the gl_program structs until the 1246562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * ARB_fragment_program front-end gets converted to GLSL IR. These 1247562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * have the downside that SamplerUnits is split and only contains the 1248562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * mappings for samplers active in that stage. 1249562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1250562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_program *vs = (struct gl_program *) brw->vertex_program; 1251562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_program *fs = (struct gl_program *) brw->fragment_program; 1252562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1253562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unsigned num_samplers = _mesa_bitcount(vs->SamplersUsed | fs->SamplersUsed); 1254562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1255562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (unsigned s = 0; s < num_samplers; s++) { 1256562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->vs.surf_offset[SURF_INDEX_VS_TEXTURE(s)] = 0; 1257562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.surf_offset[SURF_INDEX_TEXTURE(s)] = 0; 1258562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1259562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (vs->SamplersUsed & (1 << s)) { 1260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const unsigned unit = vs->SamplerUnits[s]; 1261562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1262562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_TEXTURE */ 1263562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (ctx->Texture.Unit[unit]._ReallyEnabled) { 1264562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_texture_surface(ctx, unit, 1265562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->vs.surf_offset, 1266562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SURF_INDEX_VS_TEXTURE(s)); 1267562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1268562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1269562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1270562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (fs->SamplersUsed & (1 << s)) { 1271562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const unsigned unit = fs->SamplerUnits[s]; 1272562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1273562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_TEXTURE */ 1274562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (ctx->Texture.Unit[unit]._ReallyEnabled) { 1275562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_texture_surface(ctx, unit, 1276562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->wm.surf_offset, 1277562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project SURF_INDEX_TEXTURE(s)); 1278562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1279562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1280562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1281562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1282562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_SURFACES; 1283562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1284562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1285562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state brw_texture_surfaces = { 1286562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 1287562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = _NEW_TEXTURE, 1288562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = BRW_NEW_BATCH | 1289562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_NEW_VERTEX_PROGRAM | 1290562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_NEW_FRAGMENT_PROGRAM, 1291562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = 0 1292562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 1293562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_update_texture_surfaces, 1294562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 1295562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1296562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 1297562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_upload_ubo_surfaces(struct brw_context *brw, 1298562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_shader *shader, 1299562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *surf_offsets) 1300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1301562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &brw->intel.ctx; 1302562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 1303562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1304562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!shader) 1305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return; 1306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (int i = 0; i < shader->NumUniformBlocks; i++) { 1308562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_uniform_buffer_binding *binding; 1309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_buffer_object *intel_bo; 1310562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1311562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project binding = &ctx->UniformBufferBindings[shader->UniformBlocks[i].Binding]; 1312562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel_bo = intel_buffer_object(binding->BufferObject); 1313562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project drm_intel_bo *bo = intel_bufferobj_buffer(intel, intel_bo, INTEL_READ); 1314562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1315562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Because behavior for referencing outside of the binding's size in the 1316562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * glBindBufferRange case is undefined, we can just bind the whole buffer 1317562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * glBindBufferBase wants and be a correct implementation. 1318562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1319562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int size = bo->size - binding->Offset; 1320562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project size = ALIGN(size, 16) / 16; /* The interface takes a number of vec4s */ 1321562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1322562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.create_constant_surface(brw, bo, binding->Offset, 1323562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project size, 1324562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project &surf_offsets[i]); 1325562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1326562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1327562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (shader->NumUniformBlocks) 1328562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_SURFACES; 1329562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1330562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1331562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 1332562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_upload_wm_ubo_surfaces(struct brw_context *brw) 1333562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1334562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_context *ctx = &brw->intel.ctx; 1335562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* _NEW_PROGRAM */ 1336562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct gl_shader_program *prog = ctx->Shader._CurrentFragmentProgram; 1337562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1338562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if (!prog) 1339562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return; 1340562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1341562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw_upload_ubo_surfaces(brw, prog->_LinkedShaders[MESA_SHADER_FRAGMENT], 1342562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project &brw->wm.surf_offset[SURF_INDEX_WM_UBO(0)]); 1343562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1344562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1345562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state brw_wm_ubo_surfaces = { 1346562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 1347562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = (_NEW_PROGRAM | 1348562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project _NEW_BUFFER_OBJECT), 1349562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = BRW_NEW_BATCH, 1350562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = 0, 1351562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 1352562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_upload_wm_ubo_surfaces, 1353562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 1354562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/** 1356562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * Constructs the binding table for the WM surface state, which maps unit 1357562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * numbers to surface state objects. 1358562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1359562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic void 1360562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbrw_upload_wm_binding_table(struct brw_context *brw) 1361562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1362562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project uint32_t *bind; 1363562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int i; 1364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* Might want to calculate nr_surfaces first, to avoid taking up so much 1366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * space for the binding table. 1367562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */ 1368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bind = brw_state_batch(brw, AUB_TRACE_BINDING_TABLE, 1369562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project sizeof(uint32_t) * BRW_MAX_WM_SURFACES, 1370562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 32, &brw->wm.bind_bo_offset); 1371562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1372562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* BRW_NEW_SURFACES */ 1373562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for (i = 0; i < BRW_MAX_WM_SURFACES; i++) { 1374562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bind[i] = brw->wm.surf_offset[i]; 1375562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1376562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1377562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw->state.dirty.brw |= BRW_NEW_PS_BINDING_TABLE; 1378562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1379562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1380562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst struct brw_tracked_state brw_wm_binding_table = { 1381562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .dirty = { 1382562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .mesa = 0, 1383562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .brw = (BRW_NEW_BATCH | 1384562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project BRW_NEW_SURFACES), 1385562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .cache = 0 1386562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project }, 1387562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project .emit = brw_upload_wm_binding_table, 1388562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}; 1389562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1390562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 1391562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectgen4_init_vtable_surface_functions(struct brw_context *brw) 1392562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 1393562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project struct intel_context *intel = &brw->intel; 1394562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1395562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_texture_surface = brw_update_texture_surface; 1396562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_renderbuffer_surface = brw_update_renderbuffer_surface; 1397562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.update_null_renderbuffer_surface = 1398562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project brw_update_null_renderbuffer_surface; 1399562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project intel->vtbl.create_constant_surface = brw_create_constant_surface; 1400562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1401562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project