mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
Merge remote-tracking branch 'origin/master' into pipe-video
This commit is contained in:
commit
1eb957bb41
167 changed files with 14483 additions and 12314 deletions
2
Makefile
2
Makefile
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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@
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
23
configure.ac
23
configure.ac
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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). */
|
||||
|
|
|
|||
|
|
@ -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" },
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
/*@}*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,9 +96,9 @@ softpipe_flush( struct pipe_context *pipe,
|
|||
++frame_no;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (fence)
|
||||
*fence = NULL;
|
||||
*fence = (void*)(intptr_t)1;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
#ifndef P_CONFIG_H_
|
||||
#define P_CONFIG_H_
|
||||
|
||||
|
||||
#include <limits.h>
|
||||
/*
|
||||
* Compiler
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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(")");
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
|
@ -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_ ) */
|
||||
|
|
|
|||
|
|
@ -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
34
src/mesa/drivers/dri/Makefile.defines
Normal file
34
src/mesa/drivers/dri/Makefile.defines
Normal 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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
|
|
|
|||
875
src/mesa/drivers/dri/i965/brw_fs_emit.cpp
Normal file
875
src/mesa/drivers/dri/i965/brw_fs_emit.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
1734
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
Normal file
1734
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
194
src/mesa/drivers/dri/i965/brw_shader.cpp
Normal file
194
src/mesa/drivers/dri/i965/brw_shader.cpp
Normal 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;
|
||||
}
|
||||
}
|
||||
25
src/mesa/drivers/dri/i965/brw_shader.h
Normal file
25
src/mesa/drivers/dri/i965/brw_shader.h
Normal 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);
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 +
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Reference in a new issue