diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-graphics/mesa/mesa/0006-winsys-radeon-move-radeon_winsys.h-up-one-directory.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-graphics/mesa/mesa/0006-winsys-radeon-move-radeon_winsys.h-up-one-directory.patch | 1483 |
1 files changed, 1483 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-graphics/mesa/mesa/0006-winsys-radeon-move-radeon_winsys.h-up-one-directory.patch b/meta-amdfalconx86/recipes-graphics/mesa/mesa/0006-winsys-radeon-move-radeon_winsys.h-up-one-directory.patch new file mode 100644 index 00000000..90c1f976 --- /dev/null +++ b/meta-amdfalconx86/recipes-graphics/mesa/mesa/0006-winsys-radeon-move-radeon_winsys.h-up-one-directory.patch @@ -0,0 +1,1483 @@ +From f31b21f2e2ec8f5ab61740ced586eb04dd4dcb37 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> +Date: Thu, 16 Apr 2015 22:50:33 +0200 +Subject: [PATCH 06/29] winsys/radeon: move radeon_winsys.h up one directory + +Signed-off-by: Arindam Nath <arindam.nath@amd.com> +--- + .../auxiliary/target-helpers/inline_drm_helper.h | 6 +- + src/gallium/drivers/r300/r300_chipset.c | 2 +- + src/gallium/drivers/r300/r300_context.h | 1 - + src/gallium/drivers/r300/r300_screen.h | 2 +- + src/gallium/drivers/radeon/r600_pipe_common.h | 2 +- + src/gallium/drivers/radeon/radeon_uvd.c | 1 - + src/gallium/drivers/radeon/radeon_uvd.h | 2 +- + src/gallium/drivers/radeon/radeon_vce.c | 1 - + src/gallium/drivers/radeon/radeon_vce_40_2_2.c | 1 - + src/gallium/drivers/radeon/radeon_video.c | 1 - + src/gallium/drivers/radeon/radeon_video.h | 2 +- + src/gallium/drivers/radeonsi/si_pm4.h | 2 +- + src/gallium/targets/pipe-loader/pipe_r300.c | 2 +- + src/gallium/targets/pipe-loader/pipe_r600.c | 2 +- + src/gallium/targets/pipe-loader/pipe_radeonsi.c | 2 +- + src/gallium/winsys/radeon/drm/Makefile.sources | 2 +- + src/gallium/winsys/radeon/drm/radeon_drm_winsys.h | 2 +- + src/gallium/winsys/radeon/drm/radeon_winsys.h | 604 --------------------- + src/gallium/winsys/radeon/radeon_winsys.h | 604 +++++++++++++++++++++ + 19 files changed, 618 insertions(+), 623 deletions(-) + delete mode 100644 src/gallium/winsys/radeon/drm/radeon_winsys.h + create mode 100644 src/gallium/winsys/radeon/radeon_winsys.h + +diff --git a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h +index 542ad43..d3c331d 100644 +--- a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h ++++ b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h +@@ -28,19 +28,19 @@ + #endif + + #if GALLIUM_R300 +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "radeon/drm/radeon_drm_public.h" + #include "r300/r300_public.h" + #endif + + #if GALLIUM_R600 +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "radeon/drm/radeon_drm_public.h" + #include "r600/r600_public.h" + #endif + + #if GALLIUM_RADEONSI +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "radeon/drm/radeon_drm_public.h" + #include "radeonsi/si_public.h" + #endif +diff --git a/src/gallium/drivers/r300/r300_chipset.c b/src/gallium/drivers/r300/r300_chipset.c +index 7a83611..c1c7ce3 100644 +--- a/src/gallium/drivers/r300/r300_chipset.c ++++ b/src/gallium/drivers/r300/r300_chipset.c +@@ -22,7 +22,7 @@ + * USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + #include "r300_chipset.h" +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + + #include "util/u_debug.h" + #include "util/u_memory.h" +diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h +index 4d2b153..3873c9a 100644 +--- a/src/gallium/drivers/r300/r300_context.h ++++ b/src/gallium/drivers/r300/r300_context.h +@@ -36,7 +36,6 @@ + #include "r300_defines.h" + #include "r300_screen.h" + #include "compiler/radeon_regalloc.h" +-#include "radeon/drm/radeon_winsys.h" + + struct u_upload_mgr; + struct r300_context; +diff --git a/src/gallium/drivers/r300/r300_screen.h b/src/gallium/drivers/r300/r300_screen.h +index f0dd3c6..7bba39b 100644 +--- a/src/gallium/drivers/r300/r300_screen.h ++++ b/src/gallium/drivers/r300/r300_screen.h +@@ -25,7 +25,7 @@ + #define R300_SCREEN_H + + #include "r300_chipset.h" +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "pipe/p_screen.h" + #include "util/u_slab.h" + #include "os/os_thread.h" +diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h +index 384a9a6..b7df001 100644 +--- a/src/gallium/drivers/radeon/r600_pipe_common.h ++++ b/src/gallium/drivers/radeon/r600_pipe_common.h +@@ -34,7 +34,7 @@ + + #include <stdio.h> + +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + + #include "util/u_blitter.h" + #include "util/u_double_list.h" +diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c +index 9668d7d..4d4b54b 100644 +--- a/src/gallium/drivers/radeon/radeon_uvd.c ++++ b/src/gallium/drivers/radeon/radeon_uvd.c +@@ -45,7 +45,6 @@ + #include "vl/vl_defines.h" + #include "vl/vl_mpeg12_decoder.h" + +-#include "radeon/drm/radeon_winsys.h" + #include "r600_pipe_common.h" + #include "radeon_video.h" + #include "radeon_uvd.h" +diff --git a/src/gallium/drivers/radeon/radeon_uvd.h b/src/gallium/drivers/radeon/radeon_uvd.h +index 462b101..41a6fb4 100644 +--- a/src/gallium/drivers/radeon/radeon_uvd.h ++++ b/src/gallium/drivers/radeon/radeon_uvd.h +@@ -34,7 +34,7 @@ + #ifndef RADEON_UVD_H + #define RADEON_UVD_H + +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "vl/vl_video_buffer.h" + + /* UVD uses PM4 packet type 0 and 2 */ +diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c +index 6d34bd3..5f710e6 100644 +--- a/src/gallium/drivers/radeon/radeon_vce.c ++++ b/src/gallium/drivers/radeon/radeon_vce.c +@@ -40,7 +40,6 @@ + + #include "vl/vl_video_buffer.h" + +-#include "radeon/drm/radeon_winsys.h" + #include "r600_pipe_common.h" + #include "radeon_video.h" + #include "radeon_vce.h" +diff --git a/src/gallium/drivers/radeon/radeon_vce_40_2_2.c b/src/gallium/drivers/radeon/radeon_vce_40_2_2.c +index b176aa7..0902957 100644 +--- a/src/gallium/drivers/radeon/radeon_vce_40_2_2.c ++++ b/src/gallium/drivers/radeon/radeon_vce_40_2_2.c +@@ -40,7 +40,6 @@ + + #include "vl/vl_video_buffer.h" + +-#include "radeon/drm/radeon_winsys.h" + #include "r600_pipe_common.h" + #include "radeon_video.h" + #include "radeon_vce.h" +diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c +index 1420798..6ec10c1 100644 +--- a/src/gallium/drivers/radeon/radeon_video.c ++++ b/src/gallium/drivers/radeon/radeon_video.c +@@ -39,7 +39,6 @@ + #include "vl/vl_defines.h" + #include "vl/vl_video_buffer.h" + +-#include "radeon/drm/radeon_winsys.h" + #include "r600_pipe_common.h" + #include "radeon_video.h" + #include "radeon_vce.h" +diff --git a/src/gallium/drivers/radeon/radeon_video.h b/src/gallium/drivers/radeon/radeon_video.h +index 974ea4f..6d0ff28 100644 +--- a/src/gallium/drivers/radeon/radeon_video.h ++++ b/src/gallium/drivers/radeon/radeon_video.h +@@ -34,7 +34,7 @@ + #ifndef RADEON_VIDEO_H + #define RADEON_VIDEO_H + +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "vl/vl_video_buffer.h" + + #define RVID_ERR(fmt, args...) \ +diff --git a/src/gallium/drivers/radeonsi/si_pm4.h b/src/gallium/drivers/radeonsi/si_pm4.h +index bfb5562..d215882 100644 +--- a/src/gallium/drivers/radeonsi/si_pm4.h ++++ b/src/gallium/drivers/radeonsi/si_pm4.h +@@ -27,7 +27,7 @@ + #ifndef SI_PM4_H + #define SI_PM4_H + +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + + #define SI_PM4_MAX_DW 256 + #define SI_PM4_MAX_BO 32 +diff --git a/src/gallium/targets/pipe-loader/pipe_r300.c b/src/gallium/targets/pipe-loader/pipe_r300.c +index abcade4..368b8c2 100644 +--- a/src/gallium/targets/pipe-loader/pipe_r300.c ++++ b/src/gallium/targets/pipe-loader/pipe_r300.c +@@ -1,7 +1,7 @@ + #include "target-helpers/inline_debug_helper.h" + #include "state_tracker/drm_driver.h" + #include "radeon/drm/radeon_drm_public.h" +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "r300/r300_public.h" + + static struct pipe_screen * +diff --git a/src/gallium/targets/pipe-loader/pipe_r600.c b/src/gallium/targets/pipe-loader/pipe_r600.c +index eb53637..65b11c8 100644 +--- a/src/gallium/targets/pipe-loader/pipe_r600.c ++++ b/src/gallium/targets/pipe-loader/pipe_r600.c +@@ -1,7 +1,7 @@ + #include "state_tracker/drm_driver.h" + #include "target-helpers/inline_debug_helper.h" + #include "radeon/drm/radeon_drm_public.h" +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "r600/r600_public.h" + + static struct pipe_screen * +diff --git a/src/gallium/targets/pipe-loader/pipe_radeonsi.c b/src/gallium/targets/pipe-loader/pipe_radeonsi.c +index 1dcd781..5457b5b 100644 +--- a/src/gallium/targets/pipe-loader/pipe_radeonsi.c ++++ b/src/gallium/targets/pipe-loader/pipe_radeonsi.c +@@ -1,7 +1,7 @@ + #include "state_tracker/drm_driver.h" + #include "target-helpers/inline_debug_helper.h" + #include "radeon/drm/radeon_drm_public.h" +-#include "radeon/drm/radeon_winsys.h" ++#include "radeon/radeon_winsys.h" + #include "radeonsi/si_public.h" + + static struct pipe_screen * +diff --git a/src/gallium/winsys/radeon/drm/Makefile.sources b/src/gallium/winsys/radeon/drm/Makefile.sources +index d30969e..ced788b 100644 +--- a/src/gallium/winsys/radeon/drm/Makefile.sources ++++ b/src/gallium/winsys/radeon/drm/Makefile.sources +@@ -7,7 +7,7 @@ C_SOURCES := \ + radeon_drm_public.h \ + radeon_drm_winsys.c \ + radeon_drm_winsys.h \ +- radeon_winsys.h ++ ../radeon_winsys.h + + TOOLS_HDR := \ + radeon_ctx.h +diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h +index 5711ffa..70657be 100644 +--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h ++++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h +@@ -30,7 +30,7 @@ + #ifndef RADEON_DRM_WINSYS_H + #define RADEON_DRM_WINSYS_H + +-#include "radeon_winsys.h" ++#include "../radeon_winsys.h" + #include "os/os_thread.h" + #include <radeon_drm.h> + +diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h +deleted file mode 100644 +index a8cc60a..0000000 +--- a/src/gallium/winsys/radeon/drm/radeon_winsys.h ++++ /dev/null +@@ -1,604 +0,0 @@ +-/* +- * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com> +- * Copyright 2010 Marek Olšák <maraeo@gmail.com> +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * on the rights to use, copy, modify, merge, publish, distribute, sub +- * license, and/or sell copies of the Software, and to permit persons to whom +- * the Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice (including the next +- * paragraph) shall be included in all copies or substantial portions of the +- * Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, +- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +- * USE OR OTHER DEALINGS IN THE SOFTWARE. */ +- +-#ifndef RADEON_WINSYS_H +-#define RADEON_WINSYS_H +- +-/* The public winsys interface header for the radeon driver. */ +- +-/* R300 features in DRM. +- * +- * 2.6.0: +- * - Hyper-Z +- * - GB_Z_PEQ_CONFIG on rv350->r4xx +- * - R500 FG_ALPHA_VALUE +- * +- * 2.8.0: +- * - R500 US_FORMAT regs +- * - R500 ARGB2101010 colorbuffer +- * - CMask and AA regs +- * - R16F/RG16F +- */ +- +-#include "pipebuffer/pb_buffer.h" +-#include "radeon_surface.h" +- +-#define RADEON_MAX_CMDBUF_DWORDS (16 * 1024) +- +-#define RADEON_FLUSH_ASYNC (1 << 0) +-#define RADEON_FLUSH_KEEP_TILING_FLAGS (1 << 1) /* needs DRM 2.12.0 */ +-#define RADEON_FLUSH_COMPUTE (1 << 2) +-#define RADEON_FLUSH_END_OF_FRAME (1 << 3) +- +-/* Tiling flags. */ +-enum radeon_bo_layout { +- RADEON_LAYOUT_LINEAR = 0, +- RADEON_LAYOUT_TILED, +- RADEON_LAYOUT_SQUARETILED, +- +- RADEON_LAYOUT_UNKNOWN +-}; +- +-enum radeon_bo_domain { /* bitfield */ +- RADEON_DOMAIN_GTT = 2, +- RADEON_DOMAIN_VRAM = 4, +- RADEON_DOMAIN_VRAM_GTT = RADEON_DOMAIN_VRAM | RADEON_DOMAIN_GTT +-}; +- +-enum radeon_bo_flag { /* bitfield */ +- RADEON_FLAG_GTT_WC = (1 << 0), +- RADEON_FLAG_CPU_ACCESS = (1 << 1), +- RADEON_FLAG_NO_CPU_ACCESS = (1 << 2), +-}; +- +-enum radeon_bo_usage { /* bitfield */ +- RADEON_USAGE_READ = 2, +- RADEON_USAGE_WRITE = 4, +- RADEON_USAGE_READWRITE = RADEON_USAGE_READ | RADEON_USAGE_WRITE +-}; +- +-enum radeon_family { +- CHIP_UNKNOWN = 0, +- CHIP_R300, /* R3xx-based cores. */ +- CHIP_R350, +- CHIP_RV350, +- CHIP_RV370, +- CHIP_RV380, +- CHIP_RS400, +- CHIP_RC410, +- CHIP_RS480, +- CHIP_R420, /* R4xx-based cores. */ +- CHIP_R423, +- CHIP_R430, +- CHIP_R480, +- CHIP_R481, +- CHIP_RV410, +- CHIP_RS600, +- CHIP_RS690, +- CHIP_RS740, +- CHIP_RV515, /* R5xx-based cores. */ +- CHIP_R520, +- CHIP_RV530, +- CHIP_R580, +- CHIP_RV560, +- CHIP_RV570, +- CHIP_R600, +- CHIP_RV610, +- CHIP_RV630, +- CHIP_RV670, +- CHIP_RV620, +- CHIP_RV635, +- CHIP_RS780, +- CHIP_RS880, +- CHIP_RV770, +- CHIP_RV730, +- CHIP_RV710, +- CHIP_RV740, +- CHIP_CEDAR, +- CHIP_REDWOOD, +- CHIP_JUNIPER, +- CHIP_CYPRESS, +- CHIP_HEMLOCK, +- CHIP_PALM, +- CHIP_SUMO, +- CHIP_SUMO2, +- CHIP_BARTS, +- CHIP_TURKS, +- CHIP_CAICOS, +- CHIP_CAYMAN, +- CHIP_ARUBA, +- CHIP_TAHITI, +- CHIP_PITCAIRN, +- CHIP_VERDE, +- CHIP_OLAND, +- CHIP_HAINAN, +- CHIP_BONAIRE, +- CHIP_KAVERI, +- CHIP_KABINI, +- CHIP_HAWAII, +- CHIP_MULLINS, +- CHIP_LAST, +-}; +- +-enum chip_class { +- CLASS_UNKNOWN = 0, +- R300, +- R400, +- R500, +- R600, +- R700, +- EVERGREEN, +- CAYMAN, +- SI, +- CIK, +-}; +- +-enum ring_type { +- RING_GFX = 0, +- RING_DMA, +- RING_UVD, +- RING_VCE, +- RING_LAST, +-}; +- +-enum radeon_value_id { +- RADEON_REQUESTED_VRAM_MEMORY, +- RADEON_REQUESTED_GTT_MEMORY, +- RADEON_BUFFER_WAIT_TIME_NS, +- RADEON_TIMESTAMP, +- RADEON_NUM_CS_FLUSHES, +- RADEON_NUM_BYTES_MOVED, +- RADEON_VRAM_USAGE, +- RADEON_GTT_USAGE +-}; +- +-enum radeon_bo_priority { +- RADEON_PRIO_MIN, +- RADEON_PRIO_SHADER_DATA, /* shader code, resource descriptors */ +- RADEON_PRIO_SHADER_BUFFER_RO, /* read-only */ +- RADEON_PRIO_SHADER_TEXTURE_RO, /* read-only */ +- RADEON_PRIO_SHADER_RESOURCE_RW, /* buffers, textures, streamout, GS rings, RATs; read/write */ +- RADEON_PRIO_COLOR_BUFFER, +- RADEON_PRIO_DEPTH_BUFFER, +- RADEON_PRIO_SHADER_TEXTURE_MSAA, +- RADEON_PRIO_COLOR_BUFFER_MSAA, +- RADEON_PRIO_DEPTH_BUFFER_MSAA, +- RADEON_PRIO_COLOR_META, +- RADEON_PRIO_DEPTH_META, +- RADEON_PRIO_MAX /* must be <= 15 */ +-}; +- +-struct winsys_handle; +-struct radeon_winsys_cs_handle; +- +-struct radeon_winsys_cs { +- unsigned cdw; /* Number of used dwords. */ +- uint32_t *buf; /* The command buffer. */ +- enum ring_type ring_type; +-}; +- +-struct radeon_info { +- uint32_t pci_id; +- enum radeon_family family; +- enum chip_class chip_class; +- uint64_t gart_size; +- uint64_t vram_size; +- uint32_t max_sclk; +- uint32_t max_compute_units; +- uint32_t max_se; +- uint32_t max_sh_per_se; +- +- uint32_t drm_major; /* version */ +- uint32_t drm_minor; +- uint32_t drm_patchlevel; +- +- boolean has_uvd; +- uint32_t vce_fw_version; +- boolean has_userptr; +- +- uint32_t r300_num_gb_pipes; +- uint32_t r300_num_z_pipes; +- +- uint32_t r600_num_backends; +- uint32_t r600_clock_crystal_freq; +- uint32_t r600_tiling_config; +- uint32_t r600_num_tile_pipes; +- uint32_t r600_max_pipes; +- boolean r600_virtual_address; +- boolean r600_has_dma; +- +- uint32_t r600_backend_map; +- boolean r600_backend_map_valid; +- +- boolean si_tile_mode_array_valid; +- uint32_t si_tile_mode_array[32]; +- uint32_t si_backend_enabled_mask; +- +- boolean cik_macrotile_mode_array_valid; +- uint32_t cik_macrotile_mode_array[16]; +-}; +- +-enum radeon_feature_id { +- RADEON_FID_R300_HYPERZ_ACCESS, /* ZMask + HiZ */ +- RADEON_FID_R300_CMASK_ACCESS, +-}; +- +-struct radeon_winsys { +- /** +- * The screen object this winsys was created for +- */ +- struct pipe_screen *screen; +- +- /** +- * Decrement the winsys reference count. +- * +- * \param ws The winsys this function is called for. +- * \return True if the winsys and screen should be destroyed. +- */ +- bool (*unref)(struct radeon_winsys *ws); +- +- /** +- * Destroy this winsys. +- * +- * \param ws The winsys this function is called from. +- */ +- void (*destroy)(struct radeon_winsys *ws); +- +- /** +- * Query an info structure from winsys. +- * +- * \param ws The winsys this function is called from. +- * \param info Return structure +- */ +- void (*query_info)(struct radeon_winsys *ws, +- struct radeon_info *info); +- +- /************************************************************************** +- * Buffer management. Buffer attributes are mostly fixed over its lifetime. +- * +- * Remember that gallium gets to choose the interface it needs, and the +- * window systems must then implement that interface (rather than the +- * other way around...). +- *************************************************************************/ +- +- /** +- * Create a buffer object. +- * +- * \param ws The winsys this function is called from. +- * \param size The size to allocate. +- * \param alignment An alignment of the buffer in memory. +- * \param use_reusable_pool Whether the cache buffer manager should be used. +- * \param domain A bitmask of the RADEON_DOMAIN_* flags. +- * \return The created buffer object. +- */ +- struct pb_buffer *(*buffer_create)(struct radeon_winsys *ws, +- unsigned size, +- unsigned alignment, +- boolean use_reusable_pool, +- enum radeon_bo_domain domain, +- enum radeon_bo_flag flags); +- +- struct radeon_winsys_cs_handle *(*buffer_get_cs_handle)( +- struct pb_buffer *buf); +- +- /** +- * Map the entire data store of a buffer object into the client's address +- * space. +- * +- * \param buf A winsys buffer object to map. +- * \param cs A command stream to flush if the buffer is referenced by it. +- * \param usage A bitmask of the PIPE_TRANSFER_* flags. +- * \return The pointer at the beginning of the buffer. +- */ +- void *(*buffer_map)(struct radeon_winsys_cs_handle *buf, +- struct radeon_winsys_cs *cs, +- enum pipe_transfer_usage usage); +- +- /** +- * Unmap a buffer object from the client's address space. +- * +- * \param buf A winsys buffer object to unmap. +- */ +- void (*buffer_unmap)(struct radeon_winsys_cs_handle *buf); +- +- /** +- * Return TRUE if a buffer object is being used by the GPU. +- * +- * \param buf A winsys buffer object. +- * \param usage Only check whether the buffer is busy for the given usage. +- */ +- boolean (*buffer_is_busy)(struct pb_buffer *buf, +- enum radeon_bo_usage usage); +- +- /** +- * Wait for a buffer object until it is not used by a GPU. This is +- * equivalent to a fence placed after the last command using the buffer, +- * and synchronizing to the fence. +- * +- * \param buf A winsys buffer object to wait for. +- * \param usage Only wait until the buffer is idle for the given usage, +- * but may still be busy for some other usage. +- */ +- void (*buffer_wait)(struct pb_buffer *buf, enum radeon_bo_usage usage); +- +- /** +- * Return tiling flags describing a memory layout of a buffer object. +- * +- * \param buf A winsys buffer object to get the flags from. +- * \param macrotile A pointer to the return value of the microtile flag. +- * \param microtile A pointer to the return value of the macrotile flag. +- * +- * \note microtile and macrotile are not bitmasks! +- */ +- void (*buffer_get_tiling)(struct pb_buffer *buf, +- enum radeon_bo_layout *microtile, +- enum radeon_bo_layout *macrotile, +- unsigned *bankw, unsigned *bankh, +- unsigned *tile_split, +- unsigned *stencil_tile_split, +- unsigned *mtilea, +- bool *scanout); +- +- /** +- * Set tiling flags describing a memory layout of a buffer object. +- * +- * \param buf A winsys buffer object to set the flags for. +- * \param cs A command stream to flush if the buffer is referenced by it. +- * \param macrotile A macrotile flag. +- * \param microtile A microtile flag. +- * \param stride A stride of the buffer in bytes, for texturing. +- * +- * \note microtile and macrotile are not bitmasks! +- */ +- void (*buffer_set_tiling)(struct pb_buffer *buf, +- struct radeon_winsys_cs *rcs, +- enum radeon_bo_layout microtile, +- enum radeon_bo_layout macrotile, +- unsigned bankw, unsigned bankh, +- unsigned tile_split, +- unsigned stencil_tile_split, +- unsigned mtilea, +- unsigned stride, +- bool scanout); +- +- /** +- * Get a winsys buffer from a winsys handle. The internal structure +- * of the handle is platform-specific and only a winsys should access it. +- * +- * \param ws The winsys this function is called from. +- * \param whandle A winsys handle pointer as was received from a state +- * tracker. +- * \param stride The returned buffer stride in bytes. +- */ +- struct pb_buffer *(*buffer_from_handle)(struct radeon_winsys *ws, +- struct winsys_handle *whandle, +- unsigned *stride); +- +- /** +- * Get a winsys buffer from a user pointer. The resulting buffer can't +- * be exported. Both pointer and size must be page aligned. +- * +- * \param ws The winsys this function is called from. +- * \param pointer User pointer to turn into a buffer object. +- * \param Size Size in bytes for the new buffer. +- */ +- struct pb_buffer *(*buffer_from_ptr)(struct radeon_winsys *ws, +- void *pointer, unsigned size); +- +- /** +- * Get a winsys handle from a winsys buffer. The internal structure +- * of the handle is platform-specific and only a winsys should access it. +- * +- * \param buf A winsys buffer object to get the handle from. +- * \param whandle A winsys handle pointer. +- * \param stride A stride of the buffer in bytes, for texturing. +- * \return TRUE on success. +- */ +- boolean (*buffer_get_handle)(struct pb_buffer *buf, +- unsigned stride, +- struct winsys_handle *whandle); +- +- /** +- * Return the virtual address of a buffer. +- * +- * \param buf A winsys buffer object +- * \return virtual address +- */ +- uint64_t (*buffer_get_virtual_address)(struct radeon_winsys_cs_handle *buf); +- +- /** +- * Query the initial placement of the buffer from the kernel driver. +- */ +- enum radeon_bo_domain (*buffer_get_initial_domain)(struct radeon_winsys_cs_handle *buf); +- +- /************************************************************************** +- * Command submission. +- * +- * Each pipe context should create its own command stream and submit +- * commands independently of other contexts. +- *************************************************************************/ +- +- /** +- * Create a command stream. +- * +- * \param ws The winsys this function is called from. +- * \param ring_type The ring type (GFX, DMA, UVD) +- * \param flush Flush callback function associated with the command stream. +- * \param user User pointer that will be passed to the flush callback. +- * \param trace_buf Trace buffer when tracing is enabled +- */ +- struct radeon_winsys_cs *(*cs_create)(struct radeon_winsys *ws, +- enum ring_type ring_type, +- void (*flush)(void *ctx, unsigned flags, +- struct pipe_fence_handle **fence), +- void *flush_ctx, +- struct radeon_winsys_cs_handle *trace_buf); +- +- /** +- * Destroy a command stream. +- * +- * \param cs A command stream to destroy. +- */ +- void (*cs_destroy)(struct radeon_winsys_cs *cs); +- +- /** +- * Add a new buffer relocation. Every relocation must first be added +- * before it can be written. +- * +- * \param cs A command stream to add buffer for validation against. +- * \param buf A winsys buffer to validate. +- * \param usage Whether the buffer is used for read and/or write. +- * \param domain Bitmask of the RADEON_DOMAIN_* flags. +- * \param priority A higher number means a greater chance of being +- * placed in the requested domain. 15 is the maximum. +- * \return Relocation index. +- */ +- unsigned (*cs_add_reloc)(struct radeon_winsys_cs *cs, +- struct radeon_winsys_cs_handle *buf, +- enum radeon_bo_usage usage, +- enum radeon_bo_domain domain, +- enum radeon_bo_priority priority); +- +- /** +- * Return the index of an already-added buffer. +- * +- * \param cs Command stream +- * \param buf Buffer +- * \return The buffer index, or -1 if the buffer has not been added. +- */ +- int (*cs_get_reloc)(struct radeon_winsys_cs *cs, +- struct radeon_winsys_cs_handle *buf); +- +- /** +- * Return TRUE if there is enough memory in VRAM and GTT for the relocs +- * added so far. If the validation fails, all the relocations which have +- * been added since the last call of cs_validate will be removed and +- * the CS will be flushed (provided there are still any relocations). +- * +- * \param cs A command stream to validate. +- */ +- boolean (*cs_validate)(struct radeon_winsys_cs *cs); +- +- /** +- * Return TRUE if there is enough memory in VRAM and GTT for the relocs +- * added so far. +- * +- * \param cs A command stream to validate. +- * \param vram VRAM memory size pending to be use +- * \param gtt GTT memory size pending to be use +- */ +- boolean (*cs_memory_below_limit)(struct radeon_winsys_cs *cs, uint64_t vram, uint64_t gtt); +- +- /** +- * Flush a command stream. +- * +- * \param cs A command stream to flush. +- * \param flags, RADEON_FLUSH_ASYNC or 0. +- * \param fence Pointer to a fence. If non-NULL, a fence is inserted +- * after the CS and is returned through this parameter. +- * \param cs_trace_id A unique identifier of the cs, used for tracing. +- */ +- void (*cs_flush)(struct radeon_winsys_cs *cs, +- unsigned flags, +- struct pipe_fence_handle **fence, +- uint32_t cs_trace_id); +- +- /** +- * Return TRUE if a buffer is referenced by a command stream. +- * +- * \param cs A command stream. +- * \param buf A winsys buffer. +- */ +- boolean (*cs_is_buffer_referenced)(struct radeon_winsys_cs *cs, +- struct radeon_winsys_cs_handle *buf, +- enum radeon_bo_usage usage); +- +- /** +- * Request access to a feature for a command stream. +- * +- * \param cs A command stream. +- * \param fid Feature ID, one of RADEON_FID_* +- * \param enable Whether to enable or disable the feature. +- */ +- boolean (*cs_request_feature)(struct radeon_winsys_cs *cs, +- enum radeon_feature_id fid, +- boolean enable); +- /** +- * Make sure all asynchronous flush of the cs have completed +- * +- * \param cs A command stream. +- */ +- void (*cs_sync_flush)(struct radeon_winsys_cs *cs); +- +- /** +- * Wait for the fence and return true if the fence has been signalled. +- * The timeout of 0 will only return the status. +- * The timeout of PIPE_TIMEOUT_INFINITE will always wait until the fence +- * is signalled. +- */ +- bool (*fence_wait)(struct radeon_winsys *ws, +- struct pipe_fence_handle *fence, +- uint64_t timeout); +- +- /** +- * Reference counting for fences. +- */ +- void (*fence_reference)(struct pipe_fence_handle **dst, +- struct pipe_fence_handle *src); +- +- /** +- * Initialize surface +- * +- * \param ws The winsys this function is called from. +- * \param surf Surface structure ptr +- */ +- int (*surface_init)(struct radeon_winsys *ws, +- struct radeon_surface *surf); +- +- /** +- * Find best values for a surface +- * +- * \param ws The winsys this function is called from. +- * \param surf Surface structure ptr +- */ +- int (*surface_best)(struct radeon_winsys *ws, +- struct radeon_surface *surf); +- +- uint64_t (*query_value)(struct radeon_winsys *ws, +- enum radeon_value_id value); +-}; +- +- +-static INLINE void radeon_emit(struct radeon_winsys_cs *cs, uint32_t value) +-{ +- cs->buf[cs->cdw++] = value; +-} +- +-static INLINE void radeon_emit_array(struct radeon_winsys_cs *cs, +- const uint32_t *values, unsigned count) +-{ +- memcpy(cs->buf+cs->cdw, values, count * 4); +- cs->cdw += count; +-} +- +-#endif +diff --git a/src/gallium/winsys/radeon/radeon_winsys.h b/src/gallium/winsys/radeon/radeon_winsys.h +new file mode 100644 +index 0000000..a8cc60a +--- /dev/null ++++ b/src/gallium/winsys/radeon/radeon_winsys.h +@@ -0,0 +1,604 @@ ++/* ++ * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com> ++ * Copyright 2010 Marek Olšák <maraeo@gmail.com> ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * on the rights to use, copy, modify, merge, publish, distribute, sub ++ * license, and/or sell copies of the Software, and to permit persons to whom ++ * the Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, ++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR ++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE ++ * USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#ifndef RADEON_WINSYS_H ++#define RADEON_WINSYS_H ++ ++/* The public winsys interface header for the radeon driver. */ ++ ++/* R300 features in DRM. ++ * ++ * 2.6.0: ++ * - Hyper-Z ++ * - GB_Z_PEQ_CONFIG on rv350->r4xx ++ * - R500 FG_ALPHA_VALUE ++ * ++ * 2.8.0: ++ * - R500 US_FORMAT regs ++ * - R500 ARGB2101010 colorbuffer ++ * - CMask and AA regs ++ * - R16F/RG16F ++ */ ++ ++#include "pipebuffer/pb_buffer.h" ++#include "radeon_surface.h" ++ ++#define RADEON_MAX_CMDBUF_DWORDS (16 * 1024) ++ ++#define RADEON_FLUSH_ASYNC (1 << 0) ++#define RADEON_FLUSH_KEEP_TILING_FLAGS (1 << 1) /* needs DRM 2.12.0 */ ++#define RADEON_FLUSH_COMPUTE (1 << 2) ++#define RADEON_FLUSH_END_OF_FRAME (1 << 3) ++ ++/* Tiling flags. */ ++enum radeon_bo_layout { ++ RADEON_LAYOUT_LINEAR = 0, ++ RADEON_LAYOUT_TILED, ++ RADEON_LAYOUT_SQUARETILED, ++ ++ RADEON_LAYOUT_UNKNOWN ++}; ++ ++enum radeon_bo_domain { /* bitfield */ ++ RADEON_DOMAIN_GTT = 2, ++ RADEON_DOMAIN_VRAM = 4, ++ RADEON_DOMAIN_VRAM_GTT = RADEON_DOMAIN_VRAM | RADEON_DOMAIN_GTT ++}; ++ ++enum radeon_bo_flag { /* bitfield */ ++ RADEON_FLAG_GTT_WC = (1 << 0), ++ RADEON_FLAG_CPU_ACCESS = (1 << 1), ++ RADEON_FLAG_NO_CPU_ACCESS = (1 << 2), ++}; ++ ++enum radeon_bo_usage { /* bitfield */ ++ RADEON_USAGE_READ = 2, ++ RADEON_USAGE_WRITE = 4, ++ RADEON_USAGE_READWRITE = RADEON_USAGE_READ | RADEON_USAGE_WRITE ++}; ++ ++enum radeon_family { ++ CHIP_UNKNOWN = 0, ++ CHIP_R300, /* R3xx-based cores. */ ++ CHIP_R350, ++ CHIP_RV350, ++ CHIP_RV370, ++ CHIP_RV380, ++ CHIP_RS400, ++ CHIP_RC410, ++ CHIP_RS480, ++ CHIP_R420, /* R4xx-based cores. */ ++ CHIP_R423, ++ CHIP_R430, ++ CHIP_R480, ++ CHIP_R481, ++ CHIP_RV410, ++ CHIP_RS600, ++ CHIP_RS690, ++ CHIP_RS740, ++ CHIP_RV515, /* R5xx-based cores. */ ++ CHIP_R520, ++ CHIP_RV530, ++ CHIP_R580, ++ CHIP_RV560, ++ CHIP_RV570, ++ CHIP_R600, ++ CHIP_RV610, ++ CHIP_RV630, ++ CHIP_RV670, ++ CHIP_RV620, ++ CHIP_RV635, ++ CHIP_RS780, ++ CHIP_RS880, ++ CHIP_RV770, ++ CHIP_RV730, ++ CHIP_RV710, ++ CHIP_RV740, ++ CHIP_CEDAR, ++ CHIP_REDWOOD, ++ CHIP_JUNIPER, ++ CHIP_CYPRESS, ++ CHIP_HEMLOCK, ++ CHIP_PALM, ++ CHIP_SUMO, ++ CHIP_SUMO2, ++ CHIP_BARTS, ++ CHIP_TURKS, ++ CHIP_CAICOS, ++ CHIP_CAYMAN, ++ CHIP_ARUBA, ++ CHIP_TAHITI, ++ CHIP_PITCAIRN, ++ CHIP_VERDE, ++ CHIP_OLAND, ++ CHIP_HAINAN, ++ CHIP_BONAIRE, ++ CHIP_KAVERI, ++ CHIP_KABINI, ++ CHIP_HAWAII, ++ CHIP_MULLINS, ++ CHIP_LAST, ++}; ++ ++enum chip_class { ++ CLASS_UNKNOWN = 0, ++ R300, ++ R400, ++ R500, ++ R600, ++ R700, ++ EVERGREEN, ++ CAYMAN, ++ SI, ++ CIK, ++}; ++ ++enum ring_type { ++ RING_GFX = 0, ++ RING_DMA, ++ RING_UVD, ++ RING_VCE, ++ RING_LAST, ++}; ++ ++enum radeon_value_id { ++ RADEON_REQUESTED_VRAM_MEMORY, ++ RADEON_REQUESTED_GTT_MEMORY, ++ RADEON_BUFFER_WAIT_TIME_NS, ++ RADEON_TIMESTAMP, ++ RADEON_NUM_CS_FLUSHES, ++ RADEON_NUM_BYTES_MOVED, ++ RADEON_VRAM_USAGE, ++ RADEON_GTT_USAGE ++}; ++ ++enum radeon_bo_priority { ++ RADEON_PRIO_MIN, ++ RADEON_PRIO_SHADER_DATA, /* shader code, resource descriptors */ ++ RADEON_PRIO_SHADER_BUFFER_RO, /* read-only */ ++ RADEON_PRIO_SHADER_TEXTURE_RO, /* read-only */ ++ RADEON_PRIO_SHADER_RESOURCE_RW, /* buffers, textures, streamout, GS rings, RATs; read/write */ ++ RADEON_PRIO_COLOR_BUFFER, ++ RADEON_PRIO_DEPTH_BUFFER, ++ RADEON_PRIO_SHADER_TEXTURE_MSAA, ++ RADEON_PRIO_COLOR_BUFFER_MSAA, ++ RADEON_PRIO_DEPTH_BUFFER_MSAA, ++ RADEON_PRIO_COLOR_META, ++ RADEON_PRIO_DEPTH_META, ++ RADEON_PRIO_MAX /* must be <= 15 */ ++}; ++ ++struct winsys_handle; ++struct radeon_winsys_cs_handle; ++ ++struct radeon_winsys_cs { ++ unsigned cdw; /* Number of used dwords. */ ++ uint32_t *buf; /* The command buffer. */ ++ enum ring_type ring_type; ++}; ++ ++struct radeon_info { ++ uint32_t pci_id; ++ enum radeon_family family; ++ enum chip_class chip_class; ++ uint64_t gart_size; ++ uint64_t vram_size; ++ uint32_t max_sclk; ++ uint32_t max_compute_units; ++ uint32_t max_se; ++ uint32_t max_sh_per_se; ++ ++ uint32_t drm_major; /* version */ ++ uint32_t drm_minor; ++ uint32_t drm_patchlevel; ++ ++ boolean has_uvd; ++ uint32_t vce_fw_version; ++ boolean has_userptr; ++ ++ uint32_t r300_num_gb_pipes; ++ uint32_t r300_num_z_pipes; ++ ++ uint32_t r600_num_backends; ++ uint32_t r600_clock_crystal_freq; ++ uint32_t r600_tiling_config; ++ uint32_t r600_num_tile_pipes; ++ uint32_t r600_max_pipes; ++ boolean r600_virtual_address; ++ boolean r600_has_dma; ++ ++ uint32_t r600_backend_map; ++ boolean r600_backend_map_valid; ++ ++ boolean si_tile_mode_array_valid; ++ uint32_t si_tile_mode_array[32]; ++ uint32_t si_backend_enabled_mask; ++ ++ boolean cik_macrotile_mode_array_valid; ++ uint32_t cik_macrotile_mode_array[16]; ++}; ++ ++enum radeon_feature_id { ++ RADEON_FID_R300_HYPERZ_ACCESS, /* ZMask + HiZ */ ++ RADEON_FID_R300_CMASK_ACCESS, ++}; ++ ++struct radeon_winsys { ++ /** ++ * The screen object this winsys was created for ++ */ ++ struct pipe_screen *screen; ++ ++ /** ++ * Decrement the winsys reference count. ++ * ++ * \param ws The winsys this function is called for. ++ * \return True if the winsys and screen should be destroyed. ++ */ ++ bool (*unref)(struct radeon_winsys *ws); ++ ++ /** ++ * Destroy this winsys. ++ * ++ * \param ws The winsys this function is called from. ++ */ ++ void (*destroy)(struct radeon_winsys *ws); ++ ++ /** ++ * Query an info structure from winsys. ++ * ++ * \param ws The winsys this function is called from. ++ * \param info Return structure ++ */ ++ void (*query_info)(struct radeon_winsys *ws, ++ struct radeon_info *info); ++ ++ /************************************************************************** ++ * Buffer management. Buffer attributes are mostly fixed over its lifetime. ++ * ++ * Remember that gallium gets to choose the interface it needs, and the ++ * window systems must then implement that interface (rather than the ++ * other way around...). ++ *************************************************************************/ ++ ++ /** ++ * Create a buffer object. ++ * ++ * \param ws The winsys this function is called from. ++ * \param size The size to allocate. ++ * \param alignment An alignment of the buffer in memory. ++ * \param use_reusable_pool Whether the cache buffer manager should be used. ++ * \param domain A bitmask of the RADEON_DOMAIN_* flags. ++ * \return The created buffer object. ++ */ ++ struct pb_buffer *(*buffer_create)(struct radeon_winsys *ws, ++ unsigned size, ++ unsigned alignment, ++ boolean use_reusable_pool, ++ enum radeon_bo_domain domain, ++ enum radeon_bo_flag flags); ++ ++ struct radeon_winsys_cs_handle *(*buffer_get_cs_handle)( ++ struct pb_buffer *buf); ++ ++ /** ++ * Map the entire data store of a buffer object into the client's address ++ * space. ++ * ++ * \param buf A winsys buffer object to map. ++ * \param cs A command stream to flush if the buffer is referenced by it. ++ * \param usage A bitmask of the PIPE_TRANSFER_* flags. ++ * \return The pointer at the beginning of the buffer. ++ */ ++ void *(*buffer_map)(struct radeon_winsys_cs_handle *buf, ++ struct radeon_winsys_cs *cs, ++ enum pipe_transfer_usage usage); ++ ++ /** ++ * Unmap a buffer object from the client's address space. ++ * ++ * \param buf A winsys buffer object to unmap. ++ */ ++ void (*buffer_unmap)(struct radeon_winsys_cs_handle *buf); ++ ++ /** ++ * Return TRUE if a buffer object is being used by the GPU. ++ * ++ * \param buf A winsys buffer object. ++ * \param usage Only check whether the buffer is busy for the given usage. ++ */ ++ boolean (*buffer_is_busy)(struct pb_buffer *buf, ++ enum radeon_bo_usage usage); ++ ++ /** ++ * Wait for a buffer object until it is not used by a GPU. This is ++ * equivalent to a fence placed after the last command using the buffer, ++ * and synchronizing to the fence. ++ * ++ * \param buf A winsys buffer object to wait for. ++ * \param usage Only wait until the buffer is idle for the given usage, ++ * but may still be busy for some other usage. ++ */ ++ void (*buffer_wait)(struct pb_buffer *buf, enum radeon_bo_usage usage); ++ ++ /** ++ * Return tiling flags describing a memory layout of a buffer object. ++ * ++ * \param buf A winsys buffer object to get the flags from. ++ * \param macrotile A pointer to the return value of the microtile flag. ++ * \param microtile A pointer to the return value of the macrotile flag. ++ * ++ * \note microtile and macrotile are not bitmasks! ++ */ ++ void (*buffer_get_tiling)(struct pb_buffer *buf, ++ enum radeon_bo_layout *microtile, ++ enum radeon_bo_layout *macrotile, ++ unsigned *bankw, unsigned *bankh, ++ unsigned *tile_split, ++ unsigned *stencil_tile_split, ++ unsigned *mtilea, ++ bool *scanout); ++ ++ /** ++ * Set tiling flags describing a memory layout of a buffer object. ++ * ++ * \param buf A winsys buffer object to set the flags for. ++ * \param cs A command stream to flush if the buffer is referenced by it. ++ * \param macrotile A macrotile flag. ++ * \param microtile A microtile flag. ++ * \param stride A stride of the buffer in bytes, for texturing. ++ * ++ * \note microtile and macrotile are not bitmasks! ++ */ ++ void (*buffer_set_tiling)(struct pb_buffer *buf, ++ struct radeon_winsys_cs *rcs, ++ enum radeon_bo_layout microtile, ++ enum radeon_bo_layout macrotile, ++ unsigned bankw, unsigned bankh, ++ unsigned tile_split, ++ unsigned stencil_tile_split, ++ unsigned mtilea, ++ unsigned stride, ++ bool scanout); ++ ++ /** ++ * Get a winsys buffer from a winsys handle. The internal structure ++ * of the handle is platform-specific and only a winsys should access it. ++ * ++ * \param ws The winsys this function is called from. ++ * \param whandle A winsys handle pointer as was received from a state ++ * tracker. ++ * \param stride The returned buffer stride in bytes. ++ */ ++ struct pb_buffer *(*buffer_from_handle)(struct radeon_winsys *ws, ++ struct winsys_handle *whandle, ++ unsigned *stride); ++ ++ /** ++ * Get a winsys buffer from a user pointer. The resulting buffer can't ++ * be exported. Both pointer and size must be page aligned. ++ * ++ * \param ws The winsys this function is called from. ++ * \param pointer User pointer to turn into a buffer object. ++ * \param Size Size in bytes for the new buffer. ++ */ ++ struct pb_buffer *(*buffer_from_ptr)(struct radeon_winsys *ws, ++ void *pointer, unsigned size); ++ ++ /** ++ * Get a winsys handle from a winsys buffer. The internal structure ++ * of the handle is platform-specific and only a winsys should access it. ++ * ++ * \param buf A winsys buffer object to get the handle from. ++ * \param whandle A winsys handle pointer. ++ * \param stride A stride of the buffer in bytes, for texturing. ++ * \return TRUE on success. ++ */ ++ boolean (*buffer_get_handle)(struct pb_buffer *buf, ++ unsigned stride, ++ struct winsys_handle *whandle); ++ ++ /** ++ * Return the virtual address of a buffer. ++ * ++ * \param buf A winsys buffer object ++ * \return virtual address ++ */ ++ uint64_t (*buffer_get_virtual_address)(struct radeon_winsys_cs_handle *buf); ++ ++ /** ++ * Query the initial placement of the buffer from the kernel driver. ++ */ ++ enum radeon_bo_domain (*buffer_get_initial_domain)(struct radeon_winsys_cs_handle *buf); ++ ++ /************************************************************************** ++ * Command submission. ++ * ++ * Each pipe context should create its own command stream and submit ++ * commands independently of other contexts. ++ *************************************************************************/ ++ ++ /** ++ * Create a command stream. ++ * ++ * \param ws The winsys this function is called from. ++ * \param ring_type The ring type (GFX, DMA, UVD) ++ * \param flush Flush callback function associated with the command stream. ++ * \param user User pointer that will be passed to the flush callback. ++ * \param trace_buf Trace buffer when tracing is enabled ++ */ ++ struct radeon_winsys_cs *(*cs_create)(struct radeon_winsys *ws, ++ enum ring_type ring_type, ++ void (*flush)(void *ctx, unsigned flags, ++ struct pipe_fence_handle **fence), ++ void *flush_ctx, ++ struct radeon_winsys_cs_handle *trace_buf); ++ ++ /** ++ * Destroy a command stream. ++ * ++ * \param cs A command stream to destroy. ++ */ ++ void (*cs_destroy)(struct radeon_winsys_cs *cs); ++ ++ /** ++ * Add a new buffer relocation. Every relocation must first be added ++ * before it can be written. ++ * ++ * \param cs A command stream to add buffer for validation against. ++ * \param buf A winsys buffer to validate. ++ * \param usage Whether the buffer is used for read and/or write. ++ * \param domain Bitmask of the RADEON_DOMAIN_* flags. ++ * \param priority A higher number means a greater chance of being ++ * placed in the requested domain. 15 is the maximum. ++ * \return Relocation index. ++ */ ++ unsigned (*cs_add_reloc)(struct radeon_winsys_cs *cs, ++ struct radeon_winsys_cs_handle *buf, ++ enum radeon_bo_usage usage, ++ enum radeon_bo_domain domain, ++ enum radeon_bo_priority priority); ++ ++ /** ++ * Return the index of an already-added buffer. ++ * ++ * \param cs Command stream ++ * \param buf Buffer ++ * \return The buffer index, or -1 if the buffer has not been added. ++ */ ++ int (*cs_get_reloc)(struct radeon_winsys_cs *cs, ++ struct radeon_winsys_cs_handle *buf); ++ ++ /** ++ * Return TRUE if there is enough memory in VRAM and GTT for the relocs ++ * added so far. If the validation fails, all the relocations which have ++ * been added since the last call of cs_validate will be removed and ++ * the CS will be flushed (provided there are still any relocations). ++ * ++ * \param cs A command stream to validate. ++ */ ++ boolean (*cs_validate)(struct radeon_winsys_cs *cs); ++ ++ /** ++ * Return TRUE if there is enough memory in VRAM and GTT for the relocs ++ * added so far. ++ * ++ * \param cs A command stream to validate. ++ * \param vram VRAM memory size pending to be use ++ * \param gtt GTT memory size pending to be use ++ */ ++ boolean (*cs_memory_below_limit)(struct radeon_winsys_cs *cs, uint64_t vram, uint64_t gtt); ++ ++ /** ++ * Flush a command stream. ++ * ++ * \param cs A command stream to flush. ++ * \param flags, RADEON_FLUSH_ASYNC or 0. ++ * \param fence Pointer to a fence. If non-NULL, a fence is inserted ++ * after the CS and is returned through this parameter. ++ * \param cs_trace_id A unique identifier of the cs, used for tracing. ++ */ ++ void (*cs_flush)(struct radeon_winsys_cs *cs, ++ unsigned flags, ++ struct pipe_fence_handle **fence, ++ uint32_t cs_trace_id); ++ ++ /** ++ * Return TRUE if a buffer is referenced by a command stream. ++ * ++ * \param cs A command stream. ++ * \param buf A winsys buffer. ++ */ ++ boolean (*cs_is_buffer_referenced)(struct radeon_winsys_cs *cs, ++ struct radeon_winsys_cs_handle *buf, ++ enum radeon_bo_usage usage); ++ ++ /** ++ * Request access to a feature for a command stream. ++ * ++ * \param cs A command stream. ++ * \param fid Feature ID, one of RADEON_FID_* ++ * \param enable Whether to enable or disable the feature. ++ */ ++ boolean (*cs_request_feature)(struct radeon_winsys_cs *cs, ++ enum radeon_feature_id fid, ++ boolean enable); ++ /** ++ * Make sure all asynchronous flush of the cs have completed ++ * ++ * \param cs A command stream. ++ */ ++ void (*cs_sync_flush)(struct radeon_winsys_cs *cs); ++ ++ /** ++ * Wait for the fence and return true if the fence has been signalled. ++ * The timeout of 0 will only return the status. ++ * The timeout of PIPE_TIMEOUT_INFINITE will always wait until the fence ++ * is signalled. ++ */ ++ bool (*fence_wait)(struct radeon_winsys *ws, ++ struct pipe_fence_handle *fence, ++ uint64_t timeout); ++ ++ /** ++ * Reference counting for fences. ++ */ ++ void (*fence_reference)(struct pipe_fence_handle **dst, ++ struct pipe_fence_handle *src); ++ ++ /** ++ * Initialize surface ++ * ++ * \param ws The winsys this function is called from. ++ * \param surf Surface structure ptr ++ */ ++ int (*surface_init)(struct radeon_winsys *ws, ++ struct radeon_surface *surf); ++ ++ /** ++ * Find best values for a surface ++ * ++ * \param ws The winsys this function is called from. ++ * \param surf Surface structure ptr ++ */ ++ int (*surface_best)(struct radeon_winsys *ws, ++ struct radeon_surface *surf); ++ ++ uint64_t (*query_value)(struct radeon_winsys *ws, ++ enum radeon_value_id value); ++}; ++ ++ ++static INLINE void radeon_emit(struct radeon_winsys_cs *cs, uint32_t value) ++{ ++ cs->buf[cs->cdw++] = value; ++} ++ ++static INLINE void radeon_emit_array(struct radeon_winsys_cs *cs, ++ const uint32_t *values, unsigned count) ++{ ++ memcpy(cs->buf+cs->cdw, values, count * 4); ++ cs->cdw += count; ++} ++ ++#endif +-- +1.9.1 + |