summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i965/brw_context.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_context.h')
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.h1637
1 files changed, 0 insertions, 1637 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
deleted file mode 100644
index 17791286328..00000000000
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ /dev/null
@@ -1,1637 +0,0 @@
-/*
- Copyright (C) Intel Corp. 2006. All Rights Reserved.
- Intel funded Tungsten Graphics to
- develop this 3D driver.
-
- 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 (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 NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS 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.
-
- **********************************************************************/
- /*
- * Authors:
- * Keith Whitwell <keithw@vmware.com>
- */
-
-
-#ifndef BRWCONTEXT_INC
-#define BRWCONTEXT_INC
-
-#include <stdbool.h>
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/errors.h"
-#include "brw_structs.h"
-#include "brw_pipe_control.h"
-#include "compiler/brw_compiler.h"
-
-#include "isl/isl.h"
-#include "blorp/blorp.h"
-
-#include <brw_bufmgr.h>
-
-#include "dev/intel_debug.h"
-#include "common/intel_decoder.h"
-#include "brw_screen.h"
-#include "brw_tex_obj.h"
-#include "perf/intel_perf.h"
-#include "perf/intel_perf_query.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/* Glossary:
- *
- * URB - uniform resource buffer. A mid-sized buffer which is
- * partitioned between the fixed function units and used for passing
- * values (vertices, primitives, constants) between them.
- *
- * CURBE - constant URB entry. An urb region (entry) used to hold
- * constant values which the fixed function units can be instructed to
- * preload into the GRF when spawning a thread.
- *
- * VUE - vertex URB entry. An urb entry holding a vertex and usually
- * a vertex header. The header contains control information and
- * things like primitive type, Begin/end flags and clip codes.
- *
- * PUE - primitive URB entry. An urb entry produced by the setup (SF)
- * unit holding rasterization and interpolation parameters.
- *
- * GRF - general register file. One of several register files
- * addressable by programmed threads. The inputs (r0, payload, curbe,
- * urb) of the thread are preloaded to this area before the thread is
- * spawned. The registers are individually 8 dwords wide and suitable
- * for general usage. Registers holding thread input values are not
- * special and may be overwritten.
- *
- * MRF - message register file. Threads communicate (and terminate)
- * by sending messages. Message parameters are placed in contiguous
- * MRF registers. All program output is via these messages. URB
- * entries are populated by sending a message to the shared URB
- * function containing the new data, together with a control word,
- * often an unmodified copy of R0.
- *
- * R0 - GRF register 0. Typically holds control information used when
- * sending messages to other threads.
- *
- * EU or GFX4 EU: The name of the programmable subsystem of the
- * i965 hardware. Threads are executed by the EU, the registers
- * described above are part of the EU architecture.
- *
- * Fixed function units:
- *
- * CS - Command streamer. Notional first unit, little software
- * interaction. Holds the URB entries used for constant data, ie the
- * CURBEs.
- *
- * VF/VS - Vertex Fetch / Vertex Shader. The fixed function part of
- * this unit is responsible for pulling vertices out of vertex buffers
- * in vram and injecting them into the processing pipe as VUEs. If
- * enabled, it first passes them to a VS thread which is a good place
- * for the driver to implement any active vertex shader.
- *
- * HS - Hull Shader (Tessellation Control Shader)
- *
- * TE - Tessellation Engine (Tessellation Primitive Generation)
- *
- * DS - Domain Shader (Tessellation Evaluation Shader)
- *
- * GS - Geometry Shader. This corresponds to a new DX10 concept. If
- * enabled, incoming strips etc are passed to GS threads in individual
- * line/triangle/point units. The GS thread may perform arbitary
- * computation and emit whatever primtives with whatever vertices it
- * chooses. This makes GS an excellent place to implement GL's
- * unfilled polygon modes, though of course it is capable of much
- * more. Additionally, GS is used to translate away primitives not
- * handled by latter units, including Quads and Lineloops.
- *
- * CS - Clipper. Mesa's clipping algorithms are imported to run on
- * this unit. The fixed function part performs cliptesting against
- * the 6 fixed clipplanes and makes descisions on whether or not the
- * incoming primitive needs to be passed to a thread for clipping.
- * User clip planes are handled via cooperation with the VS thread.
- *
- * SF - Strips Fans or Setup: Triangles are prepared for
- * rasterization. Interpolation coefficients are calculated.
- * Flatshading and two-side lighting usually performed here.
- *
- * WM - Windower. Interpolation of vertex attributes performed here.
- * Fragment shader implemented here. SIMD aspects of EU taken full
- * advantage of, as pixels are processed in blocks of 16.
- *
- * CC - Color Calculator. No EU threads associated with this unit.
- * Handles blending and (presumably) depth and stencil testing.
- */
-
-struct brw_context;
-struct brw_inst;
-struct brw_vs_prog_key;
-struct brw_vue_prog_key;
-struct brw_wm_prog_key;
-struct brw_wm_prog_data;
-struct brw_cs_prog_key;
-struct brw_cs_prog_data;
-struct brw_label;
-
-enum brw_pipeline {
- BRW_RENDER_PIPELINE,
- BRW_COMPUTE_PIPELINE,
-
- BRW_NUM_PIPELINES
-};
-
-enum brw_cache_id {
- BRW_CACHE_FS_PROG,
- BRW_CACHE_BLORP_PROG,
- BRW_CACHE_SF_PROG,
- BRW_CACHE_VS_PROG,
- BRW_CACHE_FF_GS_PROG,
- BRW_CACHE_GS_PROG,
- BRW_CACHE_TCS_PROG,
- BRW_CACHE_TES_PROG,
- BRW_CACHE_CLIP_PROG,
- BRW_CACHE_CS_PROG,
-
- BRW_MAX_CACHE
-};
-
-enum gfx9_astc5x5_wa_tex_type {
- GFX9_ASTC5X5_WA_TEX_TYPE_ASTC5x5 = 1 << 0,
- GFX9_ASTC5X5_WA_TEX_TYPE_AUX = 1 << 1,
-};
-
-enum brw_state_id {
- /* brw_cache_ids must come first - see brw_program_cache.c */
- BRW_STATE_URB_FENCE = BRW_MAX_CACHE,
- BRW_STATE_FRAGMENT_PROGRAM,
- BRW_STATE_GEOMETRY_PROGRAM,
- BRW_STATE_TESS_PROGRAMS,
- BRW_STATE_VERTEX_PROGRAM,
- BRW_STATE_REDUCED_PRIMITIVE,
- BRW_STATE_PATCH_PRIMITIVE,
- BRW_STATE_PRIMITIVE,
- BRW_STATE_CONTEXT,
- BRW_STATE_PSP,
- BRW_STATE_SURFACES,
- BRW_STATE_BINDING_TABLE_POINTERS,
- BRW_STATE_INDICES,
- BRW_STATE_VERTICES,
- BRW_STATE_DEFAULT_TESS_LEVELS,
- BRW_STATE_BATCH,
- BRW_STATE_INDEX_BUFFER,
- BRW_STATE_VS_CONSTBUF,
- BRW_STATE_TCS_CONSTBUF,
- BRW_STATE_TES_CONSTBUF,
- BRW_STATE_GS_CONSTBUF,
- BRW_STATE_PROGRAM_CACHE,
- BRW_STATE_STATE_BASE_ADDRESS,
- BRW_STATE_VUE_MAP_GEOM_OUT,
- BRW_STATE_TRANSFORM_FEEDBACK,
- BRW_STATE_RASTERIZER_DISCARD,
- BRW_STATE_STATS_WM,
- BRW_STATE_UNIFORM_BUFFER,
- BRW_STATE_IMAGE_UNITS,
- BRW_STATE_META_IN_PROGRESS,
- BRW_STATE_PUSH_CONSTANT_ALLOCATION,
- BRW_STATE_NUM_SAMPLES,
- BRW_STATE_TEXTURE_BUFFER,
- BRW_STATE_GFX4_UNIT_STATE,
- BRW_STATE_CC_VP,
- BRW_STATE_SF_VP,
- BRW_STATE_CLIP_VP,
- BRW_STATE_SAMPLER_STATE_TABLE,
- BRW_STATE_VS_ATTRIB_WORKAROUNDS,
- BRW_STATE_COMPUTE_PROGRAM,
- BRW_STATE_CS_WORK_GROUPS,
- BRW_STATE_URB_SIZE,
- BRW_STATE_CC_STATE,
- BRW_STATE_BLORP,
- BRW_STATE_VIEWPORT_COUNT,
- BRW_STATE_CONSERVATIVE_RASTERIZATION,
- BRW_STATE_DRAW_CALL,
- BRW_STATE_AUX,
- BRW_NUM_STATE_BITS
-};
-
-/**
- * BRW_NEW_*_PROG_DATA and BRW_NEW_*_PROGRAM are similar, but distinct.
- *
- * BRW_NEW_*_PROGRAM relates to the gl_shader_program/gl_program structures.
- * When the currently bound shader program differs from the previous draw
- * call, these will be flagged. They cover brw->{stage}_program and
- * ctx->{Stage}Program->_Current.
- *
- * BRW_NEW_*_PROG_DATA is flagged when the effective shaders change, from a
- * driver perspective. Even if the same shader is bound at the API level,
- * we may need to switch between multiple versions of that shader to handle
- * changes in non-orthagonal state.
- *
- * Additionally, multiple shader programs may have identical vertex shaders
- * (for example), or compile down to the same code in the backend. We combine
- * those into a single program cache entry.
- *
- * BRW_NEW_*_PROG_DATA occurs when switching program cache entries, which
- * covers the brw_*_prog_data structures, and brw->*.prog_offset.
- */
-#define BRW_NEW_FS_PROG_DATA (1ull << BRW_CACHE_FS_PROG)
-/* XXX: The BRW_NEW_BLORP_BLIT_PROG_DATA dirty bit is unused (as BLORP doesn't
- * use the normal state upload paths), but the cache is still used. To avoid
- * polluting the brw_program_cache code with special cases, we retain the
- * dirty bit for now. It should eventually be removed.
- */
-#define BRW_NEW_BLORP_BLIT_PROG_DATA (1ull << BRW_CACHE_BLORP_PROG)
-#define BRW_NEW_SF_PROG_DATA (1ull << BRW_CACHE_SF_PROG)
-#define BRW_NEW_VS_PROG_DATA (1ull << BRW_CACHE_VS_PROG)
-#define BRW_NEW_FF_GS_PROG_DATA (1ull << BRW_CACHE_FF_GS_PROG)
-#define BRW_NEW_GS_PROG_DATA (1ull << BRW_CACHE_GS_PROG)
-#define BRW_NEW_TCS_PROG_DATA (1ull << BRW_CACHE_TCS_PROG)
-#define BRW_NEW_TES_PROG_DATA (1ull << BRW_CACHE_TES_PROG)
-#define BRW_NEW_CLIP_PROG_DATA (1ull << BRW_CACHE_CLIP_PROG)
-#define BRW_NEW_CS_PROG_DATA (1ull << BRW_CACHE_CS_PROG)
-#define BRW_NEW_URB_FENCE (1ull << BRW_STATE_URB_FENCE)
-#define BRW_NEW_FRAGMENT_PROGRAM (1ull << BRW_STATE_FRAGMENT_PROGRAM)
-#define BRW_NEW_GEOMETRY_PROGRAM (1ull << BRW_STATE_GEOMETRY_PROGRAM)
-#define BRW_NEW_TESS_PROGRAMS (1ull << BRW_STATE_TESS_PROGRAMS)
-#define BRW_NEW_VERTEX_PROGRAM (1ull << BRW_STATE_VERTEX_PROGRAM)
-#define BRW_NEW_REDUCED_PRIMITIVE (1ull << BRW_STATE_REDUCED_PRIMITIVE)
-#define BRW_NEW_PATCH_PRIMITIVE (1ull << BRW_STATE_PATCH_PRIMITIVE)
-#define BRW_NEW_PRIMITIVE (1ull << BRW_STATE_PRIMITIVE)
-#define BRW_NEW_CONTEXT (1ull << BRW_STATE_CONTEXT)
-#define BRW_NEW_PSP (1ull << BRW_STATE_PSP)
-#define BRW_NEW_SURFACES (1ull << BRW_STATE_SURFACES)
-#define BRW_NEW_BINDING_TABLE_POINTERS (1ull << BRW_STATE_BINDING_TABLE_POINTERS)
-#define BRW_NEW_INDICES (1ull << BRW_STATE_INDICES)
-#define BRW_NEW_VERTICES (1ull << BRW_STATE_VERTICES)
-#define BRW_NEW_DEFAULT_TESS_LEVELS (1ull << BRW_STATE_DEFAULT_TESS_LEVELS)
-/**
- * Used for any batch entry with a relocated pointer that will be used
- * by any 3D rendering.
- */
-#define BRW_NEW_BATCH (1ull << BRW_STATE_BATCH)
-/** \see brw.state.depth_region */
-#define BRW_NEW_INDEX_BUFFER (1ull << BRW_STATE_INDEX_BUFFER)
-#define BRW_NEW_VS_CONSTBUF (1ull << BRW_STATE_VS_CONSTBUF)
-#define BRW_NEW_TCS_CONSTBUF (1ull << BRW_STATE_TCS_CONSTBUF)
-#define BRW_NEW_TES_CONSTBUF (1ull << BRW_STATE_TES_CONSTBUF)
-#define BRW_NEW_GS_CONSTBUF (1ull << BRW_STATE_GS_CONSTBUF)
-#define BRW_NEW_PROGRAM_CACHE (1ull << BRW_STATE_PROGRAM_CACHE)
-#define BRW_NEW_STATE_BASE_ADDRESS (1ull << BRW_STATE_STATE_BASE_ADDRESS)
-#define BRW_NEW_VUE_MAP_GEOM_OUT (1ull << BRW_STATE_VUE_MAP_GEOM_OUT)
-#define BRW_NEW_VIEWPORT_COUNT (1ull << BRW_STATE_VIEWPORT_COUNT)
-#define BRW_NEW_TRANSFORM_FEEDBACK (1ull << BRW_STATE_TRANSFORM_FEEDBACK)
-#define BRW_NEW_RASTERIZER_DISCARD (1ull << BRW_STATE_RASTERIZER_DISCARD)
-#define BRW_NEW_STATS_WM (1ull << BRW_STATE_STATS_WM)
-#define BRW_NEW_UNIFORM_BUFFER (1ull << BRW_STATE_UNIFORM_BUFFER)
-#define BRW_NEW_IMAGE_UNITS (1ull << BRW_STATE_IMAGE_UNITS)
-#define BRW_NEW_META_IN_PROGRESS (1ull << BRW_STATE_META_IN_PROGRESS)
-#define BRW_NEW_PUSH_CONSTANT_ALLOCATION (1ull << BRW_STATE_PUSH_CONSTANT_ALLOCATION)
-#define BRW_NEW_NUM_SAMPLES (1ull << BRW_STATE_NUM_SAMPLES)
-#define BRW_NEW_TEXTURE_BUFFER (1ull << BRW_STATE_TEXTURE_BUFFER)
-#define BRW_NEW_GFX4_UNIT_STATE (1ull << BRW_STATE_GFX4_UNIT_STATE)
-#define BRW_NEW_CC_VP (1ull << BRW_STATE_CC_VP)
-#define BRW_NEW_SF_VP (1ull << BRW_STATE_SF_VP)
-#define BRW_NEW_CLIP_VP (1ull << BRW_STATE_CLIP_VP)
-#define BRW_NEW_SAMPLER_STATE_TABLE (1ull << BRW_STATE_SAMPLER_STATE_TABLE)
-#define BRW_NEW_VS_ATTRIB_WORKAROUNDS (1ull << BRW_STATE_VS_ATTRIB_WORKAROUNDS)
-#define BRW_NEW_COMPUTE_PROGRAM (1ull << BRW_STATE_COMPUTE_PROGRAM)
-#define BRW_NEW_CS_WORK_GROUPS (1ull << BRW_STATE_CS_WORK_GROUPS)
-#define BRW_NEW_URB_SIZE (1ull << BRW_STATE_URB_SIZE)
-#define BRW_NEW_CC_STATE (1ull << BRW_STATE_CC_STATE)
-#define BRW_NEW_BLORP (1ull << BRW_STATE_BLORP)
-#define BRW_NEW_CONSERVATIVE_RASTERIZATION (1ull << BRW_STATE_CONSERVATIVE_RASTERIZATION)
-#define BRW_NEW_DRAW_CALL (1ull << BRW_STATE_DRAW_CALL)
-#define BRW_NEW_AUX_STATE (1ull << BRW_STATE_AUX)
-
-struct brw_state_flags {
- /** State update flags signalled by mesa internals */
- GLuint mesa;
- /**
- * State update flags signalled as the result of brw_tracked_state updates
- */
- uint64_t brw;
-};
-
-
-/** Subclass of Mesa program */
-struct brw_program {
- struct gl_program program;
- GLuint id;
-
- bool compiled_once;
-};
-
-/** Number of texture sampler units */
-#define BRW_MAX_TEX_UNIT 32
-
-/** Max number of UBOs in a shader */
-#define BRW_MAX_UBO 14
-
-/** Max number of SSBOs in a shader */
-#define BRW_MAX_SSBO 12
-
-/** Max number of atomic counter buffer objects in a shader */
-#define BRW_MAX_ABO 16
-
-/** Max number of image uniforms in a shader */
-#define BRW_MAX_IMAGES 32
-
-/** Maximum number of actual buffers used for stream output */
-#define BRW_MAX_SOL_BUFFERS 4
-
-#define BRW_MAX_SURFACES (BRW_MAX_DRAW_BUFFERS + \
- BRW_MAX_TEX_UNIT * 2 + /* normal, gather */ \
- BRW_MAX_UBO + \
- BRW_MAX_SSBO + \
- BRW_MAX_ABO + \
- BRW_MAX_IMAGES + \
- 2 + /* shader time, pull constants */ \
- 1 /* cs num work groups */)
-
-struct brw_cache {
- struct brw_context *brw;
-
- struct brw_cache_item **items;
- struct brw_bo *bo;
- void *map;
- GLuint size, n_items;
-
- uint32_t next_offset;
-};
-
-#define perf_debug(...) do { \
- static GLuint msg_id = 0; \
- if (INTEL_DEBUG & DEBUG_PERF) \
- dbg_printf(__VA_ARGS__); \
- if (brw->perf_debug) \
- _mesa_gl_debugf(&brw->ctx, &msg_id, \
- MESA_DEBUG_SOURCE_API, \
- MESA_DEBUG_TYPE_PERFORMANCE, \
- MESA_DEBUG_SEVERITY_MEDIUM, \
- __VA_ARGS__); \
-} while(0)
-
-#define WARN_ONCE(cond, fmt...) do { \
- if (unlikely(cond)) { \
- static bool _warned = false; \
- static GLuint msg_id = 0; \
- if (!_warned) { \
- fprintf(stderr, "WARNING: "); \
- fprintf(stderr, fmt); \
- _warned = true; \
- \
- _mesa_gl_debugf(ctx, &msg_id, \
- MESA_DEBUG_SOURCE_API, \
- MESA_DEBUG_TYPE_OTHER, \
- MESA_DEBUG_SEVERITY_HIGH, fmt); \
- } \
- } \
-} while (0)
-
-/* Considered adding a member to this struct to document which flags
- * an update might raise so that ordering of the state atoms can be
- * checked or derived at runtime. Dropped the idea in favor of having
- * a debug mode where the state is monitored for flags which are
- * raised that have already been tested against.
- */
-struct brw_tracked_state {
- struct brw_state_flags dirty;
- void (*emit)( struct brw_context *brw );
-};
-
-enum shader_time_shader_type {
- ST_NONE,
- ST_VS,
- ST_TCS,
- ST_TES,
- ST_GS,
- ST_FS8,
- ST_FS16,
- ST_FS32,
- ST_CS,
-};
-
-struct brw_vertex_buffer {
- /** Buffer object containing the uploaded vertex data */
- struct brw_bo *bo;
- uint32_t offset;
- uint32_t size;
- /** Byte stride between elements in the uploaded array */
- GLuint stride;
- GLuint step_rate;
-};
-struct brw_vertex_element {
- const struct gl_vertex_format *glformat;
-
- int buffer;
- bool is_dual_slot;
- /** Offset of the first element within the buffer object */
- unsigned int offset;
-};
-
-struct brw_query_object {
- struct gl_query_object Base;
-
- /** Last query BO associated with this query. */
- struct brw_bo *bo;
-
- /** Last index in bo with query data for this object. */
- int last_index;
-
- /** True if we know the batch has been flushed since we ended the query. */
- bool flushed;
-};
-
-struct brw_reloc_list {
- struct drm_i915_gem_relocation_entry *relocs;
- int reloc_count;
- int reloc_array_size;
-};
-
-struct brw_growing_bo {
- struct brw_bo *bo;
- uint32_t *map;
- struct brw_bo *partial_bo;
- uint32_t *partial_bo_map;
- unsigned partial_bytes;
- enum brw_memory_zone memzone;
-};
-
-struct brw_batch {
- /** Current batchbuffer being queued up. */
- struct brw_growing_bo batch;
- /** Current statebuffer being queued up. */
- struct brw_growing_bo state;
-
- /** Last batchbuffer submitted to the hardware. Used for glFinish(). */
- struct brw_bo *last_bo;
-
-#ifdef DEBUG
- uint16_t emit, total;
-#endif
- uint32_t *map_next;
- uint32_t state_used;
-
- bool use_shadow_copy;
- bool use_batch_first;
- bool needs_sol_reset;
- bool state_base_address_emitted;
- bool no_wrap;
- bool contains_fence_signal;
-
- struct brw_reloc_list batch_relocs;
- struct brw_reloc_list state_relocs;
- unsigned int valid_reloc_flags;
-
- /** The validation list */
- struct drm_i915_gem_exec_object2 *validation_list;
- struct brw_bo **exec_bos;
- int exec_count;
- int exec_array_size;
-
- /** The amount of aperture space (in bytes) used by all exec_bos */
- uint64_t aperture_space;
-
- struct {
- uint32_t *map_next;
- int batch_reloc_count;
- int state_reloc_count;
- int exec_count;
- } saved;
-
- /** Map from batch offset to brw_state_batch data (with DEBUG_BATCH) */
- struct hash_table_u64 *state_batch_sizes;
-
- struct intel_batch_decode_ctx decoder;
-
- /** A list of drm_i915_exec_fences to have execbuf signal or wait on */
- struct util_dynarray exec_fences;
-};
-
-#define BRW_MAX_XFB_STREAMS 4
-
-struct brw_transform_feedback_counter {
- /**
- * Index of the first entry of this counter within the primitive count BO.
- * An entry is considered to be an N-tuple of 64bit values, where N is the
- * number of vertex streams supported by the platform.
- */
- unsigned bo_start;
-
- /**
- * Index one past the last entry of this counter within the primitive
- * count BO.
- */
- unsigned bo_end;
-
- /**
- * Primitive count values accumulated while this counter was active,
- * excluding any entries buffered between \c bo_start and \c bo_end, which
- * haven't been accounted for yet.
- */
- uint64_t accum[BRW_MAX_XFB_STREAMS];
-};
-
-static inline void
-brw_reset_transform_feedback_counter(
- struct brw_transform_feedback_counter *counter)
-{
- counter->bo_start = counter->bo_end;
- memset(&counter->accum, 0, sizeof(counter->accum));
-}
-
-struct brw_transform_feedback_object {
- struct gl_transform_feedback_object base;
-
- /** A buffer to hold SO_WRITE_OFFSET(n) values while paused. */
- struct brw_bo *offset_bo;
-
- /** If true, SO_WRITE_OFFSET(n) should be reset to zero at next use. */
- bool zero_offsets;
-
- /** The most recent primitive mode (GL_TRIANGLES/GL_POINTS/GL_LINES). */
- GLenum primitive_mode;
-
- /**
- * The maximum number of vertices that we can write without overflowing
- * any of the buffers currently being used for transform feedback.
- */
- unsigned max_index;
-
- struct brw_bo *prim_count_bo;
-
- /**
- * Count of primitives generated during this transform feedback operation.
- */
- struct brw_transform_feedback_counter counter;
-
- /**
- * Count of primitives generated during the previous transform feedback
- * operation. Used to implement DrawTransformFeedback().
- */
- struct brw_transform_feedback_counter previous_counter;
-
- /**
- * Number of vertices written between last Begin/EndTransformFeedback().
- *
- * Used to implement DrawTransformFeedback().
- */
- uint64_t vertices_written[BRW_MAX_XFB_STREAMS];
- bool vertices_written_valid;
-};
-
-/**
- * Data shared between each programmable stage in the pipeline (vs, gs, and
- * wm).
- */
-struct brw_stage_state
-{
- gl_shader_stage stage;
- struct brw_stage_prog_data *prog_data;
-
- /**
- * Optional scratch buffer used to store spilled register values and
- * variably-indexed GRF arrays.
- *
- * The contents of this buffer are short-lived so the same memory can be
- * re-used at will for multiple shader programs (executed by the same fixed
- * function). However reusing a scratch BO for which shader invocations
- * are still in flight with a per-thread scratch slot size other than the
- * original can cause threads with different scratch slot size and FFTID
- * (which may be executed in parallel depending on the shader stage and
- * hardware generation) to map to an overlapping region of the scratch
- * space, which can potentially lead to mutual scratch space corruption.
- * For that reason if you borrow this scratch buffer you should only be
- * using the slot size given by the \c per_thread_scratch member below,
- * unless you're taking additional measures to synchronize thread execution
- * across slot size changes.
- */
- struct brw_bo *scratch_bo;
-
- /**
- * Scratch slot size allocated for each thread in the buffer object given
- * by \c scratch_bo.
- */
- uint32_t per_thread_scratch;
-
- /** Offset in the program cache to the program */
- uint32_t prog_offset;
-
- /** Offset in the batchbuffer to Gfx4-5 pipelined state (VS/WM/GS_STATE). */
- uint32_t state_offset;
-
- struct brw_bo *push_const_bo; /* NULL if using the batchbuffer */
- uint32_t push_const_offset; /* Offset in the push constant BO or batch */
- int push_const_size; /* in 256-bit register increments */
-
- /* Binding table: pointers to SURFACE_STATE entries. */
- uint32_t bind_bo_offset;
- uint32_t surf_offset[BRW_MAX_SURFACES];
-
- /** SAMPLER_STATE count and table offset */
- uint32_t sampler_count;
- uint32_t sampler_offset;
-
- struct brw_image_param image_param[BRW_MAX_IMAGES];
-
- /** Need to re-emit 3DSTATE_CONSTANT_XS? */
- bool push_constants_dirty;
-};
-
-enum brw_predicate_state {
- /* The first two states are used if we can determine whether to draw
- * without having to look at the values in the query object buffer. This
- * will happen if there is no conditional render in progress, if the query
- * object is already completed or if something else has already added
- * samples to the preliminary result such as via a BLT command.
- */
- BRW_PREDICATE_STATE_RENDER,
- BRW_PREDICATE_STATE_DONT_RENDER,
- /* In this case whether to draw or not depends on the result of an
- * MI_PREDICATE command so the predicate enable bit needs to be checked.
- */
- BRW_PREDICATE_STATE_USE_BIT,
- /* In this case, either MI_PREDICATE doesn't exist or we lack the
- * necessary kernel features to use it. Stall for the query result.
- */
- BRW_PREDICATE_STATE_STALL_FOR_QUERY,
-};
-
-struct shader_times;
-
-struct intel_l3_config;
-struct intel_perf;
-
-struct brw_uploader {
- struct brw_bufmgr *bufmgr;
- struct brw_bo *bo;
- void *map;
- uint32_t next_offset;
- unsigned default_size;
-};
-
-/**
- * brw_context is derived from gl_context.
- */
-struct brw_context
-{
- struct gl_context ctx; /**< base class, must be first field */
-
- struct
- {
- /**
- * Emit an MI_REPORT_PERF_COUNT command packet.
- *
- * This asks the GPU to write a report of the current OA counter values
- * into @bo at the given offset and containing the given @report_id
- * which we can cross-reference when parsing the report (gfx7+ only).
- */
- void (*emit_mi_report_perf_count)(struct brw_context *brw,
- struct brw_bo *bo,
- uint32_t offset_in_bytes,
- uint32_t report_id);
-
- void (*emit_compute_walker)(struct brw_context *brw);
- void (*emit_raw_pipe_control)(struct brw_context *brw, uint32_t flags,
- struct brw_bo *bo, uint32_t offset,
- uint64_t imm);
- } vtbl;
-
- struct brw_bufmgr *bufmgr;
-
- uint32_t hw_ctx;
-
- /**
- * BO for post-sync nonzero writes for gfx6 workaround.
- *
- * This buffer also contains a marker + description of the driver. This
- * buffer is added to all execbufs syscalls so that we can identify the
- * driver that generated a hang by looking at the content of the buffer in
- * the error state.
- *
- * Read/write should go at workaround_bo_offset in that buffer to avoid
- * overriding the debug data.
- */
- struct brw_bo *workaround_bo;
- uint32_t workaround_bo_offset;
- uint8_t pipe_controls_since_last_cs_stall;
-
- /**
- * Set of struct brw_bo * that have been rendered to within this batchbuffer
- * and would need flushing before being used from another cache domain that
- * isn't coherent with it (i.e. the sampler).
- */
- struct hash_table *render_cache;
-
- /**
- * Set of struct brw_bo * that have been used as a depth buffer within this
- * batchbuffer and would need flushing before being used from another cache
- * domain that isn't coherent with it (i.e. the sampler).
- */
- struct set *depth_cache;
-
- /**
- * Number of resets observed in the system at context creation.
- *
- * This is tracked in the context so that we can determine that another
- * reset has occurred.
- */
- uint32_t reset_count;
-
- struct brw_batch batch;
-
- struct brw_uploader upload;
-
- /**
- * Set if rendering has occurred to the drawable's front buffer.
- *
- * This is used in the DRI2 case to detect that glFlush should also copy
- * the contents of the fake front buffer to the real front buffer.
- */
- bool front_buffer_dirty;
-
- /**
- * True if the __DRIdrawable's current __DRIimageBufferMask is
- * __DRI_IMAGE_BUFFER_SHARED.
- */
- bool is_shared_buffer_bound;
-
- /**
- * True if a shared buffer is bound and it has received any rendering since
- * the previous __DRImutableRenderBufferLoaderExtension::displaySharedBuffer().
- */
- bool is_shared_buffer_dirty;
-
- /** Framerate throttling: @{ */
- struct brw_bo *throttle_batch[2];
-
- /* Limit the number of outstanding SwapBuffers by waiting for an earlier
- * frame of rendering to complete. This gives a very precise cap to the
- * latency between input and output such that rendering never gets more
- * than a frame behind the user. (With the caveat that we technically are
- * not using the SwapBuffers itself as a barrier but the first batch
- * submitted afterwards, which may be immediately prior to the next
- * SwapBuffers.)
- */
- bool need_swap_throttle;
-
- /** General throttling, not caught by throttling between SwapBuffers */
- bool need_flush_throttle;
- /** @} */
-
- GLuint stats_wm;
-
- /**
- * drirc options:
- * @{
- */
- bool always_flush_batch;
- bool always_flush_cache;
- bool disable_throttling;
- bool precompile;
- bool dual_color_blend_by_location;
- /** @} */
-
- GLuint primitive; /**< Hardware primitive, such as _3DPRIM_TRILIST. */
-
- bool object_preemption; /**< Object level preemption enabled. */
-
- GLenum reduced_primitive;
-
- /**
- * Set if we're either a debug context or the INTEL_DEBUG=perf environment
- * variable is set, this is the flag indicating to do expensive work that
- * might lead to a perf_debug() call.
- */
- bool perf_debug;
-
- uint64_t max_gtt_map_object_size;
-
- bool has_hiz;
- bool has_separate_stencil;
- bool has_swizzling;
-
- bool can_push_ubos;
-
- /** Derived stencil states. */
- bool stencil_enabled;
- bool stencil_two_sided;
- bool stencil_write_enabled;
- /** Derived polygon state. */
- bool polygon_front_bit; /**< 0=GL_CCW, 1=GL_CW */
-
- struct isl_device isl_dev;
-
- struct blorp_context blorp;
-
- GLuint NewGLState;
- struct {
- struct brw_state_flags pipelines[BRW_NUM_PIPELINES];
- } state;
-
- enum brw_pipeline last_pipeline;
-
- struct brw_cache cache;
-
- /* Whether a meta-operation is in progress. */
- bool meta_in_progress;
-
- /* Whether the last depth/stencil packets were both NULL. */
- bool no_depth_or_stencil;
-
- /* The last PMA stall bits programmed. */
- uint32_t pma_stall_bits;
-
- /* Whether INTEL_black_render is active. */
- bool frontend_noop;
-
- struct {
- struct {
- /**
- * Either the value of gl_BaseVertex for indexed draw calls or the
- * value of the argument <first> for non-indexed draw calls for the
- * current _mesa_prim.
- */
- int firstvertex;
-
- /** The value of gl_BaseInstance for the current _mesa_prim. */
- int gl_baseinstance;
- } params;
-
- /**
- * Buffer and offset used for GL_ARB_shader_draw_parameters which will
- * point to the indirect buffer for indirect draw calls.
- */
- struct brw_bo *draw_params_bo;
- uint32_t draw_params_offset;
-
- struct {
- /**
- * The value of gl_DrawID for the current _mesa_prim. This always comes
- * in from it's own vertex buffer since it's not part of the indirect
- * draw parameters.
- */
- int gl_drawid;
-
- /**
- * Stores if the current _mesa_prim is an indexed or non-indexed draw
- * (~0/0). Useful to calculate gl_BaseVertex as an AND of firstvertex
- * and is_indexed_draw.
- */
- int is_indexed_draw;
- } derived_params;
-
- /**
- * Buffer and offset used for GL_ARB_shader_draw_parameters which contains
- * parameters that are not present in the indirect buffer. They will go in
- * their own vertex element.
- */
- struct brw_bo *derived_draw_params_bo;
- uint32_t derived_draw_params_offset;
-
- /**
- * Pointer to the the buffer storing the indirect draw parameters. It
- * currently only stores the number of requested draw calls but more
- * parameters could potentially be added.
- */
- struct brw_bo *draw_params_count_bo;
- uint32_t draw_params_count_offset;
-
- /**
- * Draw indirect buffer.
- */
- unsigned draw_indirect_stride;
- GLsizeiptr draw_indirect_offset;
- struct gl_buffer_object *draw_indirect_data;
- } draw;
-
- struct {
- /**
- * For gl_NumWorkGroups: If num_work_groups_bo is non NULL, then it is
- * an indirect call, and num_work_groups_offset is valid. Otherwise,
- * num_work_groups is set based on glDispatchCompute.
- */
- struct brw_bo *num_work_groups_bo;
- GLintptr num_work_groups_offset;
- const GLuint *num_work_groups;
- /**
- * This is only used alongside ARB_compute_variable_group_size when the
- * local work group size is variable, otherwise it's NULL.
- */
- const GLuint *group_size;
- } compute;
-
- struct {
- struct brw_vertex_element inputs[VERT_ATTRIB_MAX];
- struct brw_vertex_buffer buffers[VERT_ATTRIB_MAX];
-
- struct brw_vertex_element *enabled[VERT_ATTRIB_MAX];
- GLuint nr_enabled;
- GLuint nr_buffers;
-
- /* Summary of size and varying of active arrays, so we can check
- * for changes to this state:
- */
- bool index_bounds_valid;
- unsigned int min_index, max_index;
-
- /* Offset from start of vertex buffer so we can avoid redefining
- * the same VB packed over and over again.
- */
- unsigned int start_vertex_bias;
-
- /**
- * Certain vertex attribute formats aren't natively handled by the
- * hardware and require special VS code to fix up their values.
- *
- * These bitfields indicate which workarounds are needed.
- */
- uint8_t attrib_wa_flags[VERT_ATTRIB_MAX];
-
- /* High bits of the last seen vertex buffer address (for workarounds). */
- uint16_t last_bo_high_bits[33];
- } vb;
-
- struct {
- /**
- * Index buffer for this draw_prims call.
- *
- * Updates are signaled by BRW_NEW_INDICES.
- */
- const struct _mesa_index_buffer *ib;
-
- /* Updates are signaled by BRW_NEW_INDEX_BUFFER. */
- struct brw_bo *bo;
- uint32_t size;
- unsigned index_size;
-
- /* Offset to index buffer index to use in CMD_3D_PRIM so that we can
- * avoid re-uploading the IB packet over and over if we're actually
- * referencing the same index buffer.
- */
- unsigned int start_vertex_offset;
-
- /* High bits of the last seen index buffer address (for workarounds). */
- uint16_t last_bo_high_bits;
-
- /* Used to understand is GPU state of primitive restart is up to date */
- bool enable_cut_index;
- } ib;
-
- /* Active vertex program:
- */
- struct gl_program *programs[MESA_SHADER_STAGES];
-
- /**
- * Number of samples in ctx->DrawBuffer, updated by BRW_NEW_NUM_SAMPLES so
- * that we don't have to reemit that state every time we change FBOs.
- */
- unsigned int num_samples;
-
- /* BRW_NEW_URB_ALLOCATIONS:
- */
- struct {
- GLuint vsize; /* vertex size plus header in urb registers */
- GLuint gsize; /* GS output size in urb registers */
- GLuint hsize; /* Tessellation control output size in urb registers */
- GLuint dsize; /* Tessellation evaluation output size in urb registers */
- GLuint csize; /* constant buffer size in urb registers */
- GLuint sfsize; /* setup data size in urb registers */
-
- bool constrained;
-
- GLuint nr_vs_entries;
- GLuint nr_hs_entries;
- GLuint nr_ds_entries;
- GLuint nr_gs_entries;
- GLuint nr_clip_entries;
- GLuint nr_sf_entries;
- GLuint nr_cs_entries;
-
- GLuint vs_start;
- GLuint hs_start;
- GLuint ds_start;
- GLuint gs_start;
- GLuint clip_start;
- GLuint sf_start;
- GLuint cs_start;
- /**
- * URB size in the current configuration. The units this is expressed
- * in are somewhat inconsistent, see intel_device_info::urb::size.
- *
- * FINISHME: Represent the URB size consistently in KB on all platforms.
- */
- GLuint size;
-
- /* True if the most recently sent _3DSTATE_URB message allocated
- * URB space for the GS.
- */
- bool gs_present;
-
- /* True if the most recently sent _3DSTATE_URB message allocated
- * URB space for the HS and DS.
- */
- bool tess_present;
- } urb;
-
-
- /* BRW_NEW_PUSH_CONSTANT_ALLOCATION */
- struct {
- GLuint wm_start; /**< pos of first wm const in CURBE buffer */
- GLuint wm_size; /**< number of float[4] consts, multiple of 16 */
- GLuint clip_start;
- GLuint clip_size;
- GLuint vs_start;
- GLuint vs_size;
- GLuint total_size;
-
- /**
- * Pointer to the (intel_upload.c-generated) BO containing the uniforms
- * for upload to the CURBE.
- */
- struct brw_bo *curbe_bo;
- /** Offset within curbe_bo of space for current curbe entry */
- GLuint curbe_offset;
- } curbe;
-
- /**
- * Layout of vertex data exiting the geometry portion of the pipleine.
- * This comes from the last enabled shader stage (GS, DS, or VS).
- *
- * BRW_NEW_VUE_MAP_GEOM_OUT is flagged when the VUE map changes.
- */
- struct brw_vue_map vue_map_geom_out;
-
- struct {
- struct brw_stage_state base;
- } vs;
-
- struct {
- struct brw_stage_state base;
- } tcs;
-
- struct {
- struct brw_stage_state base;
- } tes;
-
- struct {
- struct brw_stage_state base;
-
- /**
- * True if the 3DSTATE_GS command most recently emitted to the 3D
- * pipeline enabled the GS; false otherwise.
- */
- bool enabled;
- } gs;
-
- struct {
- struct brw_ff_gs_prog_data *prog_data;
-
- bool prog_active;
- /** Offset in the program cache to the CLIP program pre-gfx6 */
- uint32_t prog_offset;
- uint32_t state_offset;
-
- uint32_t bind_bo_offset;
- /**
- * Surface offsets for the binding table. We only need surfaces to
- * implement transform feedback so BRW_MAX_SOL_BINDINGS is all that we
- * need in this case.
- */
- uint32_t surf_offset[BRW_MAX_SOL_BINDINGS];
- } ff_gs;
-
- struct {
- struct brw_clip_prog_data *prog_data;
-
- /** Offset in the program cache to the CLIP program pre-gfx6 */
- uint32_t prog_offset;
-
- /* Offset in the batch to the CLIP state on pre-gfx6. */
- uint32_t state_offset;
-
- /* As of gfx6, this is the offset in the batch to the CLIP VP,
- * instead of vp_bo.
- */
- uint32_t vp_offset;
-
- /**
- * The number of viewports to use. If gl_ViewportIndex is written,
- * we can have up to ctx->Const.MaxViewports viewports. If not,
- * the viewport index is always 0, so we can only emit one.
- */
- uint8_t viewport_count;
- } clip;
-
-
- struct {
- struct brw_sf_prog_data *prog_data;
-
- /** Offset in the program cache to the CLIP program pre-gfx6 */
- uint32_t prog_offset;
- uint32_t state_offset;
- uint32_t vp_offset;
- } sf;
-
- struct {
- struct brw_stage_state base;
-
- /**
- * Buffer object used in place of multisampled null render targets on
- * Gfx6. See brw_emit_null_surface_state().
- */
- struct brw_bo *multisampled_null_render_target_bo;
-
- float offset_clamp;
- } wm;
-
- struct {
- struct brw_stage_state base;
- } cs;
-
- struct {
- uint32_t state_offset;
- uint32_t blend_state_offset;
- uint32_t depth_stencil_state_offset;
- uint32_t vp_offset;
- } cc;
-
- struct {
- struct brw_query_object *obj;
- bool begin_emitted;
- } query;
-
- struct {
- enum brw_predicate_state state;
- bool supported;
- } predicate;
-
- struct intel_perf_context *perf_ctx;
-
- int num_atoms[BRW_NUM_PIPELINES];
- const struct brw_tracked_state render_atoms[76];
- const struct brw_tracked_state compute_atoms[11];
-
- const enum isl_format *mesa_to_isl_render_format;
- const bool *mesa_format_supports_render;
-
- /* PrimitiveRestart */
- struct {
- bool in_progress;
- bool enable_cut_index;
- unsigned restart_index;
- } prim_restart;
-
- /** Computed depth/stencil/hiz state from the current attached
- * renderbuffers, valid only during the drawing state upload loop after
- * brw_workaround_depthstencil_alignment().
- */
- struct {
- /* Inter-tile (page-aligned) byte offsets. */
- uint32_t depth_offset;
- /* Intra-tile x,y offsets for drawing to combined depth-stencil. Only
- * used for Gen < 6.
- */
- uint32_t tile_x, tile_y;
- } depthstencil;
-
- uint32_t num_instances;
- int basevertex;
- int baseinstance;
-
- struct {
- const struct intel_l3_config *config;
- } l3;
-
- struct {
- struct brw_bo *bo;
- const char **names;
- int *ids;
- enum shader_time_shader_type *types;
- struct shader_times *cumulative;
- int num_entries;
- int max_entries;
- double report_time;
- } shader_time;
-
- struct brw_fast_clear_state *fast_clear_state;
-
- /* Array of aux usages to use for drawing. Aux usage for render targets is
- * a bit more complex than simply calling a single function so we need some
- * way of passing it form brw_draw.c to surface state setup.
- */
- enum isl_aux_usage draw_aux_usage[MAX_DRAW_BUFFERS];
-
- enum gfx9_astc5x5_wa_tex_type gfx9_astc5x5_wa_tex_mask;
-
- /** Last rendering scale argument provided to brw_emit_hashing_mode(). */
- unsigned current_hash_scale;
-
- __DRIcontext *driContext;
- struct brw_screen *screen;
- void *mem_ctx;
-};
-
-/* brw_clear.c */
-extern void brw_init_clear_functions(struct dd_function_table *functions);
-
-/*======================================================================
- * brw_context.c
- */
-extern const char *const brw_vendor_string;
-
-extern const char *
-brw_get_renderer_string(const struct brw_screen *screen);
-
-enum {
- DRI_CONF_BO_REUSE_DISABLED,
- DRI_CONF_BO_REUSE_ALL
-};
-
-void brw_update_renderbuffers(__DRIcontext *context,
- __DRIdrawable *drawable);
-void brw_prepare_render(struct brw_context *brw);
-
-void gfx9_apply_single_tex_astc5x5_wa(struct brw_context *brw,
- mesa_format format,
- enum isl_aux_usage aux_usage);
-
-void brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
- bool *draw_aux_buffer_disabled);
-
-void brw_resolve_for_dri2_flush(struct brw_context *brw,
- __DRIdrawable *drawable);
-
-GLboolean brw_create_context(gl_api api,
- const struct gl_config *mesaVis,
- __DRIcontext *driContextPriv,
- const struct __DriverContextConfig *ctx_config,
- unsigned *error,
- void *sharedContextPrivate);
-
-/*======================================================================
- * brw_misc_state.c
- */
-void brw_workaround_depthstencil_alignment(struct brw_context *brw,
- GLbitfield clear_mask);
-void brw_emit_hashing_mode(struct brw_context *brw, unsigned width,
- unsigned height, unsigned scale);
-
-/* brw_object_purgeable.c */
-void brw_init_object_purgeable_functions(struct dd_function_table *functions);
-
-/*======================================================================
- * brw_queryobj.c
- */
-void brw_init_common_queryobj_functions(struct dd_function_table *functions);
-void gfx4_init_queryobj_functions(struct dd_function_table *functions);
-void brw_emit_query_begin(struct brw_context *brw);
-void brw_emit_query_end(struct brw_context *brw);
-void brw_query_counter(struct gl_context *ctx, struct gl_query_object *q);
-bool brw_is_query_pipelined(struct brw_query_object *query);
-uint64_t brw_raw_timestamp_delta(struct brw_context *brw,
- uint64_t time0, uint64_t time1);
-
-/** gfx6_queryobj.c */
-void gfx6_init_queryobj_functions(struct dd_function_table *functions);
-void brw_write_timestamp(struct brw_context *brw, struct brw_bo *bo, int idx);
-void brw_write_depth_count(struct brw_context *brw, struct brw_bo *bo, int idx);
-
-/** hsw_queryobj.c */
-void hsw_overflow_result_to_gpr0(struct brw_context *brw,
- struct brw_query_object *query,
- int count);
-void hsw_init_queryobj_functions(struct dd_function_table *functions);
-
-/** brw_conditional_render.c */
-void brw_init_conditional_render_functions(struct dd_function_table *functions);
-bool brw_check_conditional_render(struct brw_context *brw);
-
-/** brw_batch.c */
-void brw_load_register_mem(struct brw_context *brw,
- uint32_t reg,
- struct brw_bo *bo,
- uint32_t offset);
-void brw_load_register_mem64(struct brw_context *brw,
- uint32_t reg,
- struct brw_bo *bo,
- uint32_t offset);
-void brw_store_register_mem32(struct brw_context *brw,
- struct brw_bo *bo, uint32_t reg, uint32_t offset);
-void brw_store_register_mem64(struct brw_context *brw,
- struct brw_bo *bo, uint32_t reg, uint32_t offset);
-void brw_load_register_imm32(struct brw_context *brw,
- uint32_t reg, uint32_t imm);
-void brw_load_register_imm64(struct brw_context *brw,
- uint32_t reg, uint64_t imm);
-void brw_load_register_reg(struct brw_context *brw, uint32_t dst,
- uint32_t src);
-void brw_load_register_reg64(struct brw_context *brw, uint32_t dst,
- uint32_t src);
-void brw_store_data_imm32(struct brw_context *brw, struct brw_bo *bo,
- uint32_t offset, uint32_t imm);
-void brw_store_data_imm64(struct brw_context *brw, struct brw_bo *bo,
- uint32_t offset, uint64_t imm);
-
-/*======================================================================
- * intel_tex_validate.c
- */
-void brw_validate_textures( struct brw_context *brw );
-
-
-/*======================================================================
- * brw_program.c
- */
-void brw_init_frag_prog_functions(struct dd_function_table *functions);
-
-void brw_get_scratch_bo(struct brw_context *brw,
- struct brw_bo **scratch_bo, int size);
-void brw_alloc_stage_scratch(struct brw_context *brw,
- struct brw_stage_state *stage_state,
- unsigned per_thread_size);
-void brw_init_shader_time(struct brw_context *brw);
-int brw_get_shader_time_index(struct brw_context *brw,
- struct gl_program *prog,
- enum shader_time_shader_type type,
- bool is_glsl_sh);
-void brw_collect_and_report_shader_time(struct brw_context *brw);
-void brw_destroy_shader_time(struct brw_context *brw);
-
-/* brw_urb.c
- */
-void brw_calculate_urb_fence(struct brw_context *brw, unsigned csize,
- unsigned vsize, unsigned sfsize);
-void brw_upload_urb_fence(struct brw_context *brw);
-
-/* brw_curbe.c
- */
-void brw_upload_cs_urb_state(struct brw_context *brw);
-
-/* brw_vs.c */
-gl_clip_plane *brw_select_clip_planes(struct gl_context *ctx);
-
-/* brw_draw_upload.c */
-unsigned brw_get_vertex_surface_type(struct brw_context *brw,
- const struct gl_vertex_format *glformat);
-
-static inline unsigned
-brw_get_index_type(unsigned index_size)
-{
- /* The hw needs 0x00, 0x01, and 0x02 for ubyte, ushort, and uint,
- * respectively.
- */
- return index_size >> 1;
-}
-
-void brw_prepare_vertices(struct brw_context *brw);
-
-/* brw_wm_surface_state.c */
-void brw_update_buffer_texture_surface(struct gl_context *ctx,
- unsigned unit,
- uint32_t *surf_offset);
-void
-brw_update_sol_surface(struct brw_context *brw,
- struct gl_buffer_object *buffer_obj,
- uint32_t *out_offset, unsigned num_vector_components,
- unsigned stride_dwords, unsigned offset_dwords);
-void brw_upload_ubo_surfaces(struct brw_context *brw, struct gl_program *prog,
- struct brw_stage_state *stage_state,
- struct brw_stage_prog_data *prog_data);
-void brw_upload_image_surfaces(struct brw_context *brw,
- const struct gl_program *prog,
- struct brw_stage_state *stage_state,
- struct brw_stage_prog_data *prog_data);
-
-/* brw_surface_formats.c */
-void brw_screen_init_surface_formats(struct brw_screen *screen);
-void brw_init_surface_formats(struct brw_context *brw);
-bool brw_render_target_supported(struct brw_context *brw,
- struct gl_renderbuffer *rb);
-uint32_t brw_depth_format(struct brw_context *brw, mesa_format format);
-
-/* brw_performance_query.c */
-void brw_init_performance_queries(struct brw_context *brw);
-
-/* intel_extensions.c */
-extern void brw_init_extensions(struct gl_context *ctx);
-
-/* intel_state.c */
-extern int brw_translate_shadow_compare_func(GLenum func);
-extern int brw_translate_compare_func(GLenum func);
-extern int brw_translate_stencil_op(GLenum op);
-
-/* brw_sync.c */
-void brw_init_syncobj_functions(struct dd_function_table *functions);
-
-/* gfx6_sol.c */
-struct gl_transform_feedback_object *
-brw_new_transform_feedback(struct gl_context *ctx, GLuint name);
-void
-brw_delete_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-brw_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
- struct gl_transform_feedback_object *obj);
-void
-brw_end_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-brw_pause_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-brw_resume_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-brw_save_primitives_written_counters(struct brw_context *brw,
- struct brw_transform_feedback_object *obj);
-GLsizei
-brw_get_transform_feedback_vertex_count(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj,
- GLuint stream);
-
-/* gfx7_sol_state.c */
-void
-gfx7_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
- struct gl_transform_feedback_object *obj);
-void
-gfx7_end_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-gfx7_pause_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-gfx7_resume_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-
-/* hsw_sol.c */
-void
-hsw_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
- struct gl_transform_feedback_object *obj);
-void
-hsw_end_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-hsw_pause_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-void
-hsw_resume_transform_feedback(struct gl_context *ctx,
- struct gl_transform_feedback_object *obj);
-
-/* brw_blorp_blit.cpp */
-GLbitfield
-brw_blorp_framebuffer(struct brw_context *brw,
- struct gl_framebuffer *readFb,
- struct gl_framebuffer *drawFb,
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
- GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
-bool
-brw_blorp_copytexsubimage(struct brw_context *brw,
- struct gl_renderbuffer *src_rb,
- struct gl_texture_image *dst_image,
- int slice,
- int srcX0, int srcY0,
- int dstX0, int dstY0,
- int width, int height);
-
-/* brw_generate_mipmap.c */
-void brw_generate_mipmap(struct gl_context *ctx, GLenum target,
- struct gl_texture_object *tex_obj);
-
-void
-gfx6_get_sample_position(struct gl_context *ctx,
- struct gl_framebuffer *fb,
- GLuint index,
- GLfloat *result);
-
-/* gfx8_multisample_state.c */
-void gfx8_emit_3dstate_sample_pattern(struct brw_context *brw);
-
-/* gfx7_l3_state.c */
-void brw_emit_l3_state(struct brw_context *brw);
-
-/* gfx7_urb.c */
-void
-gfx7_emit_push_constant_state(struct brw_context *brw, unsigned vs_size,
- unsigned hs_size, unsigned ds_size,
- unsigned gs_size, unsigned fs_size);
-
-void
-gfx6_upload_urb(struct brw_context *brw, unsigned vs_size,
- bool gs_present, unsigned gs_size);
-void
-gfx7_upload_urb(struct brw_context *brw, unsigned vs_size,
- bool gs_present, bool tess_present);
-
-/* brw_reset.c */
-extern GLenum
-brw_get_graphics_reset_status(struct gl_context *ctx);
-void
-brw_check_for_reset(struct brw_context *brw);
-
-/* brw_compute.c */
-extern void
-brw_init_compute_functions(struct dd_function_table *functions);
-
-/* brw_program_binary.c */
-extern void
-brw_program_binary_init(unsigned device_id);
-extern void
-brw_get_program_binary_driver_sha1(struct gl_context *ctx, uint8_t *sha1);
-void brw_serialize_program_binary(struct gl_context *ctx,
- struct gl_shader_program *sh_prog,
- struct gl_program *prog);
-extern void
-brw_deserialize_program_binary(struct gl_context *ctx,
- struct gl_shader_program *shProg,
- struct gl_program *prog);
-void
-brw_program_serialize_nir(struct gl_context *ctx, struct gl_program *prog);
-void
-brw_program_deserialize_driver_blob(struct gl_context *ctx,
- struct gl_program *prog,
- gl_shader_stage stage);
-
-/*======================================================================
- * Inline conversion functions. These are better-typed than the
- * macros used previously:
- */
-static inline struct brw_context *
-brw_context( struct gl_context *ctx )
-{
- return (struct brw_context *)ctx;
-}
-
-static inline struct brw_program *
-brw_program(struct gl_program *p)
-{
- return (struct brw_program *) p;
-}
-
-static inline const struct brw_program *
-brw_program_const(const struct gl_program *p)
-{
- return (const struct brw_program *) p;
-}
-
-static inline bool
-brw_depth_writes_enabled(const struct brw_context *brw)
-{
- const struct gl_context *ctx = &brw->ctx;
-
- /* We consider depth writes disabled if the depth function is GL_EQUAL,
- * because it would just overwrite the existing depth value with itself.
- *
- * These bonus depth writes not only use bandwidth, but they also can
- * prevent early depth processing. For example, if the pixel shader
- * discards, the hardware must invoke the to determine whether or not
- * to do the depth write. If writes are disabled, we may still be able
- * to do the depth test before the shader, and skip the shader execution.
- *
- * The Broadwell 3DSTATE_WM_DEPTH_STENCIL documentation also contains
- * a programming note saying to disable depth writes for EQUAL.
- */
- return ctx->Depth.Test && ctx->Depth.Mask && ctx->Depth.Func != GL_EQUAL;
-}
-
-void
-brw_emit_depthbuffer(struct brw_context *brw);
-
-uint32_t get_hw_prim_for_gl_prim(int mode);
-
-void
-gfx6_upload_push_constants(struct brw_context *brw,
- const struct gl_program *prog,
- const struct brw_stage_prog_data *prog_data,
- struct brw_stage_state *stage_state);
-
-bool
-gfx9_use_linear_1d_layout(const struct brw_context *brw,
- const struct brw_mipmap_tree *mt);
-
-/* brw_queryformat.c */
-void brw_query_internal_format(struct gl_context *ctx, GLenum target,
- GLenum internalFormat, GLenum pname,
- GLint *params);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif