nvc0_tex.c revision b2b5075e04bbe6c6462fd01711524abd80380f45
14c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller/* 24c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * Copyright 2008 Ben Skeggs 34c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * 44c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * Permission is hereby granted, free of charge, to any person obtaining a 54c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * copy of this software and associated documentation files (the "Software"), 64c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * to deal in the Software without restriction, including without limitation 74c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * the rights to use, copy, modify, merge, publish, distribute, sublicense, 84c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * and/or sell copies of the Software, and to permit persons to whom the 94c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * Software is furnished to do so, subject to the following conditions: 104c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * 114c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * The above copyright notice and this permission notice shall be included in 124c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * all copies or substantial portions of the Software. 134c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * 144c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 154c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 164c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 173d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 183d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 193d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE. 214c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller */ 224c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 235eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nvc0/nvc0_context.h" 245eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "nvc0/nvc0_resource.h" 2597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs#include "nvc0/gm107_texture.xml.h" 26fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset#include "nvc0/nvc0_compute.xml.h" 27ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs#include "nv50/g80_texture.xml.h" 28e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs#include "nv50/g80_defs.xml.h" 294c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 304c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller#include "util/u_format.h" 314c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 32e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller#define NVE4_TIC_ENTRY_INVALID 0x000fffff 33e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller#define NVE4_TSC_ENTRY_INVALID 0xfff00000 34e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 35a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline uint32_t 36733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggsnv50_tic_swizzle(const struct nvc0_format *fmt, unsigned swz, bool tex_int) 374c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 384c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller switch (swz) { 39fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_X : return fmt->tic.src_x; 40fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_Y: return fmt->tic.src_y; 41fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_Z : return fmt->tic.src_z; 42fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_W: return fmt->tic.src_w; 43fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_1: 44ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs return tex_int ? G80_TIC_SOURCE_ONE_INT : G80_TIC_SOURCE_ONE_FLOAT; 45fb523cb6ad3ffef22ab4b9cce9e53859c17c5739Marek Olšák case PIPE_SWIZZLE_0: 464c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller default: 47ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs return G80_TIC_SOURCE_ZERO; 484c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 494c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 504c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 514c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillerstruct pipe_sampler_view * 524c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillernvc0_create_sampler_view(struct pipe_context *pipe, 5336ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller struct pipe_resource *res, 544c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller const struct pipe_sampler_view *templ) 554c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 5636ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller uint32_t flags = 0; 5736ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller 5895058bdec31d3faa76be01731a26939f3039a66bIlia Mirkin if (templ->target == PIPE_TEXTURE_RECT || templ->target == PIPE_BUFFER) 5936ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller flags |= NV50_TEXVIEW_SCALED_COORDS; 6036ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller 6195058bdec31d3faa76be01731a26939f3039a66bIlia Mirkin return nvc0_create_texture_view(pipe, res, templ, flags, templ->target); 6236ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller} 6336ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller 6497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsstatic struct pipe_sampler_view * 6597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsgm107_create_texture_view(struct pipe_context *pipe, 6697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs struct pipe_resource *texture, 6797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs const struct pipe_sampler_view *templ, 6897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t flags, 6997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs enum pipe_texture_target target) 7097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs{ 7197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs const struct util_format_description *desc; 7297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs const struct nvc0_format *fmt; 7397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint64_t address; 7497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t *tic; 7597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t swz[4]; 7697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t width, height; 7797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t depth; 7897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs struct nv50_tic_entry *view; 7997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs struct nv50_miptree *mt; 8097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs bool tex_int; 8197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 8297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view = MALLOC_STRUCT(nv50_tic_entry); 8397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (!view) 8497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs return NULL; 8597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs mt = nv50_miptree(texture); 8697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 8797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->pipe = *templ; 8897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->pipe.reference.count = 1; 8997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->pipe.texture = NULL; 9097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->pipe.context = pipe; 9197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 9297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->id = -1; 9397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 9497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs pipe_resource_reference(&view->pipe.texture, texture); 9597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 9697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic = &view->tic[0]; 9797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 9897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs desc = util_format_description(view->pipe.format); 9997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tex_int = util_format_is_pure_integer(view->pipe.format); 10097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 10197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs fmt = &nvc0_format_table[view->pipe.format]; 10297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs swz[0] = nv50_tic_swizzle(fmt, view->pipe.swizzle_r, tex_int); 10397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs swz[1] = nv50_tic_swizzle(fmt, view->pipe.swizzle_g, tex_int); 10497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs swz[2] = nv50_tic_swizzle(fmt, view->pipe.swizzle_b, tex_int); 10597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs swz[3] = nv50_tic_swizzle(fmt, view->pipe.swizzle_a, tex_int); 10697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 10797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] = fmt->tic.format << GM107_TIC2_0_COMPONENTS_SIZES__SHIFT; 10897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= fmt->tic.type_r << GM107_TIC2_0_R_DATA_TYPE__SHIFT; 10997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= fmt->tic.type_g << GM107_TIC2_0_G_DATA_TYPE__SHIFT; 11097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= fmt->tic.type_b << GM107_TIC2_0_B_DATA_TYPE__SHIFT; 11197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= fmt->tic.type_a << GM107_TIC2_0_A_DATA_TYPE__SHIFT; 11297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= swz[0] << GM107_TIC2_0_X_SOURCE__SHIFT; 11397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= swz[1] << GM107_TIC2_0_Y_SOURCE__SHIFT; 11497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= swz[2] << GM107_TIC2_0_Z_SOURCE__SHIFT; 11597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[0] |= swz[3] << GM107_TIC2_0_W_SOURCE__SHIFT; 11697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 11797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs address = mt->base.address; 11897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 11997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] = GM107_TIC2_3_LOD_ANISO_QUALITY_2; 12097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] = GM107_TIC2_4_SECTOR_PROMOTION_PROMOTE_TO_2_V; 12197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR; 12297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 12397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) 12497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_SRGB_CONVERSION; 12597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 12697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (!(flags & NV50_TEXVIEW_SCALED_COORDS)) 12797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] = GM107_TIC2_5_NORMALIZED_COORDS; 12897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs else 12997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] = 0; 13097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 13197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs /* check for linear storage type */ 13297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (unlikely(!nouveau_bo_memtype(nv04_resource(texture)->bo))) { 13397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (texture->target == PIPE_BUFFER) { 13497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs assert(!(tic[5] & GM107_TIC2_5_NORMALIZED_COORDS)); 13597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs width = view->pipe.u.buf.last_element - view->pipe.u.buf.first_element; 13697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs address += 13797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs view->pipe.u.buf.first_element * desc->block.bits / 8; 13897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[2] = GM107_TIC2_2_HEADER_VERSION_ONE_D_BUFFER; 13997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] |= width >> 16; 14097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_ONE_D_BUFFER; 14197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= width & 0xffff; 14297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } else { 14397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs assert(!(mt->level[0].pitch & 0x1f)); 14497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs /* must be 2D texture without mip maps */ 14597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[2] = GM107_TIC2_2_HEADER_VERSION_PITCH; 14697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_TWO_D_NO_MIPMAP; 14797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] |= mt->level[0].pitch >> 5; 14897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= mt->base.base.width0 - 1; 14997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] |= 0 << GM107_TIC2_5_DEPTH_MINUS_ONE__SHIFT; 15097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] |= mt->base.base.height0 - 1; 15197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 15297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[1] = address; 15397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[2] |= address >> 32; 15497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[6] = 0; 15597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[7] = 0; 15697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs return &view->pipe; 15797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 15897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 15997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[2] = GM107_TIC2_2_HEADER_VERSION_BLOCKLINEAR; 16097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] |= 16197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs ((mt->level[0].tile_mode & 0x0f0) >> 4 << 3) | 16297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs ((mt->level[0].tile_mode & 0xf00) >> 8 << 6); 16397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 16497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs depth = MAX2(mt->base.base.array_size, mt->base.base.depth0); 16597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 16697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (mt->base.base.array_size > 1) { 16797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs /* there doesn't seem to be a base layer field in TIC */ 16897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs address += view->pipe.u.tex.first_layer * mt->layer_stride; 16997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs depth = view->pipe.u.tex.last_layer - view->pipe.u.tex.first_layer + 1; 17097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 17197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[1] = address; 17297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[2] |= address >> 32; 17397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 17497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs switch (target) { 17597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_1D: 17697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_ONE_D; 17797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 17897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_2D: 17997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_TWO_D; 18097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 18197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_RECT: 18297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_TWO_D; 18397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 18497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_3D: 18597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_THREE_D; 18697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 18797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_CUBE: 18897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs depth /= 6; 18997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_CUBEMAP; 19097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 19197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_1D_ARRAY: 19297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_ONE_D_ARRAY; 19397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 19497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_2D_ARRAY: 19597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_TWO_D_ARRAY; 19697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 19797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs case PIPE_TEXTURE_CUBE_ARRAY: 19897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs depth /= 6; 19997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_CUBE_ARRAY; 20097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs break; 20197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs default: 20297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs unreachable("unexpected/invalid texture target"); 20397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 20497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 20597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] |= (flags & NV50_TEXVIEW_FILTER_MSAA8) ? 20697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs GM107_TIC2_3_USE_HEADER_OPT_CONTROL : 20797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs GM107_TIC2_3_LOD_ANISO_QUALITY_HIGH | 20897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs GM107_TIC2_3_LOD_ISO_QUALITY_HIGH; 20997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 21097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (flags & NV50_TEXVIEW_ACCESS_RESOLVE) { 21197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs width = mt->base.base.width0 << mt->ms_x; 21297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs height = mt->base.base.height0 << mt->ms_y; 21397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } else { 21497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs width = mt->base.base.width0; 21597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs height = mt->base.base.height0; 21697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 21797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 21897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[4] |= width - 1; 21997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 22097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] |= (height - 1) & 0xffff; 22197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[5] |= (depth - 1) << GM107_TIC2_5_DEPTH_MINUS_ONE__SHIFT; 22297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[3] |= mt->base.base.last_level << GM107_TIC2_3_MAX_MIP_LEVEL__SHIFT; 22397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 22497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs /* sampling points: (?) */ 22597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if ((flags & NV50_TEXVIEW_ACCESS_RESOLVE) && mt->ms_x > 1) { 22697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[6] = GM107_TIC2_6_ANISO_FINE_SPREAD_MODIFIER_CONST_TWO; 22797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[6] |= GM107_TIC2_6_MAX_ANISOTROPY_2_TO_1; 22897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } else { 22997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[6] = GM107_TIC2_6_ANISO_FINE_SPREAD_FUNC_TWO; 23097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[6] |= GM107_TIC2_6_ANISO_COARSE_SPREAD_FUNC_ONE; 23197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs } 23297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 23397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[7] = (view->pipe.u.tex.last_level << 4) | view->pipe.u.tex.first_level; 23497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs tic[7] |= mt->ms_mode << GM107_TIC2_7_MULTI_SAMPLE_COUNT__SHIFT; 23597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 23697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs return &view->pipe; 23797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs} 23897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 23997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsstatic struct pipe_sampler_view * 24097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsgf100_create_texture_view(struct pipe_context *pipe, 24197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs struct pipe_resource *texture, 24297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs const struct pipe_sampler_view *templ, 24397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t flags, 24497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs enum pipe_texture_target target) 24536ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller{ 2464c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller const struct util_format_description *desc; 247733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs const struct nvc0_format *fmt; 2486d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller uint64_t address; 2494c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller uint32_t *tic; 2504c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller uint32_t swz[4]; 2514da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller uint32_t width, height; 252ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller uint32_t depth; 2534bc3b1ca487df6072aec13dbfbf724c0de9995c5Ilia Mirkin uint32_t tex_fmt; 2541f5d6fc59bd899e211c70026eb74cd2219858008Christoph Bumiller struct nv50_tic_entry *view; 25528271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller struct nv50_miptree *mt; 256cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset bool tex_int; 2574c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2581f5d6fc59bd899e211c70026eb74cd2219858008Christoph Bumiller view = MALLOC_STRUCT(nv50_tic_entry); 2594c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (!view) 2604c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller return NULL; 2616d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller mt = nv50_miptree(texture); 2624c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2634c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller view->pipe = *templ; 2644c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller view->pipe.reference.count = 1; 2654c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller view->pipe.texture = NULL; 2664c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller view->pipe.context = pipe; 2674c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2684c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller view->id = -1; 2694c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2704c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller pipe_resource_reference(&view->pipe.texture, texture); 2714c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2724c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller tic = &view->tic[0]; 2734c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 274b0698396dcc70f6c8a16090dfb1674996538db3aChristoph Bumiller desc = util_format_description(view->pipe.format); 2754c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 276733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs fmt = &nvc0_format_table[view->pipe.format]; 2774c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2789934bfe28d3c0f6551ba2cc806a7fe8e0a16ed7cChristoph Bumiller tex_int = util_format_is_pure_integer(view->pipe.format); 2794bc3b1ca487df6072aec13dbfbf724c0de9995c5Ilia Mirkin tex_fmt = fmt->tic.format & 0x3f; 280e4c968cdbbdc020afbf869d12b536c0a0dbf9de8Christoph Bumiller 281733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs swz[0] = nv50_tic_swizzle(fmt, view->pipe.swizzle_r, tex_int); 282733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs swz[1] = nv50_tic_swizzle(fmt, view->pipe.swizzle_g, tex_int); 283733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs swz[2] = nv50_tic_swizzle(fmt, view->pipe.swizzle_b, tex_int); 284733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs swz[3] = nv50_tic_swizzle(fmt, view->pipe.swizzle_a, tex_int); 2854bc3b1ca487df6072aec13dbfbf724c0de9995c5Ilia Mirkin tic[0] = (tex_fmt << G80_TIC_0_COMPONENTS_SIZES__SHIFT) | 286733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (fmt->tic.type_r << G80_TIC_0_R_DATA_TYPE__SHIFT) | 287733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (fmt->tic.type_g << G80_TIC_0_G_DATA_TYPE__SHIFT) | 288733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (fmt->tic.type_b << G80_TIC_0_B_DATA_TYPE__SHIFT) | 289733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (fmt->tic.type_a << G80_TIC_0_A_DATA_TYPE__SHIFT) | 290733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (swz[0] << G80_TIC_0_X_SOURCE__SHIFT) | 291733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (swz[1] << G80_TIC_0_Y_SOURCE__SHIFT) | 292733c8f8c7396a24ad21555853883221f5f5cd9d4Ben Skeggs (swz[2] << G80_TIC_0_Z_SOURCE__SHIFT) | 2934bc3b1ca487df6072aec13dbfbf724c0de9995c5Ilia Mirkin (swz[3] << G80_TIC_0_W_SOURCE__SHIFT) | 2944bc3b1ca487df6072aec13dbfbf724c0de9995c5Ilia Mirkin ((fmt->tic.format & 0x40) << (GK20A_TIC_0_USE_COMPONENT_SIZES_EXTENDED__SHIFT - 6)); 2954c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 2966d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller address = mt->base.address; 2974c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 298ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] = 0x10001000 | G80_TIC_2_BORDER_SOURCE_COLOR; 2994c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3004c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) 301ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_SRGB_CONVERSION; 3024c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 303f0a0d59f0fdceb756838ad6dad012852ba48362eChristoph Bumiller if (!(flags & NV50_TEXVIEW_SCALED_COORDS)) 304ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_NORMALIZED_COORDS; 305f0a0d59f0fdceb756838ad6dad012852ba48362eChristoph Bumiller 30628271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller /* check for linear storage type */ 3076d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller if (unlikely(!nouveau_bo_memtype(nv04_resource(texture)->bo))) { 30828271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller if (texture->target == PIPE_BUFFER) { 309ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs assert(!(tic[2] & G80_TIC_2_NORMALIZED_COORDS)); 3106d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller address += 31128271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller view->pipe.u.buf.first_element * desc->block.bits / 8; 312ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_LAYOUT_PITCH | G80_TIC_2_TEXTURE_TYPE_ONE_D_BUFFER; 31328271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[3] = 0; 31428271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[4] = /* width */ 31528271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller view->pipe.u.buf.last_element - view->pipe.u.buf.first_element + 1; 3166d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller tic[5] = 0; 31728271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller } else { 31828271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller /* must be 2D texture without mip maps */ 319ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_LAYOUT_PITCH | G80_TIC_2_TEXTURE_TYPE_TWO_D_NO_MIPMAP; 32028271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[3] = mt->level[0].pitch; 32128271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[4] = mt->base.base.width0; 32228271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[5] = (1 << 16) | mt->base.base.height0; 32328271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller } 32428271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[6] = 32528271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller tic[7] = 0; 3266d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller tic[1] = address; 3276d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller tic[2] |= address >> 32; 32828271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller return &view->pipe; 32928271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller } 33028271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller 3314c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller tic[2] |= 3326d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller ((mt->level[0].tile_mode & 0x0f0) << (22 - 4)) | 3336d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller ((mt->level[0].tile_mode & 0xf00) << (25 - 8)); 334ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller 335ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller depth = MAX2(mt->base.base.array_size, mt->base.base.depth0); 3364c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3378828004e674b2036c23dd6b4a26cf94b98327792Christoph Bumiller if (mt->base.base.array_size > 1) { 3384fae7da9a3a3849ca08ffc6fcbdccc6a9c065ad2Christoph Bumiller /* there doesn't seem to be a base layer field in TIC */ 3396d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller address += view->pipe.u.tex.first_layer * mt->layer_stride; 3404fae7da9a3a3849ca08ffc6fcbdccc6a9c065ad2Christoph Bumiller depth = view->pipe.u.tex.last_layer - view->pipe.u.tex.first_layer + 1; 3414fae7da9a3a3849ca08ffc6fcbdccc6a9c065ad2Christoph Bumiller } 3426d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller tic[1] = address; 3436d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller tic[2] |= address >> 32; 3444fae7da9a3a3849ca08ffc6fcbdccc6a9c065ad2Christoph Bumiller 34536ea744f58e5b436c45ed857bd92bbb472e641d5Christoph Bumiller switch (target) { 3464c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller case PIPE_TEXTURE_1D: 347ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_ONE_D; 3484c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller break; 3494c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller case PIPE_TEXTURE_2D: 350ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_TWO_D; 3514c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller break; 3524c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller case PIPE_TEXTURE_RECT: 353ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_TWO_D; 3544c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller break; 3554c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller case PIPE_TEXTURE_3D: 356ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_THREE_D; 3574c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller break; 3584c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller case PIPE_TEXTURE_CUBE: 359ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller depth /= 6; 360ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_CUBEMAP; 361ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller break; 362ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller case PIPE_TEXTURE_1D_ARRAY: 363ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_ONE_D_ARRAY; 364ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller break; 365ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller case PIPE_TEXTURE_2D_ARRAY: 366ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_TWO_D_ARRAY; 3674c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller break; 368f7599b2c32185535b4c215de0ba0454129fa523fChristoph Bumiller case PIPE_TEXTURE_CUBE_ARRAY: 369f7599b2c32185535b4c215de0ba0454129fa523fChristoph Bumiller depth /= 6; 370ff1af29dd94cc2eab83090f297a669de7f6f91e4Ben Skeggs tic[2] |= G80_TIC_2_TEXTURE_TYPE_CUBE_ARRAY; 371f7599b2c32185535b4c215de0ba0454129fa523fChristoph Bumiller break; 3724c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller default: 3733f7462b792a5bd517a1d2958d1aeb630ed253246Samuel Pitoiset unreachable("unexpected/invalid texture target"); 3744c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 3754c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3764da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[3] = (flags & NV50_TEXVIEW_FILTER_MSAA8) ? 0x20000000 : 0x00300000; 3774da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller 3784da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller if (flags & NV50_TEXVIEW_ACCESS_RESOLVE) { 3794da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller width = mt->base.base.width0 << mt->ms_x; 3804da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller height = mt->base.base.height0 << mt->ms_y; 3814da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller } else { 3824da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller width = mt->base.base.width0; 3834da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller height = mt->base.base.height0; 3844da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller } 3854c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3864da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[4] = (1 << 31) | width; 3874c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3884da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[5] = height & 0xffff; 389ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller tic[5] |= depth << 16; 3904c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller tic[5] |= mt->base.base.last_level << 28; 3914c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 3924da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller /* sampling points: (?) */ 3934da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller if (flags & NV50_TEXVIEW_ACCESS_RESOLVE) 3944da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[6] = (mt->ms_x > 1) ? 0x88000000 : 0x03000000; 3954da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller else 3964da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[6] = 0x03000000; 3974c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 398ca5deb0c355cc4a120b754a228ff5f51007fbceaChristoph Bumiller tic[7] = (view->pipe.u.tex.last_level << 4) | view->pipe.u.tex.first_level; 3994da54c91d24da891c56957f29274e7821c8254f6Christoph Bumiller tic[7] |= mt->ms_mode << 12; 400b2dcf880e8bcd61be59602f5a2d18c77a5fc60c1Christoph Bumiller 4014c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller return &view->pipe; 4024c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 4034c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 40497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsstruct pipe_sampler_view * 40597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggsnvc0_create_texture_view(struct pipe_context *pipe, 40697fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs struct pipe_resource *texture, 40797fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs const struct pipe_sampler_view *templ, 40897fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs uint32_t flags, 40997fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs enum pipe_texture_target target) 41097fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs{ 41197fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs if (nvc0_context(pipe)->screen->tic.maxwell) 41297fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs return gm107_create_texture_view(pipe, texture, templ, flags, target); 41397fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs return gf100_create_texture_view(pipe, texture, templ, flags, target); 41497fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs} 41597fc3fd559629caaac5173cd28986fe9e83ca5e9Ben Skeggs 4169444d71611b97a1f3102ba60b94ce1860a9961e9Ilia Mirkinvoid 417323c91250682ac931941047f282a613c74b1ba26Ilia Mirkinnvc0_update_tic(struct nvc0_context *nvc0, struct nv50_tic_entry *tic, 418323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin struct nv04_resource *res) 419323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin{ 420323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin uint64_t address = res->address; 421323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin if (res->base.target != PIPE_BUFFER) 422323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin return; 423323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin address += tic->pipe.u.buf.first_element * 424323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin util_format_get_blocksize(tic->pipe.format); 425323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin if (tic->tic[1] == (uint32_t)address && 426323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin (tic->tic[2] & 0xff) == address >> 32) 427323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin return; 428323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin 429323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin nvc0_screen_tic_unlock(nvc0->screen, tic); 430323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin tic->id = -1; 431323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin tic->tic[1] = address; 432323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin tic->tic[2] &= 0xffffff00; 433323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin tic->tic[2] |= address >> 32; 434323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin} 435323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin 436fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoisetbool 4374c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillernvc0_validate_tic(struct nvc0_context *nvc0, int s) 4384c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 439784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller uint32_t commands[32]; 4406d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller struct nouveau_pushbuf *push = nvc0->base.pushbuf; 44192f3642a4fe71b272b4ceb6953fbf55d1efcbeb5Christoph Bumiller struct nouveau_bo *txc = nvc0->screen->txc; 4424c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller unsigned i; 443784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller unsigned n = 0; 444cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset bool need_flush = false; 4454c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 4464c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller for (i = 0; i < nvc0->num_textures[s]; ++i) { 4471f5d6fc59bd899e211c70026eb74cd2219858008Christoph Bumiller struct nv50_tic_entry *tic = nv50_tic_entry(nvc0->textures[s][i]); 4484826cd0f6125b071530026143ffd8205d84b3d5eBen Skeggs struct nv04_resource *res; 449cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset const bool dirty = !!(nvc0->textures_dirty[s] & (1 << i)); 4504c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 4514c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (!tic) { 452784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller if (dirty) 453784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (i << 1) | 0; 4544c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller continue; 4554c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 45628271fd00dc5dd83f95b5cb890e0ab2c0ff6159dChristoph Bumiller res = nv04_resource(tic->pipe.texture); 457323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin nvc0_update_tic(nvc0, tic, res); 4584c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 4594c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (tic->id < 0) { 4604c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller tic->id = nvc0_screen_tic_alloc(nvc0->screen, tic); 4614c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 4626d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_SPACE(push, 17); 4636d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); 4646d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATAh(push, txc->offset + (tic->id * 32)); 4656d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (push, txc->offset + (tic->id * 32)); 4666d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); 4676d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (push, 32); 4686d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (push, 1); 4696d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); 4706d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (push, 0x100111); 4716d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NIC0(push, NVC0_M2MF(DATA), 8); 4726d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATAp(push, &tic->tic[0], 8); 47392f3642a4fe71b272b4ceb6953fbf55d1efcbeb5Christoph Bumiller 474cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset need_flush = true; 47567c7aefea33a7935e42ede30463eb7ca5009b068Christoph Bumiller } else 4764826cd0f6125b071530026143ffd8205d84b3d5eBen Skeggs if (res->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING) { 477fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset if (unlikely(s == 5)) 478bbff97ae3918f0dd89d461b1eb51c53829befda1Samuel Pitoiset BEGIN_NVC0(push, NVC0_CP(TEX_CACHE_CTL), 1); 479fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset else 480fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset BEGIN_NVC0(push, NVC0_3D(TEX_CACHE_CTL), 1); 4816d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (push, (tic->id << 4) | 1); 482198f514aa6f08bc43a3002519843b0fe94f340bdChristoph Bumiller NOUVEAU_DRV_STAT(&nvc0->screen->base, tex_cache_flush_count, 1); 4834c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 4844c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller nvc0->screen->tic.lock[tic->id / 32] |= 1 << (tic->id % 32); 4854c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 4864826cd0f6125b071530026143ffd8205d84b3d5eBen Skeggs res->status &= ~NOUVEAU_BUFFER_STATUS_GPU_WRITING; 4874826cd0f6125b071530026143ffd8205d84b3d5eBen Skeggs res->status |= NOUVEAU_BUFFER_STATUS_GPU_READING; 48867c7aefea33a7935e42ede30463eb7ca5009b068Christoph Bumiller 489784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller if (!dirty) 490784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller continue; 491784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (tic->id << 9) | (i << 1) | 1; 4924c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 493fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset if (unlikely(s == 5)) 494fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset BCTX_REFN(nvc0->bufctx_cp, CP_TEX(i), res, RD); 495fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset else 4962999257e0fe703f73d32620fed88040d29ac5bacSamuel Pitoiset BCTX_REFN(nvc0->bufctx_3d, 3D_TEX(s, i), res, RD); 4974c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 498784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller for (; i < nvc0->state.num_textures[s]; ++i) 499784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (i << 1) | 0; 500784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller 5014c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller nvc0->state.num_textures[s] = nvc0->num_textures[s]; 5024c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 503784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller if (n) { 504fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset if (unlikely(s == 5)) 505bbff97ae3918f0dd89d461b1eb51c53829befda1Samuel Pitoiset BEGIN_NIC0(push, NVC0_CP(BIND_TIC), n); 506fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset else 507fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset BEGIN_NIC0(push, NVC0_3D(BIND_TIC(s)), n); 508784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller PUSH_DATAp(push, commands, n); 509784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller } 510784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller nvc0->textures_dirty[s] = 0; 511784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller 5124c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller return need_flush; 5134c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 5144c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 515cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoisetstatic bool 516e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumillernve4_validate_tic(struct nvc0_context *nvc0, unsigned s) 517e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller{ 518e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nouveau_bo *txc = nvc0->screen->txc; 519e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nouveau_pushbuf *push = nvc0->base.pushbuf; 520e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller unsigned i; 521cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset bool need_flush = false; 522e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 523e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller for (i = 0; i < nvc0->num_textures[s]; ++i) { 524e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nv50_tic_entry *tic = nv50_tic_entry(nvc0->textures[s][i]); 525e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nv04_resource *res; 526cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset const bool dirty = !!(nvc0->textures_dirty[s] & (1 << i)); 527e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 528e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (!tic) { 529e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= NVE4_TIC_ENTRY_INVALID; 530e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller continue; 531e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 532e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller res = nv04_resource(tic->pipe.texture); 533323c91250682ac931941047f282a613c74b1ba26Ilia Mirkin nvc0_update_tic(nvc0, tic, res); 534e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 535e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (tic->id < 0) { 536e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller tic->id = nvc0_screen_tic_alloc(nvc0->screen, tic); 537e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 538e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_SPACE(push, 16); 53972283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_NVC0(push, NVE4_P2MF(UPLOAD_DST_ADDRESS_HIGH), 2); 540e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATAh(push, txc->offset + (tic->id * 32)); 541e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, txc->offset + (tic->id * 32)); 54272283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_NVC0(push, NVE4_P2MF(UPLOAD_LINE_LENGTH_IN), 2); 543e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 32); 544e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 1); 54572283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_1IC0(push, NVE4_P2MF(UPLOAD_EXEC), 9); 546e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 0x1001); 547e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATAp(push, &tic->tic[0], 8); 548e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 549cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset need_flush = true; 550e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } else 551e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (res->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING) { 552e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller BEGIN_NVC0(push, NVC0_3D(TEX_CACHE_CTL), 1); 553e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, (tic->id << 4) | 1); 554e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 555e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->screen->tic.lock[tic->id / 32] |= 1 << (tic->id % 32); 556e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 557e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller res->status &= ~NOUVEAU_BUFFER_STATUS_GPU_WRITING; 558e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller res->status |= NOUVEAU_BUFFER_STATUS_GPU_READING; 559e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 560e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] &= ~NVE4_TIC_ENTRY_INVALID; 561e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= tic->id; 562e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (dirty) 5632999257e0fe703f73d32620fed88040d29ac5bacSamuel Pitoiset BCTX_REFN(nvc0->bufctx_3d, 3D_TEX(s, i), res, RD); 564e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 565c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller for (; i < nvc0->state.num_textures[s]; ++i) { 566e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= NVE4_TIC_ENTRY_INVALID; 567c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller nvc0->textures_dirty[s] |= 1 << i; 568c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller } 569e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 570e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->state.num_textures[s] = nvc0->num_textures[s]; 571e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 572e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller return need_flush; 573e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller} 574e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 5754c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillervoid nvc0_validate_textures(struct nvc0_context *nvc0) 5764c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 577f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin bool need_flush = false; 578f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin int i; 5794c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 580f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin for (i = 0; i < 5; i++) { 581f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin if (nvc0->screen->base.class_3d >= NVE4_3D_CLASS) 582f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin need_flush |= nve4_validate_tic(nvc0, i); 583f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin else 584f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin need_flush |= nvc0_validate_tic(nvc0, i); 585e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 5864c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 5874c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (need_flush) { 5886d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NVC0(nvc0->base.pushbuf, NVC0_3D(TIC_FLUSH), 1); 5896d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (nvc0->base.pushbuf, 0); 5904c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 591e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset 592e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset if (nvc0->screen->base.class_3d < NVE4_3D_CLASS) { 593e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset /* Invalidate all CP textures because they are aliased. */ 594e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset for (int i = 0; i < nvc0->num_textures[5]; i++) 595e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_CP_TEX(i)); 596e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset nvc0->textures_dirty[5] = ~0; 597e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset nvc0->dirty_cp |= NVC0_NEW_CP_TEXTURES; 598e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset } 5994c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 6004c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 601fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoisetbool 6024c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillernvc0_validate_tsc(struct nvc0_context *nvc0, int s) 6034c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 604784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller uint32_t commands[16]; 6056d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller struct nouveau_pushbuf *push = nvc0->base.pushbuf; 6064c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller unsigned i; 607784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller unsigned n = 0; 608cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset bool need_flush = false; 6094c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 6104c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller for (i = 0; i < nvc0->num_samplers[s]; ++i) { 6111f5d6fc59bd899e211c70026eb74cd2219858008Christoph Bumiller struct nv50_tsc_entry *tsc = nv50_tsc_entry(nvc0->samplers[s][i]); 6124c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 613784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller if (!(nvc0->samplers_dirty[s] & (1 << i))) 614784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller continue; 6154c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (!tsc) { 616784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (i << 4) | 0; 6174c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller continue; 6184c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 6191d1ddfe5f887980acfb1283cf1c0b1240b3a60a6Ilia Mirkin nvc0->seamless_cube_map = tsc->seamless_cube_map; 6204c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (tsc->id < 0) { 6214c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller tsc->id = nvc0_screen_tsc_alloc(nvc0->screen, tsc); 6224c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 6231ba8e9510812f155359d380bda6876cdee5ba21eBen Skeggs nvc0_m2mf_push_linear(&nvc0->base, nvc0->screen->txc, 624da8300cb03e8cf1f37b5573a2db026fd28e0a3c5Alexandre Courbot 65536 + tsc->id * 32, NV_VRAM_DOMAIN(&nvc0->screen->base), 6254826cd0f6125b071530026143ffd8205d84b3d5eBen Skeggs 32, tsc->tsc); 626cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset need_flush = true; 6274c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 6284c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller nvc0->screen->tsc.lock[tsc->id / 32] |= 1 << (tsc->id % 32); 6294c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 630784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (tsc->id << 12) | (i << 4) | 1; 6314c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 632784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller for (; i < nvc0->state.num_samplers[s]; ++i) 633784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller commands[n++] = (i << 4) | 0; 634784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller 6354c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller nvc0->state.num_samplers[s] = nvc0->num_samplers[s]; 6364c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 637784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller if (n) { 638fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset if (unlikely(s == 5)) 639bbff97ae3918f0dd89d461b1eb51c53829befda1Samuel Pitoiset BEGIN_NIC0(push, NVC0_CP(BIND_TSC), n); 640fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset else 641fa7333a742d8f816c0502e79503a7ad33ab0a9a5Samuel Pitoiset BEGIN_NIC0(push, NVC0_3D(BIND_TSC(s)), n); 642784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller PUSH_DATAp(push, commands, n); 643784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller } 644784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller nvc0->samplers_dirty[s] = 0; 645784f49e69624cba07616fd5a22ccb80ad3b5111bChristoph Bumiller 6464c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller return need_flush; 6474c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 6484c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 649cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoisetbool 650e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumillernve4_validate_tsc(struct nvc0_context *nvc0, int s) 651e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller{ 652e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nouveau_bo *txc = nvc0->screen->txc; 653e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nouveau_pushbuf *push = nvc0->base.pushbuf; 654e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller unsigned i; 655cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset bool need_flush = false; 656e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 657e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller for (i = 0; i < nvc0->num_samplers[s]; ++i) { 658e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nv50_tsc_entry *tsc = nv50_tsc_entry(nvc0->samplers[s][i]); 659e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 660e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (!tsc) { 661e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= NVE4_TSC_ENTRY_INVALID; 662e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller continue; 663e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 664e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (tsc->id < 0) { 665e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller tsc->id = nvc0_screen_tsc_alloc(nvc0->screen, tsc); 666e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 667e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_SPACE(push, 16); 66872283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_NVC0(push, NVE4_P2MF(UPLOAD_DST_ADDRESS_HIGH), 2); 669e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATAh(push, txc->offset + 65536 + (tsc->id * 32)); 670e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, txc->offset + 65536 + (tsc->id * 32)); 67172283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_NVC0(push, NVE4_P2MF(UPLOAD_LINE_LENGTH_IN), 2); 672e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 32); 673e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 1); 67472283020093525ca5248d7f408e88b0bcba1e52bIlia Mirkin BEGIN_1IC0(push, NVE4_P2MF(UPLOAD_EXEC), 9); 675e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, 0x1001); 676e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATAp(push, &tsc->tsc[0], 8); 677e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 678cd0dec0d9dfab642c51774c3f5788cbdf00b8c9bSamuel Pitoiset need_flush = true; 679e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 680e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->screen->tsc.lock[tsc->id / 32] |= 1 << (tsc->id % 32); 681e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 682e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] &= ~NVE4_TSC_ENTRY_INVALID; 683e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= tsc->id << 20; 684e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 685c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller for (; i < nvc0->state.num_samplers[s]; ++i) { 686e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->tex_handles[s][i] |= NVE4_TSC_ENTRY_INVALID; 687c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller nvc0->samplers_dirty[s] |= 1 << i; 688c321b1bef15e2807de3f6225c4abcbf48969997aChristoph Bumiller } 689e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 690e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->state.num_samplers[s] = nvc0->num_samplers[s]; 691e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 692e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller return need_flush; 693e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller} 694e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 6954c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumillervoid nvc0_validate_samplers(struct nvc0_context *nvc0) 6964c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller{ 697f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin bool need_flush = false; 698f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin int i; 6994c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 700f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin for (i = 0; i < 5; i++) { 701f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin if (nvc0->screen->base.class_3d >= NVE4_3D_CLASS) 702f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin need_flush |= nve4_validate_tsc(nvc0, i); 703f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin else 704f97c14f9e4ff5ae2b7313eb0098f99816fead71dIlia Mirkin need_flush |= nvc0_validate_tsc(nvc0, i); 705e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 7064c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller 7074c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller if (need_flush) { 7086d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller BEGIN_NVC0(nvc0->base.pushbuf, NVC0_3D(TSC_FLUSH), 1); 7096d1cdec3ba151168bfc3aef222fba6265dfb41fbChristoph Bumiller PUSH_DATA (nvc0->base.pushbuf, 0); 7104c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller } 711e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset 712e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset if (nvc0->screen->base.class_3d < NVE4_3D_CLASS) { 713e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset /* Invalidate all CP samplers because they are aliased. */ 714e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset nvc0->samplers_dirty[5] = ~0; 715e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset nvc0->dirty_cp |= NVC0_NEW_CP_SAMPLERS; 716e01a48218205adc280d3da00720dfb3d1ca5bde5Samuel Pitoiset } 7174c2247538394a313e1e90bfcd07c1ab9c7d41281Christoph Bumiller} 718e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 719e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller/* Upload the "diagonal" entries for the possible texture sources ($t == $s). 720e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller * At some point we might want to get a list of the combinations used by a 721e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller * shader and fill in those entries instead of having it extract the handles. 722e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller */ 723e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumillervoid 724e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumillernve4_set_tex_handles(struct nvc0_context *nvc0) 725e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller{ 726e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller struct nouveau_pushbuf *push = nvc0->base.pushbuf; 727902bbda81b31bacb2a8c60ca6a8ba8ca34ae73d3Samuel Pitoiset struct nvc0_screen *screen = nvc0->screen; 728e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller unsigned s; 729e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 730e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (nvc0->screen->base.class_3d < NVE4_3D_CLASS) 731e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller return; 732e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 733902bbda81b31bacb2a8c60ca6a8ba8ca34ae73d3Samuel Pitoiset for (s = 0; s < 5; ++s) { 734e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller uint32_t dirty = nvc0->textures_dirty[s] | nvc0->samplers_dirty[s]; 735e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller if (!dirty) 736e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller continue; 737e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3); 738c6b3c346d15b834d17c97aa4a45714c18f219351Samuel Pitoiset PUSH_DATA (push, 2048); 739902bbda81b31bacb2a8c60ca6a8ba8ca34ae73d3Samuel Pitoiset PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 740902bbda81b31bacb2a8c60ca6a8ba8ca34ae73d3Samuel Pitoiset PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 741e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller do { 742e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller int i = ffs(dirty) - 1; 743e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller dirty &= ~(1 << i); 744e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 745e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller BEGIN_NVC0(push, NVC0_3D(CB_POS), 2); 746e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, (8 + i) * 4); 747e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller PUSH_DATA (push, nvc0->tex_handles[s][i]); 748e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } while (dirty); 749e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller 750e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->textures_dirty[s] = 0; 751e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller nvc0->samplers_dirty[s] = 0; 752e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller } 753e44089b2f79aa2dcaacf348911433d1e21235c0cChristoph Bumiller} 754e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 755e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 756e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint8_t nve4_su_format_map[PIPE_FORMAT_COUNT]; 757e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint16_t nve4_su_format_aux_map[PIPE_FORMAT_COUNT]; 758e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint16_t nve4_suldp_lib_offset[PIPE_FORMAT_COUNT]; 759e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 7601eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoisetstatic void 7611eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoisetnvc0_get_surface_dims(struct pipe_image_view *view, int *width, int *height, 7621eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset int *depth) 7631eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset{ 7641eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset struct nv04_resource *res = nv04_resource(view->resource); 7651eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset int level; 7661eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 7671eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *width = *height = *depth = 1; 7681eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset if (res->base.target == PIPE_BUFFER) { 7691eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *width = view->u.buf.last_element - view->u.buf.first_element + 1; 7701eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset return; 7711eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset } 7721eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 7731eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset level = view->u.tex.level; 7741eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *width = u_minify(view->resource->width0, level); 7751eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *height = u_minify(view->resource->height0, level); 7761eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *depth = u_minify(view->resource->depth0, level); 7771eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 7781eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset switch (res->base.target) { 7791eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_1D_ARRAY: 7801eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_2D_ARRAY: 7811eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_CUBE: 7821eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_CUBE_ARRAY: 7831eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset *depth = view->u.tex.last_layer - view->u.tex.first_layer + 1; 7841eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset break; 7851eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_1D: 7861eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_2D: 7871eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_RECT: 7881eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset case PIPE_TEXTURE_3D: 7891eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset break; 7901eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset default: 7911eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset assert(!"unexpected texture target"); 7921eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset break; 7931eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset } 7941eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset} 7951eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 796e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillervoid 79728590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoisetnvc0_mark_image_range_valid(const struct pipe_image_view *view) 79828590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset{ 79928590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset struct nv04_resource *res = (struct nv04_resource *)view->resource; 80028590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset const struct util_format_description *desc; 80128590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset unsigned stride; 80228590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 80328590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset assert(view->resource->target == PIPE_BUFFER); 80428590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 80528590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset desc = util_format_description(view->format); 80628590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset stride = desc->block.bits / 8; 80728590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 80828590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset util_range_add(&res->valid_buffer_range, 80928590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset stride * (view->u.buf.first_element), 81028590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset stride * (view->u.buf.last_element + 1)); 81128590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset} 81228590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 81328590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoisetvoid 814e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillernve4_set_surface_info(struct nouveau_pushbuf *push, 8151eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset struct pipe_image_view *view, 8160d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset struct nvc0_context *nvc0) 817e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 8180d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset struct nvc0_screen *screen = nvc0->screen; 819e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller struct nv04_resource *res; 820e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller uint64_t address; 821e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller uint32_t *const info = push->cur; 8221eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset int width, height, depth; 823e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller uint8_t log2cpp; 824e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8251eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset if (view && !nve4_su_format_map[view->format]) 826e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller NOUVEAU_ERR("unsupported surface format, try is_format_supported() !\n"); 827e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 828e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller push->cur += 16; 829e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8301eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset if (!view || !nve4_su_format_map[view->format]) { 831e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller memset(info, 0, 16 * sizeof(*info)); 832e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 833e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[0] = 0xbadf0000; 834e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[1] = 0x80004000; 835e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[12] = nve4_suldp_lib_offset[PIPE_FORMAT_R32G32B32A32_UINT] + 836e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller screen->lib_code->start; 837e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller return; 838e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 8391eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset res = nv04_resource(view->resource); 8401eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 8411eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset address = res->address; 842e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8431eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset /* get surface dimensions based on the target. */ 8441eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset nvc0_get_surface_dims(view, &width, &height, &depth); 845e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8461eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[8] = width; 8471eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[9] = height; 8481eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[10] = depth; 849e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller switch (res->base.target) { 850e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_1D_ARRAY: 851e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[11] = 1; 852e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 853e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_2D: 854e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_RECT: 855e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[11] = 2; 856e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 857e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_3D: 858e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[11] = 3; 859e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 860e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_2D_ARRAY: 861e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_CUBE: 862e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case PIPE_TEXTURE_CUBE_ARRAY: 863e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[11] = 4; 864e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 865e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller default: 866e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[11] = 0; 867e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 868e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 8691eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset log2cpp = (0xf000 & nve4_su_format_aux_map[view->format]) >> 12; 870e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8716fc6d548ed66caf4395190718163d964d9c0fe25Samuel Pitoiset /* Stick the blockwidth (ie. number of bytes per pixel) to check if the 8726fc6d548ed66caf4395190718163d964d9c0fe25Samuel Pitoiset * format doesn't mismatch. */ 8736fc6d548ed66caf4395190718163d964d9c0fe25Samuel Pitoiset info[12] = util_format_get_blocksize(view->format); 874e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 875e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller /* limit in bytes for raw access */ 8761eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[13] = (0x06 << 22) | ((width << log2cpp) - 1); 877e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 8781eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[1] = nve4_su_format_map[view->format]; 879e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 880e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller#if 0 8811eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset switch (util_format_get_blocksizebits(view->format)) { 882e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case 16: info[1] |= 1 << 16; break; 883e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case 32: info[1] |= 2 << 16; break; 884e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case 64: info[1] |= 3 << 16; break; 885e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller case 128: info[1] |= 4 << 16; break; 886e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller default: 887e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller break; 888e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 889e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller#else 890e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[1] |= log2cpp << 16; 891e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[1] |= 0x4000; 8921eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[1] |= (0x0f00 & nve4_su_format_aux_map[view->format]); 893e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller#endif 894e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 895e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller if (res->base.target == PIPE_BUFFER) { 896da8171dc7580db75d65e0f89e1c20ee45c3ef3e7Samuel Pitoiset unsigned blocksize = util_format_get_blocksize(view->format); 897da8171dc7580db75d65e0f89e1c20ee45c3ef3e7Samuel Pitoiset 898da8171dc7580db75d65e0f89e1c20ee45c3ef3e7Samuel Pitoiset address += view->u.buf.first_element * blocksize; 899da8171dc7580db75d65e0f89e1c20ee45c3ef3e7Samuel Pitoiset 900e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[0] = address >> 8; 9011eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[2] = width - 1; 9021eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[2] |= (0xff & nve4_su_format_aux_map[view->format]) << 22; 903e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[3] = 0; 904e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[4] = 0; 905e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[5] = 0; 906e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[6] = 0; 907e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[7] = 0; 908e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[14] = 0; 909e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[15] = 0; 910e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } else { 911e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller struct nv50_miptree *mt = nv50_miptree(&res->base); 9121eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset struct nv50_miptree_level *lvl = &mt->level[view->u.tex.level]; 9131eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset const unsigned z = view->u.tex.first_layer; 914e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 915e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller if (z) { 916e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller if (mt->layout_3d) { 9171eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset address += nvc0_mt_zslice_offset(mt, view->u.tex.level, z); 918e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller /* doesn't work if z passes z-tile boundary */ 9190d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset if (depth > 1) { 9200d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset pipe_debug_message(&nvc0->base.debug, CONFORMANCE, 9210d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset "3D images are not really supported!"); 9220d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset debug_printf("3D images are not really supported!\n"); 9230d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset } 924e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } else { 925e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller address += mt->layer_stride * z; 926e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 927e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 928285f2edd14f82538d27f4df76055a3f154da3b29Samuel Pitoiset address += lvl->offset; 9291eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset 930e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[0] = address >> 8; 931b2b5075e04bbe6c6462fd01711524abd80380f45Ilia Mirkin info[2] = (width << mt->ms_x) - 1; 932e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller /* NOTE: this is really important: */ 9331eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[2] |= (0xff & nve4_su_format_aux_map[view->format]) << 22; 934e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[3] = (0x88 << 24) | (lvl->pitch / 64); 935b2b5075e04bbe6c6462fd01711524abd80380f45Ilia Mirkin info[4] = (height << mt->ms_y) - 1; 936e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[4] |= (lvl->tile_mode & 0x0f0) << 25; 937e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[4] |= NVC0_TILE_SHIFT_Y(lvl->tile_mode) << 22; 938e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[5] = mt->layer_stride >> 8; 9391eca4c51a2c3fcaf4e39e5bad8eefcea547530faSamuel Pitoiset info[6] = depth - 1; 940e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[6] |= (lvl->tile_mode & 0xf00) << 21; 941e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[6] |= NVC0_TILE_SHIFT_Z(lvl->tile_mode) << 22; 942e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[7] = 0; 943e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[14] = mt->ms_x; 944e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller info[15] = mt->ms_y; 945e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 946e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller} 947e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 948a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 949879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoisetnvc0_set_surface_info(struct nouveau_pushbuf *push, 950879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct pipe_image_view *view, uint64_t address, 951879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset int width, int height, int depth) 952879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset{ 953879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nv04_resource *res; 954879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset uint32_t *const info = push->cur; 955879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 956879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset push->cur += 16; 957879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 958879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* Make sure to always initialize the surface information area because it's 959879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset * used to check if the given image is bound or not. */ 960879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset memset(info, 0, 16 * sizeof(*info)); 961879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 962879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (!view || !view->resource) 963879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset return; 964879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset res = nv04_resource(view->resource); 965879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 966879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* Stick the image dimensions for the imageSize() builtin. */ 967879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[8] = width; 968879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[9] = height; 969879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[10] = depth; 970879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 971879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* Stick the blockwidth (ie. number of bytes per pixel) to calculate pixel 972879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset * offset and to check if the format doesn't mismatch. */ 973879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[12] = util_format_get_blocksize(view->format); 974879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 975879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (res->base.target == PIPE_BUFFER) { 976879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[0] = address >> 8; 977879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[2] = width; 978879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } else { 979879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nv50_miptree *mt = nv50_miptree(&res->base); 980879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 981879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[0] = address >> 8; 982879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[2] = width; 983879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[4] = height; 984879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[5] = mt->layer_stride >> 8; 985879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[6] = depth; 986879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[14] = mt->ms_x; 987879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset info[15] = mt->ms_y; 988879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 989879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset} 990879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 991879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoisetvoid 992879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoisetnvc0_validate_suf(struct nvc0_context *nvc0, int s) 993879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset{ 994879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nouveau_pushbuf *push = nvc0->base.pushbuf; 995879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nvc0_screen *screen = nvc0->screen; 996879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 997879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset for (int i = 0; i < NVC0_MAX_IMAGES; ++i) { 998879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct pipe_image_view *view = &nvc0->images[s][i]; 999879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset int width, height, depth; 1000879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset uint64_t address = 0; 1001879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1002879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (s == 5) 1003879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_NVC0(push, NVC0_CP(IMAGE(i)), 6); 1004879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset else 1005879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_NVC0(push, NVC0_3D(IMAGE(i)), 6); 1006879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1007879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (view->resource) { 1008879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nv04_resource *res = nv04_resource(view->resource); 1009879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset unsigned rt = nvc0_format_table[view->format].rt; 1010879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1011879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (util_format_is_depth_or_stencil(view->format)) 1012879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset rt = rt << 12; 1013879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset else 1014879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset rt = (rt << 4) | (0x14 << 12); 1015879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1016879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* get surface dimensions based on the target. */ 1017879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset nvc0_get_surface_dims(view, &width, &height, &depth); 1018879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1019879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset address = res->address; 1020879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (res->base.target == PIPE_BUFFER) { 1021879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset unsigned blocksize = util_format_get_blocksize(view->format); 1022879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1023879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset address += view->u.buf.first_element * blocksize; 1024879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset assert(!(address & 0xff)); 1025879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 102628590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset if (view->access & PIPE_IMAGE_ACCESS_WRITE) 102728590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset nvc0_mark_image_range_valid(view); 102828590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 1029879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATAh(push, address); 1030879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, address); 1031879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, align(width * blocksize, 0x100)); 1032879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, NVC0_3D_IMAGE_HEIGHT_LINEAR | 1); 1033879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, rt); 1034879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, 0); 1035879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } else { 1036879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nv50_miptree *mt = nv50_miptree(view->resource); 1037879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset struct nv50_miptree_level *lvl = &mt->level[view->u.tex.level]; 1038879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset const unsigned z = view->u.tex.first_layer; 1039879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1040879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (mt->layout_3d) { 1041879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset address += nvc0_mt_zslice_offset(mt, view->u.tex.level, z); 1042879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (depth >= 1) { 1043879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset pipe_debug_message(&nvc0->base.debug, CONFORMANCE, 1044879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset "3D images are not supported!"); 1045879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset debug_printf("3D images are not supported!\n"); 1046879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 1047879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } else { 1048879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset address += mt->layer_stride * z; 1049879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 1050879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset address += lvl->offset; 1051879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1052879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATAh(push, address); 1053879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, address); 1054b2b5075e04bbe6c6462fd01711524abd80380f45Ilia Mirkin PUSH_DATA (push, width << mt->ms_x); 1055b2b5075e04bbe6c6462fd01711524abd80380f45Ilia Mirkin PUSH_DATA (push, height << mt->ms_y); 1056879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, rt); 1057879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, lvl->tile_mode & 0xff); /* mask out z-tiling */ 1058879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 1059879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1060879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (s == 5) 1061879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BCTX_REFN(nvc0->bufctx_cp, CP_SUF, res, RDWR); 1062879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset else 1063879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BCTX_REFN(nvc0->bufctx_3d, 3D_SUF, res, RDWR); 1064879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } else { 1065879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0); 1066879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0); 1067879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0); 1068879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0); 1069879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0x14000); 1070879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA(push, 0); 1071879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 1072879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1073879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* stick surface information into the driver constant buffer */ 1074879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (s == 5) 1075879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_NVC0(push, NVC0_CP(CB_SIZE), 3); 1076879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset else 1077879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3); 1078879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, 2048); 1079879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 1080879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 1081879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset if (s == 5) 1082879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_1IC0(push, NVC0_CP(CB_POS), 1 + 16); 1083879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset else 1084879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 16); 1085879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset PUSH_DATA (push, NVC0_CB_AUX_SU_INFO(i)); 1086879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1087879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset nvc0_set_surface_info(push, view, address, width, height, depth); 1088879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset } 1089879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset} 1090879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1091879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoisetstatic inline void 1092e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillernvc0_update_surface_bindings(struct nvc0_context *nvc0) 1093e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1094879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset nvc0_validate_suf(nvc0, 4); 1095879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset 1096879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset /* Invalidate all COMPUTE images because they are aliased with FRAGMENT. */ 1097be365f34f04112572550337f387b61ed1ba69acdSamuel Pitoiset nouveau_bufctx_reset(nvc0->bufctx_cp, NVC0_BIND_CP_SUF); 1098879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset nvc0->dirty_cp |= NVC0_NEW_CP_SURFACES; 1099879bd2ea0c7809ffc4b316f50652dc9cf7291004Samuel Pitoiset nvc0->images_dirty[5] |= nvc0->images_valid[5]; 1100e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller} 1101e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1102a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 1103e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillernve4_update_surface_bindings(struct nvc0_context *nvc0) 1104e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1105e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset struct nouveau_pushbuf *push = nvc0->base.pushbuf; 1106e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset struct nvc0_screen *screen = nvc0->screen; 1107e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset int i, j, s; 1108e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset 1109e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset for (s = 0; s < 5; s++) { 1110e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset if (!nvc0->images_dirty[s]) 1111e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset continue; 1112e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset 1113e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3); 1114e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset PUSH_DATA (push, 2048); 1115e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 1116e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s)); 1117e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 16 * NVC0_MAX_IMAGES); 1118e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset PUSH_DATA (push, NVC0_CB_AUX_SU_INFO(0)); 1119e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset 1120e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset for (i = 0; i < NVC0_MAX_IMAGES; ++i) { 1121e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset struct pipe_image_view *view = &nvc0->images[s][i]; 1122e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset if (view->resource) { 1123e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset struct nv04_resource *res = nv04_resource(view->resource); 1124e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset 112528590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset if (res->base.target == PIPE_BUFFER) { 112628590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset if (view->access & PIPE_IMAGE_ACCESS_WRITE) 112728590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset nvc0_mark_image_range_valid(view); 112828590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset } 112928590eb9492f2e06c95483df7bd7f67b0fee7b8eSamuel Pitoiset 11300d64d39e8188c797bc4f4bc7603cff6478972ae3Samuel Pitoiset nve4_set_surface_info(push, view, nvc0); 1131e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset BCTX_REFN(nvc0->bufctx_3d, 3D_SUF, res, RDWR); 1132e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset } else { 1133e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset for (j = 0; j < 16; j++) 1134e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset PUSH_DATA(push, 0); 1135e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset } 1136e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset } 1137e28f247e249946d8c311b359d83ce34fd29e4a67Samuel Pitoiset } 1138e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller} 1139e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1140e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillervoid 1141e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillernvc0_validate_surfaces(struct nvc0_context *nvc0) 1142e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1143e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller if (nvc0->screen->base.class_3d >= NVE4_3D_CLASS) { 1144e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller nve4_update_surface_bindings(nvc0); 1145e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } else { 1146e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller nvc0_update_surface_bindings(nvc0); 1147e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller } 1148e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller} 1149e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1150e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1151e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint8_t nve4_su_format_map[PIPE_FORMAT_COUNT] = 1152e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1153e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32B32A32_FLOAT] = GK104_IMAGE_FORMAT_RGBA32_FLOAT, 1154e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32B32A32_SINT] = GK104_IMAGE_FORMAT_RGBA32_SINT, 1155e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32B32A32_UINT] = GK104_IMAGE_FORMAT_RGBA32_UINT, 1156e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16B16A16_FLOAT] = GK104_IMAGE_FORMAT_RGBA16_FLOAT, 1157e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16B16A16_UNORM] = GK104_IMAGE_FORMAT_RGBA16_UNORM, 1158e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16B16A16_SNORM] = GK104_IMAGE_FORMAT_RGBA16_SNORM, 1159e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16B16A16_SINT] = GK104_IMAGE_FORMAT_RGBA16_SINT, 1160e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16B16A16_UINT] = GK104_IMAGE_FORMAT_RGBA16_UINT, 1161e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8B8A8_UNORM] = GK104_IMAGE_FORMAT_RGBA8_UNORM, 1162e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8B8A8_SNORM] = GK104_IMAGE_FORMAT_RGBA8_SNORM, 1163e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8B8A8_SINT] = GK104_IMAGE_FORMAT_RGBA8_SINT, 1164e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8B8A8_UINT] = GK104_IMAGE_FORMAT_RGBA8_UINT, 1165e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R11G11B10_FLOAT] = GK104_IMAGE_FORMAT_R11G11B10_FLOAT, 1166e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R10G10B10A2_UNORM] = GK104_IMAGE_FORMAT_RGB10_A2_UNORM, 11679bc18a48f3b5f311fd46946cac1efefac0de1f46Samuel Pitoiset [PIPE_FORMAT_R10G10B10A2_UINT] = GK104_IMAGE_FORMAT_RGB10_A2_UINT, 1168e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32_FLOAT] = GK104_IMAGE_FORMAT_RG32_FLOAT, 1169e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32_SINT] = GK104_IMAGE_FORMAT_RG32_SINT, 1170e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32G32_UINT] = GK104_IMAGE_FORMAT_RG32_UINT, 1171e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16_FLOAT] = GK104_IMAGE_FORMAT_RG16_FLOAT, 1172e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16_UNORM] = GK104_IMAGE_FORMAT_RG16_UNORM, 1173e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16_SNORM] = GK104_IMAGE_FORMAT_RG16_SNORM, 1174e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16_SINT] = GK104_IMAGE_FORMAT_RG16_SINT, 1175e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16G16_UINT] = GK104_IMAGE_FORMAT_RG16_UINT, 1176e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8_UNORM] = GK104_IMAGE_FORMAT_RG8_UNORM, 1177e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8_SNORM] = GK104_IMAGE_FORMAT_RG8_SNORM, 1178e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8_SINT] = GK104_IMAGE_FORMAT_RG8_SINT, 1179e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8G8_UINT] = GK104_IMAGE_FORMAT_RG8_UINT, 1180e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32_FLOAT] = GK104_IMAGE_FORMAT_R32_FLOAT, 1181e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32_SINT] = GK104_IMAGE_FORMAT_R32_SINT, 1182e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R32_UINT] = GK104_IMAGE_FORMAT_R32_UINT, 1183e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16_FLOAT] = GK104_IMAGE_FORMAT_R16_FLOAT, 1184e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16_UNORM] = GK104_IMAGE_FORMAT_R16_UNORM, 1185e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16_SNORM] = GK104_IMAGE_FORMAT_R16_SNORM, 1186e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16_SINT] = GK104_IMAGE_FORMAT_R16_SINT, 1187e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R16_UINT] = GK104_IMAGE_FORMAT_R16_UINT, 1188e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8_UNORM] = GK104_IMAGE_FORMAT_R8_UNORM, 1189e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8_SNORM] = GK104_IMAGE_FORMAT_R8_SNORM, 1190e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8_SINT] = GK104_IMAGE_FORMAT_R8_SINT, 1191e8eda47898e10c78ea02640ecb0537840a21f4fbBen Skeggs [PIPE_FORMAT_R8_UINT] = GK104_IMAGE_FORMAT_R8_UINT, 1192e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller}; 1193e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1194e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller/* Auxiliary format description values for surface instructions. 1195e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller * (log2(bytes per pixel) << 12) | (unk8 << 8) | unk22 1196e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller */ 1197e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint16_t nve4_su_format_aux_map[PIPE_FORMAT_COUNT] = 1198e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1199e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_FLOAT] = 0x4842, 1200e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_SINT] = 0x4842, 1201e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_UINT] = 0x4842, 1202e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1203e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_UNORM] = 0x3933, 1204e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_SNORM] = 0x3933, 1205e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_SINT] = 0x3933, 1206e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_UINT] = 0x3933, 1207e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_FLOAT] = 0x3933, 1208e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1209e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_FLOAT] = 0x3433, 1210e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_SINT] = 0x3433, 1211e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_UINT] = 0x3433, 1212e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1213e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R10G10B10A2_UNORM] = 0x2a24, 12149bc18a48f3b5f311fd46946cac1efefac0de1f46Samuel Pitoiset [PIPE_FORMAT_R10G10B10A2_UINT] = 0x2a24, 1215e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_UNORM] = 0x2a24, 1216e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_SNORM] = 0x2a24, 1217e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_SINT] = 0x2a24, 1218e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_UINT] = 0x2a24, 1219e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R11G11B10_FLOAT] = 0x2a24, 1220e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1221e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_UNORM] = 0x2524, 1222e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_SNORM] = 0x2524, 1223e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_SINT] = 0x2524, 1224e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_UINT] = 0x2524, 1225e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_FLOAT] = 0x2524, 1226e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1227e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_SINT] = 0x2024, 1228e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_UINT] = 0x2024, 1229e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_FLOAT] = 0x2024, 1230e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1231e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_UNORM] = 0x1615, 1232e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_SNORM] = 0x1615, 1233e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_SINT] = 0x1615, 1234e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_UINT] = 0x1615, 1235e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1236e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_UNORM] = 0x1115, 1237e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_SNORM] = 0x1115, 1238e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_SINT] = 0x1115, 1239e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_UINT] = 0x1115, 1240e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_FLOAT] = 0x1115, 1241e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1242e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_UNORM] = 0x0206, 1243e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_SNORM] = 0x0206, 1244e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_SINT] = 0x0206, 1245e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_UINT] = 0x0206 1246e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller}; 1247e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller 1248e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller/* NOTE: These are hardcoded offsets for the shader library. 1249e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller * TODO: Automate them. 1250e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller */ 1251e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumillerstatic const uint16_t nve4_suldp_lib_offset[PIPE_FORMAT_COUNT] = 1252e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller{ 1253e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_FLOAT] = 0x218, 1254e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_SINT] = 0x218, 1255e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32B32A32_UINT] = 0x218, 1256e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_UNORM] = 0x248, 1257e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_SNORM] = 0x2b8, 1258e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_SINT] = 0x330, 1259e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_UINT] = 0x388, 1260e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16B16A16_FLOAT] = 0x3d8, 1261e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_FLOAT] = 0x428, 1262e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_SINT] = 0x468, 1263e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32G32_UINT] = 0x468, 1264e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R10G10B10A2_UNORM] = 0x4a8, 12659bc18a48f3b5f311fd46946cac1efefac0de1f46Samuel Pitoiset [PIPE_FORMAT_R10G10B10A2_UINT] = 0x530, 1266e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_UNORM] = 0x588, 1267e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_SNORM] = 0x5f8, 1268e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_SINT] = 0x670, 1269e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8B8A8_UINT] = 0x6c8, 1270e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_B5G6R5_UNORM] = 0x718, 1271e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_B5G5R5X1_UNORM] = 0x7a0, 1272e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_UNORM] = 0x828, 1273e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_SNORM] = 0x890, 1274e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_SINT] = 0x8f0, 1275e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_UINT] = 0x948, 1276e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16G16_FLOAT] = 0x998, 1277e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_FLOAT] = 0x9e8, 1278e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_SINT] = 0xa30, 1279e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R32_UINT] = 0xa30, 1280e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_UNORM] = 0xa78, 1281e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_SNORM] = 0xae0, 1282e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_UINT] = 0xb48, 1283e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8G8_SINT] = 0xb98, 1284e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_UNORM] = 0xbe8, 1285e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_SNORM] = 0xc48, 1286e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_SINT] = 0xca0, 1287e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_UINT] = 0xce8, 1288e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R16_FLOAT] = 0xd30, 1289e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_UNORM] = 0xd88, 1290e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_SNORM] = 0xde0, 1291e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_SINT] = 0xe38, 1292e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R8_UINT] = 0xe88, 1293e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller [PIPE_FORMAT_R11G11B10_FLOAT] = 0xed0 1294e066f2f62f6043d43385bcdce4e7fa07ffa3ecbeChristoph Bumiller}; 1295