r600_pipe_common.c revision b6847062dd5c504023dfbef8e6b3118136ee506c
1d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák/* 2d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * Copyright 2013 Advanced Micro Devices, Inc. 3d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * 4d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * Permission is hereby granted, free of charge, to any person obtaining a 5d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * copy of this software and associated documentation files (the "Software"), 6d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * to deal in the Software without restriction, including without limitation 7d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * and/or sell copies of the Software, and to permit persons to whom the 9d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * Software is furnished to do so, subject to the following conditions: 10d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * 11d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * The above copyright notice and this permission notice (including the next 12d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * paragraph) shall be included in all copies or substantial portions of the 13d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * Software. 14d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * 15d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * SOFTWARE. 22d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * 23d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * Authors: Marek Olšák <maraeo@gmail.com> 24d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák * 25d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák */ 26d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák 27d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák#include "r600_pipe_common.h" 28e64633e8c3a5498998a45ab721bf80edca101cf5Marek Olšák#include "r600_cs.h" 290cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák#include "tgsi/tgsi_parse.h" 308a125afa6e88a3eeddba8c7fdc1a75c9b99d5489Nicolai Hähnle#include "util/list.h" 31db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák#include "util/u_draw_quad.h" 32ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák#include "util/u_memory.h" 331bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák#include "util/u_format_s3tc.h" 3491aca8c662faf0ec311968b2897a72a6d08b199dMarek Olšák#include "util/u_upload_mgr.h" 353b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák#include "os/os_time.h" 36d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák#include "vl/vl_decoder.h" 37d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák#include "vl/vl_video_buffer.h" 387bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#include "radeon/radeon_video.h" 394c110994533c67f2e501cd32ee0c2f91060630e0Emil Velikov#include <inttypes.h> 40d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák 41bed6f20f28af8bf531c14e3cab12a00354a313fcMarek Olšák#ifndef HAVE_LLVM 42bed6f20f28af8bf531c14e3cab12a00354a313fcMarek Olšák#define HAVE_LLVM 0 43bed6f20f28af8bf531c14e3cab12a00354a313fcMarek Olšák#endif 44bed6f20f28af8bf531c14e3cab12a00354a313fcMarek Olšák 453b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšákstruct r600_multi_fence { 463b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_reference reference; 473b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle *gfx; 483b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle *sdma; 493b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák}; 503b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 51f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák/* 52f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * pipe_context 53f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák */ 54f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 55db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšákvoid r600_draw_rectangle(struct blitter_context *blitter, 56db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák int x1, int y1, int x2, int y2, float depth, 57db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák enum blitter_attrib_type type, 58db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák const union pipe_color_union *attrib) 59db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák{ 60db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák struct r600_common_context *rctx = 61db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák (struct r600_common_context*)util_blitter_get_pipe(blitter); 62db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák struct pipe_viewport_state viewport; 63db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák struct pipe_resource *buf = NULL; 64db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák unsigned offset = 0; 65db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák float *vb; 66db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 67db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák if (type == UTIL_BLITTER_ATTRIB_TEXCOORD) { 68db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák util_blitter_draw_rectangle(blitter, x1, y1, x2, y2, depth, type, attrib); 69db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák return; 70db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák } 71db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 72db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák /* Some operations (like color resolve on r6xx) don't work 73db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák * with the conventional primitive types. 74db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák * One that works is PT_RECTLIST, which we use here. */ 75db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 76db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák /* setup viewport */ 77db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.scale[0] = 1.0f; 78db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.scale[1] = 1.0f; 79db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.scale[2] = 1.0f; 80db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.translate[0] = 0.0f; 81db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.translate[1] = 0.0f; 82db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák viewport.translate[2] = 0.0f; 83db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák rctx->b.set_viewport_states(&rctx->b, 0, 1, &viewport); 84db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 85db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák /* Upload vertices. The hw rectangle has only 3 vertices, 86db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák * I guess the 4th one is derived from the first 3. 87db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák * The vertex specification should match u_blitter's vertex element state. */ 88020009f7ccdffa84c6e1649c4e915954f5fd7cc0Marek Olšák u_upload_alloc(rctx->uploader, 0, sizeof(float) * 24, 256, &offset, &buf, (void**)&vb); 89f95e695059c428a21a1e1a27d5cd5ccce2a97b0eMarek Olšák if (!buf) 90f95e695059c428a21a1e1a27d5cd5ccce2a97b0eMarek Olšák return; 91f95e695059c428a21a1e1a27d5cd5ccce2a97b0eMarek Olšák 92db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[0] = x1; 93db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[1] = y1; 94db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[2] = depth; 95db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[3] = 1; 96db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 97db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[8] = x1; 98db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[9] = y2; 99db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[10] = depth; 100db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[11] = 1; 101db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 102db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[16] = x2; 103db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[17] = y1; 104db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[18] = depth; 105db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák vb[19] = 1; 106db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 107db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák if (attrib) { 108db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák memcpy(vb+4, attrib->f, sizeof(float)*4); 109db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák memcpy(vb+12, attrib->f, sizeof(float)*4); 110db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák memcpy(vb+20, attrib->f, sizeof(float)*4); 111db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák } 112db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 113db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák /* draw */ 114db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák util_draw_vertex_buffer(&rctx->b, NULL, buf, blitter->vb_slot, offset, 115db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák R600_PRIM_RECTANGLE_LIST, 3, 2); 116db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák pipe_resource_reference(&buf, NULL); 117db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák} 118db51ab6d6ada69287dfe3a671ecc1b338917e7aaMarek Olšák 119acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheidervoid r600_need_dma_space(struct r600_common_context *ctx, unsigned num_dw) 120acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheider{ 12181d412e02ce7db644774202b175f1f24b1f262c7Marek Olšák /* Flush the GFX IB if it's not empty. */ 1226cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák if (ctx->gfx.cs->cdw > ctx->initial_gfx_cs_size) 1236cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák ctx->gfx.flush(ctx, RADEON_FLUSH_ASYNC, NULL); 12481d412e02ce7db644774202b175f1f24b1f262c7Marek Olšák 125acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheider /* Flush if there's not enough space. */ 1266cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák if ((num_dw + ctx->dma.cs->cdw) > ctx->dma.cs->max_dw) { 1276cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák ctx->dma.flush(ctx, RADEON_FLUSH_ASYNC, NULL); 1286cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák assert((num_dw + ctx->dma.cs->cdw) <= ctx->dma.cs->max_dw); 129acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheider } 130acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheider} 131acf55e73252e46fa51378ef4b23c94a89902ae1cNiels Ole Salscheider 1326381dd7e9dd22987df21624965cc82cbeec237a3Marek Olšákstatic void r600_memory_barrier(struct pipe_context *ctx, unsigned flags) 1336381dd7e9dd22987df21624965cc82cbeec237a3Marek Olšák{ 1346381dd7e9dd22987df21624965cc82cbeec237a3Marek Olšák} 1356381dd7e9dd22987df21624965cc82cbeec237a3Marek Olšák 13611459436d9314681087463f2c006c58b6fcff396Marek Olšákvoid r600_preflush_suspend_features(struct r600_common_context *ctx) 13711459436d9314681087463f2c006c58b6fcff396Marek Olšák{ 13811459436d9314681087463f2c006c58b6fcff396Marek Olšák /* suspend queries */ 1399e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle if (ctx->num_cs_dw_nontimer_queries_suspend) { 1409e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle /* Since non-timer queries are suspended during blits, 1419e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle * we have to guard against double-suspends. */ 14211459436d9314681087463f2c006c58b6fcff396Marek Olšák r600_suspend_nontimer_queries(ctx); 1439e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle ctx->nontimer_queries_suspended_by_flush = true; 1449e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle } 1458a125afa6e88a3eeddba8c7fdc1a75c9b99d5489Nicolai Hähnle if (!LIST_IS_EMPTY(&ctx->active_timer_queries)) 14657245cce52d544c61f03fc966850f0f94e8118d5Marek Olšák r600_suspend_timer_queries(ctx); 14711459436d9314681087463f2c006c58b6fcff396Marek Olšák 14811459436d9314681087463f2c006c58b6fcff396Marek Olšák ctx->streamout.suspended = false; 14911459436d9314681087463f2c006c58b6fcff396Marek Olšák if (ctx->streamout.begin_emitted) { 15011459436d9314681087463f2c006c58b6fcff396Marek Olšák r600_emit_streamout_end(ctx); 15111459436d9314681087463f2c006c58b6fcff396Marek Olšák ctx->streamout.suspended = true; 15211459436d9314681087463f2c006c58b6fcff396Marek Olšák } 15311459436d9314681087463f2c006c58b6fcff396Marek Olšák} 15411459436d9314681087463f2c006c58b6fcff396Marek Olšák 15511459436d9314681087463f2c006c58b6fcff396Marek Olšákvoid r600_postflush_resume_features(struct r600_common_context *ctx) 15611459436d9314681087463f2c006c58b6fcff396Marek Olšák{ 15711459436d9314681087463f2c006c58b6fcff396Marek Olšák if (ctx->streamout.suspended) { 15811459436d9314681087463f2c006c58b6fcff396Marek Olšák ctx->streamout.append_bitmask = ctx->streamout.enabled_mask; 15911459436d9314681087463f2c006c58b6fcff396Marek Olšák r600_streamout_buffers_dirty(ctx); 16011459436d9314681087463f2c006c58b6fcff396Marek Olšák } 16111459436d9314681087463f2c006c58b6fcff396Marek Olšák 16211459436d9314681087463f2c006c58b6fcff396Marek Olšák /* resume queries */ 1638a125afa6e88a3eeddba8c7fdc1a75c9b99d5489Nicolai Hähnle if (!LIST_IS_EMPTY(&ctx->active_timer_queries)) 16457245cce52d544c61f03fc966850f0f94e8118d5Marek Olšák r600_resume_timer_queries(ctx); 1659e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle if (ctx->nontimer_queries_suspended_by_flush) { 1669e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle ctx->nontimer_queries_suspended_by_flush = false; 1678a125afa6e88a3eeddba8c7fdc1a75c9b99d5489Nicolai Hähnle r600_resume_nontimer_queries(ctx); 1689e5e702cfb380af461062c96d974027da8d5f17aNicolai Hähnle } 16911459436d9314681087463f2c006c58b6fcff396Marek Olšák} 17011459436d9314681087463f2c006c58b6fcff396Marek Olšák 171adfadeadd8316e95626fec4771393d32a70af649Marek Olšákstatic void r600_flush_from_st(struct pipe_context *ctx, 172adfadeadd8316e95626fec4771393d32a70af649Marek Olšák struct pipe_fence_handle **fence, 173adfadeadd8316e95626fec4771393d32a70af649Marek Olšák unsigned flags) 174adfadeadd8316e95626fec4771393d32a70af649Marek Olšák{ 1753b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_screen *screen = ctx->screen; 176adfadeadd8316e95626fec4771393d32a70af649Marek Olšák struct r600_common_context *rctx = (struct r600_common_context *)ctx; 177adfadeadd8316e95626fec4771393d32a70af649Marek Olšák unsigned rflags = 0; 1783b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle *gfx_fence = NULL; 1793b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle *sdma_fence = NULL; 180adfadeadd8316e95626fec4771393d32a70af649Marek Olšák 181adfadeadd8316e95626fec4771393d32a70af649Marek Olšák if (flags & PIPE_FLUSH_END_OF_FRAME) 182adfadeadd8316e95626fec4771393d32a70af649Marek Olšák rflags |= RADEON_FLUSH_END_OF_FRAME; 183adfadeadd8316e95626fec4771393d32a70af649Marek Olšák 1846cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák if (rctx->dma.cs) { 1856cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->dma.flush(rctx, rflags, fence ? &sdma_fence : NULL); 1863b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák } 1876cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->gfx.flush(rctx, rflags, fence ? &gfx_fence : NULL); 1883b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 1893b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák /* Both engines can signal out of order, so we need to keep both fences. */ 1903b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (gfx_fence || sdma_fence) { 1913b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct r600_multi_fence *multi_fence = 1923b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák CALLOC_STRUCT(r600_multi_fence); 1933b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (!multi_fence) 1943b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák return; 1953b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 1963b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák multi_fence->reference.count = 1; 1973b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák multi_fence->gfx = gfx_fence; 1983b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák multi_fence->sdma = sdma_fence; 1993b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 2003b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák screen->fence_reference(screen, fence, NULL); 2013b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák *fence = (struct pipe_fence_handle*)multi_fence; 202adfadeadd8316e95626fec4771393d32a70af649Marek Olšák } 203adfadeadd8316e95626fec4771393d32a70af649Marek Olšák} 204adfadeadd8316e95626fec4771393d32a70af649Marek Olšák 20570cf6639c331342619e65c46db925d115bf51920Marek Olšákstatic void r600_flush_dma_ring(void *ctx, unsigned flags, 20670cf6639c331342619e65c46db925d115bf51920Marek Olšák struct pipe_fence_handle **fence) 207087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider{ 208087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider struct r600_common_context *rctx = (struct r600_common_context *)ctx; 2096cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák struct radeon_winsys_cs *cs = rctx->dma.cs; 210087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider 2118569f9a87ec8d1bea3946476d5cc0be2a58ea149Marek Olšák if (cs->cdw) 2128569f9a87ec8d1bea3946476d5cc0be2a58ea149Marek Olšák rctx->ws->cs_flush(cs, flags, &rctx->last_sdma_fence, 0); 2137f9122c9680a882fee5a9d5a8e09c3e3b7466937Marek Olšák if (fence) 2147f9122c9680a882fee5a9d5a8e09c3e3b7466937Marek Olšák rctx->ws->fence_reference(fence, rctx->last_sdma_fence); 215087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider} 216087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider 217914365c0eb039f66370cff166428c703e02ad510Marek Olšákstatic enum pipe_reset_status r600_get_reset_status(struct pipe_context *ctx) 218914365c0eb039f66370cff166428c703e02ad510Marek Olšák{ 219914365c0eb039f66370cff166428c703e02ad510Marek Olšák struct r600_common_context *rctx = (struct r600_common_context *)ctx; 220914365c0eb039f66370cff166428c703e02ad510Marek Olšák unsigned latest = rctx->ws->query_value(rctx->ws, 221914365c0eb039f66370cff166428c703e02ad510Marek Olšák RADEON_GPU_RESET_COUNTER); 222914365c0eb039f66370cff166428c703e02ad510Marek Olšák 223914365c0eb039f66370cff166428c703e02ad510Marek Olšák if (rctx->gpu_reset_counter == latest) 224914365c0eb039f66370cff166428c703e02ad510Marek Olšák return PIPE_NO_RESET; 225914365c0eb039f66370cff166428c703e02ad510Marek Olšák 226914365c0eb039f66370cff166428c703e02ad510Marek Olšák rctx->gpu_reset_counter = latest; 227914365c0eb039f66370cff166428c703e02ad510Marek Olšák return PIPE_UNKNOWN_CONTEXT_RESET; 228914365c0eb039f66370cff166428c703e02ad510Marek Olšák} 229914365c0eb039f66370cff166428c703e02ad510Marek Olšák 230b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnlestatic void r600_set_debug_callback(struct pipe_context *ctx, 231b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle const struct pipe_debug_callback *cb) 232b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle{ 233b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle struct r600_common_context *rctx = (struct r600_common_context *)ctx; 234b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle 235b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle if (cb) 236b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle rctx->debug = *cb; 237b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle else 238b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle memset(&rctx->debug, 0, sizeof(rctx->debug)); 239b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle} 240b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle 241f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšákbool r600_common_context_init(struct r600_common_context *rctx, 242f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák struct r600_common_screen *rscreen) 243f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák{ 244f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák util_slab_create(&rctx->pool_transfers, 245f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák sizeof(struct r600_transfer), 64, 246f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák UTIL_SLAB_SINGLETHREADED); 247f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 248f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->screen = rscreen; 249f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->ws = rscreen->ws; 250f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->family = rscreen->family; 251f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->chip_class = rscreen->chip_class; 25271ce92200e0314a0878088dec8c0c2a0270bc4dcMarek Olšák 253bfc14796b077444011c81f544ceec5d8592c5c77Marek Olšák if (rscreen->chip_class >= CIK) 254bfc14796b077444011c81f544ceec5d8592c5c77Marek Olšák rctx->max_db = MAX2(8, rscreen->info.r600_num_backends); 25571ce92200e0314a0878088dec8c0c2a0270bc4dcMarek Olšák else if (rscreen->chip_class >= EVERGREEN) 25671ce92200e0314a0878088dec8c0c2a0270bc4dcMarek Olšák rctx->max_db = 8; 25771ce92200e0314a0878088dec8c0c2a0270bc4dcMarek Olšák else 25871ce92200e0314a0878088dec8c0c2a0270bc4dcMarek Olšák rctx->max_db = 4; 259f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 260f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->b.transfer_map = u_transfer_map_vtbl; 261b409524fef1b02c717b4cc1fef70d5710781f824Marek Olšák rctx->b.transfer_flush_region = u_transfer_flush_region_vtbl; 262f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->b.transfer_unmap = u_transfer_unmap_vtbl; 263f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->b.transfer_inline_write = u_default_transfer_inline_write; 2646381dd7e9dd22987df21624965cc82cbeec237a3Marek Olšák rctx->b.memory_barrier = r600_memory_barrier; 265adfadeadd8316e95626fec4771393d32a70af649Marek Olšák rctx->b.flush = r600_flush_from_st; 266b6847062dd5c504023dfbef8e6b3118136ee506cNicolai Hähnle rctx->b.set_debug_callback = r600_set_debug_callback; 267f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 268914365c0eb039f66370cff166428c703e02ad510Marek Olšák if (rscreen->info.drm_major == 2 && rscreen->info.drm_minor >= 43) { 269914365c0eb039f66370cff166428c703e02ad510Marek Olšák rctx->b.get_device_reset_status = r600_get_reset_status; 270914365c0eb039f66370cff166428c703e02ad510Marek Olšák rctx->gpu_reset_counter = 271914365c0eb039f66370cff166428c703e02ad510Marek Olšák rctx->ws->query_value(rctx->ws, 272914365c0eb039f66370cff166428c703e02ad510Marek Olšák RADEON_GPU_RESET_COUNTER); 273914365c0eb039f66370cff166428c703e02ad510Marek Olšák } 274914365c0eb039f66370cff166428c703e02ad510Marek Olšák 27579f28cdb983b7faf9d3008fae541a30e34ccce5aMarek Olšák LIST_INITHEAD(&rctx->texture_buffers); 27679f28cdb983b7faf9d3008fae541a30e34ccce5aMarek Olšák 2779855477e903e00f7457adb15594048416444b992Marek Olšák r600_init_context_texture_functions(rctx); 278f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák r600_streamout_init(rctx); 279f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák r600_query_init(rctx); 28099d9d7c0d69c076d84334892ee12f921fe243319Marek Olšák cayman_init_msaa(&rctx->b); 281f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 282f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->allocator_so_filled_size = u_suballocator_create(&rctx->b, 4096, 4, 283c32114460dbb7f33885c181a0d7dee07b15b8751Marek Olšák 0, PIPE_USAGE_DEFAULT, TRUE); 284f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (!rctx->allocator_so_filled_size) 285f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák return false; 286f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 28737d0aea772a39f9ae7fe3d791e23c1be03ccf9deMarek Olšák rctx->uploader = u_upload_create(&rctx->b, 1024 * 1024, 288f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák PIPE_BIND_INDEX_BUFFER | 289ecb2da1559bcb9a9eec7ac224c8ff47b026c95ffMarek Olšák PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM); 290f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (!rctx->uploader) 291f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák return false; 292f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 29342d9f6323a523d786fc3797587fdf63048beccebMarek Olšák rctx->ctx = rctx->ws->ctx_create(rctx->ws); 29442d9f6323a523d786fc3797587fdf63048beccebMarek Olšák if (!rctx->ctx) 29542d9f6323a523d786fc3797587fdf63048beccebMarek Olšák return false; 29642d9f6323a523d786fc3797587fdf63048beccebMarek Olšák 297087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider if (rscreen->info.r600_has_dma && !(rscreen->debug_flags & DBG_NO_ASYNC_DMA)) { 2986cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->dma.cs = rctx->ws->cs_create(rctx->ctx, RING_DMA, 2996cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák r600_flush_dma_ring, 3006cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx, NULL); 3016cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->dma.flush = r600_flush_dma_ring; 302087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider } 303087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8Niels Ole Salscheider 304f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák return true; 305f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák} 306f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 307f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšákvoid r600_common_context_cleanup(struct r600_common_context *rctx) 308f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák{ 3096cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák if (rctx->gfx.cs) 3106cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->ws->cs_destroy(rctx->gfx.cs); 3116cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák if (rctx->dma.cs) 3126cc8f6c6a72b1aab7bb506deb220e04ae50d8c2bMarek Olšák rctx->ws->cs_destroy(rctx->dma.cs); 31342d9f6323a523d786fc3797587fdf63048beccebMarek Olšák if (rctx->ctx) 31442d9f6323a523d786fc3797587fdf63048beccebMarek Olšák rctx->ws->ctx_destroy(rctx->ctx); 315f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 316f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (rctx->uploader) { 317f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák u_upload_destroy(rctx->uploader); 318f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák } 319f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 320f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák util_slab_destroy(&rctx->pool_transfers); 321f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 322f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (rctx->allocator_so_filled_size) { 323f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák u_suballocator_destroy(rctx->allocator_so_filled_size); 324f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák } 3257f9122c9680a882fee5a9d5a8e09c3e3b7466937Marek Olšák rctx->ws->fence_reference(&rctx->last_sdma_fence, NULL); 326f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák} 327f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 328f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšákvoid r600_context_add_resource_size(struct pipe_context *ctx, struct pipe_resource *r) 329f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák{ 330f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák struct r600_common_context *rctx = (struct r600_common_context *)ctx; 331f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák struct r600_resource *rr = (struct r600_resource *)r; 332f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 33313eb5f596bc8ece3d1805b388aa53917e6158d7bEdward O'Callaghan if (!r) { 334f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák return; 335f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák } 336f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 337f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák /* 338f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * The idea is to compute a gross estimate of memory requirement of 339f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * each draw call. After each draw call, memory will be precisely 340f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * accounted. So the uncertainty is only on the current draw call. 341f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * In practice this gave very good estimate (+/- 10% of the target 342f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * memory limit). 343f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák */ 344f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (rr->domains & RADEON_DOMAIN_GTT) { 345f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->gtt += rr->buf->size; 346f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák } 347f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák if (rr->domains & RADEON_DOMAIN_VRAM) { 348f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák rctx->vram += rr->buf->size; 349f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák } 350f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák} 351f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 352f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák/* 353f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák * pipe_screen 354f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák */ 355f4612105e82834e6f46a70dd90c81e982b6506caMarek Olšák 356ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšákstatic const struct debug_named_value common_debug_options[] = { 357ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák /* logging */ 3584e9aa6711f933f9c85c9fd09831060541bc2003aMarek Olšák { "tex", DBG_TEX, "Print texture info" }, 359ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "compute", DBG_COMPUTE, "Print compute info" }, 360ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "vm", DBG_VM, "Print virtual addresses when creating resources" }, 361ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "trace_cs", DBG_TRACE_CS, "Trace cs and write rlockup_<csid>.c file with faulty cs" }, 362d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák { "info", DBG_INFO, "Print driver information" }, 363ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák 364ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák /* shaders */ 365ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "fs", DBG_FS, "Print fetch shaders" }, 366ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "vs", DBG_VS, "Print vertex shaders" }, 367ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "gs", DBG_GS, "Print geometry shaders" }, 368ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "ps", DBG_PS, "Print pixel shaders" }, 369ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák { "cs", DBG_CS, "Print compute shaders" }, 370c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák { "tcs", DBG_TCS, "Print tessellation control shaders" }, 371c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák { "tes", DBG_TES, "Print tessellation evaluation shaders" }, 372ac19a896d3de13b7d064d01c575f46f4191ef37cMarek Olšák { "noir", DBG_NO_IR, "Don't print the LLVM IR"}, 3732dcbd427da74c8f2b6f46e789924a7ced67be260Marek Olšák { "notgsi", DBG_NO_TGSI, "Don't print the TGSI"}, 3743063c5e3d3fefdc5eed7600882bd08f56bf86db8Marek Olšák { "noasm", DBG_NO_ASM, "Don't print disassembled shaders"}, 375ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák 376ecbd3a545a3cb5f2c112ae0b02abfcbb3240ec6fMarek Olšák /* features */ 377ecbd3a545a3cb5f2c112ae0b02abfcbb3240ec6fMarek Olšák { "nodma", DBG_NO_ASYNC_DMA, "Disable asynchronous DMA" }, 37814bdcc6ff98664552216acfdb7e35d0b128003efAndreas Boll { "nohyperz", DBG_NO_HYPERZ, "Disable Hyper-Z" }, 379e1374d86fecb58edc9cf9b456b05d74a0034eafdMarek Olšák /* GL uses the word INVALIDATE, gallium uses the word DISCARD */ 380e1374d86fecb58edc9cf9b456b05d74a0034eafdMarek Olšák { "noinvalrange", DBG_NO_DISCARD_RANGE, "Disable handling of INVALIDATE_RANGE map flags" }, 381ecbd3a545a3cb5f2c112ae0b02abfcbb3240ec6fMarek Olšák { "no2d", DBG_NO_2D_TILING, "Disable 2D tiling" }, 382ecbd3a545a3cb5f2c112ae0b02abfcbb3240ec6fMarek Olšák { "notiling", DBG_NO_TILING, "Disable tiling" }, 3830e229b8c5aa5eb758cbc9e1176001e0f4d985a6aMarek Olšák { "switch_on_eop", DBG_SWITCH_ON_EOP, "Program WD/IA to switch on end-of-packet." }, 384d13d2fd16132f351ec7c8184f165faeac3b31bb4Marek Olšák { "forcedma", DBG_FORCE_DMA, "Use asynchronous DMA for all operations when possible." }, 385b79c620663dc4eab1ad342a7961fa7aa16cff562Marek Olšák { "precompile", DBG_PRECOMPILE, "Compile one shader variant at shader creation." }, 3867e5d56394bd53607d0158b49f36ac1428acb7954Marek Olšák { "nowc", DBG_NO_WC, "Disable GTT write combining" }, 3879bd7928a35c27d3d0898db83bc8db823a6dbee5eMarek Olšák { "check_vm", DBG_CHECK_VM, "Check VM faults and dump debug info." }, 3883aebc596b339b1b787ed0dfc27793263d48b2819Marek Olšák { "nodcc", DBG_NO_DCC, "Disable DCC." }, 3893aebc596b339b1b787ed0dfc27793263d48b2819Marek Olšák { "nodccclear", DBG_NO_DCC_CLEAR, "Disable DCC fast clear." }, 390de887ba90ce077a0243269aa0c72a1ab0d2d3ff4Marek Olšák { "norbplus", DBG_NO_RB_PLUS, "Disable RB+ on Stoney." }, 391e1374d86fecb58edc9cf9b456b05d74a0034eafdMarek Olšák 392ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák DEBUG_NAMED_VALUE_END /* must be last */ 393ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák}; 394ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák 3954df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšákstatic const char* r600_get_vendor(struct pipe_screen* pscreen) 3964df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák{ 3974df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák return "X.Org"; 3984df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák} 3994df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák 40076039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilottastatic const char* r600_get_device_vendor(struct pipe_screen* pscreen) 40176039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilotta{ 40276039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilotta return "AMD"; 40376039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilotta} 40476039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilotta 405a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšákstatic const char* r600_get_chip_name(struct r600_common_screen *rscreen) 4064df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák{ 407a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák switch (rscreen->info.family) { 4084df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_R600: return "AMD R600"; 4094df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV610: return "AMD RV610"; 4104df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV630: return "AMD RV630"; 4114df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV670: return "AMD RV670"; 4124df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV620: return "AMD RV620"; 4134df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV635: return "AMD RV635"; 4144df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RS780: return "AMD RS780"; 4154df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RS880: return "AMD RS880"; 4164df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV770: return "AMD RV770"; 4174df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV730: return "AMD RV730"; 4184df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV710: return "AMD RV710"; 4194df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_RV740: return "AMD RV740"; 4204df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_CEDAR: return "AMD CEDAR"; 4214df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_REDWOOD: return "AMD REDWOOD"; 4224df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_JUNIPER: return "AMD JUNIPER"; 4234df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_CYPRESS: return "AMD CYPRESS"; 4244df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_HEMLOCK: return "AMD HEMLOCK"; 4254df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_PALM: return "AMD PALM"; 4264df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_SUMO: return "AMD SUMO"; 4274df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_SUMO2: return "AMD SUMO2"; 4284df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_BARTS: return "AMD BARTS"; 4294df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_TURKS: return "AMD TURKS"; 4304df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_CAICOS: return "AMD CAICOS"; 4314df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_CAYMAN: return "AMD CAYMAN"; 4324df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_ARUBA: return "AMD ARUBA"; 4334df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_TAHITI: return "AMD TAHITI"; 4344df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_PITCAIRN: return "AMD PITCAIRN"; 4354df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_VERDE: return "AMD CAPE VERDE"; 4364df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_OLAND: return "AMD OLAND"; 4374df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_HAINAN: return "AMD HAINAN"; 4384df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_BONAIRE: return "AMD BONAIRE"; 4394df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_KAVERI: return "AMD KAVERI"; 4404df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_KABINI: return "AMD KABINI"; 4414df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák case CHIP_HAWAII: return "AMD HAWAII"; 442aad669b1e90491f7c3951016456e8a2660d91a85Samuel Li case CHIP_MULLINS: return "AMD MULLINS"; 4432d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_TONGA: return "AMD TONGA"; 4442d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_ICELAND: return "AMD ICELAND"; 4452d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_CARRIZO: return "AMD CARRIZO"; 446767ad50a10d01274b1d1a877add12b5552ba6984Alex Deucher case CHIP_FIJI: return "AMD FIJI"; 447bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li case CHIP_STONEY: return "AMD STONEY"; 4484df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák default: return "AMD unknown"; 4494df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák } 4504df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák} 4514df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák 452a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšákstatic const char* r600_get_name(struct pipe_screen* pscreen) 453a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák{ 454a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák struct r600_common_screen *rscreen = (struct r600_common_screen*)pscreen; 455a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák 456a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák return rscreen->renderer_string; 457a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák} 458a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák 459d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšákstatic float r600_get_paramf(struct pipe_screen* pscreen, 460d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák enum pipe_capf param) 461d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák{ 462d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák struct r600_common_screen *rscreen = (struct r600_common_screen *)pscreen; 463d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák 464d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák switch (param) { 465d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_LINE_WIDTH: 466d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_LINE_WIDTH_AA: 467d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_POINT_WIDTH: 468d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_POINT_WIDTH_AA: 469d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák if (rscreen->family >= CHIP_CEDAR) 470d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 16384.0f; 471d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák else 472d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 8192.0f; 473d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY: 474d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 16.0f; 475d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: 476d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 16.0f; 477d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_GUARD_BAND_LEFT: 478d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_GUARD_BAND_TOP: 479d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_GUARD_BAND_RIGHT: 480d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_CAPF_GUARD_BAND_BOTTOM: 481d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 0.0f; 482d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák } 483d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 0.0f; 484d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák} 485d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák 486d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšákstatic int r600_get_video_param(struct pipe_screen *screen, 487d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák enum pipe_video_profile profile, 488d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák enum pipe_video_entrypoint entrypoint, 489d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák enum pipe_video_cap param) 490d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák{ 491d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák switch (param) { 492d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_SUPPORTED: 493d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return vl_profile_supported(screen, profile, entrypoint); 494d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_NPOT_TEXTURES: 495d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 1; 496d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_MAX_WIDTH: 497d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_MAX_HEIGHT: 498d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return vl_video_buffer_max_size(screen); 499d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_PREFERED_FORMAT: 500d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return PIPE_FORMAT_NV12; 501d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_PREFERS_INTERLACED: 502d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return false; 503d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED: 504d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return false; 505d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE: 506d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return true; 507d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák case PIPE_VIDEO_CAP_MAX_LEVEL: 508d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return vl_level_supported(screen, profile); 509d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák default: 510d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák return 0; 511d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák } 512d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák} 513d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák 51465dc588bfd3b8145131340ffe77f216be58378acMarek Olšákconst char *r600_get_llvm_processor_name(enum radeon_family family) 51565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák{ 51665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák switch (family) { 51765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_R600: 51865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV630: 51965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV635: 52065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV670: 52165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "r600"; 52265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV610: 52365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV620: 52465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RS780: 52565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RS880: 52665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "rs880"; 52765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV710: 52865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "rv710"; 52965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV730: 53065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "rv730"; 53165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV740: 53265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_RV770: 53365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "rv770"; 53465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_PALM: 53565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_CEDAR: 53665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "cedar"; 53765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_SUMO: 53865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_SUMO2: 53965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "sumo"; 54065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_REDWOOD: 54165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "redwood"; 54265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_JUNIPER: 54365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "juniper"; 54465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_HEMLOCK: 54565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_CYPRESS: 54665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "cypress"; 54765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_BARTS: 54865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "barts"; 54965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_TURKS: 55065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "turks"; 55165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_CAICOS: 55265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "caicos"; 55365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_CAYMAN: 55465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_ARUBA: 55565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return "cayman"; 55665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 55765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_TAHITI: return "tahiti"; 55865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_PITCAIRN: return "pitcairn"; 55965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_VERDE: return "verde"; 56065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_OLAND: return "oland"; 56165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_HAINAN: return "hainan"; 56265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_BONAIRE: return "bonaire"; 56365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_KABINI: return "kabini"; 56465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_KAVERI: return "kaveri"; 56565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case CHIP_HAWAII: return "hawaii"; 566aad669b1e90491f7c3951016456e8a2660d91a85Samuel Li case CHIP_MULLINS: 567aad669b1e90491f7c3951016456e8a2660d91a85Samuel Li return "mullins"; 5682d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_TONGA: return "tonga"; 5692d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_ICELAND: return "iceland"; 5702d1952e2a5abd273983374b420371d263388bb20Marek Olšák case CHIP_CARRIZO: return "carrizo"; 571bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li#if HAVE_LLVM <= 0x0307 572dd27825c8cf0e7b55ebaa139e299f275943d22f6Marek Olšák case CHIP_FIJI: return "tonga"; 573bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li case CHIP_STONEY: return "carrizo"; 574bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li#else 575dd27825c8cf0e7b55ebaa139e299f275943d22f6Marek Olšák case CHIP_FIJI: return "fiji"; 576bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li case CHIP_STONEY: return "stoney"; 577bf0d0ce0d57dce5df8195942d2eda6389d341feaSamuel Li#endif 57865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák default: return ""; 57965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 58065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák} 58165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 58265dc588bfd3b8145131340ffe77f216be58378acMarek Olšákstatic int r600_get_compute_param(struct pipe_screen *screen, 58365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák enum pipe_compute_cap param, 58465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák void *ret) 58565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák{ 58665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák struct r600_common_screen *rscreen = (struct r600_common_screen *)screen; 58765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 58865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák //TODO: select these params by asic 58965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák switch (param) { 59065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_IR_TARGET: { 5918109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard const char *gpu; 592a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard const char *triple; 593a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard if (rscreen->family <= CHIP_ARUBA || HAVE_LLVM < 0x0306) { 594a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard triple = "r600--"; 595a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard } else { 596a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard triple = "amdgcn--"; 597a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard } 5988109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard switch(rscreen->family) { 5998109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard /* Clang < 3.6 is missing Hainan in its list of 6008109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard * GPUs, so we need to use the name of a similar GPU. 6018109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard */ 6028109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard#if HAVE_LLVM < 0x0306 6038109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard case CHIP_HAINAN: 6048109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard gpu = "oland"; 6058109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard break; 6068109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard#endif 6078109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard default: 6088109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard gpu = r600_get_llvm_processor_name(rscreen->family); 6098109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard break; 6108109664dedee588dc98c9a7c25bd40c0eb56c35fTom Stellard } 61165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 612a8ef880a1b38cbcfc26e9f829338739d16cece99Tom Stellard sprintf(ret, "%s-%s", gpu, triple); 61365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 614ee31c8d7067ec5a563cdce5a12d8e077db0a7f67Michel Dänzer /* +2 for dash and terminating NIL byte */ 615ee31c8d7067ec5a563cdce5a12d8e077db0a7f67Michel Dänzer return (strlen(triple) + strlen(gpu) + 2) * sizeof(char); 61665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 61765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_GRID_DIMENSION: 61865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 61965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *grid_dimension = ret; 62065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák grid_dimension[0] = 3; 62165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 62265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return 1 * sizeof(uint64_t); 62365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 62465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_GRID_SIZE: 62565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 62665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *grid_size = ret; 62765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák grid_size[0] = 65535; 62865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák grid_size[1] = 65535; 62965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák grid_size[2] = 1; 63065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 63165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return 3 * sizeof(uint64_t) ; 63265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 63365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE: 63465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 63565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *block_size = ret; 63665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák block_size[0] = 256; 63765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák block_size[1] = 256; 63865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák block_size[2] = 256; 63965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 64065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return 3 * sizeof(uint64_t); 64165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 64265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK: 64365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 64465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *max_threads_per_block = ret; 64565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák *max_threads_per_block = 256; 64665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 64765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return sizeof(uint64_t); 64865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 64965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE: 65065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 65165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *max_global_size = ret; 65277ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard uint64_t max_mem_alloc_size; 65377ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard 65477ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard r600_get_compute_param(screen, 65577ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE, 65677ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard &max_mem_alloc_size); 65777ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard 65877ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard /* In OpenCL, the MAX_MEM_ALLOC_SIZE must be at least 65977ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard * 1/4 of the MAX_GLOBAL_SIZE. Since the 66077ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard * MAX_MEM_ALLOC_SIZE is fixed for older kernels, 66177ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard * make sure we never report more than 66277ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard * 4 * MAX_MEM_ALLOC_SIZE. 66377ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard */ 66477ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard *max_global_size = MIN2(4 * max_mem_alloc_size, 66577ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard rscreen->info.gart_size + 66677ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard rscreen->info.vram_size); 66765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 66865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return sizeof(uint64_t); 66965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 67065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE: 67165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 67265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *max_local_size = ret; 67365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák /* Value reported by the closed source driver. */ 67465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák *max_local_size = 32768; 67565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 67665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return sizeof(uint64_t); 67765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 67865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_INPUT_SIZE: 67965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 68065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *max_input_size = ret; 68165dc588bfd3b8145131340ffe77f216be58378acMarek Olšák /* Value reported by the closed source driver. */ 68265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák *max_input_size = 1024; 68365dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 68465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return sizeof(uint64_t); 68565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 68665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák case PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE: 68765dc588bfd3b8145131340ffe77f216be58378acMarek Olšák if (ret) { 68865dc588bfd3b8145131340ffe77f216be58378acMarek Olšák uint64_t *max_mem_alloc_size = ret; 68977ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard 69077ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard /* XXX: The limit in older kernels is 256 MB. We 69177ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard * should add a query here for newer kernels. 69265dc588bfd3b8145131340ffe77f216be58378acMarek Olšák */ 69377ea58ca81eb3f5521d67c4459d3469df6d5ffd8Tom Stellard *max_mem_alloc_size = 256 * 1024 * 1024; 69465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 69565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák return sizeof(uint64_t); 69665dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 6970a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard case PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY: 6980a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard if (ret) { 6990a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard uint32_t *max_clock_frequency = ret; 7000a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard *max_clock_frequency = rscreen->info.max_sclk; 7010a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard } 7020a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard return sizeof(uint32_t); 7030a41054b7faa9df4e4b8802f646a7e078389eb89Tom Stellard 70403aab2af16778f3ab8130ec664fd6a6066ca869aBruno Jiménez case PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS: 70503aab2af16778f3ab8130ec664fd6a6066ca869aBruno Jiménez if (ret) { 70603aab2af16778f3ab8130ec664fd6a6066ca869aBruno Jiménez uint32_t *max_compute_units = ret; 7070e1c085f17fdd774ff6b060dd03422e74ea3e2ccTom Stellard *max_compute_units = rscreen->info.max_compute_units; 70803aab2af16778f3ab8130ec664fd6a6066ca869aBruno Jiménez } 70903aab2af16778f3ab8130ec664fd6a6066ca869aBruno Jiménez return sizeof(uint32_t); 7101607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard 7111607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard case PIPE_COMPUTE_CAP_IMAGES_SUPPORTED: 7121607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard if (ret) { 7131607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard uint32_t *images_supported = ret; 7141607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard *images_supported = 0; 7151607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard } 7161607a8efc13aace755fe46eba8eb755cd93ea4e4Tom Stellard return sizeof(uint32_t); 717b77eaafcdc1b9f050d44d46608e542a9e593da3eMarek Olšák case PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE: 718b77eaafcdc1b9f050d44d46608e542a9e593da3eMarek Olšák break; /* unused */ 719249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy case PIPE_COMPUTE_CAP_SUBGROUP_SIZE: 720249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy if (ret) { 721249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy uint32_t *subgroup_size = ret; 722249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy *subgroup_size = r600_wavefront_size(rscreen->family); 723249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy } 724249a9df7fce0a6bebc70852ab583c5324208bf06Grigori Goronzy return sizeof(uint32_t); 72565dc588bfd3b8145131340ffe77f216be58378acMarek Olšák } 726d6fd8a97711eb065603a8d667ff5dbe68a246439Michel Dänzer 727d6fd8a97711eb065603a8d667ff5dbe68a246439Michel Dänzer fprintf(stderr, "unknown PIPE_COMPUTE_CAP %d\n", param); 728d6fd8a97711eb065603a8d667ff5dbe68a246439Michel Dänzer return 0; 72965dc588bfd3b8145131340ffe77f216be58378acMarek Olšák} 73065dc588bfd3b8145131340ffe77f216be58378acMarek Olšák 731ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšákstatic uint64_t r600_get_timestamp(struct pipe_screen *screen) 732ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák{ 733ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák struct r600_common_screen *rscreen = (struct r600_common_screen*)screen; 734ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák 735ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák return 1000000 * rscreen->ws->query_value(rscreen->ws, RADEON_TIMESTAMP) / 736ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák rscreen->info.r600_clock_crystal_freq; 737ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák} 738ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák 7399807556e863ca4f49905598a18912852e96fae76Marek Olšákstatic void r600_fence_reference(struct pipe_screen *screen, 7403b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle **dst, 7413b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct pipe_fence_handle *src) 7429807556e863ca4f49905598a18912852e96fae76Marek Olšák{ 7433b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct radeon_winsys *ws = ((struct r600_common_screen*)screen)->ws; 7443b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct r600_multi_fence **rdst = (struct r600_multi_fence **)dst; 7453b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct r600_multi_fence *rsrc = (struct r600_multi_fence *)src; 7463b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 7473b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (pipe_reference(&(*rdst)->reference, &rsrc->reference)) { 7483b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák ws->fence_reference(&(*rdst)->gfx, NULL); 7493b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák ws->fence_reference(&(*rdst)->sdma, NULL); 7503b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák FREE(*rdst); 7513b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák } 7523b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák *rdst = rsrc; 7539807556e863ca4f49905598a18912852e96fae76Marek Olšák} 7549807556e863ca4f49905598a18912852e96fae76Marek Olšák 7559807556e863ca4f49905598a18912852e96fae76Marek Olšákstatic boolean r600_fence_finish(struct pipe_screen *screen, 7569807556e863ca4f49905598a18912852e96fae76Marek Olšák struct pipe_fence_handle *fence, 7579807556e863ca4f49905598a18912852e96fae76Marek Olšák uint64_t timeout) 7589807556e863ca4f49905598a18912852e96fae76Marek Olšák{ 7599807556e863ca4f49905598a18912852e96fae76Marek Olšák struct radeon_winsys *rws = ((struct r600_common_screen*)screen)->ws; 7603b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák struct r600_multi_fence *rfence = (struct r600_multi_fence *)fence; 7613b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák int64_t abs_timeout = os_time_get_absolute_timeout(timeout); 7623b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 7633b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (rfence->sdma) { 7643b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (!rws->fence_wait(rws, rfence->sdma, timeout)) 7653b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák return false; 7663b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 7673b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák /* Recompute the timeout after waiting. */ 7683b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (timeout && timeout != PIPE_TIMEOUT_INFINITE) { 7693b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák int64_t time = os_time_get_nano(); 7703b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák timeout = abs_timeout > time ? abs_timeout - time : 0; 7713b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák } 7723b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák } 7733b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák 7743b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák if (!rfence->gfx) 7753b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák return true; 7769807556e863ca4f49905598a18912852e96fae76Marek Olšák 7773b37155a68acc351cba86a1fa142bd0de2192d4cMarek Olšák return rws->fence_wait(rws, rfence->gfx, timeout); 7789807556e863ca4f49905598a18912852e96fae76Marek Olšák} 7799807556e863ca4f49905598a18912852e96fae76Marek Olšák 7801bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšákstatic bool r600_interpret_tiling(struct r600_common_screen *rscreen, 7811bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák uint32_t tiling_config) 7821bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák{ 7831bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch ((tiling_config & 0xe) >> 1) { 7841bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 7851bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 1; 7861bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 7871bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 7881bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 2; 7891bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 7901bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 2: 7911bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 4; 7921bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 7931bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 3: 7941bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 8; 7951bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 7961bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 7971bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 7981bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 7991bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8001bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch ((tiling_config & 0x30) >> 4) { 8011bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 8021bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_banks = 4; 8031bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8041bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 8051bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_banks = 8; 8061bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8071bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 8081bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 8091bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8101bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8111bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch ((tiling_config & 0xc0) >> 6) { 8121bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 8131bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 256; 8141bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8151bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 8161bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 512; 8171bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8181bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 8191bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 8201bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8211bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return true; 8221bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák} 8231bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8241bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšákstatic bool evergreen_interpret_tiling(struct r600_common_screen *rscreen, 8251bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák uint32_t tiling_config) 8261bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák{ 8271bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch (tiling_config & 0xf) { 8281bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 8291bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 1; 8301bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8311bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 8321bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 2; 8331bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8341bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 2: 8351bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 4; 8361bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8371bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 3: 8381bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_channels = 8; 8391bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8401bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 8411bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 8421bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8431bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8441bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch ((tiling_config & 0xf0) >> 4) { 8451bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 8461bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_banks = 4; 8471bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8481bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 8491bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_banks = 8; 8501bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8511bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 2: 8521bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.num_banks = 16; 8531bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8541bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 8551bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 8561bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8571bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8581bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák switch ((tiling_config & 0xf00) >> 8) { 8591bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 0: 8601bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 256; 8611bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8621bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák case 1: 8631bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 512; 8641bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák break; 8651bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák default: 8661bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 8671bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8681bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return true; 8691bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák} 8701bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8711bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšákstatic bool r600_init_tiling(struct r600_common_screen *rscreen) 8721bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák{ 8731bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák uint32_t tiling_config = rscreen->info.r600_tiling_config; 8741bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8751bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák /* set default group bytes, overridden by tiling info ioctl */ 8761bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák if (rscreen->chip_class <= R700) { 8771bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 256; 8781bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } else { 8791bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák rscreen->tiling_info.group_bytes = 512; 8801bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8811bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8821bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák if (!tiling_config) 8831bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return true; 8841bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 8851bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák if (rscreen->chip_class <= R700) { 8861bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return r600_interpret_tiling(rscreen, tiling_config); 8871bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } else { 8881bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return evergreen_interpret_tiling(rscreen, tiling_config); 8891bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 8901bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák} 8911bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák 892a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšákstruct pipe_resource *r600_resource_create_common(struct pipe_screen *screen, 893a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák const struct pipe_resource *templ) 894a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák{ 895a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák if (templ->target == PIPE_BUFFER) { 896a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák return r600_buffer_create(screen, templ, 4096); 897a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák } else { 898a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák return r600_texture_create(screen, templ); 899a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák } 900a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák} 901a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák 9021bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšákbool r600_common_screen_init(struct r600_common_screen *rscreen, 903d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák struct radeon_winsys *ws) 904d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák{ 905a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák char llvm_string[32] = {}; 906a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák 907d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák ws->query_info(ws, &rscreen->info); 908d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák 909b88f14702d9c02a34d517f95fe840527961631cdMarek Olšák#if HAVE_LLVM 910b88f14702d9c02a34d517f95fe840527961631cdMarek Olšák snprintf(llvm_string, sizeof(llvm_string), 911b88f14702d9c02a34d517f95fe840527961631cdMarek Olšák ", LLVM %i.%i.%i", (HAVE_LLVM >> 8) & 0xff, 912b88f14702d9c02a34d517f95fe840527961631cdMarek Olšák HAVE_LLVM & 0xff, MESA_LLVM_VERSION_PATCH); 913b88f14702d9c02a34d517f95fe840527961631cdMarek Olšák#endif 914a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák 915a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák snprintf(rscreen->renderer_string, sizeof(rscreen->renderer_string), 916a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák "%s (DRM %i.%i.%i%s)", 917a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák r600_get_chip_name(rscreen), rscreen->info.drm_major, 918a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák rscreen->info.drm_minor, rscreen->info.drm_patchlevel, 919a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák llvm_string); 920a3723fb9e32ab114dcffcf74946def92647c5f03Marek Olšák 9214df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák rscreen->b.get_name = r600_get_name; 9224df3f25fa2c0bcf38be4a4fdcbb37428e4af10bdMarek Olšák rscreen->b.get_vendor = r600_get_vendor; 92376039b38f0ef54ca61cbe72b899dfcf0f0c724e4Giuseppe Bilotta rscreen->b.get_device_vendor = r600_get_device_vendor; 92465dc588bfd3b8145131340ffe77f216be58378acMarek Olšák rscreen->b.get_compute_param = r600_get_compute_param; 925d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák rscreen->b.get_paramf = r600_get_paramf; 926ba0c16f7b2283db9dbeef036cf54dd6b694e4eaaMarek Olšák rscreen->b.get_timestamp = r600_get_timestamp; 9279807556e863ca4f49905598a18912852e96fae76Marek Olšák rscreen->b.fence_finish = r600_fence_finish; 9289807556e863ca4f49905598a18912852e96fae76Marek Olšák rscreen->b.fence_reference = r600_fence_reference; 929a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák rscreen->b.resource_destroy = u_resource_destroy_vtbl; 9307713d594e4fbb9afb1ac67417b7871d436590548Marek Olšák rscreen->b.resource_from_user_memory = r600_buffer_from_user_memory; 931a9ae7635b77fc4fd9f4614fead63fefa6ff74f4eMarek Olšák 932d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák if (rscreen->info.has_uvd) { 9337bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König rscreen->b.get_video_param = rvid_get_video_param; 9347bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König rscreen->b.is_video_format_supported = rvid_is_format_supported; 935d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák } else { 936d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák rscreen->b.get_video_param = r600_get_video_param; 937d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák rscreen->b.is_video_format_supported = vl_video_buffer_is_format_supported; 938d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák } 939d41bd71bcfa43b3aad5abbb0da9f716e631042c4Marek Olšák 9409855477e903e00f7457adb15594048416444b992Marek Olšák r600_init_screen_texture_functions(rscreen); 941e117e74baf0e0482fd4c3c2fa412e7168889d286Nicolai Hähnle r600_init_screen_query_functions(rscreen); 9429807556e863ca4f49905598a18912852e96fae76Marek Olšák 943d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák rscreen->ws = ws; 944d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák rscreen->family = rscreen->info.family; 945d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák rscreen->chip_class = rscreen->info.chip_class; 946ba650ccf91a103d90d45b5927a8a9220e222cfc5Marek Olšák rscreen->debug_flags = debug_get_flags_option("R600_DEBUG", common_debug_options, 0); 94768f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák 9481bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák if (!r600_init_tiling(rscreen)) { 9491bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return false; 9501bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák } 9511bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák util_format_s3tc_init(); 95268f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák pipe_mutex_init(rscreen->aux_context_lock); 9536d05396b0047c74d740c53156eda1a8574403498Marek Olšák pipe_mutex_init(rscreen->gpu_load_mutex); 954ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák 9558ba70e0a7405005c079eb72f94999245c992aa91Marek Olšák if (((rscreen->info.drm_major == 2 && rscreen->info.drm_minor >= 28) || 9568ba70e0a7405005c079eb72f94999245c992aa91Marek Olšák rscreen->info.drm_major == 3) && 9578ba70e0a7405005c079eb72f94999245c992aa91Marek Olšák (rscreen->debug_flags & DBG_TRACE_CS)) { 958ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák rscreen->trace_bo = (struct r600_resource*)pipe_buffer_create(&rscreen->b, 959ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák PIPE_BIND_CUSTOM, 960ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák PIPE_USAGE_STAGING, 961ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák 4096); 962ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák if (rscreen->trace_bo) { 963cf811faeff1eaa1aef817ae45314cc3419c44222Marek Olšák rscreen->trace_ptr = rscreen->ws->buffer_map(rscreen->trace_bo->buf, NULL, 964ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák PIPE_TRANSFER_UNSYNCHRONIZED); 965ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák } 966ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák } 967ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák 968d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák if (rscreen->debug_flags & DBG_INFO) { 969d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("pci_id = 0x%x\n", rscreen->info.pci_id); 970d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("family = %i\n", rscreen->info.family); 971d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("chip_class = %i\n", rscreen->info.chip_class); 972d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("gart_size = %i MB\n", (int)(rscreen->info.gart_size >> 20)); 973d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("vram_size = %i MB\n", (int)(rscreen->info.vram_size >> 20)); 974d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("max_sclk = %i\n", rscreen->info.max_sclk); 975d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("max_compute_units = %i\n", rscreen->info.max_compute_units); 976d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("max_se = %i\n", rscreen->info.max_se); 977d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("max_sh_per_se = %i\n", rscreen->info.max_sh_per_se); 978d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("drm = %i.%i.%i\n", rscreen->info.drm_major, 979d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák rscreen->info.drm_minor, rscreen->info.drm_patchlevel); 980d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("has_uvd = %i\n", rscreen->info.has_uvd); 981d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("vce_fw_version = %i\n", rscreen->info.vce_fw_version); 982d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_num_backends = %i\n", rscreen->info.r600_num_backends); 983d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_clock_crystal_freq = %i\n", rscreen->info.r600_clock_crystal_freq); 984d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_tiling_config = 0x%x\n", rscreen->info.r600_tiling_config); 985d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_num_tile_pipes = %i\n", rscreen->info.r600_num_tile_pipes); 986d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_max_pipes = %i\n", rscreen->info.r600_max_pipes); 987d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_virtual_address = %i\n", rscreen->info.r600_virtual_address); 988d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_has_dma = %i\n", rscreen->info.r600_has_dma); 989d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_backend_map = %i\n", rscreen->info.r600_backend_map); 990d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("r600_backend_map_valid = %i\n", rscreen->info.r600_backend_map_valid); 991d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("si_tile_mode_array_valid = %i\n", rscreen->info.si_tile_mode_array_valid); 992d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák printf("cik_macrotile_mode_array_valid = %i\n", rscreen->info.cik_macrotile_mode_array_valid); 993d8269be1ceed29d2e00829e1fd4a7bbac389d967Marek Olšák } 9941bb77f81db0ed3d1b3dd14c055ff7a9679399bb1Marek Olšák return true; 99568f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák} 99668f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák 997ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšákvoid r600_destroy_common_screen(struct r600_common_screen *rscreen) 99868f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák{ 999ad22006892c5511dac7d0d680633a1b857da49fbNicolai Hähnle r600_perfcounters_destroy(rscreen); 10006d05396b0047c74d740c53156eda1a8574403498Marek Olšák r600_gpu_load_kill_thread(rscreen); 10016d05396b0047c74d740c53156eda1a8574403498Marek Olšák 10026d05396b0047c74d740c53156eda1a8574403498Marek Olšák pipe_mutex_destroy(rscreen->gpu_load_mutex); 100368f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák pipe_mutex_destroy(rscreen->aux_context_lock); 100468f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák rscreen->aux_context->destroy(rscreen->aux_context); 1005ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák 10065e3974338ed7ea49a41405f8c2e4bcd5fd1f5c80Marek Olšák if (rscreen->trace_bo) 1007ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák pipe_resource_reference((struct pipe_resource**)&rscreen->trace_bo, NULL); 1008ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák 1009ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák rscreen->ws->destroy(rscreen->ws); 1010ed42e95404a51298ea878a0d1cdcbc473612706aMarek Olšák FREE(rscreen); 1011d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák} 1012d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák 10130cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšákbool r600_can_dump_shader(struct r600_common_screen *rscreen, 10140cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák const struct tgsi_token *tokens) 10150cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák{ 1016b280516e114776c8d34c2d6fe0174762f3c85c0eTom Stellard /* Compute shader don't have tgsi_tokens */ 1017b280516e114776c8d34c2d6fe0174762f3c85c0eTom Stellard if (!tokens) 1018b280516e114776c8d34c2d6fe0174762f3c85c0eTom Stellard return (rscreen->debug_flags & DBG_CS) != 0; 1019b280516e114776c8d34c2d6fe0174762f3c85c0eTom Stellard 10200cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák switch (tgsi_get_processor_type(tokens)) { 10210cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák case TGSI_PROCESSOR_VERTEX: 10220cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák return (rscreen->debug_flags & DBG_VS) != 0; 1023c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák case TGSI_PROCESSOR_TESS_CTRL: 1024c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák return (rscreen->debug_flags & DBG_TCS) != 0; 1025c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák case TGSI_PROCESSOR_TESS_EVAL: 1026c2670463fd50f5b74066f0e0ab8f9a31dcb37429Marek Olšák return (rscreen->debug_flags & DBG_TES) != 0; 10270cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák case TGSI_PROCESSOR_GEOMETRY: 10280cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák return (rscreen->debug_flags & DBG_GS) != 0; 10290cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák case TGSI_PROCESSOR_FRAGMENT: 10300cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák return (rscreen->debug_flags & DBG_PS) != 0; 10310cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák case TGSI_PROCESSOR_COMPUTE: 10320cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák return (rscreen->debug_flags & DBG_CS) != 0; 10330cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák default: 10340cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák return false; 10350cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák } 10360cb9de1dd078395d541c32c0de81ea4f05147baaMarek Olšák} 103768f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák 103868f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšákvoid r600_screen_clear_buffer(struct r600_common_screen *rscreen, struct pipe_resource *dst, 1039edf18da85dd3b1865c4faaba650a8fa371b7103cMarek Olšák unsigned offset, unsigned size, unsigned value, 1040edf18da85dd3b1865c4faaba650a8fa371b7103cMarek Olšák bool is_framebuffer) 104168f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák{ 104268f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák struct r600_common_context *rctx = (struct r600_common_context*)rscreen->aux_context; 104368f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák 104468f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák pipe_mutex_lock(rscreen->aux_context_lock); 1045edf18da85dd3b1865c4faaba650a8fa371b7103cMarek Olšák rctx->clear_buffer(&rctx->b, dst, offset, size, value, is_framebuffer); 104668f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák rscreen->aux_context->flush(rscreen->aux_context, NULL, 0); 104768f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák pipe_mutex_unlock(rscreen->aux_context_lock); 104868f6dec32ed5eede361f76c8dbdf897652659bafMarek Olšák} 1049