On Tue, Aug 19, 2014 at 7:20 AM, Emil Velikov <emil.l.veli...@gmail.com> wrote: > Make the header location, inclusion and contents more common with > its i915,r* and nouveau counterparts: > > - Move the header within intel/drm. > - Separate out intel_winsys_create_for_fd into 'drm_public' header. > - Cleanup the compiler includes. The latter two sound fine to me, but do you have a real need to move intel_winsys.h into drm/? It is supposed to be OS-neutral so that the pipe driver stays OS-neutral, not being tied to DRM.
> > Cc: Chia-I Wu <olva...@gmail.com> > Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> > --- > .../auxiliary/target-helpers/inline_drm_helper.h | 2 +- > src/gallium/drivers/ilo/Android.mk | 3 +- > src/gallium/drivers/ilo/Makefile.am | 1 - > src/gallium/drivers/ilo/ilo_3d.c | 2 +- > src/gallium/drivers/ilo/ilo_3d_pipeline.c | 2 +- > src/gallium/drivers/ilo/ilo_3d_pipeline_dump.c | 2 +- > src/gallium/drivers/ilo/ilo_cp.c | 2 +- > src/gallium/drivers/ilo/ilo_cp.h | 2 +- > src/gallium/drivers/ilo/ilo_gpe_gen6.h | 2 +- > src/gallium/drivers/ilo/ilo_gpe_gen7.h | 2 +- > src/gallium/drivers/ilo/ilo_query.c | 2 +- > src/gallium/drivers/ilo/ilo_resource.h | 2 +- > src/gallium/drivers/ilo/ilo_screen.c | 2 +- > src/gallium/drivers/ilo/ilo_shader.c | 2 +- > src/gallium/winsys/intel/drm/intel_drm_public.h | 8 + > src/gallium/winsys/intel/drm/intel_drm_winsys.c | 3 +- > src/gallium/winsys/intel/drm/intel_winsys.h | 317 ++++++++++++++++++++ > src/gallium/winsys/intel/intel_winsys.h | 320 > --------------------- > 18 files changed, 340 insertions(+), 336 deletions(-) > create mode 100644 src/gallium/winsys/intel/drm/intel_drm_public.h > create mode 100644 src/gallium/winsys/intel/drm/intel_winsys.h > delete mode 100644 src/gallium/winsys/intel/intel_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 4ef94de..dd55a71 100644 > --- a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h > +++ b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h > @@ -19,7 +19,7 @@ > #endif > > #if GALLIUM_ILO > -#include "intel/intel_winsys.h" > +#include "intel/drm/intel_drm_public.h" > #include "ilo/ilo_public.h" > #endif > > diff --git a/src/gallium/drivers/ilo/Android.mk > b/src/gallium/drivers/ilo/Android.mk > index 2b06663..39de3a6 100644 > --- a/src/gallium/drivers/ilo/Android.mk > +++ b/src/gallium/drivers/ilo/Android.mk > @@ -28,8 +28,7 @@ include $(LOCAL_PATH)/Makefile.sources > include $(CLEAR_VARS) > > LOCAL_C_INCLUDES := \ > - $(LOCAL_PATH)/include \ > - $(GALLIUM_TOP)/winsys/intel > + $(LOCAL_PATH)/include > > LOCAL_SRC_FILES := $(C_SOURCES) > > diff --git a/src/gallium/drivers/ilo/Makefile.am > b/src/gallium/drivers/ilo/Makefile.am > index 04d4da8..75213d4 100644 > --- a/src/gallium/drivers/ilo/Makefile.am > +++ b/src/gallium/drivers/ilo/Makefile.am > @@ -27,7 +27,6 @@ include Makefile.sources > include $(top_srcdir)/src/gallium/Automake.inc > > AM_CPPFLAGS = \ > - -I$(top_srcdir)/src/gallium/winsys/intel \ > $(GALLIUM_DRIVER_CFLAGS) > > noinst_LTLIBRARIES = libilo.la > diff --git a/src/gallium/drivers/ilo/ilo_3d.c > b/src/gallium/drivers/ilo/ilo_3d.c > index 9006376..daedf59 100644 > --- a/src/gallium/drivers/ilo/ilo_3d.c > +++ b/src/gallium/drivers/ilo/ilo_3d.c > @@ -26,7 +26,7 @@ > */ > > #include "util/u_prim.h" > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_3d_pipeline.h" > #include "ilo_blit.h" > diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline.c > b/src/gallium/drivers/ilo/ilo_3d_pipeline.c > index 1f18bbb..ee43372 100644 > --- a/src/gallium/drivers/ilo/ilo_3d_pipeline.c > +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline.c > @@ -26,7 +26,7 @@ > */ > > #include "util/u_prim.h" > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_blitter.h" > #include "ilo_context.h" > diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_dump.c > b/src/gallium/drivers/ilo/ilo_3d_pipeline_dump.c > index de47e8d..3d9065c 100644 > --- a/src/gallium/drivers/ilo/ilo_3d_pipeline_dump.c > +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_dump.c > @@ -26,7 +26,7 @@ > * Chia-I Wu <o...@lunarg.com> > */ > > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_cp.h" > #include "ilo_3d_pipeline.h" > diff --git a/src/gallium/drivers/ilo/ilo_cp.c > b/src/gallium/drivers/ilo/ilo_cp.c > index ec99e0f..0a1996c 100644 > --- a/src/gallium/drivers/ilo/ilo_cp.c > +++ b/src/gallium/drivers/ilo/ilo_cp.c > @@ -26,7 +26,7 @@ > */ > > #include "genhw/genhw.h" > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_cp.h" > > diff --git a/src/gallium/drivers/ilo/ilo_cp.h > b/src/gallium/drivers/ilo/ilo_cp.h > index 15b6604..83eee34 100644 > --- a/src/gallium/drivers/ilo/ilo_cp.h > +++ b/src/gallium/drivers/ilo/ilo_cp.h > @@ -28,7 +28,7 @@ > #ifndef ILO_CP_H > #define ILO_CP_H > > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_common.h" > > diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen6.h > b/src/gallium/drivers/ilo/ilo_gpe_gen6.h > index 8e394de..e769d2f 100644 > --- a/src/gallium/drivers/ilo/ilo_gpe_gen6.h > +++ b/src/gallium/drivers/ilo/ilo_gpe_gen6.h > @@ -29,7 +29,7 @@ > #define ILO_GPE_GEN6_H > > #include "genhw/genhw.h" > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_common.h" > #include "ilo_cp.h" > diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen7.h > b/src/gallium/drivers/ilo/ilo_gpe_gen7.h > index 0816fd6..5dd8448 100644 > --- a/src/gallium/drivers/ilo/ilo_gpe_gen7.h > +++ b/src/gallium/drivers/ilo/ilo_gpe_gen7.h > @@ -28,7 +28,7 @@ > #ifndef ILO_GPE_GEN7_H > #define ILO_GPE_GEN7_H > > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_common.h" > #include "ilo_cp.h" > diff --git a/src/gallium/drivers/ilo/ilo_query.c > b/src/gallium/drivers/ilo/ilo_query.c > index 46e6bf7..d721ff0 100644 > --- a/src/gallium/drivers/ilo/ilo_query.c > +++ b/src/gallium/drivers/ilo/ilo_query.c > @@ -25,7 +25,7 @@ > * Chia-I Wu <o...@lunarg.com> > */ > > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_3d.h" > #include "ilo_context.h" > diff --git a/src/gallium/drivers/ilo/ilo_resource.h > b/src/gallium/drivers/ilo/ilo_resource.h > index b0eab5b..a8e9020 100644 > --- a/src/gallium/drivers/ilo/ilo_resource.h > +++ b/src/gallium/drivers/ilo/ilo_resource.h > @@ -28,7 +28,7 @@ > #ifndef ILO_RESOURCE_H > #define ILO_RESOURCE_H > > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_common.h" > #include "ilo_screen.h" > diff --git a/src/gallium/drivers/ilo/ilo_screen.c > b/src/gallium/drivers/ilo/ilo_screen.c > index ad59d6d..398d544 100644 > --- a/src/gallium/drivers/ilo/ilo_screen.c > +++ b/src/gallium/drivers/ilo/ilo_screen.c > @@ -30,7 +30,7 @@ > #include "vl/vl_decoder.h" > #include "vl/vl_video_buffer.h" > #include "genhw/genhw.h" /* for GEN6_REG_TIMESTAMP */ > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "ilo_context.h" > #include "ilo_format.h" > diff --git a/src/gallium/drivers/ilo/ilo_shader.c > b/src/gallium/drivers/ilo/ilo_shader.c > index b7e7a0a..f145025 100644 > --- a/src/gallium/drivers/ilo/ilo_shader.c > +++ b/src/gallium/drivers/ilo/ilo_shader.c > @@ -27,7 +27,7 @@ > > #include "genhw/genhw.h" /* for SBE setup */ > #include "tgsi/tgsi_parse.h" > -#include "intel_winsys.h" > +#include "intel/drm/intel_winsys.h" > > #include "shader/ilo_shader_internal.h" > #include "ilo_state.h" > diff --git a/src/gallium/winsys/intel/drm/intel_drm_public.h > b/src/gallium/winsys/intel/drm/intel_drm_public.h > new file mode 100644 > index 0000000..0e39dfb > --- /dev/null > +++ b/src/gallium/winsys/intel/drm/intel_drm_public.h > @@ -0,0 +1,8 @@ > +#ifndef INTEL_DRM_PUBLIC_H > +#define INTEL_DRM_PUBLIC_H > + > +struct intel_winsys; > + > +struct intel_winsys *intel_winsys_create_for_fd(int fd); > + > +#endif > diff --git a/src/gallium/winsys/intel/drm/intel_drm_winsys.c > b/src/gallium/winsys/intel/drm/intel_drm_winsys.c > index b394e5f..7746a59 100644 > --- a/src/gallium/winsys/intel/drm/intel_drm_winsys.c > +++ b/src/gallium/winsys/intel/drm/intel_drm_winsys.c > @@ -41,7 +41,8 @@ > #include "util/u_inlines.h" > #include "util/u_memory.h" > #include "util/u_debug.h" > -#include "../intel_winsys.h" > +#include "intel_drm_public.h" > +#include "intel_winsys.h" > > #define BATCH_SZ (8192 * sizeof(uint32_t)) > > diff --git a/src/gallium/winsys/intel/drm/intel_winsys.h > b/src/gallium/winsys/intel/drm/intel_winsys.h > new file mode 100644 > index 0000000..932ffb5 > --- /dev/null > +++ b/src/gallium/winsys/intel/drm/intel_winsys.h > @@ -0,0 +1,317 @@ > +/* > + * Mesa 3-D graphics library > + * > + * Copyright (C) 2012-2014 LunarG, Inc. > + * > + * 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 > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS 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. > + * > + * Authors: > + * Chia-I Wu <o...@lunarg.com> > + */ > + > +#ifndef INTEL_WINSYS_H > +#define INTEL_WINSYS_H > + > +#include "pipe/p_compiler.h" > + > +/* this is compatible with i915_drm.h's definitions */ > +enum intel_ring_type { > + INTEL_RING_RENDER = 1, > + INTEL_RING_BSD = 2, > + INTEL_RING_BLT = 3, > + INTEL_RING_VEBOX = 4, > +}; > + > +/* this is compatible with i915_drm.h's definitions */ > +enum intel_exec_flag { > + INTEL_EXEC_GEN7_SOL_RESET = 1 << 8, > +}; > + > +/* this is compatible with i915_drm.h's definitions */ > +enum intel_domain_flag { > + INTEL_DOMAIN_CPU = 0x00000001, > + INTEL_DOMAIN_RENDER = 0x00000002, > + INTEL_DOMAIN_SAMPLER = 0x00000004, > + INTEL_DOMAIN_COMMAND = 0x00000008, > + INTEL_DOMAIN_INSTRUCTION = 0x00000010, > + INTEL_DOMAIN_VERTEX = 0x00000020, > + INTEL_DOMAIN_GTT = 0x00000040, > +}; > + > +/* this is compatible with i915_drm.h's definitions */ > +enum intel_tiling_mode { > + INTEL_TILING_NONE = 0, > + INTEL_TILING_X = 1, > + INTEL_TILING_Y = 2, > +}; > + > +struct winsys_handle; > +struct intel_winsys; > +struct intel_context; > +struct intel_bo; > + > +struct intel_winsys_info { > + int devid; > + > + int max_batch_size; > + bool has_llc; > + bool has_address_swizzling; > + bool has_logical_context; > + bool has_ppgtt; > + > + /* valid registers for intel_winsys_read_reg() */ > + bool has_timestamp; > + > + /* valid flags for intel_winsys_submit_bo() */ > + bool has_gen7_sol_reset; > +}; > + > +void > +intel_winsys_destroy(struct intel_winsys *winsys); > + > +const struct intel_winsys_info * > +intel_winsys_get_info(const struct intel_winsys *winsys); > + > +int > +intel_winsys_get_aperture_size(const struct intel_winsys *winsys); > + > +/** > + * Create a logical context for use with the render ring. > + */ > +struct intel_context * > +intel_winsys_create_context(struct intel_winsys *winsys); > + > +/** > + * Destroy a logical context. > + */ > +void > +intel_winsys_destroy_context(struct intel_winsys *winsys, > + struct intel_context *ctx); > + > +/** > + * Read a register. Only registers that are considered safe, such as > + * > + * TIMESTAMP (0x2358) > + * > + * can be read. > + */ > +int > +intel_winsys_read_reg(struct intel_winsys *winsys, > + uint32_t reg, uint64_t *val); > + > +/** > + * Allocate a buffer object. > + * > + * \param name Informative description of the bo. > + * \param tiling Tiling mode. > + * \param pitch Pitch of the bo. > + * \param height Height of the bo. > + * \param initial_domain Initial (write) domain. > + */ > +struct intel_bo * > +intel_winsys_alloc_bo(struct intel_winsys *winsys, > + const char *name, > + enum intel_tiling_mode tiling, > + unsigned long pitch, > + unsigned long height, > + uint32_t initial_domain); > + > +/** > + * Allocate a linear buffer object. > + */ > +static inline struct intel_bo * > +intel_winsys_alloc_buffer(struct intel_winsys *winsys, > + const char *name, > + unsigned long size, > + uint32_t initial_domain) > +{ > + return intel_winsys_alloc_bo(winsys, name, > + INTEL_TILING_NONE, size, 1, initial_domain); > +} > + > +/** > + * Create a bo from a winsys handle. > + */ > +struct intel_bo * > +intel_winsys_import_handle(struct intel_winsys *winsys, > + const char *name, > + const struct winsys_handle *handle, > + unsigned long height, > + enum intel_tiling_mode *tiling, > + unsigned long *pitch); > + > +/** > + * Export \p bo as a winsys handle for inter-process sharing. > + */ > +int > +intel_winsys_export_handle(struct intel_winsys *winsys, > + struct intel_bo *bo, > + enum intel_tiling_mode tiling, > + unsigned long pitch, > + unsigned long height, > + struct winsys_handle *handle); > + > +/** > + * Return true when buffer objects directly specified in \p bo_array, and > + * those indirectly referenced by them, can fit in the aperture space. > + */ > +bool > +intel_winsys_can_submit_bo(struct intel_winsys *winsys, > + struct intel_bo **bo_array, > + int count); > + > +/** > + * Submit \p bo for execution. > + * > + * \p bo and all bos referenced by \p bo will be considered busy until all > + * commands are parsed and executed. \p ctx is ignored when the bo is not > + * submitted to the render ring. > + */ > +int > +intel_winsys_submit_bo(struct intel_winsys *winsys, > + enum intel_ring_type ring, > + struct intel_bo *bo, int used, > + struct intel_context *ctx, > + unsigned long flags); > + > +/** > + * Decode the commands contained in \p bo. For debugging. > + * > + * \param bo Batch buffer to decode. > + * \param used Size of the commands in bytes. > + */ > +void > +intel_winsys_decode_bo(struct intel_winsys *winsys, > + struct intel_bo *bo, int used); > + > +/** > + * Increase the reference count of \p bo. > + */ > +void > +intel_bo_reference(struct intel_bo *bo); > + > +/** > + * Decrease the reference count of \p bo. When the reference count reaches > + * zero, \p bo is destroyed. > + */ > +void > +intel_bo_unreference(struct intel_bo *bo); > + > +/** > + * Map \p bo for CPU access. Recursive mapping is allowed. > + * > + * map() maps the backing store into CPU address space, cached. It will > block > + * if the bo is busy. This variant allows fastest random reads and writes, > + * but the caller needs to handle tiling or swizzling manually if the bo is > + * tiled or swizzled. If write is enabled and there is no shared last-level > + * cache (LLC), the CPU cache will be flushed, which is expensive. > + * > + * map_gtt() maps the bo for MMIO access, uncached but write-combined. It > + * will block if the bo is busy. This variant promises a reasonable speed > for > + * sequential writes, but reads would be very slow. Callers always have a > + * linear view of the bo. > + * > + * map_unsynchronized() is similar to map_gtt(), except that it does not > + * block. > + */ > +void * > +intel_bo_map(struct intel_bo *bo, bool write_enable); > + > +void * > +intel_bo_map_gtt(struct intel_bo *bo); > + > +void * > +intel_bo_map_unsynchronized(struct intel_bo *bo); > + > +/** > + * Unmap \p bo. > + */ > +void > +intel_bo_unmap(struct intel_bo *bo); > + > +/** > + * Write data to \p bo. > + */ > +int > +intel_bo_pwrite(struct intel_bo *bo, unsigned long offset, > + unsigned long size, const void *data); > + > +/** > + * Read data from the bo. > + */ > +int > +intel_bo_pread(struct intel_bo *bo, unsigned long offset, > + unsigned long size, void *data); > + > +/** > + * Add \p target_bo to the relocation list. > + * > + * When \p bo is submitted for execution, and if \p target_bo has moved, > + * the kernel will patch \p bo at \p offset to \p target_bo->offset plus > + * \p target_offset. > + * > + * \p presumed_offset should be written to \p bo at \p offset. > + */ > +int > +intel_bo_add_reloc(struct intel_bo *bo, uint32_t offset, > + struct intel_bo *target_bo, uint32_t target_offset, > + uint32_t read_domains, uint32_t write_domain, > + uint64_t *presumed_offset); > + > +/** > + * Return the current number of relocations. > + */ > +int > +intel_bo_get_reloc_count(struct intel_bo *bo); > + > +/** > + * Truncate all relocations except the first \p start ones. > + * > + * Combined with \p intel_bo_get_reloc_count(), they can be used to undo the > + * \p intel_bo_add_reloc() calls that were just made. > + */ > +void > +intel_bo_truncate_relocs(struct intel_bo *bo, int start); > + > +/** > + * Return true if \p target_bo is on the relocation list of \p bo, or on > + * the relocation list of some bo that is referenced by \p bo. > + */ > +bool > +intel_bo_has_reloc(struct intel_bo *bo, struct intel_bo *target_bo); > + > +/** > + * Wait until \bo is idle, or \p timeout nanoseconds have passed. A > + * negative timeout means to wait indefinitely. > + * > + * \return 0 only when \p bo is idle > + */ > +int > +intel_bo_wait(struct intel_bo *bo, int64_t timeout); > + > +/** > + * Return true if \p bo is busy. > + */ > +static inline bool > +intel_bo_is_busy(struct intel_bo *bo) > +{ > + return (intel_bo_wait(bo, 0) != 0); > +} > + > +#endif /* INTEL_WINSYS_H */ > diff --git a/src/gallium/winsys/intel/intel_winsys.h > b/src/gallium/winsys/intel/intel_winsys.h > deleted file mode 100644 > index 4bf9a16..0000000 > --- a/src/gallium/winsys/intel/intel_winsys.h > +++ /dev/null > @@ -1,320 +0,0 @@ > -/* > - * Mesa 3-D graphics library > - * > - * Copyright (C) 2012-2014 LunarG, Inc. > - * > - * 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 > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS 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. > - * > - * Authors: > - * Chia-I Wu <o...@lunarg.com> > - */ > - > -#ifndef INTEL_WINSYS_H > -#define INTEL_WINSYS_H > - > -#include "pipe/p_compiler.h" > - > -/* this is compatible with i915_drm.h's definitions */ > -enum intel_ring_type { > - INTEL_RING_RENDER = 1, > - INTEL_RING_BSD = 2, > - INTEL_RING_BLT = 3, > - INTEL_RING_VEBOX = 4, > -}; > - > -/* this is compatible with i915_drm.h's definitions */ > -enum intel_exec_flag { > - INTEL_EXEC_GEN7_SOL_RESET = 1 << 8, > -}; > - > -/* this is compatible with i915_drm.h's definitions */ > -enum intel_domain_flag { > - INTEL_DOMAIN_CPU = 0x00000001, > - INTEL_DOMAIN_RENDER = 0x00000002, > - INTEL_DOMAIN_SAMPLER = 0x00000004, > - INTEL_DOMAIN_COMMAND = 0x00000008, > - INTEL_DOMAIN_INSTRUCTION = 0x00000010, > - INTEL_DOMAIN_VERTEX = 0x00000020, > - INTEL_DOMAIN_GTT = 0x00000040, > -}; > - > -/* this is compatible with i915_drm.h's definitions */ > -enum intel_tiling_mode { > - INTEL_TILING_NONE = 0, > - INTEL_TILING_X = 1, > - INTEL_TILING_Y = 2, > -}; > - > -struct winsys_handle; > -struct intel_winsys; > -struct intel_context; > -struct intel_bo; > - > -struct intel_winsys_info { > - int devid; > - > - int max_batch_size; > - bool has_llc; > - bool has_address_swizzling; > - bool has_logical_context; > - bool has_ppgtt; > - > - /* valid registers for intel_winsys_read_reg() */ > - bool has_timestamp; > - > - /* valid flags for intel_winsys_submit_bo() */ > - bool has_gen7_sol_reset; > -}; > - > -struct intel_winsys * > -intel_winsys_create_for_fd(int fd); > - > -void > -intel_winsys_destroy(struct intel_winsys *winsys); > - > -const struct intel_winsys_info * > -intel_winsys_get_info(const struct intel_winsys *winsys); > - > -int > -intel_winsys_get_aperture_size(const struct intel_winsys *winsys); > - > -/** > - * Create a logical context for use with the render ring. > - */ > -struct intel_context * > -intel_winsys_create_context(struct intel_winsys *winsys); > - > -/** > - * Destroy a logical context. > - */ > -void > -intel_winsys_destroy_context(struct intel_winsys *winsys, > - struct intel_context *ctx); > - > -/** > - * Read a register. Only registers that are considered safe, such as > - * > - * TIMESTAMP (0x2358) > - * > - * can be read. > - */ > -int > -intel_winsys_read_reg(struct intel_winsys *winsys, > - uint32_t reg, uint64_t *val); > - > -/** > - * Allocate a buffer object. > - * > - * \param name Informative description of the bo. > - * \param tiling Tiling mode. > - * \param pitch Pitch of the bo. > - * \param height Height of the bo. > - * \param initial_domain Initial (write) domain. > - */ > -struct intel_bo * > -intel_winsys_alloc_bo(struct intel_winsys *winsys, > - const char *name, > - enum intel_tiling_mode tiling, > - unsigned long pitch, > - unsigned long height, > - uint32_t initial_domain); > - > -/** > - * Allocate a linear buffer object. > - */ > -static inline struct intel_bo * > -intel_winsys_alloc_buffer(struct intel_winsys *winsys, > - const char *name, > - unsigned long size, > - uint32_t initial_domain) > -{ > - return intel_winsys_alloc_bo(winsys, name, > - INTEL_TILING_NONE, size, 1, initial_domain); > -} > - > -/** > - * Create a bo from a winsys handle. > - */ > -struct intel_bo * > -intel_winsys_import_handle(struct intel_winsys *winsys, > - const char *name, > - const struct winsys_handle *handle, > - unsigned long height, > - enum intel_tiling_mode *tiling, > - unsigned long *pitch); > - > -/** > - * Export \p bo as a winsys handle for inter-process sharing. > - */ > -int > -intel_winsys_export_handle(struct intel_winsys *winsys, > - struct intel_bo *bo, > - enum intel_tiling_mode tiling, > - unsigned long pitch, > - unsigned long height, > - struct winsys_handle *handle); > - > -/** > - * Return true when buffer objects directly specified in \p bo_array, and > - * those indirectly referenced by them, can fit in the aperture space. > - */ > -bool > -intel_winsys_can_submit_bo(struct intel_winsys *winsys, > - struct intel_bo **bo_array, > - int count); > - > -/** > - * Submit \p bo for execution. > - * > - * \p bo and all bos referenced by \p bo will be considered busy until all > - * commands are parsed and executed. \p ctx is ignored when the bo is not > - * submitted to the render ring. > - */ > -int > -intel_winsys_submit_bo(struct intel_winsys *winsys, > - enum intel_ring_type ring, > - struct intel_bo *bo, int used, > - struct intel_context *ctx, > - unsigned long flags); > - > -/** > - * Decode the commands contained in \p bo. For debugging. > - * > - * \param bo Batch buffer to decode. > - * \param used Size of the commands in bytes. > - */ > -void > -intel_winsys_decode_bo(struct intel_winsys *winsys, > - struct intel_bo *bo, int used); > - > -/** > - * Increase the reference count of \p bo. > - */ > -void > -intel_bo_reference(struct intel_bo *bo); > - > -/** > - * Decrease the reference count of \p bo. When the reference count reaches > - * zero, \p bo is destroyed. > - */ > -void > -intel_bo_unreference(struct intel_bo *bo); > - > -/** > - * Map \p bo for CPU access. Recursive mapping is allowed. > - * > - * map() maps the backing store into CPU address space, cached. It will > block > - * if the bo is busy. This variant allows fastest random reads and writes, > - * but the caller needs to handle tiling or swizzling manually if the bo is > - * tiled or swizzled. If write is enabled and there is no shared last-level > - * cache (LLC), the CPU cache will be flushed, which is expensive. > - * > - * map_gtt() maps the bo for MMIO access, uncached but write-combined. It > - * will block if the bo is busy. This variant promises a reasonable speed > for > - * sequential writes, but reads would be very slow. Callers always have a > - * linear view of the bo. > - * > - * map_unsynchronized() is similar to map_gtt(), except that it does not > - * block. > - */ > -void * > -intel_bo_map(struct intel_bo *bo, bool write_enable); > - > -void * > -intel_bo_map_gtt(struct intel_bo *bo); > - > -void * > -intel_bo_map_unsynchronized(struct intel_bo *bo); > - > -/** > - * Unmap \p bo. > - */ > -void > -intel_bo_unmap(struct intel_bo *bo); > - > -/** > - * Write data to \p bo. > - */ > -int > -intel_bo_pwrite(struct intel_bo *bo, unsigned long offset, > - unsigned long size, const void *data); > - > -/** > - * Read data from the bo. > - */ > -int > -intel_bo_pread(struct intel_bo *bo, unsigned long offset, > - unsigned long size, void *data); > - > -/** > - * Add \p target_bo to the relocation list. > - * > - * When \p bo is submitted for execution, and if \p target_bo has moved, > - * the kernel will patch \p bo at \p offset to \p target_bo->offset plus > - * \p target_offset. > - * > - * \p presumed_offset should be written to \p bo at \p offset. > - */ > -int > -intel_bo_add_reloc(struct intel_bo *bo, uint32_t offset, > - struct intel_bo *target_bo, uint32_t target_offset, > - uint32_t read_domains, uint32_t write_domain, > - uint64_t *presumed_offset); > - > -/** > - * Return the current number of relocations. > - */ > -int > -intel_bo_get_reloc_count(struct intel_bo *bo); > - > -/** > - * Truncate all relocations except the first \p start ones. > - * > - * Combined with \p intel_bo_get_reloc_count(), they can be used to undo the > - * \p intel_bo_add_reloc() calls that were just made. > - */ > -void > -intel_bo_truncate_relocs(struct intel_bo *bo, int start); > - > -/** > - * Return true if \p target_bo is on the relocation list of \p bo, or on > - * the relocation list of some bo that is referenced by \p bo. > - */ > -bool > -intel_bo_has_reloc(struct intel_bo *bo, struct intel_bo *target_bo); > - > -/** > - * Wait until \bo is idle, or \p timeout nanoseconds have passed. A > - * negative timeout means to wait indefinitely. > - * > - * \return 0 only when \p bo is idle > - */ > -int > -intel_bo_wait(struct intel_bo *bo, int64_t timeout); > - > -/** > - * Return true if \p bo is busy. > - */ > -static inline bool > -intel_bo_is_busy(struct intel_bo *bo) > -{ > - return (intel_bo_wait(bo, 0) != 0); > -} > - > -#endif /* INTEL_WINSYS_H */ > -- > 2.0.2 > -- o...@lunarg.com _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev