Merge remote-tracking branch 'origin/master' into pipe-video

This commit is contained in:
Christian König 2011-06-05 00:11:41 +02:00
commit 1eb957bb41
167 changed files with 14483 additions and 12314 deletions

View file

@ -337,6 +337,8 @@ EGL_FILES = \
$(DIRECTORY)/src/egl/*/*.[ch] \
$(DIRECTORY)/src/egl/*/*/Makefile \
$(DIRECTORY)/src/egl/*/*/*.[ch] \
$(DIRECTORY)/src/egl/wayland/wayland-drm/protocol/*.xml \
$(DIRECTORY)/src/egl/wayland/wayland-egl/*.pc.in \
$(DIRECTORY)/src/egl/main/SConscript \
$(DIRECTORY)/src/egl/main/*.pc.in \
$(DIRECTORY)/src/egl/main/*.def

View file

@ -26,6 +26,8 @@ LDFLAGS = @LDFLAGS@
EXTRA_LIB_PATH = @EXTRA_LIB_PATH@
RADEON_CFLAGS = @RADEON_CFLAGS@
RADEON_LDFLAGS = @RADEON_LDFLAGS@
NOUVEAU_CFLAGS = @NOUVEAU_CFLAGS@
NOUVEAU_LIBS = @NOUVEAU_LIBS@
INTEL_LIBS = @INTEL_LIBS@
INTEL_CFLAGS = @INTEL_CFLAGS@
X11_LIBS = @X11_LIBS@

View file

@ -64,11 +64,16 @@ GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel drm/i965
GALLIUM_TARGET_DIRS = egl-swrast
GALLIUM_STATE_TRACKERS_DIRS = egl vdpau
DRI_DIRS = i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon \
DRI_DIRS = i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 radeon \
savage sis tdfx unichrome swrast
INTEL_LIBS = `pkg-config --libs libdrm_intel`
INTEL_CFLAGS = `pkg-config --cflags libdrm_intel`
INTEL_LIBS = $(shell pkg-config --libs libdrm_intel)
INTEL_CFLAGS = $(shell pkg-config --cflags libdrm_intel)
RADEON_LIBS = `pkg-config --libs libdrm_radeon`
RADEON_CFLAGS = `pkg-config --cflags libdrm_radeon`
NOUVEAU_LIBS = $(shell pkg-config --libs libdrm_nouveau)
NOUVEAU_CFLAGS = $(shell pkg-config --cflags libdrm_nouveau)
LIBDRM_RADEON_LIBS = $(shell pkg-config --libs libdrm_radeon)
LIBDRM_RADEON_CFLAGS = $(shell pkg-config --cflags libdrm_radeon)
RADEON_CFLAGS = "-DHAVE_LIBDRM_RADEON=1 $(LIBDRM_RADEON_CFLAGS)"
RADEON_LDFLAGS = $(LIBDRM_RADEON_LIBS)

View file

@ -21,6 +21,7 @@ dnl Versions for external dependencies
LIBDRM_REQUIRED=2.4.24
LIBDRM_RADEON_REQUIRED=2.4.24
LIBDRM_INTEL_REQUIRED=2.4.24
LIBDRM_NOUVEAU_REQUIRED=0.6
DRI2PROTO_REQUIRED=2.1
GLPROTO_REQUIRED=1.4.11
LIBDRM_XORG_REQUIRED=2.4.24
@ -1004,8 +1005,8 @@ if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
# the new interface. i810 are missing because there is no
# x86-64 system where they could *ever* be used.
if test "x$DRI_DIRS" = "xyes"; then
DRI_DIRS="i915 i965 mach64 mga r128 r200 r300 r600 radeon \
savage tdfx unichrome swrast"
DRI_DIRS="i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
radeon savage tdfx unichrome swrast"
fi
;;
powerpc*)
@ -1032,8 +1033,8 @@ if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
fi
if test "x$DRI_DIRS" = "xyes"; then
DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon tdfx \
unichrome savage sis swrast"
DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
radeon tdfx unichrome savage sis swrast"
fi
;;
gnu*)
@ -1061,7 +1062,7 @@ if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
# default drivers
if test "x$DRI_DIRS" = "xyes"; then
DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon \
DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 radeon \
savage sis tdfx unichrome swrast"
fi
@ -1097,6 +1098,12 @@ case $DRI_DIRS in
;;
esac
case $DRI_DIRS in
*nouveau*)
PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
;;
esac
case $DRI_DIRS in
*radeon*|*r200*|*r300*|*r600*)
if test "x$HAVE_LIBDRM_RADEON" = xyes; then
@ -1202,6 +1209,9 @@ if test "x$enable_egl" = xyes; then
PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
[have_libudev=yes],[have_libudev=no])
if test "$have_libudev" = yes; then
DEFINES="$DEFINES -DHAVE_LIBUDEV"
fi
if test "$mesa_driver" = dri; then
# build egl_dri2 when xcb-dri2 is available
PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes],
@ -1210,9 +1220,6 @@ if test "x$enable_egl" = xyes; then
if test "$have_xcb_dri2" = yes; then
EGL_DRIVER_DRI2=dri2
DEFINES="$DEFINES -DHAVE_XCB_DRI2"
if test "$have_libudev" = yes; then
DEFINES="$DEFINES -DHAVE_LIBUDEV"
fi
# workaround a bug in xcb-dri2 generated by xcb-proto 1.6
AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
[DEFINES="$DEFINES -DXCB_DRI2_CONNECT_DEVICE_NAME_BROKEN"])

View file

@ -531,6 +531,21 @@ const int r600_chip_ids[] = {
0x9805, /* PCI_CHIP_PALM_9805 */
0x9806, /* PCI_CHIP_PALM_9806 */
0x9807, /* PCI_CHIP_PALM_9807 */
0x6700, /* PCI_CHIP_CAYMAN_6700 */
0x6701, /* PCI_CHIP_CAYMAN_6701 */
0x6702, /* PCI_CHIP_CAYMAN_6702 */
0x6703, /* PCI_CHIP_CAYMAN_6703 */
0x6704, /* PCI_CHIP_CAYMAN_6704 */
0x6705, /* PCI_CHIP_CAYMAN_6705 */
0x6706, /* PCI_CHIP_CAYMAN_6706 */
0x6707, /* PCI_CHIP_CAYMAN_6707 */
0x6708, /* PCI_CHIP_CAYMAN_6708 */
0x6709, /* PCI_CHIP_CAYMAN_6709 */
0x6718, /* PCI_CHIP_CAYMAN_6718 */
0x6719, /* PCI_CHIP_CAYMAN_6719 */
0x671C, /* PCI_CHIP_CAYMAN_671C */
0x671D, /* PCI_CHIP_CAYMAN_671D */
0x671F, /* PCI_CHIP_CAYMAN_671F */
0x6720, /* PCI_CHIP_BARTS_6720 */
0x6721, /* PCI_CHIP_BARTS_6721 */
0x6722, /* PCI_CHIP_BARTS_6722 */

View file

@ -586,7 +586,7 @@ dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
int ret = 0;
dri2_dpy->authenticated = false;
dri2_dpy->authenticated = 0;
wl_drm_authenticate(dri2_dpy->wl_drm, id);
force_roundtrip(dri2_dpy->wl_dpy);
@ -595,7 +595,7 @@ dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
ret = -1;
/* reset authenticated */
dri2_dpy->authenticated = true;
dri2_dpy->authenticated = 1;
return ret;
}
@ -647,7 +647,7 @@ drm_handle_authenticated(void *data, struct wl_drm *drm)
{
struct dri2_egl_display *dri2_dpy = data;
dri2_dpy->authenticated = true;
dri2_dpy->authenticated = 1;
}
static const struct wl_drm_listener drm_listener = {

View file

@ -100,7 +100,7 @@ drm_create_buffer(struct wl_client *client, struct wl_drm *drm,
buffer->buffer.height = height;
buffer->buffer.visual = visual;
if (visual->object.interface != &wl_visual_interface) {
if (!visual || visual->object.interface != &wl_visual_interface) {
wl_client_post_error(client, &drm->object,
WL_DRM_ERROR_INVALID_VISUAL,
"invalid visual");

View file

@ -12,20 +12,8 @@ extern "C" {
#define WL_EGL_EXPORT
#endif
#include <stdbool.h>
#include <wayland-client.h>
struct wl_egl_display {
struct wl_display *display;
struct wl_drm *drm;
int fd;
char *device_name;
bool authenticated;
void (*glFlush)(void);
};
struct wl_egl_window {
struct wl_surface *surface;
struct wl_visual *visual;
@ -40,8 +28,7 @@ struct wl_egl_window {
};
struct wl_egl_pixmap {
struct wl_egl_display *display;
struct wl_visual *visual;
struct wl_visual *visual;
struct wl_buffer *buffer;
int width;

View file

@ -1,21 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dlfcn.h>
#include <wayland-client.h>
#include "wayland-egl.h"
#include "wayland-egl-priv.h"
#include "wayland-drm-client-protocol.h"
#include <xf86drm.h>
WL_EGL_EXPORT void
wl_egl_window_resize(struct wl_egl_window *egl_window,

View file

@ -37,13 +37,7 @@
struct cso_cache {
struct cso_hash *blend_hash;
struct cso_hash *depth_stencil_hash;
struct cso_hash *fs_hash;
struct cso_hash *vs_hash;
struct cso_hash *rasterizer_hash;
struct cso_hash *sampler_hash;
struct cso_hash *velements_hash;
struct cso_hash *hashes[CSO_CACHE_MAX];
int max_size;
cso_sanitize_callback sanitize_cb;
@ -86,34 +80,10 @@ unsigned cso_construct_key(void *item, int item_size)
return hash_key((item), item_size);
}
static struct cso_hash *_cso_hash_for_type(struct cso_cache *sc, enum cso_cache_type type)
static INLINE struct cso_hash *_cso_hash_for_type(struct cso_cache *sc, enum cso_cache_type type)
{
struct cso_hash *hash = 0;
switch(type) {
case CSO_BLEND:
hash = sc->blend_hash;
break;
case CSO_SAMPLER:
hash = sc->sampler_hash;
break;
case CSO_DEPTH_STENCIL_ALPHA:
hash = sc->depth_stencil_hash;
break;
case CSO_RASTERIZER:
hash = sc->rasterizer_hash;
break;
case CSO_FRAGMENT_SHADER:
hash = sc->fs_hash;
break;
case CSO_VERTEX_SHADER:
hash = sc->vs_hash;
break;
case CSO_VELEMENTS:
hash = sc->velements_hash;
break;
}
struct cso_hash *hash;
hash = sc->hashes[type];
return hash;
}
@ -298,17 +268,14 @@ void * cso_take_state(struct cso_cache *sc,
struct cso_cache *cso_cache_create(void)
{
struct cso_cache *sc = MALLOC_STRUCT(cso_cache);
int i;
if (sc == NULL)
return NULL;
sc->max_size = 4096;
sc->blend_hash = cso_hash_create();
sc->sampler_hash = cso_hash_create();
sc->depth_stencil_hash = cso_hash_create();
sc->rasterizer_hash = cso_hash_create();
sc->fs_hash = cso_hash_create();
sc->vs_hash = cso_hash_create();
sc->velements_hash = cso_hash_create();
for (i = 0; i < CSO_CACHE_MAX; i++)
sc->hashes[i] = cso_hash_create();
sc->sanitize_cb = sanitize_cb;
sc->sanitize_data = 0;
@ -318,33 +285,9 @@ struct cso_cache *cso_cache_create(void)
void cso_for_each_state(struct cso_cache *sc, enum cso_cache_type type,
cso_state_callback func, void *user_data)
{
struct cso_hash *hash = 0;
struct cso_hash *hash = _cso_hash_for_type(sc, type);
struct cso_hash_iter iter;
switch (type) {
case CSO_BLEND:
hash = sc->blend_hash;
break;
case CSO_SAMPLER:
hash = sc->sampler_hash;
break;
case CSO_DEPTH_STENCIL_ALPHA:
hash = sc->depth_stencil_hash;
break;
case CSO_RASTERIZER:
hash = sc->rasterizer_hash;
break;
case CSO_FRAGMENT_SHADER:
hash = sc->fs_hash;
break;
case CSO_VERTEX_SHADER:
hash = sc->vs_hash;
break;
case CSO_VELEMENTS:
hash = sc->velements_hash;
break;
}
iter = cso_hash_first_node(hash);
while (!cso_hash_iter_is_null(iter)) {
void *state = cso_hash_iter_data(iter);
@ -357,6 +300,7 @@ void cso_for_each_state(struct cso_cache *sc, enum cso_cache_type type,
void cso_cache_delete(struct cso_cache *sc)
{
int i;
assert(sc);
if (!sc)
@ -371,28 +315,20 @@ void cso_cache_delete(struct cso_cache *sc)
cso_for_each_state(sc, CSO_SAMPLER, delete_sampler_state, 0);
cso_for_each_state(sc, CSO_VELEMENTS, delete_velements, 0);
cso_hash_delete(sc->blend_hash);
cso_hash_delete(sc->sampler_hash);
cso_hash_delete(sc->depth_stencil_hash);
cso_hash_delete(sc->rasterizer_hash);
cso_hash_delete(sc->fs_hash);
cso_hash_delete(sc->vs_hash);
cso_hash_delete(sc->velements_hash);
for (i = 0; i < CSO_CACHE_MAX; i++)
cso_hash_delete(sc->hashes[i]);
FREE(sc);
}
void cso_set_maximum_cache_size(struct cso_cache *sc, int number)
{
int i;
sc->max_size = number;
sanitize_hash(sc, sc->blend_hash, CSO_BLEND, sc->max_size);
sanitize_hash(sc, sc->depth_stencil_hash, CSO_DEPTH_STENCIL_ALPHA,
sc->max_size);
sanitize_hash(sc, sc->fs_hash, CSO_FRAGMENT_SHADER, sc->max_size);
sanitize_hash(sc, sc->vs_hash, CSO_VERTEX_SHADER, sc->max_size);
sanitize_hash(sc, sc->rasterizer_hash, CSO_RASTERIZER, sc->max_size);
sanitize_hash(sc, sc->sampler_hash, CSO_SAMPLER, sc->max_size);
sanitize_hash(sc, sc->velements_hash, CSO_VELEMENTS, sc->max_size);
for (i = 0; i < CSO_CACHE_MAX; i++)
sanitize_hash(sc, sc->hashes[i], i, sc->max_size);
}
int cso_maximum_cache_size(const struct cso_cache *sc)

View file

@ -86,13 +86,14 @@ extern "C" {
#endif
enum cso_cache_type {
CSO_BLEND,
CSO_SAMPLER,
CSO_DEPTH_STENCIL_ALPHA,
CSO_RASTERIZER,
CSO_BLEND,
CSO_DEPTH_STENCIL_ALPHA,
CSO_FRAGMENT_SHADER,
CSO_VERTEX_SHADER,
CSO_VELEMENTS
CSO_SAMPLER,
CSO_VELEMENTS,
CSO_CACHE_MAX,
};
typedef void (*cso_state_callback)(void *ctx, void *obj);

View file

@ -72,7 +72,7 @@ struct ureg_tokens {
#define UREG_MAX_SYSTEM_VALUE PIPE_MAX_ATTRIBS
#define UREG_MAX_OUTPUT PIPE_MAX_ATTRIBS
#define UREG_MAX_CONSTANT_RANGE 32
#define UREG_MAX_IMMEDIATE 32
#define UREG_MAX_IMMEDIATE 256
#define UREG_MAX_TEMP 256
#define UREG_MAX_ADDR 2
#define UREG_MAX_PRED 1

View file

@ -477,10 +477,13 @@ float_to_byte_tex(float f)
static INLINE unsigned
util_logbase2(unsigned n)
{
unsigned log2 = 0;
while (n >>= 1)
++log2;
return log2;
unsigned pos = 0;
if (n >= 1<<16) { n >>= 16; pos += 16; }
if (n >= 1<< 8) { n >>= 8; pos += 8; }
if (n >= 1<< 4) { n >>= 4; pos += 4; }
if (n >= 1<< 2) { n >>= 2; pos += 2; }
if (n >= 1<< 1) { pos += 1; }
return pos;
}

View file

@ -78,55 +78,32 @@ static INLINE boolean u_validate_pipe_prim( unsigned pipe_prim, unsigned nr )
static INLINE boolean u_trim_pipe_prim( unsigned pipe_prim, unsigned *nr )
{
boolean ok = TRUE;
const static int values[][2] = {
{ 1, 0 }, /* PIPE_PRIM_POINTS */
{ 2, 2 }, /* PIPE_PRIM_LINES */
{ 2, 0 }, /* PIPE_PRIM_LINE_LOOP */
{ 2, 0 }, /* PIPE_PRIM_LINE_STRIP */
{ 3, 3 }, /* PIPE_PRIM_TRIANGLES */
{ 3, 0 }, /* PIPE_PRIM_TRIANGLE_STRIP */
{ 3, 0 }, /* PIPE_PRIM_TRIANGLE_FAN */
{ 4, 4 }, /* PIPE_PRIM_TRIANGLE_QUADS */
{ 4, 2 }, /* PIPE_PRIM_TRIANGLE_QUAD_STRIP */
{ 3, 0 }, /* PIPE_PRIM_TRIANGLE_POLYGON */
{ 4, 4 }, /* PIPE_PRIM_LINES_ADJACENCY */
{ 4, 0 }, /* PIPE_PRIM_LINE_STRIP_ADJACENCY */
{ 6, 5 }, /* PIPE_PRIM_TRIANGLES_ADJACENCY */
{ 4, 0 }, /* PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY */
};
switch (pipe_prim) {
case PIPE_PRIM_POINTS:
ok = (*nr >= 1);
break;
case PIPE_PRIM_LINES:
ok = (*nr >= 2);
*nr -= (*nr % 2);
break;
case PIPE_PRIM_LINE_STRIP:
case PIPE_PRIM_LINE_LOOP:
ok = (*nr >= 2);
break;
case PIPE_PRIM_TRIANGLES:
ok = (*nr >= 3);
*nr -= (*nr % 3);
break;
case PIPE_PRIM_TRIANGLE_STRIP:
case PIPE_PRIM_TRIANGLE_FAN:
case PIPE_PRIM_POLYGON:
ok = (*nr >= 3);
break;
case PIPE_PRIM_QUADS:
ok = (*nr >= 4);
*nr -= (*nr % 4);
break;
case PIPE_PRIM_QUAD_STRIP:
ok = (*nr >= 4);
*nr -= (*nr % 2);
break;
case PIPE_PRIM_LINES_ADJACENCY:
ok = (*nr >= 4);
*nr -= (*nr % 4);
break;
case PIPE_PRIM_LINE_STRIP_ADJACENCY:
ok = (*nr >= 4);
break;
case PIPE_PRIM_TRIANGLES_ADJACENCY:
ok = (*nr >= 6);
*nr -= (*nr % 5);
break;
case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
ok = (*nr >= 4);
break;
default:
ok = 0;
break;
if (unlikely(pipe_prim >= PIPE_PRIM_MAX)) {
*nr = 0;
return FALSE;
}
ok = (*nr >= values[pipe_prim][0]);
if (values[pipe_prim][1])
*nr -= (*nr % values[pipe_prim][1]);
if (!ok)
*nr = 0;

View file

@ -45,8 +45,8 @@ struct i915_buffer {
boolean free_on_destroy;
};
#define I915_MAX_TEXTURE_2D_LEVELS 11 /* max 1024x1024 */
#define I915_MAX_TEXTURE_3D_LEVELS 8 /* max 128x128x128 */
#define I915_MAX_TEXTURE_2D_LEVELS 12 /* max 2048x2048 */
#define I915_MAX_TEXTURE_3D_LEVELS 9 /* max 256x256x256 */
struct offset_pair {

View file

@ -744,8 +744,8 @@ emit_add_a16(struct nv_pc *pc, struct nv_instruction *i)
set_pred(pc, i);
if (i->src[1])
set_a16_bits(pc, SREG(i->src[1])->id + 1);
if (s && i->src[0])
set_a16_bits(pc, SREG(i->src[0])->id);
}
static void

View file

@ -30,14 +30,24 @@
enum r300_blitter_op /* bitmask */
{
R300_CLEAR = 1,
R300_CLEAR_SURFACE = 2,
R300_COPY = 4
R300_STOP_QUERY = 1,
R300_SAVE_TEXTURES = 2,
R300_SAVE_FRAMEBUFFER = 4,
R300_IGNORE_RENDER_COND = 8,
R300_CLEAR = R300_STOP_QUERY,
R300_CLEAR_SURFACE = R300_STOP_QUERY | R300_SAVE_FRAMEBUFFER,
R300_COPY = R300_STOP_QUERY | R300_SAVE_FRAMEBUFFER |
R300_SAVE_TEXTURES | R300_IGNORE_RENDER_COND,
R300_DECOMPRESS = R300_STOP_QUERY | R300_IGNORE_RENDER_COND,
};
static void r300_blitter_begin(struct r300_context* r300, enum r300_blitter_op op)
{
if (r300->query_current) {
if ((op & R300_STOP_QUERY) && r300->query_current) {
r300->blitter_saved_query = r300->query_current;
r300_stop_query(r300);
}
@ -57,11 +67,11 @@ static void r300_blitter_begin(struct r300_context* r300, enum r300_blitter_op o
util_blitter_save_vertex_buffers(r300->blitter, r300->vbuf_mgr->nr_vertex_buffers,
r300->vbuf_mgr->vertex_buffer);
if (op & (R300_CLEAR_SURFACE | R300_COPY)) {
if (op & R300_SAVE_FRAMEBUFFER) {
util_blitter_save_framebuffer(r300->blitter, r300->fb_state.state);
}
if (op & R300_COPY) {
if (op & R300_SAVE_TEXTURES) {
struct r300_textures_state* state =
(struct r300_textures_state*)r300->textures_state.state;
@ -73,6 +83,14 @@ static void r300_blitter_begin(struct r300_context* r300, enum r300_blitter_op o
r300->blitter, state->sampler_view_count,
(struct pipe_sampler_view**)state->sampler_views);
}
if (op & R300_IGNORE_RENDER_COND) {
/* Save the flag. */
r300->blitter_saved_skip_rendering = r300->skip_rendering+1;
r300->skip_rendering = FALSE;
} else {
r300->blitter_saved_skip_rendering = 0;
}
}
static void r300_blitter_end(struct r300_context *r300)
@ -81,6 +99,11 @@ static void r300_blitter_end(struct r300_context *r300)
r300_resume_query(r300, r300->blitter_saved_query);
r300->blitter_saved_query = NULL;
}
if (r300->blitter_saved_skip_rendering) {
/* Restore the flag. */
r300->skip_rendering = r300->blitter_saved_skip_rendering-1;
}
}
static uint32_t r300_depth_clear_cb_value(enum pipe_format format,
@ -234,6 +257,9 @@ static void r300_clear(struct pipe_context* pipe,
/* Setup Hyper-Z clears. */
if (r300->hyperz_enabled) {
DBG(r300, DBG_HYPERZ, "r300: Clear memory: %s%s\n",
zmask_clear ? "ZMASK " : "", hiz_clear ? "HIZ" : "");
if (zmask_clear) {
hyperz_dcv = hyperz->zb_depthclearvalue =
r300_depth_clear_value(fb->zsbuf->format, depth, stencil);
@ -371,7 +397,7 @@ void r300_decompress_zmask(struct r300_context *r300)
r300->zmask_decompress = TRUE;
r300_mark_atom_dirty(r300, &r300->hyperz_state);
r300_blitter_begin(r300, R300_CLEAR);
r300_blitter_begin(r300, R300_DECOMPRESS);
util_blitter_clear_depth_custom(r300->blitter, fb->width, fb->height, 0,
r300->dsa_decompress_zmask);
r300_blitter_end(r300);

View file

@ -584,6 +584,8 @@ struct r300_context {
uint32_t zbuffer_bpp;
/* Whether rendering is conditional and should be skipped. */
boolean skip_rendering;
/* The flag above saved by blitter. */
unsigned char blitter_saved_skip_rendering;
/* Point sprites texcoord index, 1 bit per texcoord */
int sprite_coord_enable;
/* Whether two-sided color selection is enabled (AKA light_twoside). */

View file

@ -27,7 +27,7 @@
#include <stdio.h>
static const struct debug_named_value debug_options[] = {
{ "info", DBG_INFO, "Print hardware info"},
{ "info", DBG_INFO, "Print hardware info (printed by default on debug builds"},
{ "fp", DBG_FP, "Log fragment program compilation" },
{ "vp", DBG_VP, "Log vertex program compilation" },
{ "pstat", DBG_P_STAT, "Log vertex/fragment program stats" },
@ -37,14 +37,11 @@ static const struct debug_named_value debug_options[] = {
{ "psc", DBG_PSC, "Log vertex stream registers" },
{ "tex", DBG_TEX, "Log basic info about textures" },
{ "texalloc", DBG_TEXALLOC, "Log texture mipmap tree info" },
{ "fall", DBG_FALL, "Log fallbacks" },
{ "rs", DBG_RS, "Log rasterizer" },
{ "fb", DBG_FB, "Log framebuffer" },
{ "cbzb", DBG_CBZB, "Log fast color clear info" },
{ "hyperz", DBG_HYPERZ, "Log HyperZ info" },
{ "upload", DBG_UPLOAD, "Log user buffer upload info" },
{ "scissor", DBG_SCISSOR, "Log scissor info" },
{ "fakeocc", DBG_FAKE_OCC, "Use fake occlusion queries" },
{ "anisohq", DBG_ANISOHQ, "Use high quality anisotropic filtering" },
{ "notiling", DBG_NO_TILING, "Disable tiling" },
{ "noimmd", DBG_NO_IMMD, "Disable immediate mode" },

View file

@ -439,6 +439,19 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
OUT_CS_REG(R300_ZB_ZMASK_OFFSET, 0);
OUT_CS_REG(R300_ZB_ZMASK_PITCH, surf->pitch_zmask);
}
/* Set up a dummy zbuffer. Otherwise occlusion queries won't work.
* Use the first colorbuffer, we will disable writes in the DSA state
* so as not to corrupt it. */
} else if (fb->nr_cbufs) {
surf = r300_surface(fb->cbufs[0]);
OUT_CS_REG(R300_ZB_FORMAT, R300_DEPTHFORMAT_16BIT_INT_Z);
OUT_CS_REG(R300_ZB_DEPTHOFFSET, 0);
OUT_CS_RELOC(surf);
OUT_CS_REG(R300_ZB_DEPTHPITCH, 4 | R300_DEPTHMICROTILE_TILED_SQUARE);
OUT_CS_RELOC(surf);
}
END_CS;

View file

@ -195,6 +195,7 @@ static void r300_update_hyperz(struct r300_context* r300)
}
return;
}
DBG(r300, DBG_HYPERZ, "r300: Z-func: %i\n", dsa->dsa.depth.func);
/* Set the HiZ function if needed. */
if (r300->hiz_func == HIZ_FUNC_NONE) {

View file

@ -156,75 +156,23 @@ static void r300_render_condition(struct pipe_context *pipe,
uint64_t result = 0;
boolean wait;
r300->skip_rendering = FALSE;
if (query) {
wait = mode == PIPE_RENDER_COND_WAIT ||
mode == PIPE_RENDER_COND_BY_REGION_WAIT;
if (!r300_get_query_result(pipe, query, wait, &result)) {
r300->skip_rendering = FALSE;
} else {
if (r300_get_query_result(pipe, query, wait, &result)) {
r300->skip_rendering = result == 0;
}
} else {
r300->skip_rendering = FALSE;
}
}
/***************************************************************************
* Fake occlusion queries (for debugging)
***************************************************************************/
static unsigned r300_fake_query;
static struct pipe_query *r300_fake_create_query(struct pipe_context *pipe,
unsigned query_type)
{
return (struct pipe_query*)&r300_fake_query;
}
static void r300_fake_destroy_query(struct pipe_context* pipe,
struct pipe_query* query)
{
}
static void r300_fake_begin_query(struct pipe_context* pipe,
struct pipe_query* query)
{
}
static void r300_fake_end_query(struct pipe_context* pipe,
struct pipe_query* query)
{
}
static boolean r300_fake_get_query_result(struct pipe_context* pipe,
struct pipe_query* query,
boolean wait, void* vresult)
{
uint64_t *result = (uint64_t*)vresult;
*result = 1000000;
return TRUE;
}
static void r300_fake_render_condition(struct pipe_context *pipe,
struct pipe_query *query, uint mode)
{
}
void r300_init_query_functions(struct r300_context* r300) {
if (DBG_ON(r300, DBG_FAKE_OCC)) {
r300->context.create_query = r300_fake_create_query;
r300->context.destroy_query = r300_fake_destroy_query;
r300->context.begin_query = r300_fake_begin_query;
r300->context.end_query = r300_fake_end_query;
r300->context.get_query_result = r300_fake_get_query_result;
r300->context.render_condition = r300_fake_render_condition;
} else {
r300->context.create_query = r300_create_query;
r300->context.destroy_query = r300_destroy_query;
r300->context.begin_query = r300_begin_query;
r300->context.end_query = r300_end_query;
r300->context.get_query_result = r300_get_query_result;
r300->context.render_condition = r300_render_condition;
}
r300->context.create_query = r300_create_query;
r300->context.destroy_query = r300_destroy_query;
r300->context.begin_query = r300_begin_query;
r300->context.end_query = r300_end_query;
r300->context.get_query_result = r300_get_query_result;
r300->context.render_condition = r300_render_condition;
}

View file

@ -1200,6 +1200,9 @@ static void r300_blitter_draw_rectangle(struct blitter_context *blitter,
const float zeros[4] = {0, 0, 0, 0};
CS_LOCALS(r300);
if (r300->skip_rendering)
return;
r300->context.set_vertex_buffers(&r300->context, 0, NULL);
if (type == UTIL_BLITTER_ATTRIB_TEXCOORD)

View file

@ -88,23 +88,20 @@ radeon_winsys(struct pipe_screen *screen) {
#define DBG_TEX (1 << 5)
#define DBG_TEXALLOC (1 << 6)
#define DBG_RS (1 << 7)
#define DBG_FALL (1 << 8)
#define DBG_FB (1 << 9)
#define DBG_RS_BLOCK (1 << 10)
#define DBG_CBZB (1 << 11)
#define DBG_HYPERZ (1 << 12)
#define DBG_SCISSOR (1 << 13)
#define DBG_UPLOAD (1 << 14)
#define DBG_INFO (1 << 15)
#define DBG_FB (1 << 8)
#define DBG_RS_BLOCK (1 << 9)
#define DBG_CBZB (1 << 10)
#define DBG_HYPERZ (1 << 11)
#define DBG_SCISSOR (1 << 12)
#define DBG_INFO (1 << 13)
/* Features. */
#define DBG_ANISOHQ (1 << 16)
#define DBG_NO_TILING (1 << 17)
#define DBG_NO_IMMD (1 << 18)
#define DBG_FAKE_OCC (1 << 19)
#define DBG_NO_OPT (1 << 20)
#define DBG_NO_CBZB (1 << 21)
#define DBG_NO_ZMASK (1 << 22)
#define DBG_NO_HIZ (1 << 23)
#define DBG_NO_OPT (1 << 19)
#define DBG_NO_CBZB (1 << 20)
#define DBG_NO_ZMASK (1 << 21)
#define DBG_NO_HIZ (1 << 22)
/* Statistics. */
#define DBG_P_STAT (1 << 25)
/*@}*/

View file

@ -549,6 +549,10 @@ static void*
dsa->z_stencil_control |=
(r300_translate_depth_stencil_function(state->depth.func) <<
R300_Z_FUNC_SHIFT);
} else {
/* We must enable depth test, otherwise occlusion queries won't work. */
dsa->z_buffer_control |= R300_Z_ENABLE;
dsa->z_stencil_control |= R300_ZS_ALWAYS;
}
/* Stencil buffer setup. */
@ -632,11 +636,13 @@ static void*
OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value);
END_CB;
/* We must enable depth test, otherwise occlusion queries won't work.
* We setup a dummy zbuffer to silent the CS checker, see emit_fb_state. */
BEGIN_CB(dsa->cb_zb_no_readwrite, 10);
OUT_CB_REG(R300_FG_ALPHA_FUNC, dsa->alpha_function);
OUT_CB_REG_SEQ(R300_ZB_CNTL, 3);
OUT_CB(0);
OUT_CB(0);
OUT_CB(R300_Z_ENABLE);
OUT_CB(R300_ZS_ALWAYS);
OUT_CB(0);
OUT_CB_REG(R500_ZB_STENCILREFMASK_BF, 0);
OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value);
@ -645,8 +651,8 @@ static void*
BEGIN_CB(dsa->cb_fp16_zb_no_readwrite, 10);
OUT_CB_REG(R300_FG_ALPHA_FUNC, dsa->alpha_function_fp16);
OUT_CB_REG_SEQ(R300_ZB_CNTL, 3);
OUT_CB(0);
OUT_CB(0);
OUT_CB(R300_Z_ENABLE);
OUT_CB(R300_ZS_ALWAYS);
OUT_CB(0);
OUT_CB_REG(R500_ZB_STENCILREFMASK_BF, 0);
OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value);
@ -792,12 +798,14 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
/* Now compute the fb_state atom size. */
r300->fb_state.size = 2 + (8 * state->nr_cbufs);
if (r300->cbzb_clear)
if (r300->cbzb_clear) {
r300->fb_state.size += 10;
else if (state->zsbuf) {
} else if (state->zsbuf) {
r300->fb_state.size += 10;
if (r300->hyperz_enabled)
r300->fb_state.size += 8;
} else if (state->nr_cbufs) {
r300->fb_state.size += 10;
}
/* The size of the rest of atoms stays the same. */
@ -1457,6 +1465,8 @@ r300_create_sampler_view(struct pipe_context *pipe,
boolean dxtc_swizzle = r300_screen(pipe->screen)->caps.dxtc_swizzle;
if (view) {
unsigned hwformat;
view->base = *templ;
view->base.reference.count = 1;
view->base.context = pipe;
@ -1468,11 +1478,19 @@ r300_create_sampler_view(struct pipe_context *pipe,
view->swizzle[2] = templ->swizzle_b;
view->swizzle[3] = templ->swizzle_a;
hwformat = r300_translate_texformat(templ->format,
view->swizzle,
is_r500,
dxtc_swizzle);
if (hwformat == ~0) {
fprintf(stderr, "r300: Ooops. Got unsupported format %s in %s.\n",
util_format_short_name(templ->format), __func__);
}
assert(hwformat != ~0);
view->format = tex->tx_format;
view->format.format1 |= r300_translate_texformat(templ->format,
view->swizzle,
is_r500,
dxtc_swizzle);
view->format.format1 |= hwformat;
if (is_r500) {
view->format.format2 |= r500_tx_format_msb_bit(templ->format);
}

View file

@ -62,14 +62,17 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
S_SQ_CF_ALLOC_EXPORT_WORD0_ELEM_SIZE(cf->output.elem_size) |
S_SQ_CF_ALLOC_EXPORT_WORD0_ARRAY_BASE(cf->output.array_base) |
S_SQ_CF_ALLOC_EXPORT_WORD0_TYPE(cf->output.type);
bc->bytecode[id++] = S_SQ_CF_ALLOC_EXPORT_WORD1_BURST_COUNT(cf->output.burst_count - 1) |
bc->bytecode[id] = S_SQ_CF_ALLOC_EXPORT_WORD1_BURST_COUNT(cf->output.burst_count - 1) |
S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_X(cf->output.swizzle_x) |
S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_Y(cf->output.swizzle_y) |
S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_Z(cf->output.swizzle_z) |
S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_W(cf->output.swizzle_w) |
S_SQ_CF_ALLOC_EXPORT_WORD1_BARRIER(cf->output.barrier) |
S_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(cf->output.inst) |
S_SQ_CF_ALLOC_EXPORT_WORD1_END_OF_PROGRAM(cf->output.end_of_program);
S_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(cf->output.inst);
if (bc->chiprev == CHIPREV_EVERGREEN) /* no EOP on cayman */
bc->bytecode[id] |= S_SQ_CF_ALLOC_EXPORT_WORD1_END_OF_PROGRAM(cf->output.end_of_program);
id++;
break;
case EG_V_SQ_CF_WORD1_SQ_CF_INST_JUMP:
case EG_V_SQ_CF_WORD1_SQ_CF_INST_ELSE:
@ -80,6 +83,7 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
case EG_V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
case EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
bc->bytecode[id++] = S_SQ_CF_WORD0_ADDR(cf->cf_addr >> 1);
bc->bytecode[id++] = S_SQ_CF_WORD1_CF_INST(cf->inst) |
S_SQ_CF_WORD1_BARRIER(1) |

View file

@ -71,15 +71,19 @@ static void evergreen_set_blend_color(struct pipe_context *ctx,
static void *evergreen_create_blend_state(struct pipe_context *ctx,
const struct pipe_blend_state *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_blend *blend = CALLOC_STRUCT(r600_pipe_blend);
struct r600_pipe_state *rstate;
u32 color_control, target_mask;
/* FIXME there is more then 8 framebuffer */
unsigned blend_cntl[8];
enum radeon_family family;
if (blend == NULL) {
return NULL;
}
family = r600_get_family(rctx->radeon);
rstate = &blend->rstate;
rstate->id = R600_PIPE_STATE_BLEND;
@ -102,9 +106,16 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,
}
}
blend->cb_target_mask = target_mask;
r600_pipe_state_add_reg(rstate, R_028808_CB_COLOR_CONTROL,
color_control, 0xFFFFFFFD, NULL);
r600_pipe_state_add_reg(rstate, R_028C3C_PA_SC_AA_MASK, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
if (family != CHIP_CAYMAN)
r600_pipe_state_add_reg(rstate, R_028C3C_PA_SC_AA_MASK, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
else {
r600_pipe_state_add_reg(rstate, CM_R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
}
for (int i = 0; i < 8; i++) {
/* state->rt entries > 0 only written if independent blending */
@ -143,6 +154,7 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,
static void *evergreen_create_dsa_state(struct pipe_context *ctx,
const struct pipe_depth_stencil_alpha_state *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_dsa *dsa = CALLOC_STRUCT(r600_pipe_dsa);
unsigned db_depth_control, alpha_test_control, alpha_ref, db_shader_control;
unsigned stencil_ref_mask, stencil_ref_mask_bf, db_render_override, db_render_control;
@ -229,11 +241,15 @@ static void *evergreen_create_dsa_state(struct pipe_context *ctx,
static void *evergreen_create_rs_state(struct pipe_context *ctx,
const struct pipe_rasterizer_state *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_rasterizer *rs = CALLOC_STRUCT(r600_pipe_rasterizer);
struct r600_pipe_state *rstate;
unsigned tmp;
unsigned prov_vtx = 1, polygon_dual_mode;
unsigned clip_rule;
enum radeon_family family;
family = r600_get_family(rctx->radeon);
if (rs == NULL) {
return NULL;
@ -290,17 +306,30 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
tmp = (unsigned)state->line_width * 8;
r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, S_028A08_WIDTH(tmp), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
if (family == CHIP_CAYMAN) {
r600_pipe_state_add_reg(rstate, CM_R_028BDC_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BE4_PA_SU_VTX_CNTL,
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BE8_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BEC_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BF0_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BF4_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
} else {
r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
0xFFFFFFFF, NULL);
}
r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_02820C_PA_SC_CLIPRECT_RULE, clip_rule, 0xFFFFFFFF, NULL);
return rstate;
}
@ -318,7 +347,7 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
rstate->id = R600_PIPE_STATE_SAMPLER;
util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
r600_pipe_state_add_reg_noblock(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |
S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |
S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) |
@ -328,21 +357,21 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
S_03C000_MAX_ANISO(r600_tex_aniso_filter(state->max_anisotropy)) |
S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |
S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
r600_pipe_state_add_reg_noblock(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 8)) |
S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 8)),
0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 8)) |
(state->seamless_cube_map ? 0 : S_03C008_DISABLE_CUBE_WRAP(1)) |
S_03C008_TYPE(1),
0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 8)) |
(state->seamless_cube_map ? 0 : S_03C008_DISABLE_CUBE_WRAP(1)) |
S_03C008_TYPE(1),
0xFFFFFFFF, NULL);
if (uc.ui) {
r600_pipe_state_add_reg(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);
}
return rstate;
}
@ -351,6 +380,7 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte
struct pipe_resource *texture,
const struct pipe_sampler_view *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_sampler_view *resource = CALLOC_STRUCT(r600_pipe_sampler_view);
struct r600_pipe_state *rstate;
const struct util_format_description *desc;
@ -832,10 +862,14 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
u32 shader_mask, tl, br, target_mask;
enum radeon_family family;
int tl_x, tl_y, br_x, br_y;
if (rstate == NULL)
return;
family = r600_get_family(rctx->radeon);
evergreen_context_flush_dest_caches(&rctx->ctx);
rctx->ctx.num_dest_buffers = state->nr_cbufs;
@ -860,8 +894,22 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
target_mask ^= 0xf << (i * 4);
shader_mask |= 0xf << (i * 4);
}
tl = S_028240_TL_X(0) | S_028240_TL_Y(0);
br = S_028244_BR_X(state->width) | S_028244_BR_Y(state->height);
tl_x = 0;
tl_y = 0;
br_x = state->width;
br_y = state->height;
/* EG hw workaround */
if (br_x == 0)
tl_x = 1;
if (br_y == 0)
tl_y = 1;
/* cayman hw workaround */
if (family == CHIP_CAYMAN) {
if (br_x == 1 && br_y == 1)
br_x = 2;
}
tl = S_028240_TL_X(tl_x) | S_028240_TL_Y(tl_y);
br = S_028244_BR_X(br_x) | S_028244_BR_Y(br_y);
r600_pipe_state_add_reg(rstate,
R_028240_PA_SC_GENERIC_SCISSOR_TL, tl,
@ -898,10 +946,17 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
0x00000000, target_mask, NULL);
r600_pipe_state_add_reg(rstate, R_02823C_CB_SHADER_MASK,
shader_mask, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C04_PA_SC_AA_CONFIG,
0x00000000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX,
0x00000000, 0xFFFFFFFF, NULL);
if (family == CHIP_CAYMAN) {
r600_pipe_state_add_reg(rstate, CM_R_028BE0_PA_SC_AA_CONFIG,
0x00000000, 0xFFFFFFFF, NULL);
} else {
r600_pipe_state_add_reg(rstate, R_028C04_PA_SC_AA_CONFIG,
0x00000000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX,
0x00000000, 0xFFFFFFFF, NULL);
}
free(rctx->states[R600_PIPE_STATE_FRAMEBUFFER]);
rctx->states[R600_PIPE_STATE_FRAMEBUFFER] = rstate;
@ -968,6 +1023,85 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx)
rctx->context.texture_barrier = evergreen_texture_barrier;
}
static void cayman_init_config(struct r600_pipe_context *rctx)
{
struct r600_pipe_state *rstate = &rctx->config;
unsigned tmp;
tmp = 0x00000000;
tmp |= S_008C00_EXPORT_SRC_C(1);
r600_pipe_state_add_reg(rstate, R_008C00_SQ_CONFIG, tmp, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_008C10_SQ_GLOBAL_GPR_RESOURCE_MGMT_1, (4 << 28), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, (1 << 8), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A48_PA_SC_MODE_CNTL_0, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL_1, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A10_VGT_OUTPUT_PATH_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A14_VGT_HOS_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A20_VGT_HOS_REUSE_DEPTH, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A24_VGT_GROUP_PRIM_TYPE, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A28_VGT_GROUP_FIRST_DECR, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A2C_VGT_GROUP_DECR, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A30_VGT_GROUP_VECT_0_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A34_VGT_GROUP_VECT_1_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028A40_VGT_GS_MODE, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028B94_VGT_STRMOUT_CONFIG, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028AB4_VGT_REUSE_OFF, 0x00000000, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028AB8_VGT_VTX_CNT_EN, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_008A14_PA_CL_ENHANCE, (3 << 1) | 1, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028380_SQ_VTX_SEMANTIC_0, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028384_SQ_VTX_SEMANTIC_1, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028388_SQ_VTX_SEMANTIC_2, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_02838C_SQ_VTX_SEMANTIC_3, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028390_SQ_VTX_SEMANTIC_4, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028394_SQ_VTX_SEMANTIC_5, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028398_SQ_VTX_SEMANTIC_6, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_02839C_SQ_VTX_SEMANTIC_7, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283A0_SQ_VTX_SEMANTIC_8, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283A4_SQ_VTX_SEMANTIC_9, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283A8_SQ_VTX_SEMANTIC_10, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283AC_SQ_VTX_SEMANTIC_11, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283B0_SQ_VTX_SEMANTIC_12, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283B4_SQ_VTX_SEMANTIC_13, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283B8_SQ_VTX_SEMANTIC_14, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283BC_SQ_VTX_SEMANTIC_15, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283C0_SQ_VTX_SEMANTIC_16, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283C4_SQ_VTX_SEMANTIC_17, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283C8_SQ_VTX_SEMANTIC_18, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283CC_SQ_VTX_SEMANTIC_19, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283D0_SQ_VTX_SEMANTIC_20, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283D4_SQ_VTX_SEMANTIC_21, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283D8_SQ_VTX_SEMANTIC_22, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283DC_SQ_VTX_SEMANTIC_23, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283E0_SQ_VTX_SEMANTIC_24, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283E4_SQ_VTX_SEMANTIC_25, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283E8_SQ_VTX_SEMANTIC_26, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283EC_SQ_VTX_SEMANTIC_27, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283F0_SQ_VTX_SEMANTIC_28, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283F4_SQ_VTX_SEMANTIC_29, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283F8_SQ_VTX_SEMANTIC_30, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_0283FC_SQ_VTX_SEMANTIC_31, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL, 0x0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028BD4_PA_SC_CENTROID_PRIORITY_0, 0x76543210, 0xffffffff, 0);
r600_pipe_state_add_reg(rstate, CM_R_028BD8_PA_SC_CENTROID_PRIORITY_1, 0xfedcba98, 0xffffffff, 0);
r600_pipe_state_add_reg(rstate, CM_R_0288E8_SQ_LDS_ALLOC, 0, 0xffffffff, NULL);
r600_pipe_state_add_reg(rstate, R_0288EC_SQ_LDS_ALLOC_PS, 0, 0xffffffff, NULL);
r600_pipe_state_add_reg(rstate, CM_R_028804_DB_EQAA, 0x110000, 0xffffffff, NULL);
r600_context_pipe_state_set(&rctx->ctx, rstate);
}
void evergreen_init_config(struct r600_pipe_context *rctx)
{
struct r600_pipe_state *rstate = &rctx->config;
@ -999,6 +1133,12 @@ void evergreen_init_config(struct r600_pipe_context *rctx)
unsigned tmp;
family = r600_get_family(rctx->radeon);
if (family == CHIP_CAYMAN) {
cayman_init_config(rctx);
return;
}
ps_prio = 0;
vs_prio = 1;
gs_prio = 2;
@ -1115,6 +1255,48 @@ void evergreen_init_config(struct r600_pipe_context *rctx)
num_hs_stack_entries = 42;
num_ls_stack_entries = 42;
break;
case CHIP_SUMO:
num_ps_gprs = 93;
num_vs_gprs = 46;
num_temp_gprs = 4;
num_gs_gprs = 31;
num_es_gprs = 31;
num_hs_gprs = 23;
num_ls_gprs = 23;
num_ps_threads = 96;
num_vs_threads = 25;
num_gs_threads = 25;
num_es_threads = 25;
num_hs_threads = 25;
num_ls_threads = 25;
num_ps_stack_entries = 42;
num_vs_stack_entries = 42;
num_gs_stack_entries = 42;
num_es_stack_entries = 42;
num_hs_stack_entries = 42;
num_ls_stack_entries = 42;
break;
case CHIP_SUMO2:
num_ps_gprs = 93;
num_vs_gprs = 46;
num_temp_gprs = 4;
num_gs_gprs = 31;
num_es_gprs = 31;
num_hs_gprs = 23;
num_ls_gprs = 23;
num_ps_threads = 96;
num_vs_threads = 25;
num_gs_threads = 25;
num_es_threads = 25;
num_hs_threads = 25;
num_ls_threads = 25;
num_ps_stack_entries = 85;
num_vs_stack_entries = 85;
num_gs_stack_entries = 85;
num_es_stack_entries = 85;
num_hs_stack_entries = 85;
num_ls_stack_entries = 85;
break;
case CHIP_BARTS:
num_ps_gprs = 93;
num_vs_gprs = 46;
@ -1184,6 +1366,8 @@ void evergreen_init_config(struct r600_pipe_context *rctx)
switch (family) {
case CHIP_CEDAR:
case CHIP_PALM:
case CHIP_SUMO:
case CHIP_SUMO2:
case CHIP_CAICOS:
break;
default:
@ -1374,6 +1558,7 @@ void evergreen_polygon_offset_update(struct r600_pipe_context *rctx)
void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = &shader->rstate;
struct r600_shader *rshader = &shader->shader;
unsigned i, exports_ps, num_cout, spi_ps_in_control_0, spi_input_z, spi_ps_in_control_1, db_shader_control;
@ -1502,6 +1687,7 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader
void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = &shader->rstate;
struct r600_shader *rshader = &shader->shader;
unsigned spi_vs_out_id[10];
@ -1545,8 +1731,10 @@ void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader
0xFFFFFFFF, NULL);
}
void evergreen_fetch_shader(struct r600_vertex_element *ve)
void evergreen_fetch_shader(struct pipe_context *ctx,
struct r600_vertex_element *ve)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = &ve->rstate;
rstate->id = R600_PIPE_STATE_FETCH_SHADER;
rstate->nregs = 0;
@ -1580,11 +1768,13 @@ void *evergreen_create_db_flush_dsa(struct r600_pipe_context *rctx)
return rstate;
}
void evergreen_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
void evergreen_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
{
rstate->id = R600_PIPE_STATE_RESOURCE;
rstate->nregs = 0;
r600_pipe_state_add_reg(rstate, R_030000_RESOURCE0_WORD0,
offset, 0xFFFFFFFF, rbuffer->bo);
r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1,
@ -1607,3 +1797,17 @@ void evergreen_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7,
0xC0000000, 0xFFFFFFFF, NULL);
}
void evergreen_pipe_mod_buffer_resource(struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
{
rstate->nregs = 0;
r600_pipe_state_mod_reg_bo(rstate, offset, rbuffer->bo);
r600_pipe_state_mod_reg(rstate, rbuffer->bo_size - offset - 1);
r600_pipe_state_mod_reg(rstate, S_030008_ENDIAN_SWAP(r600_endian_swap(32)) |
S_030008_STRIDE(stride));
rstate->nregs = 8;
}

View file

@ -33,15 +33,19 @@
#define EVERGREEN_CONTEXT_REG_END 0X00029000
#define EVERGREEN_RESOURCE_OFFSET 0x00030000
#define EVERGREEN_RESOURCE_END 0x00034000
#define CAYMAN_RESOURCE_END 0x00038000
#define EVERGREEN_LOOP_CONST_OFFSET 0x0003A200
#define EVERGREEN_LOOP_CONST_END 0x0003A26C
#define EVERGREEN_BOOL_CONST_OFFSET 0x0003A500
#define EVERGREEN_BOOL_CONST_END 0x0003A506
#define CAYMAN_BOOL_CONST_END 0x0003A518
#define EVERGREEN_SAMPLER_OFFSET 0X0003C000
#define EVERGREEN_SAMPLER_END 0X0003CFF0
#define CAYMAN_SAMPLER_END 0X0003C600
#define EVERGREEN_CTL_CONST_OFFSET 0x0003CFF0
#define EVERGREEN_CTL_CONST_END 0x0003E200
#define CAYMAN_CTL_CONST_END 0x0003FF0C
#define EVENT_TYPE_PS_PARTIAL_FLUSH 0x10
#define EVENT_TYPE_ZPASS_DONE 0x15
@ -1907,4 +1911,43 @@
#define ENDIAN_8IN32 2
#define ENDIAN_8IN64 3
#define CM_R_0288E8_SQ_LDS_ALLOC 0x000288E8
#define CM_R_028804_DB_EQAA 0x00028804
#define CM_R_028BD4_PA_SC_CENTROID_PRIORITY_0 0x00028BD4
#define CM_R_028BD8_PA_SC_CENTROID_PRIORITY_1 0x00028BD8
#define CM_R_028BDC_PA_SC_LINE_CNTL 0x28bdc
#define CM_R_028BE0_PA_SC_AA_CONFIG 0x28be0
#define CM_R_028BE4_PA_SU_VTX_CNTL 0x28be4
#define CM_R_028BE8_PA_CL_GB_VERT_CLIP_ADJ 0x28be8
#define CM_R_028BEC_PA_CL_GB_VERT_DISC_ADJ 0x28bec
#define CM_R_028BF0_PA_CL_GB_HORZ_CLIP_ADJ 0x28bf0
#define CM_R_028BF4_PA_CL_GB_HORZ_DISC_ADJ 0x28bf4
#define CM_R_028BF8_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0 0x28bf8
#define CM_R_028BFC_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1 0x28bfc
#define CM_R_028C00_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2 0x28c00
#define CM_R_028C04_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3 0x28c04
#define CM_R_028C08_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0 0x28c08
#define CM_R_028C0C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1 0x28c0c
#define CM_R_028C10_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2 0x28c10
#define CM_R_028C14_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3 0x28c14
#define CM_R_028C18_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0 0x28c18
#define CM_R_028C1C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1 0x28c1c
#define CM_R_028C20_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2 0x28c20
#define CM_R_028C24_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3 0x28c24
#define CM_R_028C28_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0 0x28c28
#define CM_R_028C2C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1 0x28c2c
#define CM_R_028C30_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2 0x28c30
#define CM_R_028C34_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3 0x28c34
#define CM_R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0 0x28c38
#define CM_R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1 0x28c3c
#define CM_R_008C10_SQ_GLOBAL_GPR_RESOURCE_MGMT_1 0x00008C10
#define CM_R_008C14_SQ_GLOBAL_GPR_RESOURCE_MGMT_2 0x00008C14
#endif

View file

@ -92,9 +92,12 @@ enum radeon_family {
CHIP_CYPRESS,
CHIP_HEMLOCK,
CHIP_PALM,
CHIP_SUMO,
CHIP_SUMO2,
CHIP_BARTS,
CHIP_TURKS,
CHIP_CAICOS,
CHIP_CAYMAN,
CHIP_LAST,
};
@ -102,6 +105,7 @@ enum chip_class {
R600,
R700,
EVERGREEN,
CAYMAN,
};
struct r600_tiling_info {
@ -141,11 +145,23 @@ static INLINE unsigned r600_bo_offset(struct r600_bo *bo)
#define R600_BLOCK_MAX_BO 32
#define R600_BLOCK_MAX_REG 128
/* each range covers 9 bits of dword space = 512 dwords = 2k bytes */
/* there is a block entry for each register so 512 blocks */
/* we have no registers to read/write below 0x8000 (0x2000 in dw space) */
/* we use some fake offsets at 0x40000 to do evergreen sampler borders so take 0x42000 as a max bound*/
#define RANGE_OFFSET_START 0x8000
#define HASH_SHIFT 9
#define NUM_RANGES (0x42000 - RANGE_OFFSET_START) / (4 << HASH_SHIFT) /* 128 << 9 = 64k */
#define CTX_RANGE_ID(offset) ((((offset - RANGE_OFFSET_START) >> 2) >> HASH_SHIFT) & 255)
#define CTX_BLOCK_ID(offset) (((offset - RANGE_OFFSET_START) >> 2) & ((1 << HASH_SHIFT) - 1))
struct r600_pipe_reg {
u32 offset;
u32 mask;
u32 value;
struct r600_bo *bo;
u32 mask;
struct r600_block *block;
struct r600_bo *bo;
u32 id;
};
struct r600_pipe_state {
@ -154,18 +170,6 @@ struct r600_pipe_state {
struct r600_pipe_reg regs[R600_BLOCK_MAX_REG];
};
static inline void r600_pipe_state_add_reg(struct r600_pipe_state *state,
u32 offset, u32 value, u32 mask,
struct r600_bo *bo)
{
state->regs[state->nregs].offset = offset;
state->regs[state->nregs].value = value;
state->regs[state->nregs].mask = mask;
state->regs[state->nregs].bo = bo;
state->nregs++;
assert(state->nregs < R600_BLOCK_MAX_REG);
}
#define R600_BLOCK_STATUS_ENABLED (1 << 0)
#define R600_BLOCK_STATUS_DIRTY (1 << 1)
@ -307,4 +311,30 @@ void evergreen_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struc
struct radeon *radeon_decref(struct radeon *radeon);
void _r600_pipe_state_add_reg(struct r600_context *ctx,
struct r600_pipe_state *state,
u32 offset, u32 value, u32 mask,
u32 range_id, u32 block_id,
struct r600_bo *bo);
void r600_pipe_state_add_reg_noblock(struct r600_pipe_state *state,
u32 offset, u32 value, u32 mask,
struct r600_bo *bo);
#define r600_pipe_state_add_reg(state, offset, value, mask, bo) _r600_pipe_state_add_reg(&rctx->ctx, state, offset, value, mask, CTX_RANGE_ID(offset), CTX_BLOCK_ID(offset), bo)
static inline void r600_pipe_state_mod_reg(struct r600_pipe_state *state,
u32 value)
{
state->regs[state->nregs].value = value;
state->nregs++;
}
static inline void r600_pipe_state_mod_reg_bo(struct r600_pipe_state *state,
u32 value, struct r600_bo *bo)
{
state->regs[state->nregs].value = value;
state->regs[state->nregs].bo = bo;
state->nregs++;
}
#endif

View file

@ -94,6 +94,7 @@ static inline unsigned int r600_bc_get_num_operands(struct r600_bc *bc, struct r
}
break;
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
switch (alu->inst) {
case EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP:
return 0;
@ -221,11 +222,16 @@ int r600_bc_init(struct r600_bc *bc, enum radeon_family family)
case CHIP_CYPRESS:
case CHIP_HEMLOCK:
case CHIP_PALM:
case CHIP_SUMO:
case CHIP_SUMO2:
case CHIP_BARTS:
case CHIP_TURKS:
case CHIP_CAICOS:
bc->chiprev = CHIPREV_EVERGREEN;
break;
case CHIP_CAYMAN:
bc->chiprev = CHIPREV_CAYMAN;
break;
default:
R600_ERR("unknown family %d\n", bc->family);
return -EINVAL;
@ -334,6 +340,7 @@ static int is_alu_once_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_PRED_SETLT_PUSH_INT ||
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_PRED_SETLE_PUSH_INT);
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
default:
return !alu->is_op3 && (
alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_KILLE ||
@ -384,6 +391,7 @@ static int is_alu_reduction_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_DOT4_IEEE ||
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MAX4);
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
default:
return !alu->is_op3 && (
alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE ||
@ -401,6 +409,7 @@ static int is_alu_cube_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
return !alu->is_op3 &&
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE;
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
default:
return !alu->is_op3 &&
alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE;
@ -417,6 +426,7 @@ static int is_alu_mova_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_FLOOR ||
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_INT);
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
default:
return !alu->is_op3 && (
alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_INT);
@ -469,6 +479,7 @@ static int is_alu_trans_unit_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
alu->inst == V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MUL_LIT_M2 ||
alu->inst == V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MUL_LIT_M4;
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
default:
if (!alu->is_op3)
/* Note that FLT_TO_INT_* instructions are vector-only instructions
@ -514,13 +525,16 @@ static int assign_alu_units(struct r600_bc *bc, struct r600_bc_alu *alu_first,
{
struct r600_bc_alu *alu;
unsigned i, chan, trans;
int max_slots = bc->chiprev == CHIPREV_CAYMAN ? 4 : 5;
for (i = 0; i < 5; i++)
for (i = 0; i < max_slots; i++)
assignment[i] = NULL;
for (alu = alu_first; alu; alu = LIST_ENTRY(struct r600_bc_alu, alu->list.next, list)) {
chan = alu->dst.chan;
if (is_alu_trans_unit_inst(bc, alu))
if (max_slots == 4)
trans = 0;
else if (is_alu_trans_unit_inst(bc, alu))
trans = 1;
else if (is_alu_vec_unit_inst(bc, alu))
trans = 0;
@ -719,8 +733,10 @@ static int check_and_set_bank_swizzle(struct r600_bc *bc,
struct alu_bank_swizzle bs;
int bank_swizzle[5];
int i, r = 0, forced = 0;
boolean scalar_only = true;
for (i = 0; i < 5; i++) {
boolean scalar_only = bc->chiprev == CHIPREV_CAYMAN ? false : true;
int max_slots = bc->chiprev == CHIPREV_CAYMAN ? 4 : 5;
for (i = 0; i < max_slots; i++) {
if (slots[i] && slots[i]->bank_swizzle_force) {
slots[i]->bank_swizzle = slots[i]->bank_swizzle_force;
forced = 1;
@ -737,6 +753,13 @@ static int check_and_set_bank_swizzle(struct r600_bc *bc,
bank_swizzle[i] = SQ_ALU_VEC_012;
bank_swizzle[4] = SQ_ALU_SCL_210;
while(bank_swizzle[4] <= SQ_ALU_SCL_221) {
if (max_slots == 4) {
for (i = 0; i < max_slots; i++) {
if (bank_swizzle[i] == SQ_ALU_VEC_210)
return -1;
}
}
init_bank_swizzle(&bs);
if (scalar_only == false) {
for (i = 0; i < 4; i++) {
@ -749,11 +772,11 @@ static int check_and_set_bank_swizzle(struct r600_bc *bc,
} else
r = 0;
if (!r && slots[4]) {
if (!r && slots[4] && max_slots == 5) {
r = check_scalar(bc, slots[4], &bs, bank_swizzle[4]);
}
if (!r) {
for (i = 0; i < 5; i++) {
for (i = 0; i < max_slots; i++) {
if (slots[i])
slots[i]->bank_swizzle = bank_swizzle[i];
}
@ -763,7 +786,7 @@ static int check_and_set_bank_swizzle(struct r600_bc *bc,
if (scalar_only) {
bank_swizzle[4]++;
} else {
for (i = 0; i < 5; i++) {
for (i = 0; i < max_slots; i++) {
bank_swizzle[i]++;
if (bank_swizzle[i] <= SQ_ALU_VEC_210)
break;
@ -783,12 +806,13 @@ static int replace_gpr_with_pv_ps(struct r600_bc *bc,
struct r600_bc_alu *prev[5];
int gpr[5], chan[5];
int i, j, r, src, num_src;
int max_slots = bc->chiprev == CHIPREV_CAYMAN ? 4 : 5;
r = assign_alu_units(bc, alu_prev, prev);
if (r)
return r;
for (i = 0; i < 5; ++i) {
for (i = 0; i < max_slots; ++i) {
if(prev[i] && prev[i]->dst.write && !prev[i]->dst.rel) {
gpr[i] = prev[i]->dst.sel;
/* cube writes more than PV.X */
@ -800,7 +824,7 @@ static int replace_gpr_with_pv_ps(struct r600_bc *bc,
gpr[i] = -1;
}
for (i = 0; i < 5; ++i) {
for (i = 0; i < max_slots; ++i) {
struct r600_bc_alu *alu = slots[i];
if(!alu)
continue;
@ -810,11 +834,13 @@ static int replace_gpr_with_pv_ps(struct r600_bc *bc,
if (!is_gpr(alu->src[src].sel) || alu->src[src].rel)
continue;
if (alu->src[src].sel == gpr[4] &&
alu->src[src].chan == chan[4]) {
alu->src[src].sel = V_SQ_ALU_SRC_PS;
alu->src[src].chan = 0;
continue;
if (bc->chiprev < CHIPREV_CAYMAN) {
if (alu->src[src].sel == gpr[4] &&
alu->src[src].chan == chan[4]) {
alu->src[src].sel = V_SQ_ALU_SRC_PS;
alu->src[src].chan = 0;
continue;
}
}
for (j = 0; j < 4; ++j) {
@ -922,12 +948,13 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
int i, j, r, src, num_src;
int num_once_inst = 0;
int have_mova = 0, have_rel = 0;
int max_slots = bc->chiprev == CHIPREV_CAYMAN ? 4 : 5;
r = assign_alu_units(bc, alu_prev, prev);
if (r)
return r;
for (i = 0; i < 5; ++i) {
for (i = 0; i < max_slots; ++i) {
struct r600_bc_alu *alu;
/* check number of literals */
@ -951,7 +978,7 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
result[i] = prev[i];
continue;
} else if (prev[i] && slots[i]) {
if (result[4] == NULL && prev[4] == NULL && slots[4] == NULL) {
if (max_slots == 5 && result[4] == NULL && prev[4] == NULL && slots[4] == NULL) {
/* Trans unit is still free try to use it. */
if (is_alu_any_unit_inst(bc, slots[i])) {
result[i] = prev[i];
@ -991,7 +1018,7 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
if (!is_gpr(alu->src[src].sel))
continue;
for (j = 0; j < 5; ++j) {
for (j = 0; j < max_slots; ++j) {
if (!prev[j] || !prev[j]->dst.write)
continue;
@ -1019,7 +1046,7 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
bc->cf_last->ndw -= align(prev_nliteral, 2);
/* sort instructions */
for (i = 0; i < 5; ++i) {
for (i = 0; i < max_slots; ++i) {
slots[i] = result[i];
if (result[i]) {
LIST_DEL(&result[i]->list);
@ -1032,7 +1059,7 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
LIST_ENTRY(struct r600_bc_alu, bc->cf_last->alu.prev, list)->last = 1;
/* determine new first instruction */
for (i = 0; i < 5; ++i) {
for (i = 0; i < max_slots; ++i) {
if (result[i]) {
bc->cf_last->curr_bs_head = result[i];
break;
@ -1225,6 +1252,7 @@ int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, int
uint32_t literal[4];
unsigned nliteral;
struct r600_bc_alu *slots[5];
int max_slots = bc->chiprev == CHIPREV_CAYMAN ? 4 : 5;
r = assign_alu_units(bc, bc->cf_last->curr_bs_head, slots);
if (r)
return r;
@ -1245,7 +1273,7 @@ int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, int
if (r)
return r;
for (i = 0, nliteral = 0; i < 5; i++) {
for (i = 0, nliteral = 0; i < max_slots; i++) {
if (slots[i]) {
r = r600_bc_alu_nliterals(bc, slots[i], literal, &nliteral);
if (r)
@ -1282,6 +1310,7 @@ static unsigned r600_bc_num_tex_and_vtx_instructions(const struct r600_bc *bc)
return 16;
case CHIPREV_EVERGREEN:
case CHIPREV_CAYMAN:
return 64;
default:
@ -1290,6 +1319,19 @@ static unsigned r600_bc_num_tex_and_vtx_instructions(const struct r600_bc *bc)
}
}
static inline boolean last_inst_was_vtx_fetch(struct r600_bc *bc)
{
if (bc->chiprev == CHIPREV_CAYMAN) {
if (bc->cf_last->inst != CM_V_SQ_CF_WORD1_SQ_CF_INST_TC)
return TRUE;
} else {
if (bc->cf_last->inst != V_SQ_CF_WORD1_SQ_CF_INST_VTX &&
bc->cf_last->inst != V_SQ_CF_WORD1_SQ_CF_INST_VTX_TC)
return TRUE;
}
return FALSE;
}
int r600_bc_add_vtx(struct r600_bc *bc, const struct r600_bc_vtx *vtx)
{
struct r600_bc_vtx *nvtx = r600_bc_vtx();
@ -1301,15 +1343,17 @@ int r600_bc_add_vtx(struct r600_bc *bc, const struct r600_bc_vtx *vtx)
/* cf can contains only alu or only vtx or only tex */
if (bc->cf_last == NULL ||
(bc->cf_last->inst != V_SQ_CF_WORD1_SQ_CF_INST_VTX &&
bc->cf_last->inst != V_SQ_CF_WORD1_SQ_CF_INST_VTX_TC) ||
bc->force_add_cf) {
last_inst_was_vtx_fetch(bc) ||
bc->force_add_cf) {
r = r600_bc_add_cf(bc);
if (r) {
free(nvtx);
return r;
}
bc->cf_last->inst = V_SQ_CF_WORD1_SQ_CF_INST_VTX;
if (bc->chiprev == CHIPREV_CAYMAN)
bc->cf_last->inst = CM_V_SQ_CF_WORD1_SQ_CF_INST_TC;
else
bc->cf_last->inst = V_SQ_CF_WORD1_SQ_CF_INST_VTX;
}
LIST_ADDTAIL(&nvtx->list, &bc->cf_last->vtx);
/* each fetch use 4 dwords */
@ -1379,14 +1423,21 @@ int r600_bc_add_cfinst(struct r600_bc *bc, int inst)
return 0;
}
int cm_bc_add_cf_end(struct r600_bc *bc)
{
return r600_bc_add_cfinst(bc, CM_V_SQ_CF_WORD1_SQ_CF_INST_END);
}
/* common to all 3 families */
static int r600_bc_vtx_build(struct r600_bc *bc, struct r600_bc_vtx *vtx, unsigned id)
{
bc->bytecode[id++] = S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id) |
bc->bytecode[id] = S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id) |
S_SQ_VTX_WORD0_FETCH_TYPE(vtx->fetch_type) |
S_SQ_VTX_WORD0_SRC_GPR(vtx->src_gpr) |
S_SQ_VTX_WORD0_SRC_SEL_X(vtx->src_sel_x) |
S_SQ_VTX_WORD0_MEGA_FETCH_COUNT(vtx->mega_fetch_count);
S_SQ_VTX_WORD0_SRC_SEL_X(vtx->src_sel_x);
if (bc->chiprev < CHIPREV_CAYMAN)
bc->bytecode[id] |= S_SQ_VTX_WORD0_MEGA_FETCH_COUNT(vtx->mega_fetch_count);
id++;
bc->bytecode[id++] = S_SQ_VTX_WORD1_DST_SEL_X(vtx->dst_sel_x) |
S_SQ_VTX_WORD1_DST_SEL_Y(vtx->dst_sel_y) |
S_SQ_VTX_WORD1_DST_SEL_Z(vtx->dst_sel_z) |
@ -1397,9 +1448,11 @@ static int r600_bc_vtx_build(struct r600_bc *bc, struct r600_bc_vtx *vtx, unsign
S_SQ_VTX_WORD1_FORMAT_COMP_ALL(vtx->format_comp_all) |
S_SQ_VTX_WORD1_SRF_MODE_ALL(vtx->srf_mode_all) |
S_SQ_VTX_WORD1_GPR_DST_GPR(vtx->dst_gpr);
bc->bytecode[id++] = S_SQ_VTX_WORD2_OFFSET(vtx->offset) |
S_SQ_VTX_WORD2_ENDIAN_SWAP(vtx->endian) |
S_SQ_VTX_WORD2_MEGA_FETCH(1);
bc->bytecode[id] = S_SQ_VTX_WORD2_OFFSET(vtx->offset)|
S_SQ_VTX_WORD2_ENDIAN_SWAP(vtx->endian);
if (bc->chiprev < CHIPREV_CAYMAN)
bc->bytecode[id] |= S_SQ_VTX_WORD2_MEGA_FETCH(1);
id++;
bc->bytecode[id++] = 0;
return 0;
}
@ -1601,6 +1654,7 @@ int r600_bc_build(struct r600_bc *bc)
case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
break;
default:
R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
@ -1616,7 +1670,7 @@ int r600_bc_build(struct r600_bc *bc)
return -ENOMEM;
LIST_FOR_EACH_ENTRY(cf, &bc->cf, list) {
addr = cf->addr;
if (bc->chiprev == CHIPREV_EVERGREEN)
if (bc->chiprev >= CHIPREV_EVERGREEN)
r = eg_bc_cf_build(bc, cf);
else
r = r600_bc_cf_build(bc, cf);
@ -1640,6 +1694,7 @@ int r600_bc_build(struct r600_bc *bc)
break;
case CHIPREV_R700:
case CHIPREV_EVERGREEN: /* eg alu is same encoding as r700 */
case CHIPREV_CAYMAN: /* eg alu is same encoding as r700 */
r = r700_bc_alu_build(bc, alu, addr);
break;
default:
@ -1668,6 +1723,14 @@ int r600_bc_build(struct r600_bc *bc)
}
break;
case V_SQ_CF_WORD1_SQ_CF_INST_TEX:
if (bc->chiprev == CHIPREV_CAYMAN) {
LIST_FOR_EACH_ENTRY(vtx, &cf->vtx, list) {
r = r600_bc_vtx_build(bc, vtx, addr);
if (r)
return r;
addr += 4;
}
}
LIST_FOR_EACH_ENTRY(tex, &cf->tex, list) {
r = r600_bc_tex_build(bc, tex, addr);
if (r)
@ -1688,6 +1751,7 @@ int r600_bc_build(struct r600_bc *bc)
case V_SQ_CF_WORD1_SQ_CF_INST_POP:
case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
break;
default:
R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
@ -1752,6 +1816,9 @@ void r600_bc_dump(struct r600_bc *bc)
case 2:
chip = 'E';
break;
case 3:
chip = 'C';
break;
case 0:
default:
chip = '6';
@ -1818,6 +1885,7 @@ void r600_bc_dump(struct r600_bc *bc)
case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
fprintf(stderr, "%04d %08X CF ", id, bc->bytecode[id]);
fprintf(stderr, "ADDR:%d\n", cf->cf_addr);
id++;
@ -1920,7 +1988,10 @@ void r600_bc_dump(struct r600_bc *bc)
fprintf(stderr, "%04d %08X ", id, bc->bytecode[id]);
fprintf(stderr, "SRC(GPR:%d ", vtx->src_gpr);
fprintf(stderr, "SEL_X:%d) ", vtx->src_sel_x);
fprintf(stderr, "MEGA_FETCH_COUNT:%d ", vtx->mega_fetch_count);
if (bc->chiprev < CHIPREV_CAYMAN)
fprintf(stderr, "MEGA_FETCH_COUNT:%d ", vtx->mega_fetch_count);
else
fprintf(stderr, "SEL_Y:%d) ", 0);
fprintf(stderr, "DST(GPR:%d ", vtx->dst_gpr);
fprintf(stderr, "SEL_X:%d ", vtx->dst_sel_x);
fprintf(stderr, "SEL_Y:%d ", vtx->dst_sel_y);
@ -2212,9 +2283,9 @@ int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, stru
r600_bc_clear(&bc);
if (rctx->family >= CHIP_CEDAR)
evergreen_fetch_shader(ve);
evergreen_fetch_shader(&rctx->context, ve);
else
r600_fetch_shader(ve);
r600_fetch_shader(&rctx->context, ve);
return 0;
}

View file

@ -205,6 +205,8 @@ int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, int
void r600_bc_special_constants(u32 value, unsigned *sel, unsigned *neg);
void r600_bc_dump(struct r600_bc *bc);
int cm_bc_add_cf_end(struct r600_bc *bc);
int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, struct r600_vertex_element *ve);
/* r700_asm.c */

View file

@ -171,9 +171,12 @@
#define V_SQ_CF_ALLOC_EXPORT_WORD1_SQ_CF_INST_EXPORT 0x00000027
#define V_SQ_CF_ALLOC_EXPORT_WORD1_SQ_CF_INST_EXPORT_DONE 0x00000028
/* cayman doesn't have VTX */
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_NOP 0x00000000
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_TEX 0x00000001
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_TC 0x00000001
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_VTX 0x00000002
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_RSVD_2 0x00000002
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_GDS 0x00000003
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_START 0x00000004
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_END 0x00000005
@ -200,19 +203,36 @@
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_WAIT_ACK 0x0000001a
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_TC_ACK 0x0000001b
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_VC_ACK 0x0000001c
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_RSVD_28 0x0000001c
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_JUMPTABLE 0x0000001d
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_GLOBAL_WAVE_SYNC 0x0000001e
#define EG_V_SQ_CF_WORD1_SQ_CF_INST_HALT 0x0000001f
/* cayman extras */
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_END 0x00000020
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_LDS_DEALLOC 0x00000021
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_PUSH_WQM 0x00000022
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_POP_WQM 0x00000023
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_ELSE_WQM 0x00000024
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_JUMP_ANY 0x00000025
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_REACTIVATE 0x00000026
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_REACTIVATE_WQM 0x00000027
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_INTERRUPT 0x00000028
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_INTERRUPT_AND_SLEEP 0x00000029
#define CM_V_SQ_CF_WORD1_SQ_CF_INST_SET_PRIORITY 0x00000030
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU 0x00000008
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE 0x00000009
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_POP_AFTER 0x0000000A
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_POP2_AFTER 0x0000000B
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_EXTENDED 0x0000000C
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_CONTINUE 0x0000000D
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_BREAK 0x0000000E
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_CONTINUE 0x0000000D /* different on CAYMAN */
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_BREAK 0x0000000E /* different on CAYMAN */
#define EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_ELSE_AFTER 0x0000000F
#define CM_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_REACTIVATE_BEFORE 0x0000000D
#define CM_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_VALID_PIXEL_MODE 0x0000000E
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_ADD 0x00000000
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL 0x00000001
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL_IEEE 0x00000002
@ -299,11 +319,11 @@
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_ADDC_UINT 0x00000052
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SUBB_UINT 0x00000053
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_GROUP_BARRIER 0x00000054
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_GROUP_SEQ_BEGIN 0x00000055
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_GROUP_SEQ_END 0x00000056
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_GROUP_SEQ_BEGIN 0x00000055 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_GROUP_SEQ_END 0x00000056 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_MODE 0x00000057
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_CF_IDX0 0x00000058
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_CF_IDX1 0x00000059
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_CF_IDX0 0x00000058 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_CF_IDX1 0x00000059 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SET_LDS_SIZE 0x0000005A
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_EXP_IEEE 0x00000081
@ -322,8 +342,8 @@
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULHI_INT 0x00000090
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULLO_UINT 0x00000091
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULHI_UINT 0x00000092
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_INT 0x00000093
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_UINT 0x00000094
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_INT 0x00000093 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_UINT 0x00000094 /* not on CAYMAN */
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_64 0x00000095
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIP_CLAMPED_64 0x00000096
#define EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RECIPSQRT_64 0x00000097
@ -393,9 +413,10 @@
#define CHIPREV_R600 0
#define CHIPREV_R700 1
#define CHIPREV_EVERGREEN 2
#define CHIPREV_CAYMAN 3
#define BC_INST(bc, x) ((bc)->chiprev == CHIPREV_EVERGREEN ? EG_##x : x)
#define BC_INST(bc, x) ((bc)->chiprev >= CHIPREV_EVERGREEN ? EG_##x : x)
#define CTX_INST(x) (ctx->bc->chiprev == CHIPREV_EVERGREEN ? EG_##x : x)
#define CTX_INST(x) (ctx->bc->chiprev >= CHIPREV_EVERGREEN ? EG_##x : x)
#endif

View file

@ -260,9 +260,12 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
case CHIP_CYPRESS:
case CHIP_HEMLOCK:
case CHIP_PALM:
case CHIP_SUMO:
case CHIP_SUMO2:
case CHIP_BARTS:
case CHIP_TURKS:
case CHIP_CAICOS:
case CHIP_CAYMAN:
evergreen_init_state_functions(rctx);
if (evergreen_context_init(&rctx->ctx, rctx->radeon)) {
r600_destroy_context(&rctx->context);
@ -334,9 +337,12 @@ static const char *r600_get_family_name(enum radeon_family family)
case CHIP_CYPRESS: return "AMD CYPRESS";
case CHIP_HEMLOCK: return "AMD HEMLOCK";
case CHIP_PALM: return "AMD PALM";
case CHIP_SUMO: return "AMD SUMO";
case CHIP_SUMO2: return "AMD SUMO2";
case CHIP_BARTS: return "AMD BARTS";
case CHIP_TURKS: return "AMD TURKS";
case CHIP_CAICOS: return "AMD CAICOS";
case CHIP_CAYMAN: return "AMD CAYMAN";
default: return "AMD unknown";
}
}

View file

@ -65,6 +65,7 @@ enum r600_pipe_state_id {
R600_PIPE_STATE_RESOURCE,
R600_PIPE_STATE_POLYGON_OFFSET,
R600_PIPE_STATE_FETCH_SHADER,
R600_PIPE_STATE_SPI,
R600_PIPE_NSTATES
};
@ -188,6 +189,8 @@ struct r600_pipe_context {
struct r600_pipe_state ps_const_buffer;
struct r600_pipe_state ps_const_buffer_resource[R600_MAX_CONST_BUFFERS];
struct r600_pipe_rasterizer *rasterizer;
struct r600_pipe_state vgt;
struct r600_pipe_state spi;
/* shader information */
unsigned sprite_coord_enable;
bool flatshade;
@ -217,11 +220,14 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx);
void evergreen_init_config(struct r600_pipe_context *rctx);
void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader);
void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader);
void evergreen_fetch_shader(struct r600_vertex_element *ve);
void evergreen_fetch_shader(struct pipe_context *ctx, struct r600_vertex_element *ve);
void *evergreen_create_db_flush_dsa(struct r600_pipe_context *rctx);
void evergreen_polygon_offset_update(struct r600_pipe_context *rctx);
void evergreen_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
void evergreen_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride);
void evergreen_pipe_mod_buffer_resource(struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride);
@ -258,11 +264,14 @@ void r600_init_state_functions(struct r600_pipe_context *rctx);
void r600_init_config(struct r600_pipe_context *rctx);
void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader);
void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader);
void r600_fetch_shader(struct r600_vertex_element *ve);
void r600_fetch_shader(struct pipe_context *ctx, struct r600_vertex_element *ve);
void *r600_create_db_flush_dsa(struct r600_pipe_context *rctx);
void r600_polygon_offset_update(struct r600_pipe_context *rctx);
void r600_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
void r600_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride);
void r600_pipe_mod_buffer_resource(struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride);

File diff suppressed because it is too large Load diff

View file

@ -199,6 +199,7 @@ static void *r600_create_blend_state(struct pipe_context *ctx,
static void *r600_create_dsa_state(struct pipe_context *ctx,
const struct pipe_depth_stencil_alpha_state *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_dsa *dsa = CALLOC_STRUCT(r600_pipe_dsa);
unsigned db_depth_control, alpha_test_control, alpha_ref, db_shader_control;
unsigned stencil_ref_mask, stencil_ref_mask_bf, db_render_override, db_render_control;
@ -286,6 +287,7 @@ static void *r600_create_dsa_state(struct pipe_context *ctx,
static void *r600_create_rs_state(struct pipe_context *ctx,
const struct pipe_rasterizer_state *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_rasterizer *rs = CALLOC_STRUCT(r600_pipe_rasterizer);
struct r600_pipe_state *rstate;
unsigned tmp, cb;
@ -382,26 +384,26 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,
rstate->id = R600_PIPE_STATE_SAMPLER;
util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |
S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |
S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) |
S_03C000_XY_MAG_FILTER(r600_tex_filter(state->mag_img_filter) | aniso_flag_offset) |
S_03C000_XY_MIN_FILTER(r600_tex_filter(state->min_img_filter) | aniso_flag_offset) |
S_03C000_MIP_FILTER(r600_tex_mipfilter(state->min_mip_filter)) |
S_03C000_MAX_ANISO(r600_tex_aniso_filter(state->max_anisotropy)) |
S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |
S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |
S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)) |
S_03C004_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0, S_03C008_TYPE(1), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |
S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |
S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) |
S_03C000_XY_MAG_FILTER(r600_tex_filter(state->mag_img_filter) | aniso_flag_offset) |
S_03C000_XY_MIN_FILTER(r600_tex_filter(state->min_img_filter) | aniso_flag_offset) |
S_03C000_MIP_FILTER(r600_tex_mipfilter(state->min_mip_filter)) |
S_03C000_MAX_ANISO(r600_tex_aniso_filter(state->max_anisotropy)) |
S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |
S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |
S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)) |
S_03C004_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0, S_03C008_TYPE(1), 0xFFFFFFFF, NULL);
if (uc.ui) {
r600_pipe_state_add_reg(rstate, R_00A400_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A400_TD_PS_SAMPLER0_BORDER_RED, fui(state->border_color[0]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A404_TD_PS_SAMPLER0_BORDER_GREEN, fui(state->border_color[1]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, fui(state->border_color[2]), 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg_noblock(rstate, R_00A40C_TD_PS_SAMPLER0_BORDER_ALPHA, fui(state->border_color[3]), 0xFFFFFFFF, NULL);
}
return rstate;
}
@ -410,6 +412,7 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c
struct pipe_resource *texture,
const struct pipe_sampler_view *state)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_sampler_view *resource = CALLOC_STRUCT(r600_pipe_sampler_view);
struct r600_pipe_state *rstate;
const struct util_format_description *desc;
@ -1285,6 +1288,7 @@ void r600_init_config(struct r600_pipe_context *rctx)
void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = &shader->rstate;
struct r600_shader *rshader = &shader->shader;
unsigned i, exports_ps, num_cout, spi_ps_in_control_0, spi_input_z, spi_ps_in_control_1, db_shader_control;
@ -1378,6 +1382,7 @@ void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shad
void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader)
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_pipe_state *rstate = &shader->rstate;
struct r600_shader *rshader = &shader->shader;
unsigned spi_vs_out_id[10];
@ -1424,9 +1429,11 @@ void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shad
0xFFFFFFFF, NULL);
}
void r600_fetch_shader(struct r600_vertex_element *ve)
void r600_fetch_shader(struct pipe_context *ctx,
struct r600_vertex_element *ve)
{
struct r600_pipe_state *rstate;
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
rstate = &ve->rstate;
rstate->id = R600_PIPE_STATE_FETCH_SHADER;
@ -1478,11 +1485,13 @@ void *r600_create_db_flush_dsa(struct r600_pipe_context *rctx)
return rstate;
}
void r600_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
void r600_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
{
rstate->id = R600_PIPE_STATE_RESOURCE;
rstate->nregs = 0;
r600_pipe_state_add_reg(rstate, R_038000_RESOURCE0_WORD0,
offset, 0xFFFFFFFF, rbuffer->bo);
r600_pipe_state_add_reg(rstate, R_038004_RESOURCE0_WORD1,
@ -1499,3 +1508,15 @@ void r600_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6,
0xC0000000, 0xFFFFFFFF, NULL);
}
void r600_pipe_mod_buffer_resource(struct r600_pipe_state *rstate,
struct r600_resource *rbuffer,
unsigned offset, unsigned stride)
{
rstate->nregs = 0;
r600_pipe_state_mod_reg_bo(rstate, offset, rbuffer->bo);
r600_pipe_state_mod_reg(rstate, rbuffer->bo_size - offset - 1);
r600_pipe_state_mod_reg(rstate, S_038008_ENDIAN_SWAP(r600_endian_swap(32)) |
S_038008_STRIDE(stride));
rstate->nregs = 7;
}

View file

@ -32,43 +32,33 @@
#include "r600_pipe.h"
#include "r600d.h"
static void r600_spi_update(struct r600_pipe_context *rctx);
static int r600_conv_pipe_prim(unsigned pprim, unsigned *prim)
{
switch (pprim) {
case PIPE_PRIM_POINTS:
*prim = V_008958_DI_PT_POINTLIST;
return 0;
case PIPE_PRIM_LINES:
*prim = V_008958_DI_PT_LINELIST;
return 0;
case PIPE_PRIM_LINE_STRIP:
*prim = V_008958_DI_PT_LINESTRIP;
return 0;
case PIPE_PRIM_LINE_LOOP:
*prim = V_008958_DI_PT_LINELOOP;
return 0;
case PIPE_PRIM_TRIANGLES:
*prim = V_008958_DI_PT_TRILIST;
return 0;
case PIPE_PRIM_TRIANGLE_STRIP:
*prim = V_008958_DI_PT_TRISTRIP;
return 0;
case PIPE_PRIM_TRIANGLE_FAN:
*prim = V_008958_DI_PT_TRIFAN;
return 0;
case PIPE_PRIM_POLYGON:
*prim = V_008958_DI_PT_POLYGON;
return 0;
case PIPE_PRIM_QUADS:
*prim = V_008958_DI_PT_QUADLIST;
return 0;
case PIPE_PRIM_QUAD_STRIP:
*prim = V_008958_DI_PT_QUADSTRIP;
return 0;
default:
static const int prim_conv[] = {
V_008958_DI_PT_POINTLIST,
V_008958_DI_PT_LINELIST,
V_008958_DI_PT_LINELOOP,
V_008958_DI_PT_LINESTRIP,
V_008958_DI_PT_TRILIST,
V_008958_DI_PT_TRISTRIP,
V_008958_DI_PT_TRIFAN,
V_008958_DI_PT_QUADLIST,
V_008958_DI_PT_QUADSTRIP,
V_008958_DI_PT_POLYGON,
-1,
-1,
-1,
-1
};
*prim = prim_conv[pprim];
if (*prim == -1) {
fprintf(stderr, "%s:%d unsupported %d\n", __func__, __LINE__, pprim);
return -1;
}
return 0;
}
/* common state between evergreen and r600 */
@ -121,6 +111,8 @@ void r600_bind_rs_state(struct pipe_context *ctx, void *state)
} else {
r600_polygon_offset_update(rctx);
}
if (rctx->ps_shader && rctx->vs_shader)
r600_spi_update(rctx);
}
void r600_delete_rs_state(struct pipe_context *ctx, void *state)
@ -281,6 +273,8 @@ void r600_bind_ps_shader(struct pipe_context *ctx, void *state)
if (state) {
r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_shader->rstate);
}
if (rctx->ps_shader && rctx->vs_shader)
r600_spi_update(rctx);
}
void r600_bind_vs_shader(struct pipe_context *ctx, void *state)
@ -292,6 +286,8 @@ void r600_bind_vs_shader(struct pipe_context *ctx, void *state)
if (state) {
r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_shader->rstate);
}
if (rctx->ps_shader && rctx->vs_shader)
r600_spi_update(rctx);
}
void r600_delete_ps_shader(struct pipe_context *ctx, void *state)
@ -338,14 +334,27 @@ static void r600_update_alpha_ref(struct r600_pipe_context *rctx)
}
/* FIXME optimize away spi update when it's not needed */
static void r600_spi_update(struct r600_pipe_context *rctx, unsigned prim)
static void r600_spi_block_init(struct r600_pipe_context *rctx, struct r600_pipe_state *rstate)
{
int i;
rstate->nregs = 0;
rstate->id = R600_PIPE_STATE_SPI;
for (i = 0; i < 32; i++) {
r600_pipe_state_add_reg(rstate, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, 0, 0xFFFFFFFF, NULL);
}
}
static void r600_spi_update(struct r600_pipe_context *rctx)
{
struct r600_pipe_shader *shader = rctx->ps_shader;
struct r600_pipe_state rstate;
struct r600_pipe_state *rstate = &rctx->spi;
struct r600_shader *rshader = &shader->shader;
unsigned i, tmp;
rstate.nregs = 0;
if (rctx->spi.id == 0)
r600_spi_block_init(rctx, &rctx->spi);
rstate->nregs = 0;
for (i = 0; i < rshader->ninput; i++) {
tmp = S_028644_SEMANTIC(r600_find_vs_semantic_index(&rctx->vs_shader->shader, rshader, i));
@ -368,15 +377,10 @@ static void r600_spi_update(struct r600_pipe_context *rctx, unsigned prim)
tmp |= S_028644_SEL_LINEAR(1);
}
r600_pipe_state_add_reg(&rstate, R_028644_SPI_PS_INPUT_CNTL_0 + i * 4, tmp, 0xFFFFFFFF, NULL);
r600_pipe_state_mod_reg(rstate, tmp);
}
if (prim == PIPE_PRIM_QUADS || prim == PIPE_PRIM_QUAD_STRIP || prim == PIPE_PRIM_POLYGON) {
r600_pipe_state_add_reg(&rstate, R_028814_PA_SU_SC_MODE_CNTL,
S_028814_PROVOKING_VTX_LAST(1),
S_028814_PROVOKING_VTX_LAST(1), NULL);
}
r600_context_pipe_state_set(&rctx->ctx, &rstate);
r600_context_pipe_state_set(&rctx->ctx, rstate);
}
void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
@ -410,13 +414,19 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_const_buffer);
rstate = &rctx->vs_const_buffer_resource[index];
rstate->id = R600_PIPE_STATE_RESOURCE;
rstate->nregs = 0;
if (!rstate->id) {
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_init_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
} else {
r600_pipe_init_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
}
}
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_set_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
evergreen_pipe_mod_buffer_resource(rstate, &rbuffer->r, offset, 16);
evergreen_context_pipe_state_set_vs_resource(&rctx->ctx, rstate, index);
} else {
r600_pipe_set_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
r600_pipe_mod_buffer_resource(rstate, &rbuffer->r, offset, 16);
r600_context_pipe_state_set_vs_resource(&rctx->ctx, rstate, index);
}
break;
@ -432,13 +442,18 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_const_buffer);
rstate = &rctx->ps_const_buffer_resource[index];
rstate->id = R600_PIPE_STATE_RESOURCE;
rstate->nregs = 0;
if (!rstate->id) {
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_init_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
} else {
r600_pipe_init_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
}
}
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_set_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
evergreen_pipe_mod_buffer_resource(rstate, &rbuffer->r, offset, 16);
evergreen_context_pipe_state_set_ps_resource(&rctx->ctx, rstate, index);
} else {
r600_pipe_set_buffer_resource(rctx, rstate, &rbuffer->r, offset, 16);
r600_pipe_mod_buffer_resource(rstate, &rbuffer->r, offset, 16);
r600_context_pipe_state_set_ps_resource(&rctx->ctx, rstate, index);
}
break;
@ -468,8 +483,6 @@ static void r600_vertex_buffer_update(struct r600_pipe_context *rctx)
for (i = 0 ; i < count; i++) {
rstate = &rctx->fs_resource[i];
rstate->id = R600_PIPE_STATE_RESOURCE;
rstate->nregs = 0;
if (rctx->vertex_elements->vbuffer_need_offset) {
/* one resource per vertex elements */
@ -488,11 +501,19 @@ static void r600_vertex_buffer_update(struct r600_pipe_context *rctx)
continue;
offset += vertex_buffer->buffer_offset + r600_bo_offset(rbuffer->bo);
if (!rstate->id) {
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_init_buffer_resource(rctx, rstate, rbuffer, offset, vertex_buffer->stride);
} else {
r600_pipe_init_buffer_resource(rctx, rstate, rbuffer, offset, vertex_buffer->stride);
}
}
if (rctx->family >= CHIP_CEDAR) {
evergreen_pipe_set_buffer_resource(rctx, rstate, rbuffer, offset, vertex_buffer->stride);
evergreen_pipe_mod_buffer_resource(rstate, rbuffer, offset, vertex_buffer->stride);
evergreen_context_pipe_state_set_fs_resource(&rctx->ctx, rstate, i);
} else {
r600_pipe_set_buffer_resource(rctx, rstate, rbuffer, offset, vertex_buffer->stride);
r600_pipe_mod_buffer_resource(rstate, rbuffer, offset, vertex_buffer->stride);
r600_context_pipe_state_set_fs_resource(&rctx->ctx, rstate, i);
}
}
@ -504,7 +525,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
struct r600_resource *rbuffer;
u32 vgt_dma_index_type, vgt_dma_swap_mode, vgt_draw_initiator, mask;
struct r600_draw rdraw;
struct r600_pipe_state vgt;
struct r600_drawl draw = {};
unsigned prim;
@ -576,23 +596,41 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
}
r600_update_alpha_ref(rctx);
r600_spi_update(rctx, draw.info.mode);
mask = 0;
for (int i = 0; i < rctx->framebuffer.nr_cbufs; i++) {
mask |= (0xF << (i * 4));
}
vgt.id = R600_PIPE_STATE_VGT;
vgt.nregs = 0;
r600_pipe_state_add_reg(&vgt, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_028408_VGT_INDX_OFFSET, draw.info.index_bias, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_028400_VGT_MAX_VTX_INDX, draw.info.max_index, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_028404_VGT_MIN_VTX_INDX, draw.info.min_index, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&vgt, R_03CFF4_SQ_VTX_START_INST_LOC, draw.info.start_instance, 0xFFFFFFFF, NULL);
r600_context_pipe_state_set(&rctx->ctx, &vgt);
if (rctx->vgt.id != R600_PIPE_STATE_VGT) {
rctx->vgt.id = R600_PIPE_STATE_VGT;
rctx->vgt.nregs = 0;
r600_pipe_state_add_reg(&rctx->vgt, R_008958_VGT_PRIMITIVE_TYPE, prim, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_028238_CB_TARGET_MASK, rctx->cb_target_mask & mask, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_028400_VGT_MAX_VTX_INDX, draw.info.max_index, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_028404_VGT_MIN_VTX_INDX, draw.info.min_index, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_028408_VGT_INDX_OFFSET, draw.info.index_bias, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_03CFF4_SQ_VTX_START_INST_LOC, draw.info.start_instance, 0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(&rctx->vgt, R_028814_PA_SU_SC_MODE_CNTL,
0,
S_028814_PROVOKING_VTX_LAST(1), NULL);
}
rctx->vgt.nregs = 0;
r600_pipe_state_mod_reg(&rctx->vgt, prim);
r600_pipe_state_mod_reg(&rctx->vgt, rctx->cb_target_mask & mask);
r600_pipe_state_mod_reg(&rctx->vgt, draw.info.max_index);
r600_pipe_state_mod_reg(&rctx->vgt, draw.info.min_index);
r600_pipe_state_mod_reg(&rctx->vgt, draw.info.index_bias);
r600_pipe_state_mod_reg(&rctx->vgt, 0);
r600_pipe_state_mod_reg(&rctx->vgt, draw.info.start_instance);
if (draw.info.mode == PIPE_PRIM_QUADS || draw.info.mode == PIPE_PRIM_QUAD_STRIP || draw.info.mode == PIPE_PRIM_POLYGON) {
r600_pipe_state_mod_reg(&rctx->vgt, S_028814_PROVOKING_VTX_LAST(1));
}
r600_context_pipe_state_set(&rctx->ctx, &rctx->vgt);
rdraw.vgt_num_indices = draw.info.count;
rdraw.vgt_num_instances = draw.info.instance_count;
@ -621,3 +659,39 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
u_vbuf_mgr_draw_end(rctx->vbuf_mgr);
}
void _r600_pipe_state_add_reg(struct r600_context *ctx,
struct r600_pipe_state *state,
u32 offset, u32 value, u32 mask,
u32 range_id, u32 block_id,
struct r600_bo *bo)
{
struct r600_range *range;
struct r600_block *block;
range = &ctx->range[range_id];
block = range->blocks[block_id];
state->regs[state->nregs].block = block;
state->regs[state->nregs].id = (offset - block->start_offset) >> 2;
state->regs[state->nregs].value = value;
state->regs[state->nregs].mask = mask;
state->regs[state->nregs].bo = bo;
state->nregs++;
assert(state->nregs < R600_BLOCK_MAX_REG);
}
void r600_pipe_state_add_reg_noblock(struct r600_pipe_state *state,
u32 offset, u32 value, u32 mask,
struct r600_bo *bo)
{
state->regs[state->nregs].id = offset;
state->regs[state->nregs].block = NULL;
state->regs[state->nregs].value = value;
state->regs[state->nregs].mask = mask;
state->regs[state->nregs].bo = bo;
state->nregs++;
assert(state->nregs < R600_BLOCK_MAX_REG);
}

View file

@ -36,8 +36,7 @@ softpipe_fence_reference(struct pipe_screen *screen,
struct pipe_fence_handle **ptr,
struct pipe_fence_handle *fence)
{
assert(!*ptr);
assert(!fence);
*ptr = fence;
}
@ -45,7 +44,7 @@ static boolean
softpipe_fence_signalled(struct pipe_screen *screen,
struct pipe_fence_handle *fence)
{
assert(!fence);
assert(fence);
return TRUE;
}
@ -55,7 +54,7 @@ softpipe_fence_finish(struct pipe_screen *screen,
struct pipe_fence_handle *fence,
uint64_t timeout)
{
assert(!fence);
assert(fence);
return TRUE;
}

View file

@ -96,9 +96,9 @@ softpipe_flush( struct pipe_context *pipe,
++frame_no;
}
#endif
if (fence)
*fence = NULL;
*fence = (void*)(intptr_t)1;
}
void

View file

@ -1422,6 +1422,40 @@ static void trace_redefine_user_buffer(struct pipe_context *_context,
}
static void trace_render_condition(struct pipe_context *_context,
struct pipe_query *query,
uint mode)
{
struct trace_context *tr_context = trace_context(_context);
struct pipe_context *context = tr_context->pipe;
trace_dump_call_begin("pipe_context", "render_condition");
trace_dump_arg(ptr, context);
trace_dump_arg(ptr, query);
trace_dump_arg(uint, mode);
trace_dump_call_end();
context->render_condition(context, query, mode);
}
static void trace_texture_barrier(struct pipe_context *_context)
{
struct trace_context *tr_context = trace_context(_context);
struct pipe_context *context = tr_context->pipe;
trace_dump_call_begin("pipe_context", "texture_barrier");
trace_dump_arg(ptr, context);
trace_dump_call_end();
context->texture_barrier(context);
}
static const struct debug_named_value rbug_blocker_flags[] = {
{"before", 1, NULL},
{"after", 2, NULL},
@ -1499,6 +1533,8 @@ trace_context_create(struct trace_screen *tr_scr,
tr_ctx->base.clear_render_target = trace_context_clear_render_target;
tr_ctx->base.clear_depth_stencil = trace_context_clear_depth_stencil;
tr_ctx->base.flush = trace_context_flush;
tr_ctx->base.render_condition = pipe->render_condition ? trace_render_condition : NULL;
tr_ctx->base.texture_barrier = pipe->texture_barrier ? trace_texture_barrier : NULL;
tr_ctx->base.get_transfer = trace_context_get_transfer;
tr_ctx->base.transfer_destroy = trace_context_transfer_destroy;

View file

@ -46,7 +46,7 @@
#ifndef P_CONFIG_H_
#define P_CONFIG_H_
#include <limits.h>
/*
* Compiler
*/

View file

@ -91,6 +91,7 @@ struct sm4_parser
break;
case SM4_OPERAND_COMPNUM_1:
op.comps = 1;
op.swizzle[1] = op.swizzle[2] = op.swizzle[3] = 0;
break;
case SM4_OPERAND_COMPNUM_4:
op.comps = 4;
@ -143,7 +144,7 @@ struct sm4_parser
repr = optok.index2_repr;
else
fail("Unhandled operand index representation");
op.indices[0].disp = 0;
op.indices[i].disp = 0;
// TODO: is disp supposed to be signed here??
switch(repr)
{

View file

@ -92,6 +92,8 @@ stw_framebuffer_destroy_locked(
stw_st_destroy_framebuffer_locked(fb->stfb);
ReleaseDC(fb->hWnd, fb->hDC);
pipe_mutex_unlock( fb->mutex );
pipe_mutex_destroy( fb->mutex );
@ -168,6 +170,7 @@ stw_framebuffer_get_size( struct stw_framebuffer *fb )
#if 0
debug_printf("\n");
debug_printf("%s: hwnd = %p\n", __FUNCTION__, fb->hWnd);
debug_printf("%s: client_position = (%li, %li)\n",
__FUNCTION__, client_pos.x, client_pos.y);
debug_printf("%s: window_rect = (%li, %li) - (%li, %li)\n",
@ -251,7 +254,11 @@ stw_framebuffer_create(
if (fb == NULL)
return NULL;
fb->hDC = hdc;
/* Applications use, create, destroy device contexts, so the hdc passed is. We create our own DC
* because we need one for single buffered visuals.
*/
fb->hDC = GetDC(hWnd);
fb->hWnd = hWnd;
fb->iPixelFormat = iPixelFormat;
@ -378,24 +385,13 @@ stw_framebuffer_from_hdc_locked(
HDC hdc )
{
HWND hwnd;
struct stw_framebuffer *fb;
/*
* Some applications create and use several HDCs for the same window, so
* looking up the framebuffer by the HDC is not reliable. Use HWND whenever
* possible.
*/
hwnd = WindowFromDC(hdc);
if(hwnd)
return stw_framebuffer_from_hwnd_locked(hwnd);
for (fb = stw_dev->fb_head; fb != NULL; fb = fb->next)
if (fb->hDC == hdc) {
pipe_mutex_lock(fb->mutex);
break;
}
if (!hwnd) {
return NULL;
}
return fb;
return stw_framebuffer_from_hwnd_locked(hwnd);
}
@ -607,7 +603,7 @@ DrvSwapBuffers(
stw_flush_current_locked(fb);
return stw_st_swap_framebuffer_locked(fb->stfb);
return stw_st_swap_framebuffer_locked(hdc, fb->stfb);
}

View file

@ -154,7 +154,8 @@ stw_st_framebuffer_validate(struct st_framebuffer_iface *stfb,
* Present an attachment of the framebuffer.
*/
static boolean
stw_st_framebuffer_present_locked(struct st_framebuffer_iface *stfb,
stw_st_framebuffer_present_locked(HDC hdc,
struct st_framebuffer_iface *stfb,
enum st_attachment_type statt)
{
struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
@ -162,7 +163,7 @@ stw_st_framebuffer_present_locked(struct st_framebuffer_iface *stfb,
resource = stwfb->textures[statt];
if (resource) {
stw_framebuffer_present_locked(stwfb->fb->hDC, stwfb->fb, resource);
stw_framebuffer_present_locked(hdc, stwfb->fb, resource);
}
return TRUE;
@ -176,7 +177,7 @@ stw_st_framebuffer_flush_front(struct st_framebuffer_iface *stfb,
pipe_mutex_lock(stwfb->fb->mutex);
return stw_st_framebuffer_present_locked(&stwfb->base, statt);
return stw_st_framebuffer_present_locked(stwfb->fb->hDC, &stwfb->base, statt);
}
/**
@ -220,7 +221,7 @@ stw_st_destroy_framebuffer_locked(struct st_framebuffer_iface *stfb)
* Swap the buffers of the given framebuffer.
*/
boolean
stw_st_swap_framebuffer_locked(struct st_framebuffer_iface *stfb)
stw_st_swap_framebuffer_locked(HDC hdc, struct st_framebuffer_iface *stfb)
{
struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
unsigned front = ST_ATTACHMENT_FRONT_LEFT, back = ST_ATTACHMENT_BACK_LEFT;
@ -245,7 +246,7 @@ stw_st_swap_framebuffer_locked(struct st_framebuffer_iface *stfb)
stwfb->texture_mask = mask;
front = ST_ATTACHMENT_FRONT_LEFT;
return stw_st_framebuffer_present_locked(&stwfb->base, front);
return stw_st_framebuffer_present_locked(hdc, &stwfb->base, front);
}
/**

View file

@ -28,6 +28,8 @@
#ifndef STW_ST_H
#define STW_ST_H
#include <windows.h>
#include "state_tracker/st_api.h"
struct stw_framebuffer;
@ -42,6 +44,6 @@ void
stw_st_destroy_framebuffer_locked(struct st_framebuffer_iface *stfb);
boolean
stw_st_swap_framebuffer_locked(struct st_framebuffer_iface *stfb);
stw_st_swap_framebuffer_locked(HDC hdc, struct st_framebuffer_iface *stfb);
#endif /* STW_ST_H */

View file

@ -75,7 +75,7 @@ LIBNAME_STAGING = $(TOP)/$(LIB_DIR)/gallium/$(LIBNAME)
default: depend symlinks $(TOP)/$(LIB_DIR)/gallium $(LIBNAME) $(LIBNAME_STAGING)
$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(PIPE_DRIVERS) Makefile \
$(TOP)/src/mesa/drivers/dri/Makefile.template $(TOP)/src/mesa/drivers/dri/common/dri_test.o
$(TOP)/src/mesa/drivers/dri/Makefile.targets $(TOP)/src/mesa/drivers/dri/common/dri_test.o
$(MKLIB) -o $@.tmp -noprefix -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
$(OBJECTS) $(PIPE_DRIVERS) \
-Wl,--start-group $(MESA_MODULES) -Wl,--end-group \

View file

@ -52,7 +52,7 @@ egl_LIBS += $(TOP)/src/gallium/winsys/sw/wayland/libws_wayland.a
egl_LIBS += $(TOP)/src/egl/wayland/wayland-drm/libwayland-drm.a
endif
ifneq ($(findstring drm, $(EGL_PLATFORMS)),)
egl_SYS += $(LIBDRM_LIB)
egl_SYS += $(LIBUDEV_LIBS) $(LIBDRM_LIB)
endif
ifneq ($(findstring fbdev, $(EGL_PLATFORMS)),)
egl_LIBS += $(TOP)/src/gallium/winsys/sw/fbdev/libfbdev.a

View file

@ -57,6 +57,19 @@ static const struct r600_reg evergreen_config_reg_list[] = {
{R_00913C_SPI_CONFIG_CNTL_1, 0, 0, 0},
};
static const struct r600_reg cayman_config_reg_list[] = {
{R_008958_VGT_PRIMITIVE_TYPE, 0, 0, 0},
{R_008A14_PA_CL_ENHANCE, 0, 0, 0},
{R_008C00_SQ_CONFIG, 0, 0, 0},
{R_008C04_SQ_GPR_RESOURCE_MGMT_1, 0, 0, 0},
{CM_R_008C10_SQ_GLOBAL_GPR_RESOURCE_MGMT_1, 0, 0, 0},
{CM_R_008C14_SQ_GLOBAL_GPR_RESOURCE_MGMT_2, 0, 0, 0},
{R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0, 0, 0},
{R_009100_SPI_CONFIG_CNTL, 0, 0, 0},
{R_00913C_SPI_CONFIG_CNTL_1, 0, 0, 0},
};
static const struct r600_reg evergreen_ctl_const_list[] = {
{R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 0, 0},
{R_03CFF4_SQ_VTX_START_INST_LOC, 0, 0, 0},
@ -189,6 +202,7 @@ static const struct r600_reg evergreen_context_reg_list[] = {
{R_028610_PA_CL_UCP5_Y, 0, 0, 0},
{R_028614_PA_CL_UCP5_Z, 0, 0, 0},
{R_028618_PA_CL_UCP5_W, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_02861C_SPI_VS_OUT_ID_0, 0, 0, 0},
{R_028620_SPI_VS_OUT_ID_1, 0, 0, 0},
{R_028624_SPI_VS_OUT_ID_2, 0, 0, 0},
@ -199,6 +213,7 @@ static const struct r600_reg evergreen_context_reg_list[] = {
{R_028638_SPI_VS_OUT_ID_7, 0, 0, 0},
{R_02863C_SPI_VS_OUT_ID_8, 0, 0, 0},
{R_028640_SPI_VS_OUT_ID_9, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028644_SPI_PS_INPUT_CNTL_0, 0, 0, 0},
{R_028648_SPI_PS_INPUT_CNTL_1, 0, 0, 0},
{R_02864C_SPI_PS_INPUT_CNTL_2, 0, 0, 0},
@ -231,6 +246,7 @@ static const struct r600_reg evergreen_context_reg_list[] = {
{R_0286B8_SPI_PS_INPUT_CNTL_29, 0, 0, 0},
{R_0286BC_SPI_PS_INPUT_CNTL_30, 0, 0, 0},
{R_0286C0_SPI_PS_INPUT_CNTL_31, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_0286C4_SPI_VS_OUT_CONFIG, 0, 0, 0},
{R_0286C8_SPI_THREAD_GROUPING, 0, 0, 0},
{R_0286CC_SPI_PS_IN_CONTROL_0, 0, 0, 0},
@ -421,6 +437,385 @@ static const struct r600_reg evergreen_context_reg_list[] = {
{R_028EAC_CB_COLOR11_DIM, 0, 0, 0},
};
static const struct r600_reg cayman_context_reg_list[] = {
{R_028000_DB_RENDER_CONTROL, 0, 0, 0},
{R_028004_DB_COUNT_CONTROL, 0, 0, 0},
{R_028008_DB_DEPTH_VIEW, 0, 0, 0},
{R_02800C_DB_RENDER_OVERRIDE, 0, 0, 0},
{R_028010_DB_RENDER_OVERRIDE2, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028014_DB_HTILE_DATA_BASE, REG_FLAG_NEED_BO, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028028_DB_STENCIL_CLEAR, 0, 0, 0},
{R_02802C_DB_DEPTH_CLEAR, 0, 0, 0},
{R_028030_PA_SC_SCREEN_SCISSOR_TL, 0, 0, 0},
{R_028034_PA_SC_SCREEN_SCISSOR_BR, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028040_DB_Z_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028044_DB_STENCIL_INFO, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028048_DB_Z_READ_BASE, REG_FLAG_NEED_BO, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_02804C_DB_STENCIL_READ_BASE, REG_FLAG_NEED_BO, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028050_DB_Z_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028054_DB_STENCIL_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028058_DB_DEPTH_SIZE, 0, 0, 0},
{R_02805C_DB_DEPTH_SLICE, 0, 0, 0},
{R_028140_ALU_CONST_BUFFER_SIZE_PS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
{R_028180_ALU_CONST_BUFFER_SIZE_VS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
{R_028200_PA_SC_WINDOW_OFFSET, 0, 0, 0},
{R_028204_PA_SC_WINDOW_SCISSOR_TL, 0, 0, 0},
{R_028208_PA_SC_WINDOW_SCISSOR_BR, 0, 0, 0},
{R_02820C_PA_SC_CLIPRECT_RULE, 0, 0, 0},
{R_028210_PA_SC_CLIPRECT_0_TL, 0, 0, 0},
{R_028214_PA_SC_CLIPRECT_0_BR, 0, 0, 0},
{R_028218_PA_SC_CLIPRECT_1_TL, 0, 0, 0},
{R_02821C_PA_SC_CLIPRECT_1_BR, 0, 0, 0},
{R_028220_PA_SC_CLIPRECT_2_TL, 0, 0, 0},
{R_028224_PA_SC_CLIPRECT_2_BR, 0, 0, 0},
{R_028228_PA_SC_CLIPRECT_3_TL, 0, 0, 0},
{R_02822C_PA_SC_CLIPRECT_3_BR, 0, 0, 0},
{R_028230_PA_SC_EDGERULE, 0, 0, 0},
{R_028234_PA_SU_HARDWARE_SCREEN_OFFSET, 0, 0, 0},
{R_028238_CB_TARGET_MASK, 0, 0, 0},
{R_02823C_CB_SHADER_MASK, 0, 0, 0},
{R_028240_PA_SC_GENERIC_SCISSOR_TL, 0, 0, 0},
{R_028244_PA_SC_GENERIC_SCISSOR_BR, 0, 0, 0},
{R_028250_PA_SC_VPORT_SCISSOR_0_TL, 0, 0, 0},
{R_028254_PA_SC_VPORT_SCISSOR_0_BR, 0, 0, 0},
{R_028350_SX_MISC, 0, 0, 0},
{R_028380_SQ_VTX_SEMANTIC_0, 0, 0, 0},
{R_028384_SQ_VTX_SEMANTIC_1, 0, 0, 0},
{R_028388_SQ_VTX_SEMANTIC_2, 0, 0, 0},
{R_02838C_SQ_VTX_SEMANTIC_3, 0, 0, 0},
{R_028390_SQ_VTX_SEMANTIC_4, 0, 0, 0},
{R_028394_SQ_VTX_SEMANTIC_5, 0, 0, 0},
{R_028398_SQ_VTX_SEMANTIC_6, 0, 0, 0},
{R_02839C_SQ_VTX_SEMANTIC_7, 0, 0, 0},
{R_0283A0_SQ_VTX_SEMANTIC_8, 0, 0, 0},
{R_0283A4_SQ_VTX_SEMANTIC_9, 0, 0, 0},
{R_0283A8_SQ_VTX_SEMANTIC_10, 0, 0, 0},
{R_0283AC_SQ_VTX_SEMANTIC_11, 0, 0, 0},
{R_0283B0_SQ_VTX_SEMANTIC_12, 0, 0, 0},
{R_0283B4_SQ_VTX_SEMANTIC_13, 0, 0, 0},
{R_0283B8_SQ_VTX_SEMANTIC_14, 0, 0, 0},
{R_0283BC_SQ_VTX_SEMANTIC_15, 0, 0, 0},
{R_0283C0_SQ_VTX_SEMANTIC_16, 0, 0, 0},
{R_0283C4_SQ_VTX_SEMANTIC_17, 0, 0, 0},
{R_0283C8_SQ_VTX_SEMANTIC_18, 0, 0, 0},
{R_0283CC_SQ_VTX_SEMANTIC_19, 0, 0, 0},
{R_0283D0_SQ_VTX_SEMANTIC_20, 0, 0, 0},
{R_0283D4_SQ_VTX_SEMANTIC_21, 0, 0, 0},
{R_0283D8_SQ_VTX_SEMANTIC_22, 0, 0, 0},
{R_0283DC_SQ_VTX_SEMANTIC_23, 0, 0, 0},
{R_0283E0_SQ_VTX_SEMANTIC_24, 0, 0, 0},
{R_0283E4_SQ_VTX_SEMANTIC_25, 0, 0, 0},
{R_0283E8_SQ_VTX_SEMANTIC_26, 0, 0, 0},
{R_0283EC_SQ_VTX_SEMANTIC_27, 0, 0, 0},
{R_0283F0_SQ_VTX_SEMANTIC_28, 0, 0, 0},
{R_0283F4_SQ_VTX_SEMANTIC_29, 0, 0, 0},
{R_0283F8_SQ_VTX_SEMANTIC_30, 0, 0, 0},
{R_0283FC_SQ_VTX_SEMANTIC_31, 0, 0, 0},
{R_0282D0_PA_SC_VPORT_ZMIN_0, 0, 0, 0},
{R_0282D4_PA_SC_VPORT_ZMAX_0, 0, 0, 0},
{R_028400_VGT_MAX_VTX_INDX, 0, 0, 0},
{R_028404_VGT_MIN_VTX_INDX, 0, 0, 0},
{R_028408_VGT_INDX_OFFSET, 0, 0, 0},
{R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, 0, 0, 0},
{R_028410_SX_ALPHA_TEST_CONTROL, 0, 0, 0},
{R_028414_CB_BLEND_RED, 0, 0, 0},
{R_028418_CB_BLEND_GREEN, 0, 0, 0},
{R_02841C_CB_BLEND_BLUE, 0, 0, 0},
{R_028420_CB_BLEND_ALPHA, 0, 0, 0},
{R_028430_DB_STENCILREFMASK, 0, 0, 0},
{R_028434_DB_STENCILREFMASK_BF, 0, 0, 0},
{R_028438_SX_ALPHA_REF, 0, 0, 0},
{R_02843C_PA_CL_VPORT_XSCALE_0, 0, 0, 0},
{R_028440_PA_CL_VPORT_XOFFSET_0, 0, 0, 0},
{R_028444_PA_CL_VPORT_YSCALE_0, 0, 0, 0},
{R_028448_PA_CL_VPORT_YOFFSET_0, 0, 0, 0},
{R_02844C_PA_CL_VPORT_ZSCALE_0, 0, 0, 0},
{R_028450_PA_CL_VPORT_ZOFFSET_0, 0, 0, 0},
{R_0285BC_PA_CL_UCP0_X, 0, 0, 0},
{R_0285C0_PA_CL_UCP0_Y, 0, 0, 0},
{R_0285C4_PA_CL_UCP0_Z, 0, 0, 0},
{R_0285C8_PA_CL_UCP0_W, 0, 0, 0},
{R_0285CC_PA_CL_UCP1_X, 0, 0, 0},
{R_0285D0_PA_CL_UCP1_Y, 0, 0, 0},
{R_0285D4_PA_CL_UCP1_Z, 0, 0, 0},
{R_0285D8_PA_CL_UCP1_W, 0, 0, 0},
{R_0285DC_PA_CL_UCP2_X, 0, 0, 0},
{R_0285E0_PA_CL_UCP2_Y, 0, 0, 0},
{R_0285E4_PA_CL_UCP2_Z, 0, 0, 0},
{R_0285E8_PA_CL_UCP2_W, 0, 0, 0},
{R_0285EC_PA_CL_UCP3_X, 0, 0, 0},
{R_0285F0_PA_CL_UCP3_Y, 0, 0, 0},
{R_0285F4_PA_CL_UCP3_Z, 0, 0, 0},
{R_0285F8_PA_CL_UCP3_W, 0, 0, 0},
{R_0285FC_PA_CL_UCP4_X, 0, 0, 0},
{R_028600_PA_CL_UCP4_Y, 0, 0, 0},
{R_028604_PA_CL_UCP4_Z, 0, 0, 0},
{R_028608_PA_CL_UCP4_W, 0, 0, 0},
{R_02860C_PA_CL_UCP5_X, 0, 0, 0},
{R_028610_PA_CL_UCP5_Y, 0, 0, 0},
{R_028614_PA_CL_UCP5_Z, 0, 0, 0},
{R_028618_PA_CL_UCP5_W, 0, 0, 0},
{R_02861C_SPI_VS_OUT_ID_0, 0, 0, 0},
{R_028620_SPI_VS_OUT_ID_1, 0, 0, 0},
{R_028624_SPI_VS_OUT_ID_2, 0, 0, 0},
{R_028628_SPI_VS_OUT_ID_3, 0, 0, 0},
{R_02862C_SPI_VS_OUT_ID_4, 0, 0, 0},
{R_028630_SPI_VS_OUT_ID_5, 0, 0, 0},
{R_028634_SPI_VS_OUT_ID_6, 0, 0, 0},
{R_028638_SPI_VS_OUT_ID_7, 0, 0, 0},
{R_02863C_SPI_VS_OUT_ID_8, 0, 0, 0},
{R_028640_SPI_VS_OUT_ID_9, 0, 0, 0},
{R_028644_SPI_PS_INPUT_CNTL_0, 0, 0, 0},
{R_028648_SPI_PS_INPUT_CNTL_1, 0, 0, 0},
{R_02864C_SPI_PS_INPUT_CNTL_2, 0, 0, 0},
{R_028650_SPI_PS_INPUT_CNTL_3, 0, 0, 0},
{R_028654_SPI_PS_INPUT_CNTL_4, 0, 0, 0},
{R_028658_SPI_PS_INPUT_CNTL_5, 0, 0, 0},
{R_02865C_SPI_PS_INPUT_CNTL_6, 0, 0, 0},
{R_028660_SPI_PS_INPUT_CNTL_7, 0, 0, 0},
{R_028664_SPI_PS_INPUT_CNTL_8, 0, 0, 0},
{R_028668_SPI_PS_INPUT_CNTL_9, 0, 0, 0},
{R_02866C_SPI_PS_INPUT_CNTL_10, 0, 0, 0},
{R_028670_SPI_PS_INPUT_CNTL_11, 0, 0, 0},
{R_028674_SPI_PS_INPUT_CNTL_12, 0, 0, 0},
{R_028678_SPI_PS_INPUT_CNTL_13, 0, 0, 0},
{R_02867C_SPI_PS_INPUT_CNTL_14, 0, 0, 0},
{R_028680_SPI_PS_INPUT_CNTL_15, 0, 0, 0},
{R_028684_SPI_PS_INPUT_CNTL_16, 0, 0, 0},
{R_028688_SPI_PS_INPUT_CNTL_17, 0, 0, 0},
{R_02868C_SPI_PS_INPUT_CNTL_18, 0, 0, 0},
{R_028690_SPI_PS_INPUT_CNTL_19, 0, 0, 0},
{R_028694_SPI_PS_INPUT_CNTL_20, 0, 0, 0},
{R_028698_SPI_PS_INPUT_CNTL_21, 0, 0, 0},
{R_02869C_SPI_PS_INPUT_CNTL_22, 0, 0, 0},
{R_0286A0_SPI_PS_INPUT_CNTL_23, 0, 0, 0},
{R_0286A4_SPI_PS_INPUT_CNTL_24, 0, 0, 0},
{R_0286A8_SPI_PS_INPUT_CNTL_25, 0, 0, 0},
{R_0286AC_SPI_PS_INPUT_CNTL_26, 0, 0, 0},
{R_0286B0_SPI_PS_INPUT_CNTL_27, 0, 0, 0},
{R_0286B4_SPI_PS_INPUT_CNTL_28, 0, 0, 0},
{R_0286B8_SPI_PS_INPUT_CNTL_29, 0, 0, 0},
{R_0286BC_SPI_PS_INPUT_CNTL_30, 0, 0, 0},
{R_0286C0_SPI_PS_INPUT_CNTL_31, 0, 0, 0},
{R_0286C4_SPI_VS_OUT_CONFIG, 0, 0, 0},
{R_0286C8_SPI_THREAD_GROUPING, 0, 0, 0},
{R_0286CC_SPI_PS_IN_CONTROL_0, 0, 0, 0},
{R_0286D0_SPI_PS_IN_CONTROL_1, 0, 0, 0},
{R_0286D4_SPI_INTERP_CONTROL_0, 0, 0, 0},
{R_0286D8_SPI_INPUT_Z, 0, 0, 0},
{R_0286DC_SPI_FOG_CNTL, 0, 0, 0},
{R_0286E0_SPI_BARYC_CNTL, 0, 0, 0},
{R_0286E4_SPI_PS_IN_CONTROL_2, 0, 0, 0},
{R_0286E8_SPI_COMPUTE_INPUT_CNTL, 0, 0, 0},
{R_028780_CB_BLEND0_CONTROL, 0, 0, 0},
{R_028784_CB_BLEND1_CONTROL, 0, 0, 0},
{R_028788_CB_BLEND2_CONTROL, 0, 0, 0},
{R_02878C_CB_BLEND3_CONTROL, 0, 0, 0},
{R_028790_CB_BLEND4_CONTROL, 0, 0, 0},
{R_028794_CB_BLEND5_CONTROL, 0, 0, 0},
{R_028798_CB_BLEND6_CONTROL, 0, 0, 0},
{R_02879C_CB_BLEND7_CONTROL, 0, 0, 0},
{R_028800_DB_DEPTH_CONTROL, 0, 0, 0},
{CM_R_028804_DB_EQAA, 0, 0, 0},
{R_028808_CB_COLOR_CONTROL, 0, 0, 0},
{R_02880C_DB_SHADER_CONTROL, 0, 0, 0},
{R_028810_PA_CL_CLIP_CNTL, 0, 0, 0},
{R_028814_PA_SU_SC_MODE_CNTL, 0, 0, 0},
{R_028818_PA_CL_VTE_CNTL, 0, 0, 0},
{R_02881C_PA_CL_VS_OUT_CNTL, 0, 0, 0},
{R_028820_PA_CL_NANINF_CNTL, 0, 0, 0},
{R_028838_SQ_DYN_GPR_RESOURCE_LIMIT_1, 0, 0, 0},
{R_028840_SQ_PGM_START_PS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
{R_028844_SQ_PGM_RESOURCES_PS, 0, 0, 0},
{R_028848_SQ_PGM_RESOURCES_2_PS, 0, 0, 0},
{R_02884C_SQ_PGM_EXPORTS_PS, 0, 0, 0},
{R_02885C_SQ_PGM_START_VS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
{R_028860_SQ_PGM_RESOURCES_VS, 0, 0, 0},
{R_028864_SQ_PGM_RESOURCES_2_VS, 0, 0, 0},
{R_0288A4_SQ_PGM_START_FS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
{R_0288A8_SQ_PGM_RESOURCES_FS, 0, 0, 0},
{CM_R_0288E8_SQ_LDS_ALLOC, 0, 0, 0},
{R_0288EC_SQ_LDS_ALLOC_PS, 0, 0, 0},
{R_028900_SQ_ESGS_RING_ITEMSIZE, 0, 0, 0},
{R_028904_SQ_GSVS_RING_ITEMSIZE, 0, 0, 0},
{R_028908_SQ_ESTMP_RING_ITEMSIZE, 0, 0, 0},
{R_02890C_SQ_GSTMP_RING_ITEMSIZE, 0, 0, 0},
{R_028910_SQ_VSTMP_RING_ITEMSIZE, 0, 0, 0},
{R_028914_SQ_PSTMP_RING_ITEMSIZE, 0, 0, 0},
{R_02891C_SQ_GS_VERT_ITEMSIZE, 0, 0, 0},
{R_028920_SQ_GS_VERT_ITEMSIZE_1, 0, 0, 0},
{R_028924_SQ_GS_VERT_ITEMSIZE_2, 0, 0, 0},
{R_028928_SQ_GS_VERT_ITEMSIZE_3, 0, 0, 0},
{R_028940_ALU_CONST_CACHE_PS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
{R_028980_ALU_CONST_CACHE_VS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
{R_028A00_PA_SU_POINT_SIZE, 0, 0, 0},
{R_028A04_PA_SU_POINT_MINMAX, 0, 0, 0},
{R_028A08_PA_SU_LINE_CNTL, 0, 0, 0},
{R_028A10_VGT_OUTPUT_PATH_CNTL, 0, 0, 0},
{R_028A14_VGT_HOS_CNTL, 0, 0, 0},
{R_028A18_VGT_HOS_MAX_TESS_LEVEL, 0, 0, 0},
{R_028A1C_VGT_HOS_MIN_TESS_LEVEL, 0, 0, 0},
{R_028A20_VGT_HOS_REUSE_DEPTH, 0, 0, 0},
{R_028A24_VGT_GROUP_PRIM_TYPE, 0, 0, 0},
{R_028A28_VGT_GROUP_FIRST_DECR, 0, 0, 0},
{R_028A2C_VGT_GROUP_DECR, 0, 0, 0},
{R_028A30_VGT_GROUP_VECT_0_CNTL, 0, 0, 0},
{R_028A34_VGT_GROUP_VECT_1_CNTL, 0, 0, 0},
{R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 0, 0, 0},
{R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 0, 0, 0},
{R_028A40_VGT_GS_MODE, 0, 0, 0},
{R_028A48_PA_SC_MODE_CNTL_0, 0, 0, 0},
{R_028A4C_PA_SC_MODE_CNTL_1, 0, 0, 0},
{R_028AB4_VGT_REUSE_OFF, 0, 0, 0},
{R_028AB8_VGT_VTX_CNT_EN, 0, 0, 0},
{R_028ABC_DB_HTILE_SURFACE, 0, 0, 0},
{R_028AC0_DB_SRESULTS_COMPARE_STATE0, 0, 0, 0},
{R_028AC4_DB_SRESULTS_COMPARE_STATE1, 0, 0, 0},
{R_028AC8_DB_PRELOAD_CONTROL, 0, 0, 0},
{R_028B54_VGT_SHADER_STAGES_EN, 0, 0, 0},
{R_028B70_DB_ALPHA_TO_MASK, 0, 0, 0},
{R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL, 0, 0, 0},
{R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0, 0, 0},
{R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE, 0, 0, 0},
{R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET, 0, 0, 0},
{R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE, 0, 0, 0},
{R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET, 0, 0, 0},
{R_028B94_VGT_STRMOUT_CONFIG, 0, 0, 0},
{R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0, 0, 0},
{CM_R_028BD4_PA_SC_CENTROID_PRIORITY_0, 0, 0, 0},
{CM_R_028BD8_PA_SC_CENTROID_PRIORITY_1, 0, 0, 0},
{CM_R_028BDC_PA_SC_LINE_CNTL, 0, 0, 0},
{CM_R_028BE0_PA_SC_AA_CONFIG, 0, 0, 0},
{CM_R_028BE4_PA_SU_VTX_CNTL, 0, 0, 0},
{CM_R_028BE8_PA_CL_GB_VERT_CLIP_ADJ, 0, 0, 0},
{CM_R_028BEC_PA_CL_GB_VERT_DISC_ADJ, 0, 0, 0},
{CM_R_028BF0_PA_CL_GB_HORZ_CLIP_ADJ, 0, 0, 0},
{CM_R_028BF4_PA_CL_GB_HORZ_DISC_ADJ, 0, 0, 0},
{CM_R_028BF8_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0, 0, 0, 0},
{CM_R_028BFC_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1, 0, 0, 0},
{CM_R_028C00_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2, 0, 0, 0},
{CM_R_028C04_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3, 0, 0, 0},
{CM_R_028C08_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0, 0, 0, 0},
{CM_R_028C0C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1, 0, 0, 0},
{CM_R_028C10_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2, 0, 0, 0},
{CM_R_028C14_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3, 0, 0, 0},
{CM_R_028C18_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0, 0, 0, 0},
{CM_R_028C1C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1, 0, 0, 0},
{CM_R_028C20_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2, 0, 0, 0},
{CM_R_028C24_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3, 0, 0, 0},
{CM_R_028C28_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0, 0, 0, 0},
{CM_R_028C2C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1, 0, 0, 0},
{CM_R_028C30_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2, 0, 0, 0},
{CM_R_028C34_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3, 0, 0, 0},
{CM_R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0, 0, 0, 0},
{CM_R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028C60_CB_COLOR0_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028C64_CB_COLOR0_PITCH, 0, 0, 0},
{R_028C68_CB_COLOR0_SLICE, 0, 0, 0},
{R_028C6C_CB_COLOR0_VIEW, 0, 0, 0},
{R_028C70_CB_COLOR0_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028C74_CB_COLOR0_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028C78_CB_COLOR0_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028C9C_CB_COLOR1_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028CA0_CB_COLOR1_PITCH, 0, 0, 0},
{R_028CA4_CB_COLOR1_SLICE, 0, 0, 0},
{R_028CA8_CB_COLOR1_VIEW, 0, 0, 0},
{R_028CAC_CB_COLOR1_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028CB0_CB_COLOR1_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028CB4_CB_COLOR1_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028CD8_CB_COLOR2_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028CDC_CB_COLOR2_PITCH, 0, 0, 0},
{R_028CE0_CB_COLOR2_SLICE, 0, 0, 0},
{R_028CE4_CB_COLOR2_VIEW, 0, 0, 0},
{R_028CE8_CB_COLOR2_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028CEC_CB_COLOR2_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028CF0_CB_COLOR2_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028D14_CB_COLOR3_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028D18_CB_COLOR3_PITCH, 0, 0, 0},
{R_028D1C_CB_COLOR3_SLICE, 0, 0, 0},
{R_028D20_CB_COLOR3_VIEW, 0, 0, 0},
{R_028D24_CB_COLOR3_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028D28_CB_COLOR3_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028D2C_CB_COLOR3_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028D50_CB_COLOR4_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028D54_CB_COLOR4_PITCH, 0, 0, 0},
{R_028D58_CB_COLOR4_SLICE, 0, 0, 0},
{R_028D5C_CB_COLOR4_VIEW, 0, 0, 0},
{R_028D60_CB_COLOR4_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028D64_CB_COLOR4_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028D68_CB_COLOR4_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028D8C_CB_COLOR5_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028D90_CB_COLOR5_PITCH, 0, 0, 0},
{R_028D94_CB_COLOR5_SLICE, 0, 0, 0},
{R_028D98_CB_COLOR5_VIEW, 0, 0, 0},
{R_028D9C_CB_COLOR5_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028DA0_CB_COLOR5_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028DA4_CB_COLOR5_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028DC8_CB_COLOR6_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028DCC_CB_COLOR6_PITCH, 0, 0, 0},
{R_028DD0_CB_COLOR6_SLICE, 0, 0, 0},
{R_028DD4_CB_COLOR6_VIEW, 0, 0, 0},
{R_028DD8_CB_COLOR6_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028DDC_CB_COLOR6_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028DE0_CB_COLOR6_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028E04_CB_COLOR7_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028E08_CB_COLOR7_PITCH, 0, 0, 0},
{R_028E0C_CB_COLOR7_SLICE, 0, 0, 0},
{R_028E10_CB_COLOR7_VIEW, 0, 0, 0},
{R_028E14_CB_COLOR7_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028E18_CB_COLOR7_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028E1C_CB_COLOR7_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028E40_CB_COLOR8_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028E44_CB_COLOR8_PITCH, 0, 0, 0},
{R_028E48_CB_COLOR8_SLICE, 0, 0, 0},
{R_028E4C_CB_COLOR8_VIEW, 0, 0, 0},
{R_028E50_CB_COLOR8_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028E54_CB_COLOR8_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028E58_CB_COLOR8_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028E5C_CB_COLOR9_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028E60_CB_COLOR9_PITCH, 0, 0, 0},
{R_028E64_CB_COLOR9_SLICE, 0, 0, 0},
{R_028E68_CB_COLOR9_VIEW, 0, 0, 0},
{R_028E6C_CB_COLOR9_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028E70_CB_COLOR9_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028E74_CB_COLOR9_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028E78_CB_COLOR10_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028E7C_CB_COLOR10_PITCH, 0, 0, 0},
{R_028E80_CB_COLOR10_SLICE, 0, 0, 0},
{R_028E84_CB_COLOR10_VIEW, 0, 0, 0},
{R_028E88_CB_COLOR10_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028E8C_CB_COLOR10_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028E90_CB_COLOR10_DIM, 0, 0, 0},
{GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
{R_028E94_CB_COLOR11_BASE, REG_FLAG_NEED_BO, 0, 0},
{R_028E98_CB_COLOR11_PITCH, 0, 0, 0},
{R_028E9C_CB_COLOR11_SLICE, 0, 0, 0},
{R_028EA0_CB_COLOR11_VIEW, 0, 0, 0},
{R_028EA4_CB_COLOR11_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
{R_028EA8_CB_COLOR11_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
{R_028EAC_CB_COLOR11_DIM, 0, 0, 0},
};
/* SHADER RESOURCE R600/R700 */
static int evergreen_state_resource_init(struct r600_context *ctx, u32 offset)
{
@ -483,8 +878,8 @@ static int evergreen_state_sampler_border_init(struct r600_context *ctx, u32 off
return r;
}
/* set proper offset */
range = &ctx->range[CTX_RANGE_ID(ctx, r600_shader_sampler_border[0].offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, r600_shader_sampler_border[0].offset)];
range = &ctx->range[CTX_RANGE_ID(r600_shader_sampler_border[0].offset)];
block = range->blocks[CTX_BLOCK_ID(r600_shader_sampler_border[0].offset)];
block->pm4[1] = (offset - EVERGREEN_CONFIG_REG_OFFSET) >> 2;
return 0;
}
@ -519,12 +914,20 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)
}
/* add blocks */
r = r600_context_add_block(ctx, evergreen_config_reg_list,
Elements(evergreen_config_reg_list), PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET);
if (r600_get_family(radeon) == CHIP_CAYMAN)
r = r600_context_add_block(ctx, cayman_config_reg_list,
Elements(cayman_config_reg_list), PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET);
else
r = r600_context_add_block(ctx, evergreen_config_reg_list,
Elements(evergreen_config_reg_list), PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET);
if (r)
goto out_err;
r = r600_context_add_block(ctx, evergreen_context_reg_list,
Elements(evergreen_context_reg_list), PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET);
if (r600_get_family(radeon) == CHIP_CAYMAN)
r = r600_context_add_block(ctx, cayman_context_reg_list,
Elements(cayman_context_reg_list), PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET);
else
r = r600_context_add_block(ctx, evergreen_context_reg_list,
Elements(evergreen_context_reg_list), PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET);
if (r)
goto out_err;
r = r600_context_add_block(ctx, evergreen_ctl_const_list,
@ -603,6 +1006,8 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)
r = -ENOMEM;
goto out_err;
}
r600_init_cs(ctx);
/* save 16dwords space for fence mecanism */
ctx->pm4_ndwords -= 16;
@ -646,8 +1051,8 @@ static inline void evergreen_context_pipe_state_set_sampler(struct r600_context
int i;
int dirty;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
if (state == NULL) {
block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
LIST_DELINIT(&block->list);
@ -684,8 +1089,8 @@ static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_c
int i;
int dirty;
range = &ctx->range[CTX_RANGE_ID(ctx, fake_offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, fake_offset)];
range = &ctx->range[CTX_RANGE_ID(fake_offset)];
block = range->blocks[CTX_BLOCK_ID(fake_offset)];
if (state == NULL) {
block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
LIST_DELINIT(&block->list);

View file

@ -320,6 +320,8 @@ static struct radeon *radeon_new(int fd, unsigned device)
case CHIP_CYPRESS:
case CHIP_HEMLOCK:
case CHIP_PALM:
case CHIP_SUMO:
case CHIP_SUMO2:
case CHIP_BARTS:
case CHIP_TURKS:
case CHIP_CAICOS:
@ -327,6 +329,11 @@ static struct radeon *radeon_new(int fd, unsigned device)
/* set default group bytes, overridden by tiling info ioctl */
radeon->tiling_info.group_bytes = 512;
break;
case CHIP_CAYMAN:
radeon->chip_class = CAYMAN;
/* set default group bytes, overridden by tiling info ioctl */
radeon->tiling_info.group_bytes = 512;
break;
default:
fprintf(stderr, "%s unknown or unsupported chipset 0x%04X\n",
__func__, radeon->device);

View file

@ -40,6 +40,19 @@
#define GROUP_FORCE_NEW_BLOCK 0
void r600_init_cs(struct r600_context *ctx)
{
/* R6xx requires this packet at the start of each command buffer */
if (ctx->radeon->family < CHIP_RV770) {
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_START_3D_CMDBUF, 0, 0);
ctx->pm4[ctx->pm4_cdwords++] = 0x00000000;
}
/* All asics require this one */
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_CONTEXT_CONTROL, 1, 0);
ctx->pm4[ctx->pm4_cdwords++] = 0x80000000;
ctx->pm4[ctx->pm4_cdwords++] = 0x80000000;
}
static void INLINE r600_context_update_fenced_list(struct r600_context *ctx)
{
for (int i = 0; i < ctx->creloc; i++) {
@ -82,6 +95,12 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,
continue;
}
/* ignore regs not on R600 on R600 */
if ((reg[i].flags & REG_FLAG_NOT_R600) && ctx->radeon->family == CHIP_R600) {
n = 1;
continue;
}
/* register that need relocation are in their own group */
/* find number of consecutive registers */
n = 0;
@ -102,14 +121,14 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,
}
ctx->nblocks++;
for (int j = 0; j < n; j++) {
range = &ctx->range[CTX_RANGE_ID(ctx, reg[i + j].offset)];
range = &ctx->range[CTX_RANGE_ID(reg[i + j].offset)];
/* create block table if it doesn't exist */
if (!range->blocks)
range->blocks = calloc(1 << HASH_SHIFT, sizeof(void *));
if (!range->blocks)
return -1;
range->blocks[CTX_BLOCK_ID(ctx, reg[i + j].offset)] = block;
range->blocks[CTX_BLOCK_ID(reg[i + j].offset)] = block;
}
/* initialize block */
@ -321,14 +340,14 @@ static const struct r600_reg r600_context_reg_list[] = {
{R_0286DC_SPI_FOG_CNTL, 0, 0, 0},
{R_0286E0_SPI_FOG_FUNC_SCALE, 0, 0, 0},
{R_0286E4_SPI_FOG_FUNC_BIAS, 0, 0, 0},
{R_028780_CB_BLEND0_CONTROL, 0, 0, 0},
{R_028784_CB_BLEND1_CONTROL, 0, 0, 0},
{R_028788_CB_BLEND2_CONTROL, 0, 0, 0},
{R_02878C_CB_BLEND3_CONTROL, 0, 0, 0},
{R_028790_CB_BLEND4_CONTROL, 0, 0, 0},
{R_028794_CB_BLEND5_CONTROL, 0, 0, 0},
{R_028798_CB_BLEND6_CONTROL, 0, 0, 0},
{R_02879C_CB_BLEND7_CONTROL, 0, 0, 0},
{R_028780_CB_BLEND0_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_028784_CB_BLEND1_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_028788_CB_BLEND2_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_02878C_CB_BLEND3_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_028790_CB_BLEND4_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_028794_CB_BLEND5_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_028798_CB_BLEND6_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_02879C_CB_BLEND7_CONTROL, REG_FLAG_NOT_R600, 0, 0},
{R_0287A0_CB_SHADER_CONTROL, 0, 0, 0},
{R_028800_DB_DEPTH_CONTROL, 0, 0, 0},
{R_028804_CB_BLEND_CONTROL, 0, 0, 0},
@ -624,8 +643,8 @@ void r600_context_fini(struct r600_context *ctx)
block = ctx->range[i].blocks[j];
if (block) {
for (int k = 0, offset = block->start_offset; k < block->nreg; k++, offset += 4) {
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
range->blocks[CTX_BLOCK_ID(ctx, offset)] = NULL;
range = &ctx->range[CTX_RANGE_ID(offset)];
range->blocks[CTX_BLOCK_ID(offset)] = NULL;
}
for (int k = 1; k <= block->nbo; k++) {
r600_bo_reference(ctx->radeon, &block->reloc[k].bo, NULL);
@ -774,6 +793,8 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)
r = -ENOMEM;
goto out_err;
}
r600_init_cs(ctx);
/* save 16dwords space for fence mecanism */
ctx->pm4_ndwords -= 16;
@ -886,8 +907,8 @@ void r600_context_reg(struct r600_context *ctx,
unsigned new_val;
int dirty;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
id = (offset - block->start_offset) >> 2;
dirty = block->status & R600_BLOCK_STATUS_DIRTY;
@ -919,7 +940,6 @@ void r600_context_dirty_block(struct r600_context *ctx, struct r600_block *block
void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state)
{
struct r600_range *range;
struct r600_block *block;
unsigned new_val;
int dirty;
@ -927,9 +947,8 @@ void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_stat
unsigned id, reloc_id;
struct r600_pipe_reg *reg = &state->regs[i];
range = &ctx->range[CTX_RANGE_ID(ctx, reg->offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, reg->offset)];
id = (reg->offset - block->start_offset) >> 2;
block = reg->block;
id = reg->id;
dirty = block->status & R600_BLOCK_STATUS_DIRTY;
@ -963,8 +982,8 @@ void r600_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_
int dirty;
int num_regs = ctx->radeon->chip_class >= EVERGREEN ? 8 : 7;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
if (state == NULL) {
block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
if (block->reloc[1].bo)
@ -1057,8 +1076,8 @@ static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx,
int i;
int dirty;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
if (state == NULL) {
block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
LIST_DELINIT(&block->list);
@ -1093,8 +1112,8 @@ static inline void r600_context_pipe_state_set_sampler_border(struct r600_contex
int i;
int dirty;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
if (state == NULL) {
block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
LIST_DELINIT(&block->list);
@ -1146,8 +1165,8 @@ struct r600_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset)
struct r600_block *block;
unsigned id;
range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
range = &ctx->range[CTX_RANGE_ID(offset)];
block = range->blocks[CTX_BLOCK_ID(offset)];
offset -= block->start_offset;
id = block->pm4_bo_index[offset >> 2];
if (block->reloc[id].bo) {
@ -1159,11 +1178,16 @@ struct r600_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset)
void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block)
{
int id;
int optional = block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS);
int cp_dwords = block->pm4_ndwords, start_dword;
int new_dwords;
if (block->nreg_dirty == 0 && block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS)) {
if (block->nreg_dirty == 0 && optional) {
goto out;
}
optional &= (block->nreg_dirty != block->nreg);
ctx->flags |= R600_CONTEXT_CHECK_EVENT_FLUSH;
for (int j = 0; j < block->nreg; j++) {
if (block->pm4_bo_index[j]) {
@ -1181,18 +1205,22 @@ void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *
}
}
ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4);
ctx->pm4_cdwords += block->pm4_ndwords;
if (block->nreg_dirty != block->nreg && block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS)) {
int new_dwords = block->nreg_dirty;
uint32_t oldword, newword;
ctx->pm4_cdwords -= block->pm4_ndwords;
newword = oldword = ctx->pm4[ctx->pm4_cdwords];
if (optional) {
new_dwords = block->nreg_dirty;
start_dword = ctx->pm4_cdwords;
cp_dwords = new_dwords + 2;
}
memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, cp_dwords * 4);
ctx->pm4_cdwords += cp_dwords;
if (optional) {
uint32_t newword;
newword = ctx->pm4[start_dword];
newword &= PKT_COUNT_C;
newword |= PKT_COUNT_S(new_dwords);
ctx->pm4[ctx->pm4_cdwords] = newword;
ctx->pm4_cdwords += new_dwords + 2;
ctx->pm4[start_dword] = newword;
}
out:
block->status ^= R600_BLOCK_STATUS_DIRTY;
@ -1231,7 +1259,7 @@ void r600_context_flush_dest_caches(struct r600_context *ctx)
0, cb[i]);
}
if (db) {
r600_context_bo_flush(ctx, S_0085F0_DB_ACTION_ENA(1), 0, db);
r600_context_bo_flush(ctx, S_0085F0_DB_ACTION_ENA(1) | S_0085F0_DB_DEST_BASE_ENA(1), 0, db);
}
ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
ctx->flags &= ~R600_CONTEXT_DST_CACHES_DIRTY;
@ -1381,6 +1409,8 @@ void r600_context_flush(struct r600_context *ctx)
ctx->pm4_cdwords = 0;
ctx->flags = 0;
r600_init_cs(ctx);
/* resume queries */
r600_context_queries_resume(ctx);

View file

@ -65,6 +65,7 @@ struct radeon {
#define REG_FLAG_NEED_BO 1
#define REG_FLAG_DIRTY_ALWAYS 2
#define REG_FLAG_RV6XX_SBU 4
#define REG_FLAG_NOT_R600 8
struct r600_reg {
unsigned offset;
@ -165,6 +166,7 @@ int r600_setup_block_table(struct r600_context *ctx);
void r600_context_reg(struct r600_context *ctx,
unsigned offset, unsigned value,
unsigned mask);
void r600_init_cs(struct r600_context *ctx);
/*
* r600_bo.c
*/
@ -187,16 +189,6 @@ struct r600_bo *r600_bomgr_bo_create(struct r600_bomgr *mgr,
* helpers
*/
/* each range covers 9 bits of dword space = 512 dwords = 2k bytes */
/* there is a block entry for each register so 512 blocks */
/* we have no registers to read/write below 0x8000 (0x2000 in dw space) */
/* we use some fake offsets at 0x40000 to do evergreen sampler borders so take 0x42000 as a max bound*/
#define RANGE_OFFSET_START 0x8000
#define HASH_SHIFT 9
#define NUM_RANGES (0x42000 - RANGE_OFFSET_START) / (4 << HASH_SHIFT) /* 128 << 9 = 64k */
#define CTX_RANGE_ID(ctx, offset) ((((offset - RANGE_OFFSET_START) >> 2) >> HASH_SHIFT) & 255)
#define CTX_BLOCK_ID(ctx, offset) (((offset - RANGE_OFFSET_START) >> 2) & ((1 << HASH_SHIFT) - 1))
/*
* radeon_bo.c

View file

@ -439,6 +439,17 @@ static const struct pci_id radeon_pci_id[] = {
{0x1002, 0x9614, CHIP_RS780},
{0x1002, 0x9615, CHIP_RS780},
{0x1002, 0x9616, CHIP_RS780},
{0x1002, 0x9640, CHIP_SUMO},
{0x1002, 0x9641, CHIP_SUMO},
{0x1002, 0x9642, CHIP_SUMO2},
{0x1002, 0x9643, CHIP_SUMO2},
{0x1002, 0x9644, CHIP_SUMO2},
{0x1002, 0x9645, CHIP_SUMO2},
{0x1002, 0x9647, CHIP_SUMO},
{0x1002, 0x9648, CHIP_SUMO},
{0x1002, 0x964a, CHIP_SUMO},
{0x1002, 0x964e, CHIP_SUMO},
{0x1002, 0x964f, CHIP_SUMO},
{0x1002, 0x9710, CHIP_RS880},
{0x1002, 0x9711, CHIP_RS880},
{0x1002, 0x9712, CHIP_RS880},
@ -451,6 +462,21 @@ static const struct pci_id radeon_pci_id[] = {
{0x1002, 0x9805, CHIP_PALM},
{0x1002, 0x9806, CHIP_PALM},
{0x1002, 0x9807, CHIP_PALM},
{0x1002, 0x6700, CHIP_CAYMAN},
{0x1002, 0x6701, CHIP_CAYMAN},
{0x1002, 0x6702, CHIP_CAYMAN},
{0x1002, 0x6703, CHIP_CAYMAN},
{0x1002, 0x6704, CHIP_CAYMAN},
{0x1002, 0x6705, CHIP_CAYMAN},
{0x1002, 0x6706, CHIP_CAYMAN},
{0x1002, 0x6707, CHIP_CAYMAN},
{0x1002, 0x6708, CHIP_CAYMAN},
{0x1002, 0x6709, CHIP_CAYMAN},
{0x1002, 0x6718, CHIP_CAYMAN},
{0x1002, 0x6719, CHIP_CAYMAN},
{0x1002, 0x671C, CHIP_CAYMAN},
{0x1002, 0x671D, CHIP_CAYMAN},
{0x1002, 0x671F, CHIP_CAYMAN},
{0x1002, 0x6720, CHIP_BARTS},
{0x1002, 0x6721, CHIP_BARTS},
{0x1002, 0x6722, CHIP_BARTS},

View file

@ -436,7 +436,7 @@ ast_expression::print(void) const
printf("? ");
subexpressions[1]->print();
printf(": ");
subexpressions[1]->print();
subexpressions[2]->print();
break;
case ast_array_index:

View file

@ -370,7 +370,7 @@ void ir_print_visitor::visit(ir_constant *ir)
} else if (ir->type->is_record()) {
ir_constant *value = (ir_constant *) ir->components.get_head();
for (unsigned i = 0; i < ir->type->length; i++) {
printf("(%s ", ir->type->fields.structure->name);
printf("(%s ", ir->type->fields.structure[i].name);
value->accept(this);
printf(")");

View file

@ -128,13 +128,11 @@ swrastGetDrawableInfo(__DRIdrawable * draw,
Drawable drawable;
Window root;
Status stat;
unsigned uw, uh, bw, depth;
drawable = pdraw->xDrawable;
stat = XGetGeometry(dpy, drawable, &root,
x, y, &uw, &uh, &bw, &depth);
XGetGeometry(dpy, drawable, &root, x, y, &uw, &uh, &bw, &depth);
*w = uw;
*h = uh;
}
@ -340,7 +338,7 @@ drisw_create_context(struct glx_screen *base,
}
static void
driDestroyDrawable(__GLXDRIdrawable * pdraw)
driswDestroyDrawable(__GLXDRIdrawable * pdraw)
{
struct drisw_drawable *pdp = (struct drisw_drawable *) pdraw;
struct drisw_screen *psc = (struct drisw_screen *) pdp->base.psc;
@ -352,8 +350,8 @@ driDestroyDrawable(__GLXDRIdrawable * pdraw)
}
static __GLXDRIdrawable *
driCreateDrawable(struct glx_screen *base, XID xDrawable,
GLXDrawable drawable, struct glx_config *modes)
driswCreateDrawable(struct glx_screen *base, XID xDrawable,
GLXDrawable drawable, struct glx_config *modes)
{
struct drisw_drawable *pdp;
__GLXDRIconfigPrivate *config = (__GLXDRIconfigPrivate *) modes;
@ -386,14 +384,14 @@ driCreateDrawable(struct glx_screen *base, XID xDrawable,
return NULL;
}
pdp->base.destroyDrawable = driDestroyDrawable;
pdp->base.destroyDrawable = driswDestroyDrawable;
return &pdp->base;
}
static int64_t
driSwapBuffers(__GLXDRIdrawable * pdraw,
int64_t target_msc, int64_t divisor, int64_t remainder)
driswSwapBuffers(__GLXDRIdrawable * pdraw,
int64_t target_msc, int64_t divisor, int64_t remainder)
{
struct drisw_drawable *pdp = (struct drisw_drawable *) pdraw;
struct drisw_screen *psc = (struct drisw_screen *) pdp->base.psc;
@ -408,7 +406,7 @@ driSwapBuffers(__GLXDRIdrawable * pdraw,
}
static void
driDestroyScreen(struct glx_screen *base)
driswDestroyScreen(struct glx_screen *base)
{
struct drisw_screen *psc = (struct drisw_screen *) base;
@ -439,7 +437,7 @@ static const struct glx_screen_vtable drisw_screen_vtable = {
};
static struct glx_screen *
driCreateScreen(int screen, struct glx_display *priv)
driswCreateScreen(int screen, struct glx_display *priv)
{
__GLXDRIscreen *psp;
const __DRIconfig **driver_configs;
@ -497,9 +495,9 @@ driCreateScreen(int screen, struct glx_display *priv)
psc->base.vtable = &drisw_screen_vtable;
psp = &psc->vtable;
psc->base.driScreen = psp;
psp->destroyScreen = driDestroyScreen;
psp->createDrawable = driCreateDrawable;
psp->swapBuffers = driSwapBuffers;
psp->destroyScreen = driswDestroyScreen;
psp->createDrawable = driswCreateDrawable;
psp->swapBuffers = driswSwapBuffers;
return &psc->base;
@ -517,7 +515,7 @@ driCreateScreen(int screen, struct glx_display *priv)
/* Called from __glXFreeDisplayPrivate.
*/
static void
driDestroyDisplay(__GLXDRIdisplay * dpy)
driswDestroyDisplay(__GLXDRIdisplay * dpy)
{
Xfree(dpy);
}
@ -536,8 +534,8 @@ driswCreateDisplay(Display * dpy)
if (pdpyp == NULL)
return NULL;
pdpyp->base.destroyDisplay = driDestroyDisplay;
pdpyp->base.createScreen = driCreateScreen;
pdpyp->base.destroyDisplay = driswDestroyDisplay;
pdpyp->base.createScreen = driswCreateScreen;
return &pdpyp->base;
}

View file

@ -77,9 +77,6 @@ warn_GLX_1_3(Display * dpy, const char *function_name)
* \note
* This function dynamically determines whether to use the SGIX_pbuffer
* version of the protocol or the GLX 1.3 version of the protocol.
*
* \todo
* This function needs to be modified to work with direct-rendering drivers.
*/
static void
ChangeDrawableAttribute(Display * dpy, GLXDrawable drawable,
@ -265,9 +262,6 @@ DestroyDRIDrawable(Display *dpy, GLXDrawable drawable, int destroy_xdrawable)
* The number of attributes returned is likely to be small, probably less than
* 10. Given that, this routine should try to use an array on the stack to
* capture the reply rather than always calling Xmalloc.
*
* \todo
* This function needs to be modified to work with direct-rendering drivers.
*/
static int
GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
@ -372,9 +366,6 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
/**
* Create a non-pbuffer GLX drawable.
*
* \todo
* This function needs to be modified to work with direct-rendering drivers.
*/
static GLXDrawable
CreateDrawable(Display *dpy, struct glx_config *config,
@ -384,6 +375,7 @@ CreateDrawable(Display *dpy, struct glx_config *config,
CARD32 *data;
unsigned int i;
CARD8 opcode;
GLXDrawable xid;
i = 0;
if (attrib_list) {
@ -404,7 +396,7 @@ CreateDrawable(Display *dpy, struct glx_config *config,
req->screen = config->screen;
req->fbconfig = config->fbconfigID;
req->window = drawable;
req->glxwindow = XAllocID(dpy);
req->glxwindow = xid = XAllocID(dpy);
req->numAttribs = i;
if (attrib_list)
@ -413,9 +405,9 @@ CreateDrawable(Display *dpy, struct glx_config *config,
UnlockDisplay(dpy);
SyncHandle();
CreateDRIDrawable(dpy, config, drawable, req->glxwindow, attrib_list, i);
CreateDRIDrawable(dpy, config, drawable, xid, attrib_list, i);
return req->glxwindow;
return xid;
}
@ -462,9 +454,6 @@ DestroyDrawable(Display * dpy, GLXDrawable drawable, CARD32 glxCode)
* \note
* This function dynamically determines whether to use the SGIX_pbuffer
* version of the protocol or the GLX 1.3 version of the protocol.
*
* \todo
* This function needs to be modified to work with direct-rendering drivers.
*/
static GLXDrawable
CreatePbuffer(Display * dpy, struct glx_config *config,

View file

@ -309,14 +309,6 @@ struct glx_context
GLuint *selectBuf;
/*@} */
/**
* This is \c GL_TRUE if the pixel unpack modes are such that an image
* can be unpacked from the clients memory by just copying. It may
* still be true that the server will have to do some work. This
* just promises that a straight copy will fetch the correct bytes.
*/
GLboolean fastImageUnpack;
/**
* Fill newImage with the unpacked form of \c oldImage getting it
* ready for transport to the server.

View file

@ -200,19 +200,14 @@ glx_context_init(struct glx_context *gc,
/**
* Create a new context. Exactly one of \c vis and \c fbconfig should be
* non-NULL.
* Create a new context.
*
* \param use_glx_1_3 For FBConfigs, should GLX 1.3 protocol or
* SGIX_fbconfig protocol be used?
* \param renderType For FBConfigs, what is the rendering type?
*/
static GLXContext
CreateContext(Display * dpy, int generic_id,
struct glx_config *config,
GLXContext shareList_user,
Bool allowDirect,
CreateContext(Display *dpy, int generic_id, struct glx_config *config,
GLXContext shareList_user, Bool allowDirect,
unsigned code, int renderType, int screen)
{
struct glx_context *gc;
@ -649,13 +644,13 @@ glXCreateGLXPixmap(Display * dpy, XVisualInfo * vis, Pixmap pixmap)
if (psc->driScreen == NULL)
break;
config = glx_config_find_visual(psc->visuals, vis->visualid);
pdraw = psc->driScreen->createDrawable(psc, pixmap, req->glxpixmap, config);
pdraw = psc->driScreen->createDrawable(psc, pixmap, xid, config);
if (pdraw == NULL) {
fprintf(stderr, "failed to create pixmap\n");
break;
}
if (__glxHashInsert(priv->drawHash, req->glxpixmap, pdraw)) {
if (__glxHashInsert(priv->drawHash, xid, pdraw)) {
(*pdraw->destroyDrawable) (pdraw);
return None; /* FIXME: Check what we're supposed to do here... */
}
@ -1895,7 +1890,7 @@ glXGetFBConfigFromVisualSGIX(Display * dpy, XVisualInfo * vis)
struct glx_display *priv;
struct glx_screen *psc = NULL;
if ((GetGLXPrivScreenConfig(dpy, vis->screen, &priv, &psc) != Success)
if ((GetGLXPrivScreenConfig(dpy, vis->screen, &priv, &psc) == Success)
&& __glXExtensionBitIsEnabled(psc, SGIX_fbconfig_bit)
&& (psc->configs->fbconfigID != (int) GLX_DONT_CARE)) {
return (GLXFBConfigSGIX) glx_config_find_visual(psc->configs,

View file

@ -404,10 +404,7 @@ indirect_create_context(struct glx_screen *psc,
/*
** PERFORMANCE NOTE: A mode dependent fill image can speed things up.
** Other code uses the fastImageUnpack bit, but it is never set
** to GL_TRUE.
*/
gc->fastImageUnpack = GL_FALSE;
gc->fillImage = __glFillImage;
gc->pc = gc->buf;
gc->bufEnd = gc->buf + bufSize;

View file

@ -76,10 +76,6 @@
* Modify this function so that \c NULL images are sent using
* \c __glXSendLargeChunk instead of __glXSendLargeCommand. Doing this
* will eliminate the need to allocate a buffer for that case.
*
* \bugs
* The \c fastImageUnpack path, which is thankfully never used, is completely
* broken.
*/
void
__glXSendLargeImage(struct glx_context * gc, GLint compsize, GLint dim,
@ -87,48 +83,38 @@ __glXSendLargeImage(struct glx_context * gc, GLint compsize, GLint dim,
GLenum format, GLenum type, const GLvoid * src,
GLubyte * pc, GLubyte * modes)
{
if (!gc->fastImageUnpack || (src == NULL)) {
/* Allocate a temporary holding buffer */
GLubyte *buf = (GLubyte *) Xmalloc(compsize);
if (!buf) {
__glXSetError(gc, GL_OUT_OF_MEMORY);
return;
}
/* Allocate a temporary holding buffer */
GLubyte *buf = (GLubyte *) Xmalloc(compsize);
if (!buf) {
__glXSetError(gc, GL_OUT_OF_MEMORY);
return;
}
/* Apply pixel store unpack modes to copy data into buf */
if (src != NULL) {
(*gc->fillImage) (gc, dim, width, height, depth, format, type,
src, buf, modes);
}
else {
if (dim < 3) {
(void) memcpy(modes, __glXDefaultPixelStore + 4, 20);
}
else {
(void) memcpy(modes, __glXDefaultPixelStore + 0, 36);
}
}
/* Apply pixel store unpack modes to copy data into buf */
if (src != NULL) {
(*gc->fillImage) (gc, dim, width, height, depth, format, type,
src, buf, modes);
}
else {
if (dim < 3) {
(void) memcpy(modes, __glXDefaultPixelStore + 4, 20);
}
else {
(void) memcpy(modes, __glXDefaultPixelStore + 0, 36);
}
}
/* Send large command */
__glXSendLargeCommand(gc, gc->pc, pc - gc->pc, buf, compsize);
/* Send large command */
__glXSendLargeCommand(gc, gc->pc, pc - gc->pc, buf, compsize);
/* Free buffer */
Xfree((char *) buf);
}
else {
/* Just send the data straight as is */
__glXSendLargeCommand(gc, gc->pc, pc - gc->pc, pc, compsize);
}
/* Free buffer */
Xfree((char *) buf);
}
/************************************************************************/
/**
* Implement GLX protocol for \c glSeparableFilter2D.
*
* \bugs
* The \c fastImageUnpack path, which is thankfully never used, is completely
* broken.
*/
void
__indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
@ -177,6 +163,7 @@ __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
__GLX_END(0);
}
else {
GLubyte *buf;
const GLint bufsize = image1len + image2len;
/* Use GLXRenderLarge protocol to send command */
@ -190,29 +177,22 @@ __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
__GLX_PUT_LONG(20, type);
pc += hdrlen;
if (!gc->fastImageUnpack) {
/* Allocate a temporary holding buffer */
GLubyte *buf = (GLubyte *) Xmalloc(bufsize);
if (!buf) {
__glXSetError(gc, GL_OUT_OF_MEMORY);
return;
}
(*gc->fillImage) (gc, 1, width, 1, 1, format, type, row, buf,
pixelHeaderPC);
(*gc->fillImage) (gc, 1, height, 1, 1, format, type, column,
buf + image1len, pixelHeaderPC);
/* Send large command */
__glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), buf,
bufsize);
/* Free buffer */
Xfree((char *) buf);
}
else {
/* Just send the data straight as is */
__glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), pc,
bufsize);
/* Allocate a temporary holding buffer */
buf = (GLubyte *) Xmalloc(bufsize);
if (!buf) {
__glXSetError(gc, GL_OUT_OF_MEMORY);
return;
}
(*gc->fillImage) (gc, 1, width, 1, 1, format, type, row, buf,
pixelHeaderPC);
(*gc->fillImage) (gc, 1, height, 1, 1, format, type, column,
buf + image1len, pixelHeaderPC);
/* Send large command */
__glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), buf,
bufsize);
/* Free buffer */
Xfree((char *) buf);
}
}

View file

@ -35,6 +35,15 @@
<param name="basevertex" type="const GLint *"/>
</function>
<function name="DrawElementsInstancedBaseVertex" offset="assign">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
<param name="indices" type="const GLvoid *"/>
<param name="primcount" type="GLsizei"/>
<param name="basevertex" type="GLint"/>
</function>
</category>
</OpenGLAPI>

View file

@ -128,7 +128,10 @@ xorg: check-xorg-source $(XORG_OUTPUTS)
check-xorg-source:
@if ! test -d $(XORG_GLX_DIR); then \
echo "ERROR: Must specify path to xserver/GL/ checkout; set XORG_BASE env var."; \
echo "ERROR: Must specify path to xserver/ checkout. Set XORG_BASE env var."; \
if test x$(XORG_BASE) != x; then \
echo "'$(XORG_GLX_DIR)' does not exist."; \
fi; \
exit 1; \
fi

View file

@ -152,6 +152,11 @@ class PrintRemapTable(gl_XML.gl_print_base):
print '#define driDispatchRemapTable_size %u' % (count)
print 'extern int driDispatchRemapTable[ driDispatchRemapTable_size ];'
print ''
print '#if FEATURE_remap_table'
print '#define driDispatchRemapTable remap_table'
print 'static int remap_table[driDispatchRemapTable_size];'
print '#endif'
print ''
for f, index in functions:
print '#define %s_remap_index %u' % (f.name, index)

File diff suppressed because it is too large Load diff

View file

@ -789,61 +789,60 @@ gl_dispatch_functions_start:
GL_STUB(glIsSync, 591)
GL_STUB(glWaitSync, 592)
GL_STUB(glDrawElementsBaseVertex, 593)
GL_STUB(glDrawRangeElementsBaseVertex, 594)
GL_STUB(glMultiDrawElementsBaseVertex, 595)
GL_STUB(glBlendEquationSeparateiARB, 596)
GL_STUB(glBlendEquationiARB, 597)
GL_STUB(glBlendFuncSeparateiARB, 598)
GL_STUB(glBlendFunciARB, 599)
GL_STUB(glBindSampler, 600)
GL_STUB(glDeleteSamplers, 601)
GL_STUB(glGenSamplers, 602)
GL_STUB(glGetSamplerParameterIiv, 603)
GL_STUB(glGetSamplerParameterIuiv, 604)
GL_STUB(glGetSamplerParameterfv, 605)
GL_STUB(glGetSamplerParameteriv, 606)
GL_STUB(glIsSampler, 607)
GL_STUB(glSamplerParameterIiv, 608)
GL_STUB(glSamplerParameterIuiv, 609)
GL_STUB(glSamplerParameterf, 610)
GL_STUB(glSamplerParameterfv, 611)
GL_STUB(glSamplerParameteri, 612)
GL_STUB(glSamplerParameteriv, 613)
GL_STUB(glBindTransformFeedback, 614)
GL_STUB(glDeleteTransformFeedbacks, 615)
GL_STUB(glDrawTransformFeedback, 616)
GL_STUB(glGenTransformFeedbacks, 617)
GL_STUB(glIsTransformFeedback, 618)
GL_STUB(glPauseTransformFeedback, 619)
GL_STUB(glResumeTransformFeedback, 620)
GL_STUB(glClearDepthf, 621)
GL_STUB(glDepthRangef, 622)
GL_STUB(glGetShaderPrecisionFormat, 623)
GL_STUB(glReleaseShaderCompiler, 624)
GL_STUB(glShaderBinary, 625)
GL_STUB(glGetGraphicsResetStatusARB, 626)
GL_STUB(glGetnColorTableARB, 627)
GL_STUB(glGetnCompressedTexImageARB, 628)
GL_STUB(glGetnConvolutionFilterARB, 629)
GL_STUB(glGetnHistogramARB, 630)
GL_STUB(glGetnMapdvARB, 631)
GL_STUB(glGetnMapfvARB, 632)
GL_STUB(glGetnMapivARB, 633)
GL_STUB(glGetnMinmaxARB, 634)
GL_STUB(glGetnPixelMapfvARB, 635)
GL_STUB(glGetnPixelMapuivARB, 636)
GL_STUB(glGetnPixelMapusvARB, 637)
GL_STUB(glGetnPolygonStippleARB, 638)
GL_STUB(glGetnSeparableFilterARB, 639)
GL_STUB(glGetnTexImageARB, 640)
GL_STUB(glGetnUniformdvARB, 641)
GL_STUB(glGetnUniformfvARB, 642)
GL_STUB(glGetnUniformivARB, 643)
GL_STUB(glGetnUniformuivARB, 644)
GL_STUB(glReadnPixelsARB, 645)
GL_STUB(glPolygonOffsetEXT, 646)
GL_STUB(gl_dispatch_stub_647, 647)
HIDDEN(gl_dispatch_stub_647)
GL_STUB(glDrawElementsInstancedBaseVertex, 594)
GL_STUB(glDrawRangeElementsBaseVertex, 595)
GL_STUB(glMultiDrawElementsBaseVertex, 596)
GL_STUB(glBlendEquationSeparateiARB, 597)
GL_STUB(glBlendEquationiARB, 598)
GL_STUB(glBlendFuncSeparateiARB, 599)
GL_STUB(glBlendFunciARB, 600)
GL_STUB(glBindSampler, 601)
GL_STUB(glDeleteSamplers, 602)
GL_STUB(glGenSamplers, 603)
GL_STUB(glGetSamplerParameterIiv, 604)
GL_STUB(glGetSamplerParameterIuiv, 605)
GL_STUB(glGetSamplerParameterfv, 606)
GL_STUB(glGetSamplerParameteriv, 607)
GL_STUB(glIsSampler, 608)
GL_STUB(glSamplerParameterIiv, 609)
GL_STUB(glSamplerParameterIuiv, 610)
GL_STUB(glSamplerParameterf, 611)
GL_STUB(glSamplerParameterfv, 612)
GL_STUB(glSamplerParameteri, 613)
GL_STUB(glSamplerParameteriv, 614)
GL_STUB(glBindTransformFeedback, 615)
GL_STUB(glDeleteTransformFeedbacks, 616)
GL_STUB(glDrawTransformFeedback, 617)
GL_STUB(glGenTransformFeedbacks, 618)
GL_STUB(glIsTransformFeedback, 619)
GL_STUB(glPauseTransformFeedback, 620)
GL_STUB(glResumeTransformFeedback, 621)
GL_STUB(glClearDepthf, 622)
GL_STUB(glDepthRangef, 623)
GL_STUB(glGetShaderPrecisionFormat, 624)
GL_STUB(glReleaseShaderCompiler, 625)
GL_STUB(glShaderBinary, 626)
GL_STUB(glGetGraphicsResetStatusARB, 627)
GL_STUB(glGetnColorTableARB, 628)
GL_STUB(glGetnCompressedTexImageARB, 629)
GL_STUB(glGetnConvolutionFilterARB, 630)
GL_STUB(glGetnHistogramARB, 631)
GL_STUB(glGetnMapdvARB, 632)
GL_STUB(glGetnMapfvARB, 633)
GL_STUB(glGetnMapivARB, 634)
GL_STUB(glGetnMinmaxARB, 635)
GL_STUB(glGetnPixelMapfvARB, 636)
GL_STUB(glGetnPixelMapuivARB, 637)
GL_STUB(glGetnPixelMapusvARB, 638)
GL_STUB(glGetnPolygonStippleARB, 639)
GL_STUB(glGetnSeparableFilterARB, 640)
GL_STUB(glGetnTexImageARB, 641)
GL_STUB(glGetnUniformdvARB, 642)
GL_STUB(glGetnUniformfvARB, 643)
GL_STUB(glGetnUniformivARB, 644)
GL_STUB(glGetnUniformuivARB, 645)
GL_STUB(glReadnPixelsARB, 646)
GL_STUB(glPolygonOffsetEXT, 647)
GL_STUB(gl_dispatch_stub_648, 648)
HIDDEN(gl_dispatch_stub_648)
GL_STUB(gl_dispatch_stub_649, 649)
@ -858,85 +857,85 @@ gl_dispatch_functions_start:
HIDDEN(gl_dispatch_stub_653)
GL_STUB(gl_dispatch_stub_654, 654)
HIDDEN(gl_dispatch_stub_654)
GL_STUB(glColorPointerEXT, 655)
GL_STUB(glEdgeFlagPointerEXT, 656)
GL_STUB(glIndexPointerEXT, 657)
GL_STUB(glNormalPointerEXT, 658)
GL_STUB(glTexCoordPointerEXT, 659)
GL_STUB(glVertexPointerEXT, 660)
GL_STUB(glPointParameterfEXT, 661)
GL_STUB(glPointParameterfvEXT, 662)
GL_STUB(glLockArraysEXT, 663)
GL_STUB(glUnlockArraysEXT, 664)
GL_STUB(glSecondaryColor3bEXT, 665)
GL_STUB(glSecondaryColor3bvEXT, 666)
GL_STUB(glSecondaryColor3dEXT, 667)
GL_STUB(glSecondaryColor3dvEXT, 668)
GL_STUB(glSecondaryColor3fEXT, 669)
GL_STUB(glSecondaryColor3fvEXT, 670)
GL_STUB(glSecondaryColor3iEXT, 671)
GL_STUB(glSecondaryColor3ivEXT, 672)
GL_STUB(glSecondaryColor3sEXT, 673)
GL_STUB(glSecondaryColor3svEXT, 674)
GL_STUB(glSecondaryColor3ubEXT, 675)
GL_STUB(glSecondaryColor3ubvEXT, 676)
GL_STUB(glSecondaryColor3uiEXT, 677)
GL_STUB(glSecondaryColor3uivEXT, 678)
GL_STUB(glSecondaryColor3usEXT, 679)
GL_STUB(glSecondaryColor3usvEXT, 680)
GL_STUB(glSecondaryColorPointerEXT, 681)
GL_STUB(glMultiDrawArraysEXT, 682)
GL_STUB(glMultiDrawElementsEXT, 683)
GL_STUB(glFogCoordPointerEXT, 684)
GL_STUB(glFogCoorddEXT, 685)
GL_STUB(glFogCoorddvEXT, 686)
GL_STUB(glFogCoordfEXT, 687)
GL_STUB(glFogCoordfvEXT, 688)
GL_STUB(gl_dispatch_stub_689, 689)
HIDDEN(gl_dispatch_stub_689)
GL_STUB(glBlendFuncSeparateEXT, 690)
GL_STUB(glFlushVertexArrayRangeNV, 691)
GL_STUB(glVertexArrayRangeNV, 692)
GL_STUB(glCombinerInputNV, 693)
GL_STUB(glCombinerOutputNV, 694)
GL_STUB(glCombinerParameterfNV, 695)
GL_STUB(glCombinerParameterfvNV, 696)
GL_STUB(glCombinerParameteriNV, 697)
GL_STUB(glCombinerParameterivNV, 698)
GL_STUB(glFinalCombinerInputNV, 699)
GL_STUB(glGetCombinerInputParameterfvNV, 700)
GL_STUB(glGetCombinerInputParameterivNV, 701)
GL_STUB(glGetCombinerOutputParameterfvNV, 702)
GL_STUB(glGetCombinerOutputParameterivNV, 703)
GL_STUB(glGetFinalCombinerInputParameterfvNV, 704)
GL_STUB(glGetFinalCombinerInputParameterivNV, 705)
GL_STUB(glResizeBuffersMESA, 706)
GL_STUB(glWindowPos2dMESA, 707)
GL_STUB(glWindowPos2dvMESA, 708)
GL_STUB(glWindowPos2fMESA, 709)
GL_STUB(glWindowPos2fvMESA, 710)
GL_STUB(glWindowPos2iMESA, 711)
GL_STUB(glWindowPos2ivMESA, 712)
GL_STUB(glWindowPos2sMESA, 713)
GL_STUB(glWindowPos2svMESA, 714)
GL_STUB(glWindowPos3dMESA, 715)
GL_STUB(glWindowPos3dvMESA, 716)
GL_STUB(glWindowPos3fMESA, 717)
GL_STUB(glWindowPos3fvMESA, 718)
GL_STUB(glWindowPos3iMESA, 719)
GL_STUB(glWindowPos3ivMESA, 720)
GL_STUB(glWindowPos3sMESA, 721)
GL_STUB(glWindowPos3svMESA, 722)
GL_STUB(glWindowPos4dMESA, 723)
GL_STUB(glWindowPos4dvMESA, 724)
GL_STUB(glWindowPos4fMESA, 725)
GL_STUB(glWindowPos4fvMESA, 726)
GL_STUB(glWindowPos4iMESA, 727)
GL_STUB(glWindowPos4ivMESA, 728)
GL_STUB(glWindowPos4sMESA, 729)
GL_STUB(glWindowPos4svMESA, 730)
GL_STUB(gl_dispatch_stub_731, 731)
HIDDEN(gl_dispatch_stub_731)
GL_STUB(gl_dispatch_stub_655, 655)
HIDDEN(gl_dispatch_stub_655)
GL_STUB(glColorPointerEXT, 656)
GL_STUB(glEdgeFlagPointerEXT, 657)
GL_STUB(glIndexPointerEXT, 658)
GL_STUB(glNormalPointerEXT, 659)
GL_STUB(glTexCoordPointerEXT, 660)
GL_STUB(glVertexPointerEXT, 661)
GL_STUB(glPointParameterfEXT, 662)
GL_STUB(glPointParameterfvEXT, 663)
GL_STUB(glLockArraysEXT, 664)
GL_STUB(glUnlockArraysEXT, 665)
GL_STUB(glSecondaryColor3bEXT, 666)
GL_STUB(glSecondaryColor3bvEXT, 667)
GL_STUB(glSecondaryColor3dEXT, 668)
GL_STUB(glSecondaryColor3dvEXT, 669)
GL_STUB(glSecondaryColor3fEXT, 670)
GL_STUB(glSecondaryColor3fvEXT, 671)
GL_STUB(glSecondaryColor3iEXT, 672)
GL_STUB(glSecondaryColor3ivEXT, 673)
GL_STUB(glSecondaryColor3sEXT, 674)
GL_STUB(glSecondaryColor3svEXT, 675)
GL_STUB(glSecondaryColor3ubEXT, 676)
GL_STUB(glSecondaryColor3ubvEXT, 677)
GL_STUB(glSecondaryColor3uiEXT, 678)
GL_STUB(glSecondaryColor3uivEXT, 679)
GL_STUB(glSecondaryColor3usEXT, 680)
GL_STUB(glSecondaryColor3usvEXT, 681)
GL_STUB(glSecondaryColorPointerEXT, 682)
GL_STUB(glMultiDrawArraysEXT, 683)
GL_STUB(glMultiDrawElementsEXT, 684)
GL_STUB(glFogCoordPointerEXT, 685)
GL_STUB(glFogCoorddEXT, 686)
GL_STUB(glFogCoorddvEXT, 687)
GL_STUB(glFogCoordfEXT, 688)
GL_STUB(glFogCoordfvEXT, 689)
GL_STUB(gl_dispatch_stub_690, 690)
HIDDEN(gl_dispatch_stub_690)
GL_STUB(glBlendFuncSeparateEXT, 691)
GL_STUB(glFlushVertexArrayRangeNV, 692)
GL_STUB(glVertexArrayRangeNV, 693)
GL_STUB(glCombinerInputNV, 694)
GL_STUB(glCombinerOutputNV, 695)
GL_STUB(glCombinerParameterfNV, 696)
GL_STUB(glCombinerParameterfvNV, 697)
GL_STUB(glCombinerParameteriNV, 698)
GL_STUB(glCombinerParameterivNV, 699)
GL_STUB(glFinalCombinerInputNV, 700)
GL_STUB(glGetCombinerInputParameterfvNV, 701)
GL_STUB(glGetCombinerInputParameterivNV, 702)
GL_STUB(glGetCombinerOutputParameterfvNV, 703)
GL_STUB(glGetCombinerOutputParameterivNV, 704)
GL_STUB(glGetFinalCombinerInputParameterfvNV, 705)
GL_STUB(glGetFinalCombinerInputParameterivNV, 706)
GL_STUB(glResizeBuffersMESA, 707)
GL_STUB(glWindowPos2dMESA, 708)
GL_STUB(glWindowPos2dvMESA, 709)
GL_STUB(glWindowPos2fMESA, 710)
GL_STUB(glWindowPos2fvMESA, 711)
GL_STUB(glWindowPos2iMESA, 712)
GL_STUB(glWindowPos2ivMESA, 713)
GL_STUB(glWindowPos2sMESA, 714)
GL_STUB(glWindowPos2svMESA, 715)
GL_STUB(glWindowPos3dMESA, 716)
GL_STUB(glWindowPos3dvMESA, 717)
GL_STUB(glWindowPos3fMESA, 718)
GL_STUB(glWindowPos3fvMESA, 719)
GL_STUB(glWindowPos3iMESA, 720)
GL_STUB(glWindowPos3ivMESA, 721)
GL_STUB(glWindowPos3sMESA, 722)
GL_STUB(glWindowPos3svMESA, 723)
GL_STUB(glWindowPos4dMESA, 724)
GL_STUB(glWindowPos4dvMESA, 725)
GL_STUB(glWindowPos4fMESA, 726)
GL_STUB(glWindowPos4fvMESA, 727)
GL_STUB(glWindowPos4iMESA, 728)
GL_STUB(glWindowPos4ivMESA, 729)
GL_STUB(glWindowPos4sMESA, 730)
GL_STUB(glWindowPos4svMESA, 731)
GL_STUB(gl_dispatch_stub_732, 732)
HIDDEN(gl_dispatch_stub_732)
GL_STUB(gl_dispatch_stub_733, 733)
@ -953,88 +952,88 @@ gl_dispatch_functions_start:
HIDDEN(gl_dispatch_stub_738)
GL_STUB(gl_dispatch_stub_739, 739)
HIDDEN(gl_dispatch_stub_739)
GL_STUB(glAreProgramsResidentNV, 740)
GL_STUB(glBindProgramNV, 741)
GL_STUB(glDeleteProgramsNV, 742)
GL_STUB(glExecuteProgramNV, 743)
GL_STUB(glGenProgramsNV, 744)
GL_STUB(glGetProgramParameterdvNV, 745)
GL_STUB(glGetProgramParameterfvNV, 746)
GL_STUB(glGetProgramStringNV, 747)
GL_STUB(glGetProgramivNV, 748)
GL_STUB(glGetTrackMatrixivNV, 749)
GL_STUB(glGetVertexAttribPointervNV, 750)
GL_STUB(glGetVertexAttribdvNV, 751)
GL_STUB(glGetVertexAttribfvNV, 752)
GL_STUB(glGetVertexAttribivNV, 753)
GL_STUB(glIsProgramNV, 754)
GL_STUB(glLoadProgramNV, 755)
GL_STUB(glProgramParameters4dvNV, 756)
GL_STUB(glProgramParameters4fvNV, 757)
GL_STUB(glRequestResidentProgramsNV, 758)
GL_STUB(glTrackMatrixNV, 759)
GL_STUB(glVertexAttrib1dNV, 760)
GL_STUB(glVertexAttrib1dvNV, 761)
GL_STUB(glVertexAttrib1fNV, 762)
GL_STUB(glVertexAttrib1fvNV, 763)
GL_STUB(glVertexAttrib1sNV, 764)
GL_STUB(glVertexAttrib1svNV, 765)
GL_STUB(glVertexAttrib2dNV, 766)
GL_STUB(glVertexAttrib2dvNV, 767)
GL_STUB(glVertexAttrib2fNV, 768)
GL_STUB(glVertexAttrib2fvNV, 769)
GL_STUB(glVertexAttrib2sNV, 770)
GL_STUB(glVertexAttrib2svNV, 771)
GL_STUB(glVertexAttrib3dNV, 772)
GL_STUB(glVertexAttrib3dvNV, 773)
GL_STUB(glVertexAttrib3fNV, 774)
GL_STUB(glVertexAttrib3fvNV, 775)
GL_STUB(glVertexAttrib3sNV, 776)
GL_STUB(glVertexAttrib3svNV, 777)
GL_STUB(glVertexAttrib4dNV, 778)
GL_STUB(glVertexAttrib4dvNV, 779)
GL_STUB(glVertexAttrib4fNV, 780)
GL_STUB(glVertexAttrib4fvNV, 781)
GL_STUB(glVertexAttrib4sNV, 782)
GL_STUB(glVertexAttrib4svNV, 783)
GL_STUB(glVertexAttrib4ubNV, 784)
GL_STUB(glVertexAttrib4ubvNV, 785)
GL_STUB(glVertexAttribPointerNV, 786)
GL_STUB(glVertexAttribs1dvNV, 787)
GL_STUB(glVertexAttribs1fvNV, 788)
GL_STUB(glVertexAttribs1svNV, 789)
GL_STUB(glVertexAttribs2dvNV, 790)
GL_STUB(glVertexAttribs2fvNV, 791)
GL_STUB(glVertexAttribs2svNV, 792)
GL_STUB(glVertexAttribs3dvNV, 793)
GL_STUB(glVertexAttribs3fvNV, 794)
GL_STUB(glVertexAttribs3svNV, 795)
GL_STUB(glVertexAttribs4dvNV, 796)
GL_STUB(glVertexAttribs4fvNV, 797)
GL_STUB(glVertexAttribs4svNV, 798)
GL_STUB(glVertexAttribs4ubvNV, 799)
GL_STUB(glGetTexBumpParameterfvATI, 800)
GL_STUB(glGetTexBumpParameterivATI, 801)
GL_STUB(glTexBumpParameterfvATI, 802)
GL_STUB(glTexBumpParameterivATI, 803)
GL_STUB(glAlphaFragmentOp1ATI, 804)
GL_STUB(glAlphaFragmentOp2ATI, 805)
GL_STUB(glAlphaFragmentOp3ATI, 806)
GL_STUB(glBeginFragmentShaderATI, 807)
GL_STUB(glBindFragmentShaderATI, 808)
GL_STUB(glColorFragmentOp1ATI, 809)
GL_STUB(glColorFragmentOp2ATI, 810)
GL_STUB(glColorFragmentOp3ATI, 811)
GL_STUB(glDeleteFragmentShaderATI, 812)
GL_STUB(glEndFragmentShaderATI, 813)
GL_STUB(glGenFragmentShadersATI, 814)
GL_STUB(glPassTexCoordATI, 815)
GL_STUB(glSampleMapATI, 816)
GL_STUB(glSetFragmentShaderConstantATI, 817)
GL_STUB(glPointParameteriNV, 818)
GL_STUB(glPointParameterivNV, 819)
GL_STUB(gl_dispatch_stub_820, 820)
HIDDEN(gl_dispatch_stub_820)
GL_STUB(gl_dispatch_stub_740, 740)
HIDDEN(gl_dispatch_stub_740)
GL_STUB(glAreProgramsResidentNV, 741)
GL_STUB(glBindProgramNV, 742)
GL_STUB(glDeleteProgramsNV, 743)
GL_STUB(glExecuteProgramNV, 744)
GL_STUB(glGenProgramsNV, 745)
GL_STUB(glGetProgramParameterdvNV, 746)
GL_STUB(glGetProgramParameterfvNV, 747)
GL_STUB(glGetProgramStringNV, 748)
GL_STUB(glGetProgramivNV, 749)
GL_STUB(glGetTrackMatrixivNV, 750)
GL_STUB(glGetVertexAttribPointervNV, 751)
GL_STUB(glGetVertexAttribdvNV, 752)
GL_STUB(glGetVertexAttribfvNV, 753)
GL_STUB(glGetVertexAttribivNV, 754)
GL_STUB(glIsProgramNV, 755)
GL_STUB(glLoadProgramNV, 756)
GL_STUB(glProgramParameters4dvNV, 757)
GL_STUB(glProgramParameters4fvNV, 758)
GL_STUB(glRequestResidentProgramsNV, 759)
GL_STUB(glTrackMatrixNV, 760)
GL_STUB(glVertexAttrib1dNV, 761)
GL_STUB(glVertexAttrib1dvNV, 762)
GL_STUB(glVertexAttrib1fNV, 763)
GL_STUB(glVertexAttrib1fvNV, 764)
GL_STUB(glVertexAttrib1sNV, 765)
GL_STUB(glVertexAttrib1svNV, 766)
GL_STUB(glVertexAttrib2dNV, 767)
GL_STUB(glVertexAttrib2dvNV, 768)
GL_STUB(glVertexAttrib2fNV, 769)
GL_STUB(glVertexAttrib2fvNV, 770)
GL_STUB(glVertexAttrib2sNV, 771)
GL_STUB(glVertexAttrib2svNV, 772)
GL_STUB(glVertexAttrib3dNV, 773)
GL_STUB(glVertexAttrib3dvNV, 774)
GL_STUB(glVertexAttrib3fNV, 775)
GL_STUB(glVertexAttrib3fvNV, 776)
GL_STUB(glVertexAttrib3sNV, 777)
GL_STUB(glVertexAttrib3svNV, 778)
GL_STUB(glVertexAttrib4dNV, 779)
GL_STUB(glVertexAttrib4dvNV, 780)
GL_STUB(glVertexAttrib4fNV, 781)
GL_STUB(glVertexAttrib4fvNV, 782)
GL_STUB(glVertexAttrib4sNV, 783)
GL_STUB(glVertexAttrib4svNV, 784)
GL_STUB(glVertexAttrib4ubNV, 785)
GL_STUB(glVertexAttrib4ubvNV, 786)
GL_STUB(glVertexAttribPointerNV, 787)
GL_STUB(glVertexAttribs1dvNV, 788)
GL_STUB(glVertexAttribs1fvNV, 789)
GL_STUB(glVertexAttribs1svNV, 790)
GL_STUB(glVertexAttribs2dvNV, 791)
GL_STUB(glVertexAttribs2fvNV, 792)
GL_STUB(glVertexAttribs2svNV, 793)
GL_STUB(glVertexAttribs3dvNV, 794)
GL_STUB(glVertexAttribs3fvNV, 795)
GL_STUB(glVertexAttribs3svNV, 796)
GL_STUB(glVertexAttribs4dvNV, 797)
GL_STUB(glVertexAttribs4fvNV, 798)
GL_STUB(glVertexAttribs4svNV, 799)
GL_STUB(glVertexAttribs4ubvNV, 800)
GL_STUB(glGetTexBumpParameterfvATI, 801)
GL_STUB(glGetTexBumpParameterivATI, 802)
GL_STUB(glTexBumpParameterfvATI, 803)
GL_STUB(glTexBumpParameterivATI, 804)
GL_STUB(glAlphaFragmentOp1ATI, 805)
GL_STUB(glAlphaFragmentOp2ATI, 806)
GL_STUB(glAlphaFragmentOp3ATI, 807)
GL_STUB(glBeginFragmentShaderATI, 808)
GL_STUB(glBindFragmentShaderATI, 809)
GL_STUB(glColorFragmentOp1ATI, 810)
GL_STUB(glColorFragmentOp2ATI, 811)
GL_STUB(glColorFragmentOp3ATI, 812)
GL_STUB(glDeleteFragmentShaderATI, 813)
GL_STUB(glEndFragmentShaderATI, 814)
GL_STUB(glGenFragmentShadersATI, 815)
GL_STUB(glPassTexCoordATI, 816)
GL_STUB(glSampleMapATI, 817)
GL_STUB(glSetFragmentShaderConstantATI, 818)
GL_STUB(glPointParameteriNV, 819)
GL_STUB(glPointParameterivNV, 820)
GL_STUB(gl_dispatch_stub_821, 821)
HIDDEN(gl_dispatch_stub_821)
GL_STUB(gl_dispatch_stub_822, 822)
@ -1043,111 +1042,111 @@ gl_dispatch_functions_start:
HIDDEN(gl_dispatch_stub_823)
GL_STUB(gl_dispatch_stub_824, 824)
HIDDEN(gl_dispatch_stub_824)
GL_STUB(glGetProgramNamedParameterdvNV, 825)
GL_STUB(glGetProgramNamedParameterfvNV, 826)
GL_STUB(glProgramNamedParameter4dNV, 827)
GL_STUB(glProgramNamedParameter4dvNV, 828)
GL_STUB(glProgramNamedParameter4fNV, 829)
GL_STUB(glProgramNamedParameter4fvNV, 830)
GL_STUB(glPrimitiveRestartIndexNV, 831)
GL_STUB(glPrimitiveRestartNV, 832)
GL_STUB(gl_dispatch_stub_833, 833)
HIDDEN(gl_dispatch_stub_833)
GL_STUB(gl_dispatch_stub_825, 825)
HIDDEN(gl_dispatch_stub_825)
GL_STUB(glGetProgramNamedParameterdvNV, 826)
GL_STUB(glGetProgramNamedParameterfvNV, 827)
GL_STUB(glProgramNamedParameter4dNV, 828)
GL_STUB(glProgramNamedParameter4dvNV, 829)
GL_STUB(glProgramNamedParameter4fNV, 830)
GL_STUB(glProgramNamedParameter4fvNV, 831)
GL_STUB(glPrimitiveRestartIndexNV, 832)
GL_STUB(glPrimitiveRestartNV, 833)
GL_STUB(gl_dispatch_stub_834, 834)
HIDDEN(gl_dispatch_stub_834)
GL_STUB(glBindFramebufferEXT, 835)
GL_STUB(glBindRenderbufferEXT, 836)
GL_STUB(glCheckFramebufferStatusEXT, 837)
GL_STUB(glDeleteFramebuffersEXT, 838)
GL_STUB(glDeleteRenderbuffersEXT, 839)
GL_STUB(glFramebufferRenderbufferEXT, 840)
GL_STUB(glFramebufferTexture1DEXT, 841)
GL_STUB(glFramebufferTexture2DEXT, 842)
GL_STUB(glFramebufferTexture3DEXT, 843)
GL_STUB(glGenFramebuffersEXT, 844)
GL_STUB(glGenRenderbuffersEXT, 845)
GL_STUB(glGenerateMipmapEXT, 846)
GL_STUB(glGetFramebufferAttachmentParameterivEXT, 847)
GL_STUB(glGetRenderbufferParameterivEXT, 848)
GL_STUB(glIsFramebufferEXT, 849)
GL_STUB(glIsRenderbufferEXT, 850)
GL_STUB(glRenderbufferStorageEXT, 851)
GL_STUB(gl_dispatch_stub_852, 852)
HIDDEN(gl_dispatch_stub_852)
GL_STUB(gl_dispatch_stub_835, 835)
HIDDEN(gl_dispatch_stub_835)
GL_STUB(glBindFramebufferEXT, 836)
GL_STUB(glBindRenderbufferEXT, 837)
GL_STUB(glCheckFramebufferStatusEXT, 838)
GL_STUB(glDeleteFramebuffersEXT, 839)
GL_STUB(glDeleteRenderbuffersEXT, 840)
GL_STUB(glFramebufferRenderbufferEXT, 841)
GL_STUB(glFramebufferTexture1DEXT, 842)
GL_STUB(glFramebufferTexture2DEXT, 843)
GL_STUB(glFramebufferTexture3DEXT, 844)
GL_STUB(glGenFramebuffersEXT, 845)
GL_STUB(glGenRenderbuffersEXT, 846)
GL_STUB(glGenerateMipmapEXT, 847)
GL_STUB(glGetFramebufferAttachmentParameterivEXT, 848)
GL_STUB(glGetRenderbufferParameterivEXT, 849)
GL_STUB(glIsFramebufferEXT, 850)
GL_STUB(glIsRenderbufferEXT, 851)
GL_STUB(glRenderbufferStorageEXT, 852)
GL_STUB(gl_dispatch_stub_853, 853)
HIDDEN(gl_dispatch_stub_853)
GL_STUB(gl_dispatch_stub_854, 854)
HIDDEN(gl_dispatch_stub_854)
GL_STUB(glBindFragDataLocationEXT, 855)
GL_STUB(glGetFragDataLocationEXT, 856)
GL_STUB(glGetUniformuivEXT, 857)
GL_STUB(glGetVertexAttribIivEXT, 858)
GL_STUB(glGetVertexAttribIuivEXT, 859)
GL_STUB(glUniform1uiEXT, 860)
GL_STUB(glUniform1uivEXT, 861)
GL_STUB(glUniform2uiEXT, 862)
GL_STUB(glUniform2uivEXT, 863)
GL_STUB(glUniform3uiEXT, 864)
GL_STUB(glUniform3uivEXT, 865)
GL_STUB(glUniform4uiEXT, 866)
GL_STUB(glUniform4uivEXT, 867)
GL_STUB(glVertexAttribI1iEXT, 868)
GL_STUB(glVertexAttribI1ivEXT, 869)
GL_STUB(glVertexAttribI1uiEXT, 870)
GL_STUB(glVertexAttribI1uivEXT, 871)
GL_STUB(glVertexAttribI2iEXT, 872)
GL_STUB(glVertexAttribI2ivEXT, 873)
GL_STUB(glVertexAttribI2uiEXT, 874)
GL_STUB(glVertexAttribI2uivEXT, 875)
GL_STUB(glVertexAttribI3iEXT, 876)
GL_STUB(glVertexAttribI3ivEXT, 877)
GL_STUB(glVertexAttribI3uiEXT, 878)
GL_STUB(glVertexAttribI3uivEXT, 879)
GL_STUB(glVertexAttribI4bvEXT, 880)
GL_STUB(glVertexAttribI4iEXT, 881)
GL_STUB(glVertexAttribI4ivEXT, 882)
GL_STUB(glVertexAttribI4svEXT, 883)
GL_STUB(glVertexAttribI4ubvEXT, 884)
GL_STUB(glVertexAttribI4uiEXT, 885)
GL_STUB(glVertexAttribI4uivEXT, 886)
GL_STUB(glVertexAttribI4usvEXT, 887)
GL_STUB(glVertexAttribIPointerEXT, 888)
GL_STUB(glFramebufferTextureLayerEXT, 889)
GL_STUB(glColorMaskIndexedEXT, 890)
GL_STUB(glDisableIndexedEXT, 891)
GL_STUB(glEnableIndexedEXT, 892)
GL_STUB(glGetBooleanIndexedvEXT, 893)
GL_STUB(glGetIntegerIndexedvEXT, 894)
GL_STUB(glIsEnabledIndexedEXT, 895)
GL_STUB(glClearColorIiEXT, 896)
GL_STUB(glClearColorIuiEXT, 897)
GL_STUB(glGetTexParameterIivEXT, 898)
GL_STUB(glGetTexParameterIuivEXT, 899)
GL_STUB(glTexParameterIivEXT, 900)
GL_STUB(glTexParameterIuivEXT, 901)
GL_STUB(glBeginConditionalRenderNV, 902)
GL_STUB(glEndConditionalRenderNV, 903)
GL_STUB(glBeginTransformFeedbackEXT, 904)
GL_STUB(glBindBufferBaseEXT, 905)
GL_STUB(glBindBufferOffsetEXT, 906)
GL_STUB(glBindBufferRangeEXT, 907)
GL_STUB(glEndTransformFeedbackEXT, 908)
GL_STUB(glGetTransformFeedbackVaryingEXT, 909)
GL_STUB(glTransformFeedbackVaryingsEXT, 910)
GL_STUB(glProvokingVertexEXT, 911)
GL_STUB(gl_dispatch_stub_912, 912)
HIDDEN(gl_dispatch_stub_912)
GL_STUB(gl_dispatch_stub_855, 855)
HIDDEN(gl_dispatch_stub_855)
GL_STUB(glBindFragDataLocationEXT, 856)
GL_STUB(glGetFragDataLocationEXT, 857)
GL_STUB(glGetUniformuivEXT, 858)
GL_STUB(glGetVertexAttribIivEXT, 859)
GL_STUB(glGetVertexAttribIuivEXT, 860)
GL_STUB(glUniform1uiEXT, 861)
GL_STUB(glUniform1uivEXT, 862)
GL_STUB(glUniform2uiEXT, 863)
GL_STUB(glUniform2uivEXT, 864)
GL_STUB(glUniform3uiEXT, 865)
GL_STUB(glUniform3uivEXT, 866)
GL_STUB(glUniform4uiEXT, 867)
GL_STUB(glUniform4uivEXT, 868)
GL_STUB(glVertexAttribI1iEXT, 869)
GL_STUB(glVertexAttribI1ivEXT, 870)
GL_STUB(glVertexAttribI1uiEXT, 871)
GL_STUB(glVertexAttribI1uivEXT, 872)
GL_STUB(glVertexAttribI2iEXT, 873)
GL_STUB(glVertexAttribI2ivEXT, 874)
GL_STUB(glVertexAttribI2uiEXT, 875)
GL_STUB(glVertexAttribI2uivEXT, 876)
GL_STUB(glVertexAttribI3iEXT, 877)
GL_STUB(glVertexAttribI3ivEXT, 878)
GL_STUB(glVertexAttribI3uiEXT, 879)
GL_STUB(glVertexAttribI3uivEXT, 880)
GL_STUB(glVertexAttribI4bvEXT, 881)
GL_STUB(glVertexAttribI4iEXT, 882)
GL_STUB(glVertexAttribI4ivEXT, 883)
GL_STUB(glVertexAttribI4svEXT, 884)
GL_STUB(glVertexAttribI4ubvEXT, 885)
GL_STUB(glVertexAttribI4uiEXT, 886)
GL_STUB(glVertexAttribI4uivEXT, 887)
GL_STUB(glVertexAttribI4usvEXT, 888)
GL_STUB(glVertexAttribIPointerEXT, 889)
GL_STUB(glFramebufferTextureLayerEXT, 890)
GL_STUB(glColorMaskIndexedEXT, 891)
GL_STUB(glDisableIndexedEXT, 892)
GL_STUB(glEnableIndexedEXT, 893)
GL_STUB(glGetBooleanIndexedvEXT, 894)
GL_STUB(glGetIntegerIndexedvEXT, 895)
GL_STUB(glIsEnabledIndexedEXT, 896)
GL_STUB(glClearColorIiEXT, 897)
GL_STUB(glClearColorIuiEXT, 898)
GL_STUB(glGetTexParameterIivEXT, 899)
GL_STUB(glGetTexParameterIuivEXT, 900)
GL_STUB(glTexParameterIivEXT, 901)
GL_STUB(glTexParameterIuivEXT, 902)
GL_STUB(glBeginConditionalRenderNV, 903)
GL_STUB(glEndConditionalRenderNV, 904)
GL_STUB(glBeginTransformFeedbackEXT, 905)
GL_STUB(glBindBufferBaseEXT, 906)
GL_STUB(glBindBufferOffsetEXT, 907)
GL_STUB(glBindBufferRangeEXT, 908)
GL_STUB(glEndTransformFeedbackEXT, 909)
GL_STUB(glGetTransformFeedbackVaryingEXT, 910)
GL_STUB(glTransformFeedbackVaryingsEXT, 911)
GL_STUB(glProvokingVertexEXT, 912)
GL_STUB(gl_dispatch_stub_913, 913)
HIDDEN(gl_dispatch_stub_913)
GL_STUB(glGetObjectParameterivAPPLE, 914)
GL_STUB(glObjectPurgeableAPPLE, 915)
GL_STUB(glObjectUnpurgeableAPPLE, 916)
GL_STUB(glActiveProgramEXT, 917)
GL_STUB(glCreateShaderProgramEXT, 918)
GL_STUB(glUseShaderProgramEXT, 919)
GL_STUB(glTextureBarrierNV, 920)
GL_STUB(gl_dispatch_stub_921, 921)
HIDDEN(gl_dispatch_stub_921)
GL_STUB(gl_dispatch_stub_914, 914)
HIDDEN(gl_dispatch_stub_914)
GL_STUB(glGetObjectParameterivAPPLE, 915)
GL_STUB(glObjectPurgeableAPPLE, 916)
GL_STUB(glObjectUnpurgeableAPPLE, 917)
GL_STUB(glActiveProgramEXT, 918)
GL_STUB(glCreateShaderProgramEXT, 919)
GL_STUB(glUseShaderProgramEXT, 920)
GL_STUB(glTextureBarrierNV, 921)
GL_STUB(gl_dispatch_stub_922, 922)
HIDDEN(gl_dispatch_stub_922)
GL_STUB(gl_dispatch_stub_923, 923)
@ -1156,8 +1155,10 @@ gl_dispatch_functions_start:
HIDDEN(gl_dispatch_stub_924)
GL_STUB(gl_dispatch_stub_925, 925)
HIDDEN(gl_dispatch_stub_925)
GL_STUB(glEGLImageTargetRenderbufferStorageOES, 926)
GL_STUB(glEGLImageTargetTexture2DOES, 927)
GL_STUB(gl_dispatch_stub_926, 926)
HIDDEN(gl_dispatch_stub_926)
GL_STUB(glEGLImageTargetRenderbufferStorageOES, 927)
GL_STUB(glEGLImageTargetTexture2DOES, 928)
GL_STUB_ALIAS(glArrayElementEXT, glArrayElement)
GL_STUB_ALIAS(glBindTextureEXT, glBindTexture)
GL_STUB_ALIAS(glDrawArraysEXT, glDrawArrays)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -634,340 +634,341 @@ struct _glapi_table
GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 591 */
void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 592 */
void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 593 */
void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 594 */
void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 595 */
void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 596 */
void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 597 */
void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 598 */
void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 599 */
void (GLAPIENTRYP BindSampler)(GLuint unit, GLuint sampler); /* 600 */
void (GLAPIENTRYP DeleteSamplers)(GLsizei count, const GLuint * samplers); /* 601 */
void (GLAPIENTRYP GenSamplers)(GLsizei count, GLuint * samplers); /* 602 */
void (GLAPIENTRYP GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); /* 603 */
void (GLAPIENTRYP GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); /* 604 */
void (GLAPIENTRYP GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); /* 605 */
void (GLAPIENTRYP GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); /* 606 */
GLboolean (GLAPIENTRYP IsSampler)(GLuint sampler); /* 607 */
void (GLAPIENTRYP SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params); /* 608 */
void (GLAPIENTRYP SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params); /* 609 */
void (GLAPIENTRYP SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); /* 610 */
void (GLAPIENTRYP SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params); /* 611 */
void (GLAPIENTRYP SamplerParameteri)(GLuint sampler, GLenum pname, GLint param); /* 612 */
void (GLAPIENTRYP SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params); /* 613 */
void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 614 */
void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 615 */
void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 616 */
void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 617 */
GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 618 */
void (GLAPIENTRYP PauseTransformFeedback)(void); /* 619 */
void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 620 */
void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 621 */
void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 622 */
void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 623 */
void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 624 */
void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 625 */
GLenum (GLAPIENTRYP GetGraphicsResetStatusARB)(void); /* 626 */
void (GLAPIENTRYP GetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table); /* 627 */
void (GLAPIENTRYP GetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, GLvoid * img); /* 628 */
void (GLAPIENTRYP GetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image); /* 629 */
void (GLAPIENTRYP GetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 630 */
void (GLAPIENTRYP GetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); /* 631 */
void (GLAPIENTRYP GetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); /* 632 */
void (GLAPIENTRYP GetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); /* 633 */
void (GLAPIENTRYP GetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 634 */
void (GLAPIENTRYP GetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); /* 635 */
void (GLAPIENTRYP GetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); /* 636 */
void (GLAPIENTRYP GetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); /* 637 */
void (GLAPIENTRYP GetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); /* 638 */
void (GLAPIENTRYP GetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); /* 639 */
void (GLAPIENTRYP GetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img); /* 640 */
void (GLAPIENTRYP GetnUniformdvARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLdouble * params); /* 641 */
void (GLAPIENTRYP GetnUniformfvARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLfloat * params); /* 642 */
void (GLAPIENTRYP GetnUniformivARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLint * params); /* 643 */
void (GLAPIENTRYP GetnUniformuivARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLuint * params); /* 644 */
void (GLAPIENTRYP ReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data); /* 645 */
void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 646 */
void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 647 */
void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 648 */
void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 649 */
void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 650 */
void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 651 */
void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 652 */
void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 653 */
void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 654 */
void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 655 */
void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 656 */
void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 657 */
void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 658 */
void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 659 */
void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 660 */
void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 661 */
void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 662 */
void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 663 */
void (GLAPIENTRYP UnlockArraysEXT)(void); /* 664 */
void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 665 */
void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 666 */
void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 667 */
void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 668 */
void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 669 */
void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 670 */
void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 671 */
void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 672 */
void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 673 */
void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 674 */
void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 675 */
void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 676 */
void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 677 */
void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 678 */
void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 679 */
void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 680 */
void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 681 */
void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 682 */
void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 683 */
void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 684 */
void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 685 */
void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 686 */
void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 687 */
void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 688 */
void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 689 */
void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 690 */
void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 691 */
void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 692 */
void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 693 */
void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 694 */
void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 695 */
void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 696 */
void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 697 */
void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 698 */
void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 699 */
void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 700 */
void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 701 */
void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 702 */
void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 703 */
void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 704 */
void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 705 */
void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 706 */
void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 707 */
void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 708 */
void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 709 */
void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 710 */
void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 711 */
void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 712 */
void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 713 */
void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 714 */
void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 715 */
void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 716 */
void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 717 */
void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 718 */
void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 719 */
void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 720 */
void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 721 */
void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 722 */
void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 723 */
void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 724 */
void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 725 */
void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 726 */
void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 727 */
void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 728 */
void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 729 */
void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 730 */
void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 731 */
void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 732 */
void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 733 */
void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 734 */
void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 735 */
void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 736 */
GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 737 */
void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 738 */
GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 739 */
GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 740 */
void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 741 */
void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 742 */
void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 743 */
void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 744 */
void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 745 */
void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 746 */
void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 747 */
void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 748 */
void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 749 */
void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 750 */
void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 751 */
void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 752 */
void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 753 */
GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 754 */
void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 755 */
void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 756 */
void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 757 */
void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 758 */
void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 759 */
void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 760 */
void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 761 */
void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 762 */
void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 763 */
void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 764 */
void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 765 */
void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 766 */
void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 767 */
void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 768 */
void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 769 */
void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 770 */
void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 771 */
void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 772 */
void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 773 */
void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 774 */
void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 775 */
void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 776 */
void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 777 */
void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 778 */
void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 779 */
void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 780 */
void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 781 */
void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 782 */
void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 783 */
void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 784 */
void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 785 */
void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 786 */
void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 787 */
void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 788 */
void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 789 */
void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 790 */
void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 791 */
void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 792 */
void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 793 */
void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 794 */
void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 795 */
void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 796 */
void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 797 */
void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 798 */
void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 799 */
void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 800 */
void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 801 */
void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 802 */
void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 803 */
void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 804 */
void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 805 */
void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 806 */
void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 807 */
void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 808 */
void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 809 */
void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 810 */
void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 811 */
void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 812 */
void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 813 */
GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 814 */
void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 815 */
void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 816 */
void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 817 */
void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 818 */
void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 819 */
void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 820 */
void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 821 */
void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 822 */
void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 823 */
GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 824 */
void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 825 */
void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 826 */
void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 827 */
void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 828 */
void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 829 */
void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 830 */
void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 831 */
void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 832 */
void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 833 */
void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 834 */
void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 835 */
void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 836 */
GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 837 */
void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 838 */
void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 839 */
void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 840 */
void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 841 */
void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 842 */
void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 843 */
void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 844 */
void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 845 */
void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 846 */
void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 847 */
void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 848 */
GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 849 */
GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 850 */
void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 851 */
void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 852 */
void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 853 */
void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 854 */
void (GLAPIENTRYP BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name); /* 855 */
GLint (GLAPIENTRYP GetFragDataLocationEXT)(GLuint program, const GLchar * name); /* 856 */
void (GLAPIENTRYP GetUniformuivEXT)(GLuint program, GLint location, GLuint * params); /* 857 */
void (GLAPIENTRYP GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); /* 858 */
void (GLAPIENTRYP GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); /* 859 */
void (GLAPIENTRYP Uniform1uiEXT)(GLint location, GLuint x); /* 860 */
void (GLAPIENTRYP Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 861 */
void (GLAPIENTRYP Uniform2uiEXT)(GLint location, GLuint x, GLuint y); /* 862 */
void (GLAPIENTRYP Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 863 */
void (GLAPIENTRYP Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z); /* 864 */
void (GLAPIENTRYP Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 865 */
void (GLAPIENTRYP Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 866 */
void (GLAPIENTRYP Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 867 */
void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 868 */
void (GLAPIENTRYP VertexAttribI1ivEXT)(GLuint index, const GLint * v); /* 869 */
void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 870 */
void (GLAPIENTRYP VertexAttribI1uivEXT)(GLuint index, const GLuint * v); /* 871 */
void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 872 */
void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 873 */
void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 874 */
void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 875 */
void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 876 */
void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 877 */
void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 878 */
void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 879 */
void (GLAPIENTRYP VertexAttribI4bvEXT)(GLuint index, const GLbyte * v); /* 880 */
void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 881 */
void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 882 */
void (GLAPIENTRYP VertexAttribI4svEXT)(GLuint index, const GLshort * v); /* 883 */
void (GLAPIENTRYP VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); /* 884 */
void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 885 */
void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 886 */
void (GLAPIENTRYP VertexAttribI4usvEXT)(GLuint index, const GLushort * v); /* 887 */
void (GLAPIENTRYP VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 888 */
void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 889 */
void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 890 */
void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 891 */
void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 892 */
void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 893 */
void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 894 */
GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 895 */
void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 896 */
void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 897 */
void (GLAPIENTRYP GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); /* 898 */
void (GLAPIENTRYP GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); /* 899 */
void (GLAPIENTRYP TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); /* 900 */
void (GLAPIENTRYP TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); /* 901 */
void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 902 */
void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 903 */
void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 904 */
void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 905 */
void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 906 */
void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 907 */
void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 908 */
void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 909 */
void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 910 */
void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 911 */
void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 912 */
void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 913 */
void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 914 */
GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 915 */
GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 916 */
void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 917 */
GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 918 */
void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 919 */
void (GLAPIENTRYP TextureBarrierNV)(void); /* 920 */
void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 921 */
void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 922 */
void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 923 */
void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 924 */
void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 925 */
void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 926 */
void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 927 */
void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex); /* 594 */
void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 595 */
void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 596 */
void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 597 */
void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 598 */
void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 599 */
void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 600 */
void (GLAPIENTRYP BindSampler)(GLuint unit, GLuint sampler); /* 601 */
void (GLAPIENTRYP DeleteSamplers)(GLsizei count, const GLuint * samplers); /* 602 */
void (GLAPIENTRYP GenSamplers)(GLsizei count, GLuint * samplers); /* 603 */
void (GLAPIENTRYP GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); /* 604 */
void (GLAPIENTRYP GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); /* 605 */
void (GLAPIENTRYP GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); /* 606 */
void (GLAPIENTRYP GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); /* 607 */
GLboolean (GLAPIENTRYP IsSampler)(GLuint sampler); /* 608 */
void (GLAPIENTRYP SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params); /* 609 */
void (GLAPIENTRYP SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params); /* 610 */
void (GLAPIENTRYP SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); /* 611 */
void (GLAPIENTRYP SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params); /* 612 */
void (GLAPIENTRYP SamplerParameteri)(GLuint sampler, GLenum pname, GLint param); /* 613 */
void (GLAPIENTRYP SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params); /* 614 */
void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 615 */
void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 616 */
void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 617 */
void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 618 */
GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 619 */
void (GLAPIENTRYP PauseTransformFeedback)(void); /* 620 */
void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 621 */
void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 622 */
void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 623 */
void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 624 */
void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 625 */
void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 626 */
GLenum (GLAPIENTRYP GetGraphicsResetStatusARB)(void); /* 627 */
void (GLAPIENTRYP GetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table); /* 628 */
void (GLAPIENTRYP GetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, GLvoid * img); /* 629 */
void (GLAPIENTRYP GetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image); /* 630 */
void (GLAPIENTRYP GetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 631 */
void (GLAPIENTRYP GetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); /* 632 */
void (GLAPIENTRYP GetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); /* 633 */
void (GLAPIENTRYP GetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); /* 634 */
void (GLAPIENTRYP GetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 635 */
void (GLAPIENTRYP GetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); /* 636 */
void (GLAPIENTRYP GetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); /* 637 */
void (GLAPIENTRYP GetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); /* 638 */
void (GLAPIENTRYP GetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); /* 639 */
void (GLAPIENTRYP GetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); /* 640 */
void (GLAPIENTRYP GetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img); /* 641 */
void (GLAPIENTRYP GetnUniformdvARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLdouble * params); /* 642 */
void (GLAPIENTRYP GetnUniformfvARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLfloat * params); /* 643 */
void (GLAPIENTRYP GetnUniformivARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLint * params); /* 644 */
void (GLAPIENTRYP GetnUniformuivARB)(GLhandleARB program, GLint location, GLsizei bufSize, GLuint * params); /* 645 */
void (GLAPIENTRYP ReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data); /* 646 */
void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 647 */
void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 648 */
void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 649 */
void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 650 */
void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 651 */
void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 652 */
void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 653 */
void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 654 */
void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 655 */
void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 656 */
void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 657 */
void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 658 */
void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 659 */
void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 660 */
void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 661 */
void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 662 */
void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 663 */
void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 664 */
void (GLAPIENTRYP UnlockArraysEXT)(void); /* 665 */
void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 666 */
void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 667 */
void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 668 */
void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 669 */
void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 670 */
void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 671 */
void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 672 */
void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 673 */
void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 674 */
void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 675 */
void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 676 */
void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 677 */
void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 678 */
void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 679 */
void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 680 */
void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 681 */
void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 682 */
void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 683 */
void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 684 */
void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 685 */
void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 686 */
void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 687 */
void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 688 */
void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 689 */
void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 690 */
void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 691 */
void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 692 */
void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 693 */
void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 694 */
void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 695 */
void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 696 */
void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 697 */
void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 698 */
void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 699 */
void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 700 */
void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 701 */
void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 702 */
void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 703 */
void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 704 */
void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 705 */
void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 706 */
void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 707 */
void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 708 */
void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 709 */
void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 710 */
void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 711 */
void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 712 */
void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 713 */
void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 714 */
void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 715 */
void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 716 */
void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 717 */
void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 718 */
void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 719 */
void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 720 */
void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 721 */
void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 722 */
void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 723 */
void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 724 */
void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 725 */
void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 726 */
void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 727 */
void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 728 */
void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 729 */
void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 730 */
void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 731 */
void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 732 */
void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 733 */
void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 734 */
void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 735 */
void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 736 */
void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 737 */
GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 738 */
void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 739 */
GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 740 */
GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 741 */
void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 742 */
void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 743 */
void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 744 */
void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 745 */
void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 746 */
void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 747 */
void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 748 */
void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 749 */
void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 750 */
void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 751 */
void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 752 */
void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 753 */
void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 754 */
GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 755 */
void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 756 */
void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 757 */
void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 758 */
void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 759 */
void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 760 */
void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 761 */
void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 762 */
void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 763 */
void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 764 */
void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 765 */
void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 766 */
void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 767 */
void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 768 */
void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 769 */
void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 770 */
void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 771 */
void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 772 */
void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 773 */
void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 774 */
void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 775 */
void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 776 */
void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 777 */
void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 778 */
void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 779 */
void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 780 */
void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 781 */
void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 782 */
void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 783 */
void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 784 */
void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 785 */
void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 786 */
void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 787 */
void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 788 */
void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 789 */
void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 790 */
void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 791 */
void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 792 */
void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 793 */
void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 794 */
void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 795 */
void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 796 */
void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 797 */
void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 798 */
void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 799 */
void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 800 */
void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 801 */
void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 802 */
void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 803 */
void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 804 */
void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 805 */
void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 806 */
void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 807 */
void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 808 */
void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 809 */
void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 810 */
void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 811 */
void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 812 */
void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 813 */
void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 814 */
GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 815 */
void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 816 */
void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 817 */
void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 818 */
void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 819 */
void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 820 */
void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 821 */
void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 822 */
void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 823 */
void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 824 */
GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 825 */
void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 826 */
void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 827 */
void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 828 */
void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 829 */
void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 830 */
void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 831 */
void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 832 */
void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 833 */
void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 834 */
void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 835 */
void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 836 */
void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 837 */
GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 838 */
void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 839 */
void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 840 */
void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 841 */
void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 842 */
void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 843 */
void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 844 */
void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 845 */
void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 846 */
void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 847 */
void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 848 */
void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 849 */
GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 850 */
GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 851 */
void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 852 */
void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 853 */
void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 854 */
void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 855 */
void (GLAPIENTRYP BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name); /* 856 */
GLint (GLAPIENTRYP GetFragDataLocationEXT)(GLuint program, const GLchar * name); /* 857 */
void (GLAPIENTRYP GetUniformuivEXT)(GLuint program, GLint location, GLuint * params); /* 858 */
void (GLAPIENTRYP GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); /* 859 */
void (GLAPIENTRYP GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); /* 860 */
void (GLAPIENTRYP Uniform1uiEXT)(GLint location, GLuint x); /* 861 */
void (GLAPIENTRYP Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 862 */
void (GLAPIENTRYP Uniform2uiEXT)(GLint location, GLuint x, GLuint y); /* 863 */
void (GLAPIENTRYP Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 864 */
void (GLAPIENTRYP Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z); /* 865 */
void (GLAPIENTRYP Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 866 */
void (GLAPIENTRYP Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 867 */
void (GLAPIENTRYP Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 868 */
void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 869 */
void (GLAPIENTRYP VertexAttribI1ivEXT)(GLuint index, const GLint * v); /* 870 */
void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 871 */
void (GLAPIENTRYP VertexAttribI1uivEXT)(GLuint index, const GLuint * v); /* 872 */
void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 873 */
void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 874 */
void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 875 */
void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 876 */
void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 877 */
void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 878 */
void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 879 */
void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 880 */
void (GLAPIENTRYP VertexAttribI4bvEXT)(GLuint index, const GLbyte * v); /* 881 */
void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 882 */
void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 883 */
void (GLAPIENTRYP VertexAttribI4svEXT)(GLuint index, const GLshort * v); /* 884 */
void (GLAPIENTRYP VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); /* 885 */
void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 886 */
void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 887 */
void (GLAPIENTRYP VertexAttribI4usvEXT)(GLuint index, const GLushort * v); /* 888 */
void (GLAPIENTRYP VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 889 */
void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 890 */
void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 891 */
void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 892 */
void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 893 */
void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 894 */
void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 895 */
GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 896 */
void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 897 */
void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 898 */
void (GLAPIENTRYP GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); /* 899 */
void (GLAPIENTRYP GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); /* 900 */
void (GLAPIENTRYP TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); /* 901 */
void (GLAPIENTRYP TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); /* 902 */
void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 903 */
void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 904 */
void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 905 */
void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 906 */
void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 907 */
void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 908 */
void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 909 */
void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 910 */
void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 911 */
void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 912 */
void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 913 */
void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 914 */
void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 915 */
GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 916 */
GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 917 */
void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 918 */
GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 919 */
void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 920 */
void (GLAPIENTRYP TextureBarrierNV)(void); /* 921 */
void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 922 */
void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 923 */
void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 924 */
void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 925 */
void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 926 */
void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 927 */
void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 928 */
};
#endif /* !defined( _GLAPI_TABLE_H_ ) */

View file

@ -4032,6 +4032,11 @@ KEYWORD1 void KEYWORD2 NAME(DrawElementsBaseVertex)(GLenum mode, GLsizei count,
DISPATCH(DrawElementsBaseVertex, (mode, count, type, indices, basevertex), (F, "glDrawElementsBaseVertex(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, basevertex));
}
KEYWORD1 void KEYWORD2 NAME(DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex)
{
DISPATCH(DrawElementsInstancedBaseVertex, (mode, count, type, indices, primcount, basevertex), (F, "glDrawElementsInstancedBaseVertex(0x%x, %d, 0x%x, %p, %d, %d);\n", mode, count, type, (const void *) indices, primcount, basevertex));
}
KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex)
{
DISPATCH(DrawRangeElementsBaseVertex, (mode, start, end, count, type, indices, basevertex), (F, "glDrawRangeElementsBaseVertex(0x%x, %d, %d, %d, 0x%x, %p, %d);\n", mode, start, end, count, type, (const void *) indices, basevertex));
@ -4317,58 +4322,58 @@ KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_647)(GLenum pname, GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(GLenum pname, GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_647)(GLenum pname, GLfloat * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(GLenum pname, GLfloat * params)
{
DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(GLenum pname, GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(GLenum pname, GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(GLenum pname, GLint * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(GLenum pname, GLint * params)
{
DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(GLenum pname, GLfloat param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLenum pname, GLfloat param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(GLenum pname, GLfloat param)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLenum pname, GLfloat param)
{
DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLenum pname, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLenum pname, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLenum pname, const GLfloat * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLenum pname, const GLfloat * params)
{
DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLenum pname, GLint param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLenum pname, GLint param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLenum pname, GLint param)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLenum pname, GLint param)
{
DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLenum pname, const GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLenum pname, const GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLenum pname, const GLint * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLenum pname, const GLint * params)
{
DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLclampf value, GLboolean invert);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLclampf value, GLboolean invert);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLclampf value, GLboolean invert)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLclampf value, GLboolean invert)
{
DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLenum pattern);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_655)(GLenum pattern);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLenum pattern)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_655)(GLenum pattern)
{
DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
}
@ -4418,9 +4423,9 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_661)(GLenum pname, GLfloat param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_662)(GLenum pname, GLfloat param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_661)(GLenum pname, GLfloat param)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_662)(GLenum pname, GLfloat param)
{
DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
}
@ -4440,9 +4445,9 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * p
DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_662)(GLenum pname, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_663)(GLenum pname, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_662)(GLenum pname, const GLfloat * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_663)(GLenum pname, const GLfloat * params)
{
DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
}
@ -4697,9 +4702,9 @@ KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_689)(GLenum mode);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(GLenum mode);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_689)(GLenum mode)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(GLenum mode)
{
DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
}
@ -4714,9 +4719,9 @@ KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfac
DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_691)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_691)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
{
DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
}
@ -5081,65 +5086,65 @@ KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_731)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_732)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_731)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_732)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
{
DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_732)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_733)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_732)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_733)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
{
DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_733)(GLsizei n, const GLuint * fences);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLsizei n, const GLuint * fences);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_733)(GLsizei n, const GLuint * fences)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLsizei n, const GLuint * fences)
{
DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLuint fence);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLuint fence);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLuint fence)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLuint fence)
{
DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLsizei n, GLuint * fences);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLsizei n, GLuint * fences);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLsizei n, GLuint * fences)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLsizei n, GLuint * fences)
{
DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLuint fence, GLenum pname, GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLuint fence, GLenum pname, GLint * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLuint fence, GLenum pname, GLint * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLuint fence, GLenum pname, GLint * params)
{
DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
}
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_737)(GLuint fence);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_738)(GLuint fence);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_737)(GLuint fence)
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_738)(GLuint fence)
{
RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLuint fence, GLenum condition);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLuint fence, GLenum condition);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLuint fence, GLenum condition)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLuint fence, GLenum condition)
{
DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
}
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_739)(GLuint fence);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_740)(GLuint fence);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_739)(GLuint fence)
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_740)(GLuint fence)
{
RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
}
@ -5584,16 +5589,16 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * para
DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_820)(GLenum face);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_821)(GLenum face);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_820)(GLenum face)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_821)(GLenum face)
{
DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_821)(GLuint array);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_822)(GLuint array);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_821)(GLuint array)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_822)(GLuint array)
{
DISPATCH(BindVertexArrayAPPLE, (array), (F, "glBindVertexArrayAPPLE(%d);\n", array));
}
@ -5603,16 +5608,16 @@ KEYWORD1 void KEYWORD2 NAME(DeleteVertexArrays)(GLsizei n, const GLuint * arrays
DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArrays(%d, %p);\n", n, (const void *) arrays));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_822)(GLsizei n, const GLuint * arrays);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_823)(GLsizei n, const GLuint * arrays);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_822)(GLsizei n, const GLuint * arrays)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_823)(GLsizei n, const GLuint * arrays)
{
DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_823)(GLsizei n, GLuint * arrays);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_824)(GLsizei n, GLuint * arrays);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_823)(GLsizei n, GLuint * arrays)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_824)(GLsizei n, GLuint * arrays)
{
DISPATCH(GenVertexArraysAPPLE, (n, arrays), (F, "glGenVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays));
}
@ -5622,9 +5627,9 @@ KEYWORD1 GLboolean KEYWORD2 NAME(IsVertexArray)(GLuint array)
RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArray(%d);\n", array));
}
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_824)(GLuint array);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_825)(GLuint array);
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_824)(GLuint array)
KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_825)(GLuint array)
{
RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArrayAPPLE(%d);\n", array));
}
@ -5674,9 +5679,9 @@ KEYWORD1 void KEYWORD2 NAME(PrimitiveRestartNV)(void)
DISPATCH(PrimitiveRestartNV, (), (F, "glPrimitiveRestartNV();\n"));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_833)(GLclampd zmin, GLclampd zmax);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLclampd zmin, GLclampd zmax);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_833)(GLclampd zmin, GLclampd zmax)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLclampd zmin, GLclampd zmax)
{
DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
}
@ -5686,9 +5691,9 @@ KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA)
DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparate(0x%x, 0x%x);\n", modeRGB, modeA));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLenum modeRGB, GLenum modeA);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_835)(GLenum modeRGB, GLenum modeA);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLenum modeRGB, GLenum modeA)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_835)(GLenum modeRGB, GLenum modeA)
{
DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
}
@ -5868,23 +5873,23 @@ KEYWORD1 void KEYWORD2 NAME(BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint src
DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_852)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_853)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_852)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_853)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
{
DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebufferEXT(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_853)(GLenum target, GLenum pname, GLint param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_854)(GLenum target, GLenum pname, GLint param);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_853)(GLenum target, GLenum pname, GLint param)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_854)(GLenum target, GLenum pname, GLint param)
{
DISPATCH(BufferParameteriAPPLE, (target, pname, param), (F, "glBufferParameteriAPPLE(0x%x, 0x%x, %d);\n", target, pname, param));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_854)(GLenum target, GLintptr offset, GLsizeiptr size);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_855)(GLenum target, GLintptr offset, GLsizeiptr size);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_854)(GLenum target, GLintptr offset, GLsizeiptr size)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_855)(GLenum target, GLintptr offset, GLsizeiptr size)
{
DISPATCH(FlushMappedBufferRangeAPPLE, (target, offset, size), (F, "glFlushMappedBufferRangeAPPLE(0x%x, %d, %d);\n", target, offset, size));
}
@ -6444,16 +6449,16 @@ KEYWORD1 void KEYWORD2 NAME(ProvokingVertex)(GLenum mode)
DISPATCH(ProvokingVertexEXT, (mode), (F, "glProvokingVertex(0x%x);\n", mode));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_912)(GLenum target, GLenum pname, GLvoid ** params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_913)(GLenum target, GLenum pname, GLvoid ** params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_912)(GLenum target, GLenum pname, GLvoid ** params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_913)(GLenum target, GLenum pname, GLvoid ** params)
{
DISPATCH(GetTexParameterPointervAPPLE, (target, pname, params), (F, "glGetTexParameterPointervAPPLE(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_913)(GLenum target, GLsizei length, GLvoid * pointer);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_914)(GLenum target, GLsizei length, GLvoid * pointer);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_913)(GLenum target, GLsizei length, GLvoid * pointer)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_914)(GLenum target, GLsizei length, GLvoid * pointer)
{
DISPATCH(TextureRangeAPPLE, (target, length, pointer), (F, "glTextureRangeAPPLE(0x%x, %d, %p);\n", target, length, (const void *) pointer));
}
@ -6493,37 +6498,37 @@ KEYWORD1 void KEYWORD2 NAME(TextureBarrierNV)(void)
DISPATCH(TextureBarrierNV, (), (F, "glTextureBarrierNV();\n"));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_921)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_922)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_921)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_922)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
{
DISPATCH(StencilFuncSeparateATI, (frontfunc, backfunc, ref, mask), (F, "glStencilFuncSeparateATI(0x%x, 0x%x, %d, %d);\n", frontfunc, backfunc, ref, mask));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_922)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_922)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
{
DISPATCH(ProgramEnvParameters4fvEXT, (target, index, count, params), (F, "glProgramEnvParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_923)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_923)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
{
DISPATCH(ProgramEnvParameters4fvEXT, (target, index, count, params), (F, "glProgramEnvParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_924)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_924)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
{
DISPATCH(ProgramLocalParameters4fvEXT, (target, index, count, params), (F, "glProgramLocalParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_924)(GLuint id, GLenum pname, GLint64EXT * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_925)(GLuint id, GLenum pname, GLint64EXT * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_924)(GLuint id, GLenum pname, GLint64EXT * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_925)(GLuint id, GLenum pname, GLint64EXT * params)
{
DISPATCH(GetQueryObjecti64vEXT, (id, pname, params), (F, "glGetQueryObjecti64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
}
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_925)(GLuint id, GLenum pname, GLuint64EXT * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_926)(GLuint id, GLenum pname, GLuint64EXT * params);
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_925)(GLuint id, GLenum pname, GLuint64EXT * params)
KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_926)(GLuint id, GLenum pname, GLuint64EXT * params)
{
DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
}
@ -7285,6 +7290,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(IsSync),
TABLE_ENTRY(WaitSync),
TABLE_ENTRY(DrawElementsBaseVertex),
TABLE_ENTRY(DrawElementsInstancedBaseVertex),
TABLE_ENTRY(DrawRangeElementsBaseVertex),
TABLE_ENTRY(MultiDrawElementsBaseVertex),
TABLE_ENTRY(BlendEquationSeparateiARB),
@ -7338,7 +7344,6 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(GetnUniformuivARB),
TABLE_ENTRY(ReadnPixelsARB),
TABLE_ENTRY(PolygonOffsetEXT),
TABLE_ENTRY(_dispatch_stub_647),
TABLE_ENTRY(_dispatch_stub_648),
TABLE_ENTRY(_dispatch_stub_649),
TABLE_ENTRY(_dispatch_stub_650),
@ -7346,6 +7351,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(_dispatch_stub_652),
TABLE_ENTRY(_dispatch_stub_653),
TABLE_ENTRY(_dispatch_stub_654),
TABLE_ENTRY(_dispatch_stub_655),
TABLE_ENTRY(ColorPointerEXT),
TABLE_ENTRY(EdgeFlagPointerEXT),
TABLE_ENTRY(IndexPointerEXT),
@ -7380,7 +7386,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(FogCoorddvEXT),
TABLE_ENTRY(FogCoordfEXT),
TABLE_ENTRY(FogCoordfvEXT),
TABLE_ENTRY(_dispatch_stub_689),
TABLE_ENTRY(_dispatch_stub_690),
TABLE_ENTRY(BlendFuncSeparateEXT),
TABLE_ENTRY(FlushVertexArrayRangeNV),
TABLE_ENTRY(VertexArrayRangeNV),
@ -7422,7 +7428,6 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(WindowPos4ivMESA),
TABLE_ENTRY(WindowPos4sMESA),
TABLE_ENTRY(WindowPos4svMESA),
TABLE_ENTRY(_dispatch_stub_731),
TABLE_ENTRY(_dispatch_stub_732),
TABLE_ENTRY(_dispatch_stub_733),
TABLE_ENTRY(_dispatch_stub_734),
@ -7431,6 +7436,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(_dispatch_stub_737),
TABLE_ENTRY(_dispatch_stub_738),
TABLE_ENTRY(_dispatch_stub_739),
TABLE_ENTRY(_dispatch_stub_740),
TABLE_ENTRY(AreProgramsResidentNV),
TABLE_ENTRY(BindProgramNV),
TABLE_ENTRY(DeleteProgramsNV),
@ -7511,11 +7517,11 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(SetFragmentShaderConstantATI),
TABLE_ENTRY(PointParameteriNV),
TABLE_ENTRY(PointParameterivNV),
TABLE_ENTRY(_dispatch_stub_820),
TABLE_ENTRY(_dispatch_stub_821),
TABLE_ENTRY(_dispatch_stub_822),
TABLE_ENTRY(_dispatch_stub_823),
TABLE_ENTRY(_dispatch_stub_824),
TABLE_ENTRY(_dispatch_stub_825),
TABLE_ENTRY(GetProgramNamedParameterdvNV),
TABLE_ENTRY(GetProgramNamedParameterfvNV),
TABLE_ENTRY(ProgramNamedParameter4dNV),
@ -7524,8 +7530,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(ProgramNamedParameter4fvNV),
TABLE_ENTRY(PrimitiveRestartIndexNV),
TABLE_ENTRY(PrimitiveRestartNV),
TABLE_ENTRY(_dispatch_stub_833),
TABLE_ENTRY(_dispatch_stub_834),
TABLE_ENTRY(_dispatch_stub_835),
TABLE_ENTRY(BindFramebufferEXT),
TABLE_ENTRY(BindRenderbufferEXT),
TABLE_ENTRY(CheckFramebufferStatusEXT),
@ -7543,9 +7549,9 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(IsFramebufferEXT),
TABLE_ENTRY(IsRenderbufferEXT),
TABLE_ENTRY(RenderbufferStorageEXT),
TABLE_ENTRY(_dispatch_stub_852),
TABLE_ENTRY(_dispatch_stub_853),
TABLE_ENTRY(_dispatch_stub_854),
TABLE_ENTRY(_dispatch_stub_855),
TABLE_ENTRY(BindFragDataLocationEXT),
TABLE_ENTRY(GetFragDataLocationEXT),
TABLE_ENTRY(GetUniformuivEXT),
@ -7603,8 +7609,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(GetTransformFeedbackVaryingEXT),
TABLE_ENTRY(TransformFeedbackVaryingsEXT),
TABLE_ENTRY(ProvokingVertexEXT),
TABLE_ENTRY(_dispatch_stub_912),
TABLE_ENTRY(_dispatch_stub_913),
TABLE_ENTRY(_dispatch_stub_914),
TABLE_ENTRY(GetObjectParameterivAPPLE),
TABLE_ENTRY(ObjectPurgeableAPPLE),
TABLE_ENTRY(ObjectUnpurgeableAPPLE),
@ -7612,11 +7618,11 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
TABLE_ENTRY(CreateShaderProgramEXT),
TABLE_ENTRY(UseShaderProgramEXT),
TABLE_ENTRY(TextureBarrierNV),
TABLE_ENTRY(_dispatch_stub_921),
TABLE_ENTRY(_dispatch_stub_922),
TABLE_ENTRY(_dispatch_stub_923),
TABLE_ENTRY(_dispatch_stub_924),
TABLE_ENTRY(_dispatch_stub_925),
TABLE_ENTRY(_dispatch_stub_926),
TABLE_ENTRY(EGLImageTargetRenderbufferStorageOES),
TABLE_ENTRY(EGLImageTargetTexture2DOES),
/* A whole bunch of no-op functions. These might be called
@ -7927,10 +7933,10 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
TABLE_ENTRY(BlendFuncIndexedAMD),
TABLE_ENTRY(PointParameterf),
TABLE_ENTRY(PointParameterfARB),
TABLE_ENTRY(_dispatch_stub_661),
TABLE_ENTRY(_dispatch_stub_662),
TABLE_ENTRY(PointParameterfv),
TABLE_ENTRY(PointParameterfvARB),
TABLE_ENTRY(_dispatch_stub_662),
TABLE_ENTRY(_dispatch_stub_663),
TABLE_ENTRY(SecondaryColor3b),
TABLE_ENTRY(SecondaryColor3bv),
TABLE_ENTRY(SecondaryColor3d),
@ -7956,7 +7962,7 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
TABLE_ENTRY(FogCoordf),
TABLE_ENTRY(FogCoordfv),
TABLE_ENTRY(BlendFuncSeparate),
TABLE_ENTRY(_dispatch_stub_690),
TABLE_ENTRY(_dispatch_stub_691),
TABLE_ENTRY(WindowPos2d),
TABLE_ENTRY(WindowPos2dARB),
TABLE_ENTRY(WindowPos2dv),

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
# -*-makefile-*-
COMMON_GALLIUM_SOURCES = \
../common/utils.c \
../common/vblank.c \
../common/dri_util.c \
../common/xmlconfig.c
COMMON_SOURCES = $(COMMON_GALLIUM_SOURCES) \
../../common/driverfuncs.c \
../common/texmem.c \
../common/drirenderbuffer.c
INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES)
OBJECTS = $(C_SOURCES:.c=.o) \
$(CXX_SOURCES:.cpp=.o) \
$(ASM_SOURCES:.S=.o)
### Include directories
SHARED_INCLUDES = \
-I. \
-I$(TOP)/src/mesa/drivers/dri/common \
-Iserver \
-I$(TOP)/include \
-I$(TOP)/src/mapi \
-I$(TOP)/src/mesa \
-I$(TOP)/src/egl/main \
-I$(TOP)/src/egl/drivers/dri \
$(LIBDRM_CFLAGS)
INCLUDES += $(API_DEFINES)
CXXFLAGS += $(API_DEFINES)

View file

@ -1,38 +1,5 @@
# -*-makefile-*-
COMMON_GALLIUM_SOURCES = \
../common/utils.c \
../common/vblank.c \
../common/dri_util.c \
../common/xmlconfig.c
COMMON_SOURCES = $(COMMON_GALLIUM_SOURCES) \
../../common/driverfuncs.c \
../common/texmem.c \
../common/drirenderbuffer.c
INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES)
OBJECTS = $(C_SOURCES:.c=.o) \
$(CXX_SOURCES:.cpp=.o) \
$(ASM_SOURCES:.S=.o)
### Include directories
SHARED_INCLUDES = \
-I. \
-I$(TOP)/src/mesa/drivers/dri/common \
-Iserver \
-I$(TOP)/include \
-I$(TOP)/src/mapi \
-I$(TOP)/src/mesa \
-I$(TOP)/src/egl/main \
-I$(TOP)/src/egl/drivers/dri \
$(LIBDRM_CFLAGS)
CFLAGS += $(API_DEFINES)
CXXFLAGS += $(API_DEFINES)
##### RULES #####
.c.o:
@ -45,7 +12,7 @@ CXXFLAGS += $(API_DEFINES)
$(CC) -c $(INCLUDES) $(DRI_CFLAGS) $(DRIVER_DEFINES) $< -o $@
##### TARGETS #####
#### TARGETS #####
default: subdirs lib
@ -55,7 +22,7 @@ lib: symlinks subdirs depend
@$(MAKE) $(LIBNAME) $(TOP)/$(LIB_DIR)/$(LIBNAME)
$(LIBNAME): $(OBJECTS) $(EXTRA_MODULES) $(MESA_MODULES) Makefile \
$(TOP)/src/mesa/drivers/dri/Makefile.template $(TOP)/src/mesa/drivers/dri/common/dri_test.o
$(TOP)/src/mesa/drivers/dri/Makefile.targets $(TOP)/src/mesa/drivers/dri/common/dri_test.o
$(MKLIB) -o $@.tmp -noprefix -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
$(OBJECTS) $(EXTRA_MODULES) $(DRI_LIB_DEPS)
$(CXX) $(CFLAGS) -o $@.test $(TOP)/src/mesa/drivers/dri/common/dri_test.o $@.tmp $(DRI_LIB_DEPS)

View file

@ -5,6 +5,8 @@ include $(TOP)/configs/current
LIBNAME = i810_dri.so
include ../Makefile.defines
DRIVER_SOURCES = \
i810context.c \
i810ioctl.c \
@ -24,5 +26,5 @@ C_SOURCES = \
ASM_SOURCES =
include ../Makefile.template
include ../Makefile.targets

View file

@ -4,6 +4,8 @@ include $(TOP)/configs/current
LIBNAME = i915_dri.so
include ../Makefile.defines
DRIVER_SOURCES = \
i830_context.c \
i830_state.c \
@ -63,7 +65,7 @@ DRIVER_DEFINES = -I../intel -DI915 \
INCLUDES += $(INTEL_CFLAGS)
DRI_LIB_DEPS += $(INTEL_LIBS)
include ../Makefile.template
include ../Makefile.targets
intel_decode.o: ../intel/intel_decode.c

View file

@ -687,6 +687,14 @@ i915_assert_not_dirty( struct intel_context *intel )
(void) dirty;
}
/** Return false; i915 does not support HiZ. */
static bool
i915_is_hiz_depth_format(struct intel_context *intel,
gl_format format)
{
return false;
}
void
i915InitVtbl(struct i915_context *i915)
{
@ -702,4 +710,5 @@ i915InitVtbl(struct i915_context *i915)
i915->intel.vtbl.assert_not_dirty = i915_assert_not_dirty;
i915->intel.vtbl.finish_batch = intel_finish_vb;
i915->intel.vtbl.render_target_supported = i915_render_target_supported;
i915->intel.vtbl.is_hiz_depth_format = i915_is_hiz_depth_format;
}

View file

@ -4,6 +4,8 @@ include $(TOP)/configs/current
LIBNAME = i965_dri.so
include ../Makefile.defines
DRIVER_SOURCES = \
intel_batchbuffer.c \
intel_blit.c \
@ -116,10 +118,13 @@ C_SOURCES = \
CXX_SOURCES = \
brw_cubemap_normalize.cpp \
brw_fs.cpp \
brw_fs_emit.cpp \
brw_fs_visitor.cpp \
brw_fs_channel_expressions.cpp \
brw_fs_reg_allocate.cpp \
brw_fs_schedule_instructions.cpp \
brw_fs_vector_splitting.cpp
brw_fs_vector_splitting.cpp \
brw_shader.cpp
ASM_SOURCES =
@ -128,7 +133,7 @@ DRIVER_DEFINES = -I../intel
INCLUDES += $(INTEL_CFLAGS)
DRI_LIB_DEPS += $(INTEL_LIBS)
include ../Makefile.template
include ../Makefile.targets
intel_decode.o: ../intel/intel_decode.c
intel_tex_layout.o: ../intel/intel_tex_layout.c

View file

@ -94,9 +94,9 @@ GLboolean brwCreateContext( int api,
ctx->Const.MaxVertexTextureImageUnits +
ctx->Const.MaxTextureImageUnits;
/* Mesa limits textures to 4kx4k; it would be nice to fix that someday
*/
ctx->Const.MaxTextureLevels = 13;
ctx->Const.MaxTextureLevels = 14; /* 8192 */
if (ctx->Const.MaxTextureLevels > MAX_TEXTURE_LEVELS)
ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS;
ctx->Const.Max3DTextureLevels = 9;
ctx->Const.MaxCubeTextureLevels = 12;
ctx->Const.MaxTextureRectSize = (1<<12);

View file

@ -231,8 +231,8 @@ struct brw_wm_prog_data {
GLuint first_curbe_grf;
GLuint first_curbe_grf_16;
GLuint total_grf;
GLuint total_grf_16;
GLuint reg_blocks;
GLuint reg_blocks_16;
GLuint total_scratch;
GLuint nr_params; /**< number of float params/constants */
@ -863,6 +863,17 @@ float convert_param(enum param_conversion conversion, float param)
}
}
/**
* Pre-gen6, the register file of the EUs was shared between threads,
* and each thread used some subset allocated on a 16-register block
* granularity. The unit states wanted these block counts.
*/
static inline int
brw_register_blocks(int reg_count)
{
return ALIGN(reg_count, 16) / 16 - 1;
}
GLboolean brw_do_cubemap_normalize(struct exec_list *instructions);
#endif

View file

@ -28,7 +28,10 @@
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
*/
#define INTEL_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low))
#define SET_FIELD(value, field) (((value) << field ## _SHIFT) & field ## _MASK)
#define GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT)
#ifndef BRW_DEFINES_H
#define BRW_DEFINES_H
@ -243,8 +246,17 @@
#define BRW_STENCILOP_DECR 6
#define BRW_STENCILOP_INVERT 7
/* Surface state DW0 */
#define BRW_SURFACE_RC_READ_WRITE (1 << 8)
#define BRW_SURFACE_MIPLAYOUT_SHIFT 10
#define BRW_SURFACE_MIPMAPLAYOUT_BELOW 0
#define BRW_SURFACE_MIPMAPLAYOUT_RIGHT 1
#define BRW_SURFACE_CUBEFACE_ENABLES 0x3f
#define BRW_SURFACE_BLEND_ENABLED (1 << 13)
#define BRW_SURFACE_WRITEDISABLE_B_SHIFT 14
#define BRW_SURFACE_WRITEDISABLE_G_SHIFT 15
#define BRW_SURFACE_WRITEDISABLE_R_SHIFT 16
#define BRW_SURFACE_WRITEDISABLE_A_SHIFT 17
#define BRW_SURFACEFORMAT_R32G32B32A32_FLOAT 0x000
#define BRW_SURFACEFORMAT_R32G32B32A32_SINT 0x001
@ -403,10 +415,14 @@
#define BRW_SURFACEFORMAT_R16G16B16_SNORM 0x19D
#define BRW_SURFACEFORMAT_R16G16B16_SSCALED 0x19E
#define BRW_SURFACEFORMAT_R16G16B16_USCALED 0x19F
#define BRW_SURFACE_FORMAT_SHIFT 18
#define BRW_SURFACE_FORMAT_MASK INTEL_MASK(26, 18)
#define BRW_SURFACERETURNFORMAT_FLOAT32 0
#define BRW_SURFACERETURNFORMAT_S1 1
#define BRW_SURFACE_TYPE_SHIFT 29
#define BRW_SURFACE_TYPE_MASK INTEL_MASK(31, 29)
#define BRW_SURFACE_1D 0
#define BRW_SURFACE_2D 1
#define BRW_SURFACE_3D 2
@ -414,6 +430,32 @@
#define BRW_SURFACE_BUFFER 4
#define BRW_SURFACE_NULL 7
/* Surface state DW2 */
#define BRW_SURFACE_HEIGHT_SHIFT 19
#define BRW_SURFACE_HEIGHT_MASK INTEL_MASK(31, 19)
#define BRW_SURFACE_WIDTH_SHIFT 6
#define BRW_SURFACE_WIDTH_MASK INTEL_MASK(18, 6)
#define BRW_SURFACE_LOD_SHIFT 2
#define BRW_SURFACE_LOD_MASK INTEL_MASK(5, 2)
/* Surface state DW3 */
#define BRW_SURFACE_DEPTH_SHIFT 21
#define BRW_SURFACE_DEPTH_MASK INTEL_MASK(31, 21)
#define BRW_SURFACE_PITCH_SHIFT 3
#define BRW_SURFACE_PITCH_MASK INTEL_MASK(19, 3)
#define BRW_SURFACE_TILED (1 << 1)
#define BRW_SURFACE_TILED_Y (1 << 0)
/* Surface state DW4 */
#define BRW_SURFACE_MIN_LOD_SHIFT 28
#define BRW_SURFACE_MIN_LOD_MASK INTEL_MASK(31, 28)
/* Surface state DW5 */
#define BRW_SURFACE_X_OFFSET_SHIFT 25
#define BRW_SURFACE_X_OFFSET_MASK INTEL_MASK(31, 25)
#define BRW_SURFACE_Y_OFFSET_SHIFT 20
#define BRW_SURFACE_Y_OFFSET_MASK INTEL_MASK(23, 20)
#define BRW_TEXCOORDMODE_WRAP 0
#define BRW_TEXCOORDMODE_MIRROR 1
#define BRW_TEXCOORDMODE_CLAMP 2

View file

@ -93,8 +93,6 @@ static void brw_set_dest(struct brw_compile *p,
struct brw_instruction *insn,
struct brw_reg dest)
{
struct intel_context *intel = &p->brw->intel;
if (dest.file != BRW_ARCHITECTURE_REGISTER_FILE &&
dest.file != BRW_MESSAGE_REGISTER_FILE)
assert(dest.nr < 128);
@ -1254,7 +1252,6 @@ struct brw_instruction *gen6_CONT(struct brw_compile *p,
struct brw_instruction *do_insn)
{
struct brw_instruction *insn;
int br = 2;
insn = next_insn(p, BRW_OPCODE_CONTINUE);
brw_set_dest(p, insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_D));

File diff suppressed because it is too large Load diff

View file

@ -359,12 +359,14 @@ class fs_visitor : public ir_visitor
{
public:
fs_visitor(struct brw_wm_compile *c, struct brw_shader *shader)
fs_visitor(struct brw_wm_compile *c, struct gl_shader_program *prog,
struct brw_shader *shader)
{
this->c = c;
this->p = &c->func;
this->brw = p->brw;
this->fp = brw->fragment_program;
this->fp = prog->FragmentProgram;
this->prog = prog;
this->intel = &brw->intel;
this->ctx = &intel->ctx;
this->mem_ctx = ralloc_context(NULL);
@ -466,6 +468,8 @@ public:
return emit(fs_inst(opcode, dst, src0, src1, src2));
}
int type_size(const struct glsl_type *type);
bool run();
void setup_paramvalues_refs();
void assign_curb_setup();
@ -542,6 +546,7 @@ public:
struct brw_wm_compile *c;
struct brw_compile *p;
struct brw_shader *shader;
struct gl_shader_program *prog;
void *mem_ctx;
exec_list instructions;
@ -570,8 +575,12 @@ public:
/** @} */
bool failed;
char *fail_msg;
/* Result of last visit() method. */
/* On entry to a visit() method, this is the storage for the
* result. On exit, the visit() called may have changed it, in
* which case the parent must use the new storage instead.
*/
fs_reg result;
fs_reg pixel_x;
@ -590,3 +599,4 @@ public:
GLboolean brw_do_channel_expressions(struct exec_list *instructions);
GLboolean brw_do_vector_splitting(struct exec_list *instructions);
bool brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog);

View file

@ -0,0 +1,875 @@
/*
* Copyright © 2010 Intel Corporation
*
* 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 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.
*/
/** @file brw_fs_emit.cpp
*
* This file supports emitting code from the FS LIR to the actual
* native instructions.
*/
extern "C" {
#include "main/macros.h"
#include "brw_context.h"
#include "brw_eu.h"
} /* extern "C" */
#include "brw_fs.h"
#include "../glsl/ir_print_visitor.h"
void
fs_visitor::generate_fb_write(fs_inst *inst)
{
GLboolean eot = inst->eot;
struct brw_reg implied_header;
/* Header is 2 regs, g0 and g1 are the contents. g0 will be implied
* move, here's g1.
*/
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
if (inst->header_present) {
if (intel->gen >= 6) {
brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
brw_MOV(p,
retype(brw_message_reg(inst->base_mrf), BRW_REGISTER_TYPE_UD),
retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
if (inst->target > 0) {
/* Set the render target index for choosing BLEND_STATE. */
brw_MOV(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 2),
BRW_REGISTER_TYPE_UD),
brw_imm_ud(inst->target));
}
implied_header = brw_null_reg();
} else {
implied_header = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW);
brw_MOV(p,
brw_message_reg(inst->base_mrf + 1),
brw_vec8_grf(1, 0));
}
} else {
implied_header = brw_null_reg();
}
brw_pop_insn_state(p);
brw_fb_WRITE(p,
c->dispatch_width,
inst->base_mrf,
implied_header,
inst->target,
inst->mlen,
0,
eot,
inst->header_present);
}
/* Computes the integer pixel x,y values from the origin.
*
* This is the basis of gl_FragCoord computation, but is also used
* pre-gen6 for computing the deltas from v0 for computing
* interpolation.
*/
void
fs_visitor::generate_pixel_xy(struct brw_reg dst, bool is_x)
{
struct brw_reg g1_uw = retype(brw_vec1_grf(1, 0), BRW_REGISTER_TYPE_UW);
struct brw_reg src;
struct brw_reg deltas;
if (is_x) {
src = stride(suboffset(g1_uw, 4), 2, 4, 0);
deltas = brw_imm_v(0x10101010);
} else {
src = stride(suboffset(g1_uw, 5), 2, 4, 0);
deltas = brw_imm_v(0x11001100);
}
if (c->dispatch_width == 16) {
dst = vec16(dst);
}
/* We do this 8 or 16-wide, but since the destination is UW we
* don't do compression in the 16-wide case.
*/
brw_push_insn_state(p);
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_ADD(p, dst, src, deltas);
brw_pop_insn_state(p);
}
void
fs_visitor::generate_linterp(fs_inst *inst,
struct brw_reg dst, struct brw_reg *src)
{
struct brw_reg delta_x = src[0];
struct brw_reg delta_y = src[1];
struct brw_reg interp = src[2];
if (brw->has_pln &&
delta_y.nr == delta_x.nr + 1 &&
(intel->gen >= 6 || (delta_x.nr & 1) == 0)) {
brw_PLN(p, dst, interp, delta_x);
} else {
brw_LINE(p, brw_null_reg(), interp, delta_x);
brw_MAC(p, dst, suboffset(interp, 1), delta_y);
}
}
void
fs_visitor::generate_math(fs_inst *inst,
struct brw_reg dst, struct brw_reg *src)
{
int op;
switch (inst->opcode) {
case FS_OPCODE_RCP:
op = BRW_MATH_FUNCTION_INV;
break;
case FS_OPCODE_RSQ:
op = BRW_MATH_FUNCTION_RSQ;
break;
case FS_OPCODE_SQRT:
op = BRW_MATH_FUNCTION_SQRT;
break;
case FS_OPCODE_EXP2:
op = BRW_MATH_FUNCTION_EXP;
break;
case FS_OPCODE_LOG2:
op = BRW_MATH_FUNCTION_LOG;
break;
case FS_OPCODE_POW:
op = BRW_MATH_FUNCTION_POW;
break;
case FS_OPCODE_SIN:
op = BRW_MATH_FUNCTION_SIN;
break;
case FS_OPCODE_COS:
op = BRW_MATH_FUNCTION_COS;
break;
default:
assert(!"not reached: unknown math function");
op = 0;
break;
}
if (intel->gen >= 6) {
assert(inst->mlen == 0);
if (inst->opcode == FS_OPCODE_POW) {
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_math2(p, dst, op, src[0], src[1]);
if (c->dispatch_width == 16) {
brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
brw_math2(p, sechalf(dst), op, sechalf(src[0]), sechalf(src[1]));
brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
}
} else {
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_math(p, dst,
op,
inst->saturate ? BRW_MATH_SATURATE_SATURATE :
BRW_MATH_SATURATE_NONE,
0, src[0],
BRW_MATH_DATA_VECTOR,
BRW_MATH_PRECISION_FULL);
if (c->dispatch_width == 16) {
brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
brw_math(p, sechalf(dst),
op,
inst->saturate ? BRW_MATH_SATURATE_SATURATE :
BRW_MATH_SATURATE_NONE,
0, sechalf(src[0]),
BRW_MATH_DATA_VECTOR,
BRW_MATH_PRECISION_FULL);
brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
}
}
} else /* gen <= 5 */{
assert(inst->mlen >= 1);
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_math(p, dst,
op,
inst->saturate ? BRW_MATH_SATURATE_SATURATE :
BRW_MATH_SATURATE_NONE,
inst->base_mrf, src[0],
BRW_MATH_DATA_VECTOR,
BRW_MATH_PRECISION_FULL);
if (c->dispatch_width == 16) {
brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
brw_math(p, sechalf(dst),
op,
inst->saturate ? BRW_MATH_SATURATE_SATURATE :
BRW_MATH_SATURATE_NONE,
inst->base_mrf + 1, sechalf(src[0]),
BRW_MATH_DATA_VECTOR,
BRW_MATH_PRECISION_FULL);
brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
}
}
}
void
fs_visitor::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src)
{
int msg_type = -1;
int rlen = 4;
uint32_t simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8;
if (c->dispatch_width == 16)
simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
if (intel->gen >= 5) {
switch (inst->opcode) {
case FS_OPCODE_TEX:
if (inst->shadow_compare) {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_COMPARE;
} else {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE;
}
break;
case FS_OPCODE_TXB:
if (inst->shadow_compare) {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE;
} else {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS;
}
break;
case FS_OPCODE_TXL:
if (inst->shadow_compare) {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE;
} else {
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD;
}
break;
case FS_OPCODE_TXD:
assert(!"TXD isn't supported on gen5+ yet.");
break;
}
} else {
switch (inst->opcode) {
case FS_OPCODE_TEX:
/* Note that G45 and older determines shadow compare and dispatch width
* from message length for most messages.
*/
assert(c->dispatch_width == 8);
msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE;
if (inst->shadow_compare) {
assert(inst->mlen == 6);
} else {
assert(inst->mlen <= 4);
}
break;
case FS_OPCODE_TXB:
if (inst->shadow_compare) {
assert(inst->mlen == 6);
msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_COMPARE;
} else {
assert(inst->mlen == 9);
msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS;
simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
}
break;
case FS_OPCODE_TXL:
if (inst->shadow_compare) {
assert(inst->mlen == 6);
msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_LOD_COMPARE;
} else {
assert(inst->mlen == 9);
msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD;
simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
}
break;
case FS_OPCODE_TXD:
assert(!"TXD isn't supported on gen4 yet.");
break;
}
}
assert(msg_type != -1);
if (simd_mode == BRW_SAMPLER_SIMD_MODE_SIMD16) {
rlen = 8;
dst = vec16(dst);
}
brw_SAMPLE(p,
retype(dst, BRW_REGISTER_TYPE_UW),
inst->base_mrf,
src,
SURF_INDEX_TEXTURE(inst->sampler),
inst->sampler,
WRITEMASK_XYZW,
msg_type,
rlen,
inst->mlen,
0,
inst->header_present,
simd_mode);
}
/* For OPCODE_DDX and OPCODE_DDY, per channel of output we've got input
* looking like:
*
* arg0: ss0.tl ss0.tr ss0.bl ss0.br ss1.tl ss1.tr ss1.bl ss1.br
*
* and we're trying to produce:
*
* DDX DDY
* dst: (ss0.tr - ss0.tl) (ss0.tl - ss0.bl)
* (ss0.tr - ss0.tl) (ss0.tr - ss0.br)
* (ss0.br - ss0.bl) (ss0.tl - ss0.bl)
* (ss0.br - ss0.bl) (ss0.tr - ss0.br)
* (ss1.tr - ss1.tl) (ss1.tl - ss1.bl)
* (ss1.tr - ss1.tl) (ss1.tr - ss1.br)
* (ss1.br - ss1.bl) (ss1.tl - ss1.bl)
* (ss1.br - ss1.bl) (ss1.tr - ss1.br)
*
* and add another set of two more subspans if in 16-pixel dispatch mode.
*
* For DDX, it ends up being easy: width = 2, horiz=0 gets us the same result
* for each pair, and vertstride = 2 jumps us 2 elements after processing a
* pair. But for DDY, it's harder, as we want to produce the pairs swizzled
* between each other. We could probably do it like ddx and swizzle the right
* order later, but bail for now and just produce
* ((ss0.tl - ss0.bl)x4 (ss1.tl - ss1.bl)x4)
*/
void
fs_visitor::generate_ddx(fs_inst *inst, struct brw_reg dst, struct brw_reg src)
{
struct brw_reg src0 = brw_reg(src.file, src.nr, 1,
BRW_REGISTER_TYPE_F,
BRW_VERTICAL_STRIDE_2,
BRW_WIDTH_2,
BRW_HORIZONTAL_STRIDE_0,
BRW_SWIZZLE_XYZW, WRITEMASK_XYZW);
struct brw_reg src1 = brw_reg(src.file, src.nr, 0,
BRW_REGISTER_TYPE_F,
BRW_VERTICAL_STRIDE_2,
BRW_WIDTH_2,
BRW_HORIZONTAL_STRIDE_0,
BRW_SWIZZLE_XYZW, WRITEMASK_XYZW);
brw_ADD(p, dst, src0, negate(src1));
}
void
fs_visitor::generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src)
{
struct brw_reg src0 = brw_reg(src.file, src.nr, 0,
BRW_REGISTER_TYPE_F,
BRW_VERTICAL_STRIDE_4,
BRW_WIDTH_4,
BRW_HORIZONTAL_STRIDE_0,
BRW_SWIZZLE_XYZW, WRITEMASK_XYZW);
struct brw_reg src1 = brw_reg(src.file, src.nr, 2,
BRW_REGISTER_TYPE_F,
BRW_VERTICAL_STRIDE_4,
BRW_WIDTH_4,
BRW_HORIZONTAL_STRIDE_0,
BRW_SWIZZLE_XYZW, WRITEMASK_XYZW);
brw_ADD(p, dst, src0, negate(src1));
}
void
fs_visitor::generate_discard(fs_inst *inst)
{
struct brw_reg f0 = brw_flag_reg();
if (intel->gen >= 6) {
struct brw_reg g1 = retype(brw_vec1_grf(1, 7), BRW_REGISTER_TYPE_UW);
struct brw_reg some_register;
/* As of gen6, we no longer have the mask register to look at,
* so life gets a bit more complicated.
*/
/* Load the flag register with all ones. */
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_MOV(p, f0, brw_imm_uw(0xffff));
brw_pop_insn_state(p);
/* Do a comparison that should always fail, to produce 0s in the flag
* reg where we have active channels.
*/
some_register = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW);
brw_CMP(p, retype(brw_null_reg(), BRW_REGISTER_TYPE_UD),
BRW_CONDITIONAL_NZ, some_register, some_register);
/* Undo CMP's whacking of predication*/
brw_set_predicate_control(p, BRW_PREDICATE_NONE);
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_AND(p, g1, f0, g1);
brw_pop_insn_state(p);
} else {
struct brw_reg g0 = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
brw_push_insn_state(p);
brw_set_mask_control(p, BRW_MASK_DISABLE);
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
/* Unlike the 965, we have the mask reg, so we just need
* somewhere to invert that (containing channels to be disabled)
* so it can be ANDed with the mask of pixels still to be
* written. Use the flag reg for consistency with gen6+.
*/
brw_NOT(p, f0, brw_mask_reg(1)); /* IMASK */
brw_AND(p, g0, f0, g0);
brw_pop_insn_state(p);
}
}
void
fs_visitor::generate_spill(fs_inst *inst, struct brw_reg src)
{
assert(inst->mlen != 0);
brw_MOV(p,
retype(brw_message_reg(inst->base_mrf + 1), BRW_REGISTER_TYPE_UD),
retype(src, BRW_REGISTER_TYPE_UD));
brw_oword_block_write_scratch(p, brw_message_reg(inst->base_mrf), 1,
inst->offset);
}
void
fs_visitor::generate_unspill(fs_inst *inst, struct brw_reg dst)
{
assert(inst->mlen != 0);
/* Clear any post destination dependencies that would be ignored by
* the block read. See the B-Spec for pre-gen5 send instruction.
*
* This could use a better solution, since texture sampling and
* math reads could potentially run into it as well -- anywhere
* that we have a SEND with a destination that is a register that
* was written but not read within the last N instructions (what's
* N? unsure). This is rare because of dead code elimination, but
* not impossible.
*/
if (intel->gen == 4 && !intel->is_g4x)
brw_MOV(p, brw_null_reg(), dst);
brw_oword_block_read_scratch(p, dst, brw_message_reg(inst->base_mrf), 1,
inst->offset);
if (intel->gen == 4 && !intel->is_g4x) {
/* gen4 errata: destination from a send can't be used as a
* destination until it's been read. Just read it so we don't
* have to worry.
*/
brw_MOV(p, brw_null_reg(), dst);
}
}
void
fs_visitor::generate_pull_constant_load(fs_inst *inst, struct brw_reg dst)
{
assert(inst->mlen != 0);
/* Clear any post destination dependencies that would be ignored by
* the block read. See the B-Spec for pre-gen5 send instruction.
*
* This could use a better solution, since texture sampling and
* math reads could potentially run into it as well -- anywhere
* that we have a SEND with a destination that is a register that
* was written but not read within the last N instructions (what's
* N? unsure). This is rare because of dead code elimination, but
* not impossible.
*/
if (intel->gen == 4 && !intel->is_g4x)
brw_MOV(p, brw_null_reg(), dst);
brw_oword_block_read(p, dst, brw_message_reg(inst->base_mrf),
inst->offset, SURF_INDEX_FRAG_CONST_BUFFER);
if (intel->gen == 4 && !intel->is_g4x) {
/* gen4 errata: destination from a send can't be used as a
* destination until it's been read. Just read it so we don't
* have to worry.
*/
brw_MOV(p, brw_null_reg(), dst);
}
}
static struct brw_reg
brw_reg_from_fs_reg(fs_reg *reg)
{
struct brw_reg brw_reg;
switch (reg->file) {
case GRF:
case ARF:
case MRF:
if (reg->smear == -1) {
brw_reg = brw_vec8_reg(reg->file,
reg->hw_reg, 0);
} else {
brw_reg = brw_vec1_reg(reg->file,
reg->hw_reg, reg->smear);
}
brw_reg = retype(brw_reg, reg->type);
if (reg->sechalf)
brw_reg = sechalf(brw_reg);
break;
case IMM:
switch (reg->type) {
case BRW_REGISTER_TYPE_F:
brw_reg = brw_imm_f(reg->imm.f);
break;
case BRW_REGISTER_TYPE_D:
brw_reg = brw_imm_d(reg->imm.i);
break;
case BRW_REGISTER_TYPE_UD:
brw_reg = brw_imm_ud(reg->imm.u);
break;
default:
assert(!"not reached");
brw_reg = brw_null_reg();
break;
}
break;
case FIXED_HW_REG:
brw_reg = reg->fixed_hw_reg;
break;
case BAD_FILE:
/* Probably unused. */
brw_reg = brw_null_reg();
break;
case UNIFORM:
assert(!"not reached");
brw_reg = brw_null_reg();
break;
default:
assert(!"not reached");
brw_reg = brw_null_reg();
break;
}
if (reg->abs)
brw_reg = brw_abs(brw_reg);
if (reg->negate)
brw_reg = negate(brw_reg);
return brw_reg;
}
void
fs_visitor::generate_code()
{
int last_native_inst = p->nr_insn;
const char *last_annotation_string = NULL;
ir_instruction *last_annotation_ir = NULL;
int loop_stack_array_size = 16;
int loop_stack_depth = 0;
brw_instruction **loop_stack =
rzalloc_array(this->mem_ctx, brw_instruction *, loop_stack_array_size);
int *if_depth_in_loop =
rzalloc_array(this->mem_ctx, int, loop_stack_array_size);
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
printf("Native code for fragment shader %d (%d-wide dispatch):\n",
prog->Name, c->dispatch_width);
}
foreach_iter(exec_list_iterator, iter, this->instructions) {
fs_inst *inst = (fs_inst *)iter.get();
struct brw_reg src[3], dst;
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
if (last_annotation_ir != inst->ir) {
last_annotation_ir = inst->ir;
if (last_annotation_ir) {
printf(" ");
last_annotation_ir->print();
printf("\n");
}
}
if (last_annotation_string != inst->annotation) {
last_annotation_string = inst->annotation;
if (last_annotation_string)
printf(" %s\n", last_annotation_string);
}
}
for (unsigned int i = 0; i < 3; i++) {
src[i] = brw_reg_from_fs_reg(&inst->src[i]);
}
dst = brw_reg_from_fs_reg(&inst->dst);
brw_set_conditionalmod(p, inst->conditional_mod);
brw_set_predicate_control(p, inst->predicated);
brw_set_predicate_inverse(p, inst->predicate_inverse);
brw_set_saturate(p, inst->saturate);
if (inst->force_uncompressed || c->dispatch_width == 8) {
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
} else if (inst->force_sechalf) {
brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
} else {
brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
}
switch (inst->opcode) {
case BRW_OPCODE_MOV:
brw_MOV(p, dst, src[0]);
break;
case BRW_OPCODE_ADD:
brw_ADD(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_MUL:
brw_MUL(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_FRC:
brw_FRC(p, dst, src[0]);
break;
case BRW_OPCODE_RNDD:
brw_RNDD(p, dst, src[0]);
break;
case BRW_OPCODE_RNDE:
brw_RNDE(p, dst, src[0]);
break;
case BRW_OPCODE_RNDZ:
brw_RNDZ(p, dst, src[0]);
break;
case BRW_OPCODE_AND:
brw_AND(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_OR:
brw_OR(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_XOR:
brw_XOR(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_NOT:
brw_NOT(p, dst, src[0]);
break;
case BRW_OPCODE_ASR:
brw_ASR(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_SHR:
brw_SHR(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_SHL:
brw_SHL(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_CMP:
brw_CMP(p, dst, inst->conditional_mod, src[0], src[1]);
break;
case BRW_OPCODE_SEL:
brw_SEL(p, dst, src[0], src[1]);
break;
case BRW_OPCODE_IF:
if (inst->src[0].file != BAD_FILE) {
/* The instruction has an embedded compare (only allowed on gen6) */
assert(intel->gen == 6);
gen6_IF(p, inst->conditional_mod, src[0], src[1]);
} else {
brw_IF(p, c->dispatch_width == 16 ? BRW_EXECUTE_16 : BRW_EXECUTE_8);
}
if_depth_in_loop[loop_stack_depth]++;
break;
case BRW_OPCODE_ELSE:
brw_ELSE(p);
break;
case BRW_OPCODE_ENDIF:
brw_ENDIF(p);
if_depth_in_loop[loop_stack_depth]--;
break;
case BRW_OPCODE_DO:
loop_stack[loop_stack_depth++] = brw_DO(p, BRW_EXECUTE_8);
if (loop_stack_array_size <= loop_stack_depth) {
loop_stack_array_size *= 2;
loop_stack = reralloc(this->mem_ctx, loop_stack, brw_instruction *,
loop_stack_array_size);
if_depth_in_loop = reralloc(this->mem_ctx, if_depth_in_loop, int,
loop_stack_array_size);
}
if_depth_in_loop[loop_stack_depth] = 0;
break;
case BRW_OPCODE_BREAK:
brw_BREAK(p, if_depth_in_loop[loop_stack_depth]);
brw_set_predicate_control(p, BRW_PREDICATE_NONE);
break;
case BRW_OPCODE_CONTINUE:
/* FINISHME: We need to write the loop instruction support still. */
if (intel->gen >= 6)
gen6_CONT(p, loop_stack[loop_stack_depth - 1]);
else
brw_CONT(p, if_depth_in_loop[loop_stack_depth]);
brw_set_predicate_control(p, BRW_PREDICATE_NONE);
break;
case BRW_OPCODE_WHILE: {
struct brw_instruction *inst0, *inst1;
GLuint br = 1;
if (intel->gen >= 5)
br = 2;
assert(loop_stack_depth > 0);
loop_stack_depth--;
inst0 = inst1 = brw_WHILE(p, loop_stack[loop_stack_depth]);
if (intel->gen < 6) {
/* patch all the BREAK/CONT instructions from last BGNLOOP */
while (inst0 > loop_stack[loop_stack_depth]) {
inst0--;
if (inst0->header.opcode == BRW_OPCODE_BREAK &&
inst0->bits3.if_else.jump_count == 0) {
inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
}
else if (inst0->header.opcode == BRW_OPCODE_CONTINUE &&
inst0->bits3.if_else.jump_count == 0) {
inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
}
}
}
}
break;
case FS_OPCODE_RCP:
case FS_OPCODE_RSQ:
case FS_OPCODE_SQRT:
case FS_OPCODE_EXP2:
case FS_OPCODE_LOG2:
case FS_OPCODE_POW:
case FS_OPCODE_SIN:
case FS_OPCODE_COS:
generate_math(inst, dst, src);
break;
case FS_OPCODE_PIXEL_X:
generate_pixel_xy(dst, true);
break;
case FS_OPCODE_PIXEL_Y:
generate_pixel_xy(dst, false);
break;
case FS_OPCODE_CINTERP:
brw_MOV(p, dst, src[0]);
break;
case FS_OPCODE_LINTERP:
generate_linterp(inst, dst, src);
break;
case FS_OPCODE_TEX:
case FS_OPCODE_TXB:
case FS_OPCODE_TXD:
case FS_OPCODE_TXL:
generate_tex(inst, dst, src[0]);
break;
case FS_OPCODE_DISCARD:
generate_discard(inst);
break;
case FS_OPCODE_DDX:
generate_ddx(inst, dst, src[0]);
break;
case FS_OPCODE_DDY:
generate_ddy(inst, dst, src[0]);
break;
case FS_OPCODE_SPILL:
generate_spill(inst, src[0]);
break;
case FS_OPCODE_UNSPILL:
generate_unspill(inst, dst);
break;
case FS_OPCODE_PULL_CONSTANT_LOAD:
generate_pull_constant_load(inst, dst);
break;
case FS_OPCODE_FB_WRITE:
generate_fb_write(inst);
break;
default:
if (inst->opcode < (int)ARRAY_SIZE(brw_opcodes)) {
_mesa_problem(ctx, "Unsupported opcode `%s' in FS",
brw_opcodes[inst->opcode].name);
} else {
_mesa_problem(ctx, "Unsupported opcode %d in FS", inst->opcode);
}
fail("unsupported opcode in FS\n");
}
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
for (unsigned int i = last_native_inst; i < p->nr_insn; i++) {
if (0) {
printf("0x%08x 0x%08x 0x%08x 0x%08x ",
((uint32_t *)&p->store[i])[3],
((uint32_t *)&p->store[i])[2],
((uint32_t *)&p->store[i])[1],
((uint32_t *)&p->store[i])[0]);
}
brw_disasm(stdout, &p->store[i], intel->gen);
}
}
last_native_inst = p->nr_insn;
}
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
printf("\n");
}
ralloc_free(loop_stack);
ralloc_free(if_depth_in_loop);
brw_set_uip_jip(p);
/* OK, while the INTEL_DEBUG=wm above is very nice for debugging FS
* emit issues, it doesn't get the jump distances into the output,
* which is often something we want to debug. So this is here in
* case you're doing that.
*/
if (0) {
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
for (unsigned int i = 0; i < p->nr_insn; i++) {
printf("0x%08x 0x%08x 0x%08x 0x%08x ",
((uint32_t *)&p->store[i])[3],
((uint32_t *)&p->store[i])[2],
((uint32_t *)&p->store[i])[1],
((uint32_t *)&p->store[i])[0]);
brw_disasm(stdout, &p->store[i], intel->gen);
}
}
}
}

View file

@ -140,6 +140,7 @@ public:
}
void add_barrier_deps(schedule_node *n);
void add_dep(schedule_node *before, schedule_node *after, int latency);
void add_dep(schedule_node *before, schedule_node *after);
void add_inst(fs_inst *inst);
void calculate_deps();
@ -210,6 +211,15 @@ instruction_scheduler::add_dep(schedule_node *before, schedule_node *after,
after->parent_count++;
}
void
instruction_scheduler::add_dep(schedule_node *before, schedule_node *after)
{
if (!before)
return;
add_dep(before, after, before->latency);
}
/**
* Sometimes we really want this node to execute after everything that
* was before it and before everything that followed it. This adds
@ -253,6 +263,12 @@ instruction_scheduler::calculate_deps()
schedule_node *last_grf_write[virtual_grf_count];
schedule_node *last_mrf_write[BRW_MAX_MRF];
schedule_node *last_conditional_mod = NULL;
/* Fixed HW registers are assumed to be separate from the virtual
* GRFs, so they can be tracked separately. We don't really write
* to fixed GRFs much, so don't bother tracking them on a more
* granular level.
*/
schedule_node *last_fixed_grf_write = NULL;
/* The last instruction always needs to still be the last
* instruction. Either it's flow control (IF, ELSE, ENDIF, DO,
@ -274,10 +290,11 @@ instruction_scheduler::calculate_deps()
/* read-after-write deps. */
for (int i = 0; i < 3; i++) {
if (inst->src[i].file == GRF) {
if (last_grf_write[inst->src[i].reg]) {
add_dep(last_grf_write[inst->src[i].reg], n,
last_grf_write[inst->src[i].reg]->latency);
}
add_dep(last_grf_write[inst->src[i].reg], n);
} else if (inst->src[i].file == FIXED_HW_REG &&
(inst->src[i].fixed_hw_reg.file ==
BRW_GENERAL_REGISTER_FILE)) {
add_dep(last_fixed_grf_write, n);
} else if (inst->src[i].file != BAD_FILE &&
inst->src[i].file != IMM &&
inst->src[i].file != UNIFORM) {
@ -291,53 +308,41 @@ instruction_scheduler::calculate_deps()
* instruction once it's sent, not when the result comes
* back.
*/
if (last_mrf_write[inst->base_mrf + i]) {
add_dep(last_mrf_write[inst->base_mrf + i], n,
last_mrf_write[inst->base_mrf + i]->latency);
}
add_dep(last_mrf_write[inst->base_mrf + i], n);
}
if (inst->predicated) {
assert(last_conditional_mod);
add_dep(last_conditional_mod, n, last_conditional_mod->latency);
add_dep(last_conditional_mod, n);
}
/* write-after-write deps. */
if (inst->dst.file == GRF) {
if (last_grf_write[inst->dst.reg]) {
add_dep(last_grf_write[inst->dst.reg], n,
last_grf_write[inst->dst.reg]->latency);
}
add_dep(last_grf_write[inst->dst.reg], n);
last_grf_write[inst->dst.reg] = n;
} else if (inst->dst.file == MRF) {
int reg = inst->dst.hw_reg & ~BRW_MRF_COMPR4;
if (last_mrf_write[reg]) {
add_dep(last_mrf_write[reg], n,
last_mrf_write[reg]->latency);
}
add_dep(last_mrf_write[reg], n);
last_mrf_write[reg] = n;
if (is_compressed(inst)) {
if (inst->dst.hw_reg & BRW_MRF_COMPR4)
reg += 4;
else
reg++;
if (last_mrf_write[reg]) {
add_dep(last_mrf_write[reg], n,
last_mrf_write[reg]->latency);
}
add_dep(last_mrf_write[reg], n);
last_mrf_write[reg] = n;
}
} else if (inst->dst.file == FIXED_HW_REG &&
inst->dst.fixed_hw_reg.file == BRW_GENERAL_REGISTER_FILE) {
last_fixed_grf_write = n;
} else if (inst->dst.file != BAD_FILE) {
add_barrier_deps(n);
}
if (inst->mlen > 0) {
for (int i = 0; i < v->implied_mrf_writes(inst); i++) {
if (last_mrf_write[inst->base_mrf + i]) {
add_dep(last_mrf_write[inst->base_mrf + i], n,
last_mrf_write[inst->base_mrf + i]->latency);
}
add_dep(last_mrf_write[inst->base_mrf + i], n);
last_mrf_write[inst->base_mrf + i] = n;
}
}
@ -352,6 +357,7 @@ instruction_scheduler::calculate_deps()
memset(last_grf_write, 0, sizeof(last_grf_write));
memset(last_mrf_write, 0, sizeof(last_mrf_write));
last_conditional_mod = NULL;
last_fixed_grf_write = NULL;
exec_node *node;
exec_node *prev;
@ -364,9 +370,11 @@ instruction_scheduler::calculate_deps()
/* write-after-read deps. */
for (int i = 0; i < 3; i++) {
if (inst->src[i].file == GRF) {
if (last_grf_write[inst->src[i].reg]) {
add_dep(n, last_grf_write[inst->src[i].reg], n->latency);
}
add_dep(n, last_grf_write[inst->src[i].reg]);
} else if (inst->src[i].file == FIXED_HW_REG &&
(inst->src[i].fixed_hw_reg.file ==
BRW_GENERAL_REGISTER_FILE)) {
add_dep(n, last_fixed_grf_write);
} else if (inst->src[i].file != BAD_FILE &&
inst->src[i].file != IMM &&
inst->src[i].file != UNIFORM) {
@ -384,9 +392,7 @@ instruction_scheduler::calculate_deps()
}
if (inst->predicated) {
if (last_conditional_mod) {
add_dep(n, last_conditional_mod, n->latency);
}
add_dep(n, last_conditional_mod);
}
/* Update the things this instruction wrote, so earlier reads
@ -407,6 +413,9 @@ instruction_scheduler::calculate_deps()
last_mrf_write[reg] = n;
}
} else if (inst->dst.file == FIXED_HW_REG &&
inst->dst.fixed_hw_reg.file == BRW_GENERAL_REGISTER_FILE) {
last_fixed_grf_write = n;
} else if (inst->dst.file != BAD_FILE) {
add_barrier_deps(n);
}

File diff suppressed because it is too large Load diff

View file

@ -181,9 +181,6 @@ static void upload_sf_prog(struct brw_context *brw)
key.do_flat_shading = (ctx->Light.ShadeModel == GL_FLAT);
key.do_twoside_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide);
/* _NEW_HINT */
key.linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST);
/* _NEW_POLYGON */
if (key.do_twoside_color) {
/* If we're rendering to a FBO, we have to invert the polygon

View file

@ -52,7 +52,6 @@ struct brw_sf_prog_key {
GLuint do_flat_shading:1;
GLuint frontface_ccw:1;
GLuint do_point_sprite:1;
GLuint linear_color:1; /**< linear interp vs. perspective interp */
GLuint sprite_origin_lower_left:1;
GLuint pad:24;
};

View file

@ -316,7 +316,7 @@ static GLboolean calculate_masks( struct brw_sf_compile *c,
GLbitfield64 persp_mask;
GLbitfield64 linear_mask;
if (c->key.do_flat_shading || c->key.linear_color)
if (c->key.do_flat_shading)
persp_mask = c->key.attrs & ~(FRAG_BIT_WPOS |
FRAG_BIT_COL0 |
FRAG_BIT_COL1);

View file

@ -0,0 +1,194 @@
/*
* Copyright © 2010 Intel Corporation
*
* 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 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.
*/
extern "C" {
#include "main/macros.h"
#include "brw_context.h"
}
#include "brw_fs.h"
#include "../glsl/ir_optimization.h"
#include "../glsl/ir_print_visitor.h"
struct gl_shader *
brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type)
{
struct brw_shader *shader;
shader = rzalloc(NULL, struct brw_shader);
if (shader) {
shader->base.Type = type;
shader->base.Name = name;
_mesa_init_shader(ctx, &shader->base);
}
return &shader->base;
}
struct gl_shader_program *
brw_new_shader_program(struct gl_context *ctx, GLuint name)
{
struct brw_shader_program *prog;
prog = rzalloc(NULL, struct brw_shader_program);
if (prog) {
prog->base.Name = name;
_mesa_init_shader_program(ctx, &prog->base);
}
return &prog->base;
}
/**
* Performs a compile of the shader stages even when we don't know
* what non-orthogonal state will be set, in the hope that it reflects
* the eventual NOS used, and thus allows us to produce link failures.
*/
bool
brw_shader_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
{
if (!brw_fs_precompile(ctx, prog))
return false;
return true;
}
GLboolean
brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
{
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = &brw->intel;
struct brw_shader *shader =
(struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
if (shader != NULL) {
void *mem_ctx = ralloc_context(NULL);
bool progress;
if (shader->ir)
ralloc_free(shader->ir);
shader->ir = new(shader) exec_list;
clone_ir_list(mem_ctx, shader->ir, shader->base.ir);
do_mat_op_to_vec(shader->ir);
lower_instructions(shader->ir,
MOD_TO_FRACT |
DIV_TO_MUL_RCP |
SUB_TO_ADD_NEG |
EXP_TO_EXP2 |
LOG_TO_LOG2);
/* Pre-gen6 HW can only nest if-statements 16 deep. Beyond this,
* if-statements need to be flattened.
*/
if (intel->gen < 6)
lower_if_to_cond_assign(shader->ir, 16);
do_lower_texture_projection(shader->ir);
do_vec_index_to_cond_assign(shader->ir);
brw_do_cubemap_normalize(shader->ir);
lower_noise(shader->ir);
lower_quadop_vector(shader->ir, false);
lower_variable_index_to_cond_assign(shader->ir,
GL_TRUE, /* input */
GL_TRUE, /* output */
GL_TRUE, /* temp */
GL_TRUE /* uniform */
);
do {
progress = false;
brw_do_channel_expressions(shader->ir);
brw_do_vector_splitting(shader->ir);
progress = do_lower_jumps(shader->ir, true, true,
true, /* main return */
false, /* continue */
false /* loops */
) || progress;
progress = do_common_optimization(shader->ir, true, 32) || progress;
} while (progress);
validate_ir_tree(shader->ir);
reparent_ir(shader->ir, shader->ir);
ralloc_free(mem_ctx);
}
if (!_mesa_ir_link_shader(ctx, prog))
return GL_FALSE;
if (!brw_shader_precompile(ctx, prog))
return GL_FALSE;
return GL_TRUE;
}
int
brw_type_for_base_type(const struct glsl_type *type)
{
switch (type->base_type) {
case GLSL_TYPE_FLOAT:
return BRW_REGISTER_TYPE_F;
case GLSL_TYPE_INT:
case GLSL_TYPE_BOOL:
return BRW_REGISTER_TYPE_D;
case GLSL_TYPE_UINT:
return BRW_REGISTER_TYPE_UD;
case GLSL_TYPE_ARRAY:
case GLSL_TYPE_STRUCT:
case GLSL_TYPE_SAMPLER:
/* These should be overridden with the type of the member when
* dereferenced into. BRW_REGISTER_TYPE_UD seems like a likely
* way to trip up if we don't.
*/
return BRW_REGISTER_TYPE_UD;
default:
assert(!"not reached");
return BRW_REGISTER_TYPE_F;
}
}
uint32_t
brw_conditional_for_comparison(unsigned int op)
{
switch (op) {
case ir_binop_less:
return BRW_CONDITIONAL_L;
case ir_binop_greater:
return BRW_CONDITIONAL_G;
case ir_binop_lequal:
return BRW_CONDITIONAL_LE;
case ir_binop_gequal:
return BRW_CONDITIONAL_GE;
case ir_binop_equal:
case ir_binop_all_equal: /* same as equal for scalars */
return BRW_CONDITIONAL_Z;
case ir_binop_nequal:
case ir_binop_any_nequal: /* same as nequal for scalars */
return BRW_CONDITIONAL_NZ;
default:
assert(!"not reached: bad operation for comparison");
return BRW_CONDITIONAL_NZ;
}
}

View file

@ -0,0 +1,25 @@
/*
* Copyright © 2010 Intel Corporation
*
* 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 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.
*/
int brw_type_for_base_type(const struct glsl_type *type);
uint32_t brw_conditional_for_comparison(unsigned int op);

View file

@ -110,7 +110,7 @@ static void dump_wm_surface_state(struct brw_context *brw)
for (i = 0; i < brw->wm.nr_surfaces; i++) {
unsigned int surfoff;
struct brw_surface_state *surf;
uint32_t *surf;
char name[20];
if (brw->wm.surf_offset[i] == 0) {
@ -118,21 +118,25 @@ static void dump_wm_surface_state(struct brw_context *brw)
continue;
}
surfoff = bo->offset + brw->wm.surf_offset[i];
surf = (struct brw_surface_state *)(base + brw->wm.surf_offset[i]);
surf = (uint32_t *)(base + brw->wm.surf_offset[i]);
sprintf(name, "WM SURF%d", i);
state_out(name, surf, surfoff, 0, "%s %s\n",
get_965_surfacetype(surf->ss0.surface_type),
get_965_surface_format(surf->ss0.surface_format));
get_965_surfacetype(GET_FIELD(surf[0], BRW_SURFACE_TYPE)),
get_965_surface_format(GET_FIELD(surf[0], BRW_SURFACE_FORMAT)));
state_out(name, surf, surfoff, 1, "offset\n");
state_out(name, surf, surfoff, 2, "%dx%d size, %d mips\n",
surf->ss2.width + 1, surf->ss2.height + 1, surf->ss2.mip_count);
state_out(name, surf, surfoff, 3, "pitch %d, %stiled\n",
surf->ss3.pitch + 1, surf->ss3.tiled_surface ? "" : "not ");
GET_FIELD(surf[2], BRW_SURFACE_WIDTH) + 1,
GET_FIELD(surf[2], BRW_SURFACE_HEIGHT) + 1);
state_out(name, surf, surfoff, 3, "pitch %d, %s tiled\n",
GET_FIELD(surf[3], BRW_SURFACE_PITCH) + 1,
(surf[3] & BRW_SURFACE_TILED) ?
((surf[3] & BRW_SURFACE_TILED_Y) ? "Y" : "X") : "not");
state_out(name, surf, surfoff, 4, "mip base %d\n",
surf->ss4.min_lod);
GET_FIELD(surf[4], BRW_SURFACE_MIN_LOD));
state_out(name, surf, surfoff, 5, "x,y offset: %d,%d\n",
surf->ss5.x_offset, surf->ss5.y_offset);
GET_FIELD(surf[5], BRW_SURFACE_X_OFFSET),
GET_FIELD(surf[5], BRW_SURFACE_Y_OFFSET));
}
drm_intel_bo_unmap(bo);
}

View file

@ -1225,80 +1225,6 @@ struct gen7_sf_clip_viewport {
GLfloat pad1[4];
};
/* Documented in the subsystem/shared-functions/sampler chapter...
*
* vol5c Shared Functions - 1.13.4.1.1
*/
struct brw_surface_state
{
struct {
GLuint cube_pos_z:1;
GLuint cube_neg_z:1;
GLuint cube_pos_y:1;
GLuint cube_neg_y:1;
GLuint cube_pos_x:1;
GLuint cube_neg_x:1;
GLuint pad:2;
/* Required on gen6 for surfaces accessed through render cache messages.
*/
GLuint render_cache_read_write:1;
/* Ironlake and newer: instead of replicating one of the texels */
GLuint cube_corner_average:1;
GLuint mipmap_layout_mode:1;
GLuint vert_line_stride_ofs:1;
GLuint vert_line_stride:1;
GLuint color_blend:1;
GLuint writedisable_blue:1;
GLuint writedisable_green:1;
GLuint writedisable_red:1;
GLuint writedisable_alpha:1;
GLuint surface_format:9; /**< BRW_SURFACEFORMAT_x */
GLuint data_return_format:1;
GLuint pad0:1;
GLuint surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */
} ss0;
struct {
GLuint base_addr;
} ss1;
struct {
GLuint pad:2;
GLuint mip_count:4;
GLuint width:13;
GLuint height:13;
} ss2;
struct {
GLuint tile_walk:1;
GLuint tiled_surface:1;
GLuint pad:1;
GLuint pitch:18;
GLuint depth:11;
} ss3;
struct {
GLuint multisample_position_palette_index:3;
GLuint pad1:1;
GLuint num_multisamples:3;
GLuint pad0:1;
GLuint render_target_view_extent:9;
GLuint min_array_elt:11;
GLuint min_lod:4;
} ss4;
struct {
GLuint pad1:16;
GLuint cache_control:2;
GLuint gfdt:1;
GLuint encrypt:1;
GLuint y_offset:4;
GLuint pad0:1;
GLuint x_offset:7;
} ss5; /* New in G4X */
};
/* volume 5c Shared Functions - 1.13.4.1.2 */
struct gen7_surface_state
{

View file

@ -61,7 +61,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
*/
h0 = ALIGN(mt->height0, align_h);
h1 = ALIGN(minify(h0), align_h);
qpitch = (h0 + h1 + 11 * align_h);
qpitch = (h0 + h1 + (intel->gen >= 7 ? 12 : 11) * align_h);
if (mt->compressed)
qpitch /= 4;
@ -152,9 +152,6 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
* in the texture surfaces run, so they may be "vertical" through
* memory. As a result, the docs say in Surface Padding Requirements:
* Sampling Engine Surfaces that two extra rows of padding are required.
* We don't know of similar requirements for pre-965, but given that
* those docs are silent on padding requirements in general, let's play
* it safe.
*/
if (mt->target == GL_TEXTURE_CUBE_MAP)
mt->total_height += 2;

View file

@ -194,11 +194,19 @@ static void calc_wm_input_sizes( struct brw_context *brw )
/* BRW_NEW_VERTEX_PROGRAM */
const struct brw_vertex_program *vp =
brw_vertex_program_const(brw->vertex_program);
/* BRW_NEW_FRAGMENT_PROGRAM */
struct gl_shader_program *prog = ctx->Shader.CurrentFragmentProgram;
/* BRW_NEW_INPUT_DIMENSIONS */
struct tracker t;
GLuint insn;
GLuint i;
/* If we're going to go through brw_fs.cpp, we don't end up using
* brw->wm.input_size_masks.
*/
if (prog && prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
return;
memset(&t, 0, sizeof(t));
/* _NEW_LIGHT */
@ -238,7 +246,9 @@ static void calc_wm_input_sizes( struct brw_context *brw )
const struct brw_tracked_state brw_wm_input_sizes = {
.dirty = {
.mesa = _NEW_LIGHT,
.brw = BRW_NEW_VERTEX_PROGRAM | BRW_NEW_INPUT_DIMENSIONS,
.brw = (BRW_NEW_FRAGMENT_PROGRAM |
BRW_NEW_VERTEX_PROGRAM |
BRW_NEW_INPUT_DIMENSIONS),
.cache = 0
},
.prepare = calc_wm_input_sizes

View file

@ -136,6 +136,16 @@ static void brw_invalidate_state( struct intel_context *intel, GLuint new_state
/* nothing */
}
/**
* \see intel_context.vtbl.is_hiz_depth_format
*/
static bool brw_is_hiz_depth_format(struct intel_context *intel,
gl_format format)
{
/* In the future, this will support Z_FLOAT32. */
return intel->has_hiz && (format == MESA_FORMAT_X8_Z24);
}
void brwInitVtbl( struct brw_context *brw )
{
@ -152,4 +162,5 @@ void brwInitVtbl( struct brw_context *brw )
brw->intel.vtbl.set_draw_region = brw_set_draw_region;
brw->intel.vtbl.debug_batch = brw_debug_batch;
brw->intel.vtbl.render_target_supported = brw_render_target_supported;
brw->intel.vtbl.is_hiz_depth_format = brw_is_hiz_depth_format;
}

View file

@ -34,6 +34,7 @@
#include "brw_state.h"
#include "main/formats.h"
#include "main/samplerobj.h"
#include "program/prog_parameter.h"
#include "../glsl/ralloc.h"
@ -115,7 +116,7 @@ brw_wm_non_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
brw_wm_pass2(c);
/* how many general-purpose registers are used */
c->prog_data.total_grf = c->max_wm_grf;
c->prog_data.reg_blocks = brw_register_blocks(c->max_wm_grf);
/* Emit GEN4 code.
*/
@ -184,9 +185,10 @@ brw_wm_payload_setup(struct brw_context *brw,
* Depending on the instructions used (i.e. flow control instructions)
* we'll use one of two code generators.
*/
static void do_wm_prog( struct brw_context *brw,
struct brw_fragment_program *fp,
struct brw_wm_prog_key *key)
bool do_wm_prog(struct brw_context *brw,
struct gl_shader_program *prog,
struct brw_fragment_program *fp,
struct brw_wm_prog_key *key)
{
struct intel_context *intel = &brw->intel;
struct brw_wm_compile *c;
@ -202,7 +204,7 @@ static void do_wm_prog( struct brw_context *brw,
* without triggering a segfault, no way to signal,
* so just return.
*/
return;
return false;
}
c->instruction = rzalloc_array(c, struct brw_wm_instruction, BRW_WM_MAX_INSN);
c->prog_instructions = rzalloc_array(c, struct prog_instruction, BRW_WM_MAX_INSN);
@ -226,7 +228,10 @@ static void do_wm_prog( struct brw_context *brw,
brw_init_compile(brw, &c->func, c);
if (!brw_wm_fs_emit(brw, c)) {
if (prog && prog->FragmentProgram) {
if (!brw_wm_fs_emit(brw, c, prog))
return false;
} else {
/* Fallback for fixed function and ARB_fp shaders. */
c->dispatch_width = 16;
brw_wm_payload_setup(brw, c);
@ -274,6 +279,8 @@ static void do_wm_prog( struct brw_context *brw,
program, program_size,
&c->prog_data, sizeof(c->prog_data),
&brw->wm.prog_data);
return true;
}
@ -355,9 +362,6 @@ static void brw_wm_populate_key( struct brw_context *brw,
/* _NEW_LIGHT */
key->flat_shade = (ctx->Light.ShadeModel == GL_FLAT);
/* _NEW_HINT */
key->linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST);
/* _NEW_FRAG_CLAMP | _NEW_BUFFERS */
key->clamp_fragment_color = ctx->Color._ClampFragmentColor;
@ -426,9 +430,6 @@ static void brw_wm_populate_key( struct brw_context *brw,
}
}
/* Shadow */
key->shadowtex_mask = fp->program.Base.ShadowSamplers;
/* _NEW_BUFFERS */
/*
* Include the draw buffer origin and height so that we can calculate
@ -468,6 +469,8 @@ static void brw_wm_populate_key( struct brw_context *brw,
static void brw_prepare_wm_prog(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct gl_context *ctx = &intel->ctx;
struct brw_wm_prog_key key;
struct brw_fragment_program *fp = (struct brw_fragment_program *)
brw->fragment_program;
@ -480,8 +483,11 @@ static void brw_prepare_wm_prog(struct brw_context *brw)
brw->wm.prog_bo = brw_search_cache(&brw->cache, BRW_WM_PROG,
&key, sizeof(key),
&brw->wm.prog_data);
if (brw->wm.prog_bo == NULL)
do_wm_prog(brw, fp, &key);
if (brw->wm.prog_bo == NULL) {
bool success = do_wm_prog(brw, ctx->Shader.CurrentFragmentProgram, fp,
&key);
assert(success);
}
}
@ -489,7 +495,6 @@ const struct brw_tracked_state brw_wm_prog = {
.dirty = {
.mesa = (_NEW_COLOR |
_NEW_DEPTH |
_NEW_HINT |
_NEW_STENCIL |
_NEW_POLYGON |
_NEW_LINE |

View file

@ -59,16 +59,16 @@
#define AA_ALWAYS 2
struct brw_wm_prog_key {
uint8_t iz_lookup;
GLuint stats_wm:1;
GLuint flat_shade:1;
GLuint linear_color:1; /**< linear interpolation vs perspective interp */
GLuint nr_color_regions:5;
GLuint render_to_fbo:1;
GLuint alpha_test:1;
GLuint clamp_fragment_color:1;
GLuint line_aa:2;
GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
GLuint shadowtex_mask:16;
GLuint yuvtex_mask:16;
GLuint yuvtex_swap_mask:16; /* UV swaped */
uint16_t gl_clamp_mask[3];
@ -76,8 +76,6 @@ struct brw_wm_prog_key {
GLushort tex_swizzles[BRW_MAX_TEX_UNIT];
GLushort drawable_height;
GLbitfield64 vp_outputs_written;
GLuint iz_lookup;
GLuint line_aa;
GLuint program_string_id:32;
};
@ -314,7 +312,8 @@ void brw_wm_print_program( struct brw_wm_compile *c,
void brw_wm_lookup_iz(struct intel_context *intel,
struct brw_wm_compile *c);
bool brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c);
bool brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c,
struct gl_shader_program *prog);
/* brw_wm_emit.c */
void emit_alu1(struct brw_compile *p,
@ -476,5 +475,9 @@ bool brw_color_buffer_write_enabled(struct brw_context *brw);
bool brw_render_target_supported(gl_format format);
void brw_wm_payload_setup(struct brw_context *brw,
struct brw_wm_compile *c);
bool do_wm_prog(struct brw_context *brw,
struct gl_shader_program *prog,
struct brw_fragment_program *fp,
struct brw_wm_prog_key *key);
#endif

View file

@ -417,25 +417,14 @@ static void emit_interp( struct brw_wm_compile *c,
src_undef());
}
else {
if (c->key.linear_color) {
emit_op(c,
WM_LINTERP,
dst,
0,
interp,
deltas,
src_undef());
}
else {
/* perspective-corrected color interpolation */
emit_op(c,
WM_PINTERP,
dst,
0,
interp,
deltas,
get_pixel_w(c));
}
/* perspective-corrected color interpolation */
emit_op(c,
WM_PINTERP,
dst,
0,
interp,
deltas,
get_pixel_w(c));
}
break;
case FRAG_ATTRIB_FOGC:

View file

@ -91,8 +91,8 @@ brw_prepare_wm_unit(struct brw_context *brw)
}
/* CACHE_NEW_WM_PROG */
wm->thread0.grf_reg_count = ALIGN(brw->wm.prog_data->total_grf, 16) / 16 - 1;
wm->wm9.grf_reg_count_2 = ALIGN(brw->wm.prog_data->total_grf_16, 16) / 16 - 1;
wm->thread0.grf_reg_count = brw->wm.prog_data->reg_blocks;
wm->wm9.grf_reg_count_2 = brw->wm.prog_data->reg_blocks_16;
wm->thread0.kernel_start_pointer = brw->wm.prog_bo->offset >> 6; /* reloc */
/* reloc */
wm->wm9.kernel_start_pointer_2 = (brw->wm.prog_bo->offset +

View file

@ -200,22 +200,16 @@ translate_tex_format(gl_format mesa_format,
}
}
static void
brw_set_surface_tiling(struct brw_surface_state *surf, uint32_t tiling)
static uint32_t
brw_get_surface_tiling_bits(uint32_t tiling)
{
switch (tiling) {
case I915_TILING_NONE:
surf->ss3.tiled_surface = 0;
surf->ss3.tile_walk = 0;
break;
case I915_TILING_X:
surf->ss3.tiled_surface = 1;
surf->ss3.tile_walk = BRW_TILEWALK_XMAJOR;
break;
return BRW_SURFACE_TILED;
case I915_TILING_Y:
surf->ss3.tiled_surface = 1;
surf->ss3.tile_walk = BRW_TILEWALK_YMAJOR;
break;
return BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y;
default:
return 0;
}
}
@ -228,46 +222,36 @@ brw_update_texture_surface( struct gl_context *ctx, GLuint unit )
struct gl_texture_image *firstImage = tObj->Image[0][tObj->BaseLevel];
struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit);
const GLuint surf_index = SURF_INDEX_TEXTURE(unit);
struct brw_surface_state *surf;
uint32_t *surf;
surf = brw_state_batch(brw, sizeof(*surf), 32,
&brw->wm.surf_offset[surf_index]);
memset(surf, 0, sizeof(*surf));
surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[surf_index]);
surf->ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
surf->ss0.surface_type = translate_tex_target(tObj->Target);
surf->ss0.surface_format = translate_tex_format(firstImage->TexFormat,
firstImage->InternalFormat,
sampler->DepthMode,
sampler->sRGBDecode);
surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT |
BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT |
BRW_SURFACE_CUBEFACE_ENABLES |
(translate_tex_format(firstImage->TexFormat,
firstImage->InternalFormat,
sampler->DepthMode,
sampler->sRGBDecode) <<
BRW_SURFACE_FORMAT_SHIFT));
/* This is ok for all textures with channel width 8bit or less:
*/
/* surf->ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
surf->ss1.base_addr = intelObj->mt->region->buffer->offset; /* reloc */
surf[1] = intelObj->mt->region->buffer->offset; /* reloc */
surf->ss2.mip_count = intelObj->_MaxLevel - tObj->BaseLevel;
surf->ss2.width = firstImage->Width - 1;
surf->ss2.height = firstImage->Height - 1;
brw_set_surface_tiling(surf, intelObj->mt->region->tiling);
surf->ss3.pitch = (intelObj->mt->region->pitch * intelObj->mt->cpp) - 1;
surf->ss3.depth = firstImage->Depth - 1;
surf[2] = ((intelObj->_MaxLevel - tObj->BaseLevel) << BRW_SURFACE_LOD_SHIFT |
(firstImage->Width - 1) << BRW_SURFACE_WIDTH_SHIFT |
(firstImage->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT);
surf->ss4.min_lod = 0;
if (tObj->Target == GL_TEXTURE_CUBE_MAP) {
surf->ss0.cube_pos_x = 1;
surf->ss0.cube_pos_y = 1;
surf->ss0.cube_pos_z = 1;
surf->ss0.cube_neg_x = 1;
surf->ss0.cube_neg_y = 1;
surf->ss0.cube_neg_z = 1;
}
surf[3] = (brw_get_surface_tiling_bits(intelObj->mt->region->tiling) |
(firstImage->Depth - 1) << BRW_SURFACE_DEPTH_SHIFT |
((intelObj->mt->region->pitch * intelObj->mt->cpp) - 1) <<
BRW_SURFACE_PITCH_SHIFT);
surf[4] = 0;
surf[5] = 0;
/* Emit relocation to surface contents */
drm_intel_bo_emit_reloc(brw->intel.batch.bo,
brw->wm.surf_offset[surf_index] +
offsetof(struct brw_surface_state, ss1),
brw->wm.surf_offset[surf_index] + 4,
intelObj->mt->region->buffer, 0,
I915_GEM_DOMAIN_SAMPLER, 0);
}
@ -284,34 +268,34 @@ brw_create_constant_surface(struct brw_context *brw,
{
struct intel_context *intel = &brw->intel;
const GLint w = width - 1;
struct brw_surface_state *surf;
uint32_t *surf;
surf = brw_state_batch(brw, sizeof(*surf), 32, out_offset);
memset(surf, 0, sizeof(*surf));
surf = brw_state_batch(brw, 6 * 4, 32, out_offset);
surf->ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
surf->ss0.surface_type = BRW_SURFACE_BUFFER;
surf->ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT |
BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT |
BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_SURFACE_FORMAT_SHIFT);
if (intel->gen >= 6)
surf->ss0.render_cache_read_write = 1;
surf[0] |= BRW_SURFACE_RC_READ_WRITE;
assert(bo);
surf->ss1.base_addr = bo->offset; /* reloc */
surf[1] = bo->offset; /* reloc */
surf->ss2.width = w & 0x7f; /* bits 6:0 of size or width */
surf->ss2.height = (w >> 7) & 0x1fff; /* bits 19:7 of size or width */
surf->ss3.depth = (w >> 20) & 0x7f; /* bits 26:20 of size or width */
surf->ss3.pitch = (width * 16) - 1; /* ignored?? */
brw_set_surface_tiling(surf, I915_TILING_NONE); /* tiling now allowed */
surf[2] = (((w & 0x7f) - 1) << BRW_SURFACE_WIDTH_SHIFT |
(((w >> 7) & 0x1fff) - 1) << BRW_SURFACE_HEIGHT_SHIFT);
surf[3] = ((((w >> 20) & 0x7f) - 1) << BRW_SURFACE_DEPTH_SHIFT |
(width * 16 - 1) << BRW_SURFACE_PITCH_SHIFT);
surf[4] = 0;
surf[5] = 0;
/* Emit relocation to surface contents. Section 5.1.1 of the gen4
* bspec ("Data Cache") says that the data cache does not exist as
* a separate cache and is just the sampler cache.
*/
drm_intel_bo_emit_reloc(brw->intel.batch.bo,
(*out_offset +
offsetof(struct brw_surface_state, ss1)),
*out_offset + 4,
bo, 0,
I915_GEM_DOMAIN_SAMPLER, 0);
}
@ -416,23 +400,23 @@ static void
brw_update_null_renderbuffer_surface(struct brw_context *brw, unsigned int unit)
{
struct intel_context *intel = &brw->intel;
struct brw_surface_state *surf;
uint32_t *surf;
surf = brw_state_batch(brw, sizeof(*surf), 32,
&brw->wm.surf_offset[unit]);
memset(surf, 0, sizeof(*surf));
surf->ss0.surface_type = BRW_SURFACE_NULL;
surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[unit]);
surf[0] = (BRW_SURFACE_NULL << BRW_SURFACE_TYPE_SHIFT |
BRW_SURFACEFORMAT_B8G8R8A8_UNORM << BRW_SURFACE_FORMAT_SHIFT);
if (intel->gen < 6) {
/* _NEW_COLOR */
surf->ss0.color_blend = 0;
surf->ss0.writedisable_red = 1;
surf->ss0.writedisable_green = 1;
surf->ss0.writedisable_blue = 1;
surf->ss0.writedisable_alpha = 1;
surf[0] |= (1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT |
1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT |
1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT |
1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT);
}
surf[1] = 0;
surf[2] = 0;
surf[3] = 0;
surf[4] = 0;
surf[5] = 0;
}
/**
@ -449,12 +433,11 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
struct gl_context *ctx = &intel->ctx;
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
struct intel_region *region = irb->region;
struct brw_surface_state *surf;
uint32_t *surf;
uint32_t tile_x, tile_y;
uint32_t format = 0;
surf = brw_state_batch(brw, sizeof(*surf), 32,
&brw->wm.surf_offset[unit]);
memset(surf, 0, sizeof(*surf));
surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[unit]);
switch (irb->Base.Format) {
case MESA_FORMAT_XRGB8888:
@ -465,7 +448,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
* cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is
* used.
*/
surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
break;
case MESA_FORMAT_INTENSITY_FLOAT32:
case MESA_FORMAT_LUMINANCE_FLOAT32:
@ -473,25 +456,35 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
* channel into R, which is to say that we just treat them as
* GL_RED.
*/
surf->ss0.surface_format = BRW_SURFACEFORMAT_R32_FLOAT;
format = BRW_SURFACEFORMAT_R32_FLOAT;
break;
case MESA_FORMAT_SARGB8:
/* without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB
surfaces to the blend/update as sRGB */
if (ctx->Color.sRGBEnabled)
surf->ss0.surface_format = brw_format_for_mesa_format(irb->Base.Format);
format = brw_format_for_mesa_format(irb->Base.Format);
else
surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
break;
default:
assert(brw_render_target_supported(irb->Base.Format));
surf->ss0.surface_format = brw_format_for_mesa_format(irb->Base.Format);
format = brw_format_for_mesa_format(irb->Base.Format);
}
surf->ss0.surface_type = BRW_SURFACE_2D;
surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT |
format << BRW_SURFACE_FORMAT_SHIFT);
/* reloc */
surf->ss1.base_addr = intel_region_tile_offsets(region, &tile_x, &tile_y);
surf->ss1.base_addr += region->buffer->offset; /* reloc */
surf[1] = (intel_region_tile_offsets(region, &tile_x, &tile_y) +
region->buffer->offset);
surf[2] = ((rb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT |
(rb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT);
surf[3] = (brw_get_surface_tiling_bits(region->tiling) |
((region->pitch * region->cpp) - 1) << BRW_SURFACE_PITCH_SHIFT);
surf[4] = 0;
assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0));
/* Note that the low bits of these fields are missing, so
@ -499,35 +492,35 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
*/
assert(tile_x % 4 == 0);
assert(tile_y % 2 == 0);
surf->ss5.x_offset = tile_x / 4;
surf->ss5.y_offset = tile_y / 2;
surf->ss2.width = rb->Width - 1;
surf->ss2.height = rb->Height - 1;
brw_set_surface_tiling(surf, region->tiling);
surf->ss3.pitch = (region->pitch * region->cpp) - 1;
surf[5] = ((tile_x / 4) << BRW_SURFACE_X_OFFSET_SHIFT |
(tile_y / 2) << BRW_SURFACE_Y_OFFSET_SHIFT);
if (intel->gen < 6) {
/* _NEW_COLOR */
surf->ss0.color_blend = (!ctx->Color._LogicOpEnabled &&
(ctx->Color.BlendEnabled & (1 << unit)));
surf->ss0.writedisable_red = !ctx->Color.ColorMask[unit][0];
surf->ss0.writedisable_green = !ctx->Color.ColorMask[unit][1];
surf->ss0.writedisable_blue = !ctx->Color.ColorMask[unit][2];
if (!ctx->Color._LogicOpEnabled &&
(ctx->Color.BlendEnabled & (1 << unit)))
surf[0] |= BRW_SURFACE_BLEND_ENABLED;
if (!ctx->Color.ColorMask[unit][0])
surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT;
if (!ctx->Color.ColorMask[unit][1])
surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT;
if (!ctx->Color.ColorMask[unit][2])
surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT;
/* As mentioned above, disable writes to the alpha component when the
* renderbuffer is XRGB.
*/
if (ctx->DrawBuffer->Visual.alphaBits == 0)
surf->ss0.writedisable_alpha = 1;
else
surf->ss0.writedisable_alpha = !ctx->Color.ColorMask[unit][3];
if (ctx->DrawBuffer->Visual.alphaBits == 0 ||
!ctx->Color.ColorMask[unit][3]) {
surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT;
}
}
drm_intel_bo_emit_reloc(brw->intel.batch.bo,
brw->wm.surf_offset[unit] +
offsetof(struct brw_surface_state, ss1),
brw->wm.surf_offset[unit] + 4,
region->buffer,
surf->ss1.base_addr - region->buffer->offset,
surf[1] - region->buffer->offset,
I915_GEM_DOMAIN_RENDER,
I915_GEM_DOMAIN_RENDER);
}
@ -539,16 +532,14 @@ prepare_wm_surfaces(struct brw_context *brw)
int i;
int nr_surfaces = 0;
if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) {
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[i];
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
struct intel_region *region = irb ? irb->region : NULL;
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[i];
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
struct intel_region *region = irb ? irb->region : NULL;
if (region)
brw_add_validated_bo(brw, region->buffer);
nr_surfaces = SURF_INDEX_DRAW(i) + 1;
}
if (region)
brw_add_validated_bo(brw, region->buffer);
nr_surfaces = SURF_INDEX_DRAW(i) + 1;
}
if (brw->wm.const_bo) {
@ -558,10 +549,11 @@ prepare_wm_surfaces(struct brw_context *brw)
for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
struct gl_texture_object *tObj = texUnit->_Current;
struct intel_texture_object *intelObj = intel_texture_object(tObj);
if (texUnit->_ReallyEnabled) {
struct gl_texture_object *tObj = texUnit->_Current;
struct intel_texture_object *intelObj = intel_texture_object(tObj);
brw_add_validated_bo(brw, intelObj->mt->region->buffer);
nr_surfaces = SURF_INDEX_TEXTURE(i) + 1;
}

Some files were not shown because too many files have changed in this diff Show more