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