Compare commits
20 Commits
mesa-10.2-
...
mesa-10.2
Author | SHA1 | Date | |
---|---|---|---|
|
f836ef63fd | ||
|
99b9a0973a | ||
|
d36d53b564 | ||
|
283cd12933 | ||
|
aa8ea648f4 | ||
|
e901f40764 | ||
|
d5e47ee66b | ||
|
932a5dadda | ||
|
203bc289a0 | ||
|
11b3011805 | ||
|
c62bc58cce | ||
|
304e80e356 | ||
|
f4aca6868a | ||
|
5ab9a9c0cc | ||
|
ae16f443c2 | ||
|
b8241bb3f2 | ||
|
224c193237 | ||
|
494f916125 | ||
|
767bc05309 | ||
|
3aaae6056e |
@@ -524,8 +524,12 @@ eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read,
|
||||
if (!context && ctx != EGL_NO_CONTEXT)
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE);
|
||||
if (!draw_surf || !read_surf) {
|
||||
/* surfaces may be NULL if surfaceless */
|
||||
if (!disp->Extensions.KHR_surfaceless_context)
|
||||
/* From the EGL 1.4 (20130211) spec:
|
||||
*
|
||||
* To release the current context without assigning a new one, set ctx
|
||||
* to EGL_NO_CONTEXT and set draw and read to EGL_NO_SURFACE.
|
||||
*/
|
||||
if (!disp->Extensions.KHR_surfaceless_context && ctx != EGL_NO_CONTEXT)
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
|
||||
|
||||
if ((!draw_surf && draw != EGL_NO_SURFACE) ||
|
||||
@@ -567,6 +571,10 @@ _eglCreateWindowSurfaceCommon(_EGLDisplay *disp, EGLConfig config,
|
||||
EGLSurface ret;
|
||||
|
||||
_EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv);
|
||||
|
||||
if (native_window == NULL)
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
|
||||
|
||||
surf = drv->API.CreateWindowSurface(drv, disp, conf, native_window,
|
||||
attrib_list);
|
||||
ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
|
||||
|
@@ -312,9 +312,15 @@ lp_rast_shade_tile(struct lp_rasterizer_task *task,
|
||||
|
||||
/* color buffer */
|
||||
for (i = 0; i < scene->fb.nr_cbufs; i++){
|
||||
stride[i] = scene->cbufs[i].stride;
|
||||
color[i] = lp_rast_get_unswizzled_color_block_pointer(task, i, tile_x + x,
|
||||
tile_y + y, inputs->layer);
|
||||
if (scene->fb.cbufs[i]) {
|
||||
stride[i] = scene->cbufs[i].stride;
|
||||
color[i] = lp_rast_get_unswizzled_color_block_pointer(task, i, tile_x + x,
|
||||
tile_y + y, inputs->layer);
|
||||
}
|
||||
else {
|
||||
stride[i] = 0;
|
||||
color[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* depth buffer */
|
||||
|
@@ -633,7 +633,7 @@ CodeEmitterGK110::emitISAD(const Instruction *i)
|
||||
{
|
||||
assert(i->dType == TYPE_S32 || i->dType == TYPE_U32);
|
||||
|
||||
emitForm_21(i, 0x1fc, 0xb74);
|
||||
emitForm_21(i, 0x1f4, 0xb74);
|
||||
|
||||
if (i->dType == TYPE_S32)
|
||||
code[1] |= 1 << 19;
|
||||
@@ -952,7 +952,7 @@ CodeEmitterGK110::emitSLCT(const CmpInstruction *i)
|
||||
FTZ_(32);
|
||||
emitCondCode(cc, 0x33, 0xf);
|
||||
} else {
|
||||
emitForm_21(i, 0x1a4, 0xb20);
|
||||
emitForm_21(i, 0x1a0, 0xb20);
|
||||
emitCondCode(cc, 0x34, 0x7);
|
||||
}
|
||||
}
|
||||
@@ -967,7 +967,7 @@ void CodeEmitterGK110::emitSELP(const Instruction *i)
|
||||
|
||||
void CodeEmitterGK110::emitTEXBAR(const Instruction *i)
|
||||
{
|
||||
code[0] = 0x00000002 | (i->subOp << 23);
|
||||
code[0] = 0x0000003e | (i->subOp << 23);
|
||||
code[1] = 0x77000000;
|
||||
|
||||
emitPredicate(i);
|
||||
@@ -1204,7 +1204,7 @@ CodeEmitterGK110::emitFlow(const Instruction *i)
|
||||
case OP_PRECONT: code[1] = 0x15800000; mask = 2; break;
|
||||
case OP_PRERET: code[1] = 0x13800000; mask = 2; break;
|
||||
|
||||
case OP_QUADON: code[1] = 0x1b000000; mask = 0; break;
|
||||
case OP_QUADON: code[1] = 0x1b800000; mask = 0; break;
|
||||
case OP_QUADPOP: code[1] = 0x1c000000; mask = 0; break;
|
||||
case OP_BRKPT: code[1] = 0x00000000; mask = 0; break;
|
||||
default:
|
||||
@@ -1326,7 +1326,8 @@ CodeEmitterGK110::emitOUT(const Instruction *i)
|
||||
void
|
||||
CodeEmitterGK110::emitInterpMode(const Instruction *i)
|
||||
{
|
||||
code[1] |= i->ipa << 21; // TODO: INTERP_SAMPLEID
|
||||
code[1] |= (i->ipa & 0x3) << 21; // TODO: INTERP_SAMPLEID
|
||||
code[1] |= (i->ipa & 0xc) << (19 - 2);
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -563,6 +563,7 @@ ConstantFolding::expr(Instruction *i,
|
||||
} else {
|
||||
i->op = i->saturate ? OP_SAT : OP_MOV; /* SAT handled by unary() */
|
||||
}
|
||||
i->subOp = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -171,7 +171,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
return 0;
|
||||
case PIPE_CAP_COMPUTE:
|
||||
return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
|
||||
return (class_3d == NVE4_3D_CLASS) ? 1 : 0;
|
||||
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||
@@ -211,7 +211,7 @@ nvc0_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
|
||||
case PIPE_SHADER_FRAGMENT:
|
||||
break;
|
||||
case PIPE_SHADER_COMPUTE:
|
||||
if (class_3d < NVE4_3D_CLASS)
|
||||
if (class_3d != NVE4_3D_CLASS)
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
@@ -514,9 +514,10 @@ nvc0_screen_init_compute(struct nvc0_screen *screen)
|
||||
return nvc0_screen_compute_setup(screen, screen->base.pushbuf);
|
||||
return 0;
|
||||
case 0xe0:
|
||||
return nve4_screen_compute_setup(screen, screen->base.pushbuf);
|
||||
case 0xf0:
|
||||
case 0x100:
|
||||
return nve4_screen_compute_setup(screen, screen->base.pushbuf);
|
||||
return 0;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
@@ -543,9 +543,22 @@ nvc0_blitter_make_vp(struct nvc0_blitter *blit)
|
||||
0x03f01c46, 0x0a7e0080, /* export b96 o[0x80] $r0:$r1:$r2 */
|
||||
0x00001de7, 0x80000000, /* exit */
|
||||
};
|
||||
static const uint32_t code_gk110[] =
|
||||
{
|
||||
0x00000000, 0x08000000, /* sched */
|
||||
0x401ffc12, 0x7ec7fc00, /* ld b64 $r4d a[0x80] 0x0 0x0 */
|
||||
0x481ffc02, 0x7ecbfc00, /* ld b96 $r0t a[0x90] 0x0 0x0 */
|
||||
0x381ffc12, 0x7f07fc00, /* st b64 a[0x70] $r4d 0x0 0x0 */
|
||||
0x401ffc02, 0x7f0bfc00, /* st b96 a[0x80] $r0t 0x0 0x0 */
|
||||
0x001c003c, 0x18000000, /* exit */
|
||||
};
|
||||
|
||||
blit->vp.type = PIPE_SHADER_VERTEX;
|
||||
blit->vp.translated = TRUE;
|
||||
if (blit->screen->base.class_3d >= NVF0_3D_CLASS) {
|
||||
blit->vp.code = (uint32_t *)code_gk110; /* const_cast */
|
||||
blit->vp.code_size = sizeof(code_gk110);
|
||||
} else
|
||||
if (blit->screen->base.class_3d >= NVE4_3D_CLASS) {
|
||||
blit->vp.code = (uint32_t *)code_nve4; /* const_cast */
|
||||
blit->vp.code_size = sizeof(code_nve4);
|
||||
|
@@ -789,7 +789,8 @@ static bool do_hardware_msaa_resolve(struct pipe_context *ctx,
|
||||
info->src.box.width == dst_width &&
|
||||
info->src.box.height == dst_height &&
|
||||
info->src.box.depth == 1 &&
|
||||
dst->surface.level[info->dst.level].mode >= RADEON_SURF_MODE_1D) {
|
||||
dst->surface.level[info->dst.level].mode >= RADEON_SURF_MODE_1D &&
|
||||
(!dst->cmask.size || !dst->dirty_level_mask) /* dst cannot be fast-cleared */) {
|
||||
r600_blitter_begin(ctx, R600_COLOR_RESOLVE);
|
||||
util_blitter_custom_resolve_color(rctx->blitter,
|
||||
info->dst.resource, info->dst.level,
|
||||
|
@@ -1235,6 +1235,9 @@ void evergreen_do_fast_color_clear(struct r600_common_context *rctx,
|
||||
{
|
||||
int i;
|
||||
|
||||
if (rctx->current_render_cond)
|
||||
return;
|
||||
|
||||
for (i = 0; i < fb->nr_cbufs; i++) {
|
||||
struct r600_texture *tex;
|
||||
unsigned clear_bit = PIPE_CLEAR_COLOR0 << i;
|
||||
|
@@ -689,8 +689,10 @@ static bool do_hardware_msaa_resolve(struct pipe_context *ctx,
|
||||
info->src.box.height == dst_height &&
|
||||
info->src.box.depth == 1 &&
|
||||
dst->surface.level[info->dst.level].mode >= RADEON_SURF_MODE_1D &&
|
||||
!(dst->surface.flags & RADEON_SURF_SCANOUT)) {
|
||||
!(dst->surface.flags & RADEON_SURF_SCANOUT) &&
|
||||
(!dst->cmask.size || !dst->dirty_level_mask) /* dst cannot be fast-cleared */) {
|
||||
si_blitter_begin(ctx, SI_COLOR_RESOLVE);
|
||||
t-cleared
|
||||
util_blitter_custom_resolve_color(sctx->blitter,
|
||||
info->dst.resource, info->dst.level,
|
||||
info->dst.box.z,
|
||||
|
@@ -45,8 +45,8 @@
|
||||
#ifndef RTLD_NOW
|
||||
#define RTLD_NOW 0
|
||||
#endif
|
||||
#ifndef RTLD_LOCAL
|
||||
#define RTLD_LOCAL 0
|
||||
#ifndef RTLD_GLOBAL
|
||||
#define RTLD_GLOBAL 0
|
||||
#endif
|
||||
|
||||
_X_HIDDEN void
|
||||
@@ -99,7 +99,7 @@ driOpenDriver(const char *driverName)
|
||||
int len;
|
||||
|
||||
/* Attempt to make sure libGL symbols will be visible to the driver */
|
||||
glhandle = dlopen("libGL.so.1", RTLD_NOW | RTLD_LOCAL);
|
||||
glhandle = dlopen("libGL.so.1", RTLD_NOW | RTLD_GLOBAL);
|
||||
|
||||
libPaths = NULL;
|
||||
if (geteuid() == getuid()) {
|
||||
@@ -127,14 +127,14 @@ driOpenDriver(const char *driverName)
|
||||
snprintf(realDriverName, sizeof realDriverName,
|
||||
"%.*s/tls/%s_dri.so", len, p, driverName);
|
||||
InfoMessageF("OpenDriver: trying %s\n", realDriverName);
|
||||
handle = dlopen(realDriverName, RTLD_NOW | RTLD_LOCAL);
|
||||
handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
|
||||
#endif
|
||||
|
||||
if (handle == NULL) {
|
||||
snprintf(realDriverName, sizeof realDriverName,
|
||||
"%.*s/%s_dri.so", len, p, driverName);
|
||||
InfoMessageF("OpenDriver: trying %s\n", realDriverName);
|
||||
handle = dlopen(realDriverName, RTLD_NOW | RTLD_LOCAL);
|
||||
handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
|
||||
}
|
||||
|
||||
if (handle != NULL)
|
||||
|
@@ -606,6 +606,7 @@
|
||||
#define BRW_TEXCOORDMODE_CUBE 3
|
||||
#define BRW_TEXCOORDMODE_CLAMP_BORDER 4
|
||||
#define BRW_TEXCOORDMODE_MIRROR_ONCE 5
|
||||
#define GEN8_TEXCOORDMODE_HALF_BORDER 6
|
||||
|
||||
#define BRW_THREAD_PRIORITY_NORMAL 0
|
||||
#define BRW_THREAD_PRIORITY_HIGH 1
|
||||
|
@@ -192,33 +192,44 @@ static const struct brw_device_info brw_device_info_hsw_gt3 = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Thread counts and URB limits are placeholders, and may not be accurate. */
|
||||
#define GEN8_FEATURES \
|
||||
.gen = 8, \
|
||||
.has_hiz_and_separate_stencil = true, \
|
||||
.must_use_separate_stencil = true, \
|
||||
.has_llc = true, \
|
||||
.has_pln = true, \
|
||||
.max_vs_threads = 280, \
|
||||
.max_gs_threads = 256, \
|
||||
.max_wm_threads = 408, \
|
||||
.urb = { \
|
||||
.size = 128, \
|
||||
.min_vs_entries = 64, \
|
||||
.max_vs_entries = 1664, \
|
||||
.max_gs_entries = 640, \
|
||||
}
|
||||
.max_vs_threads = 504, \
|
||||
.max_gs_threads = 504, \
|
||||
.max_wm_threads = 384 \
|
||||
|
||||
static const struct brw_device_info brw_device_info_bdw_gt1 = {
|
||||
GEN8_FEATURES, .gt = 1,
|
||||
.urb = {
|
||||
.size = 192,
|
||||
.min_vs_entries = 64,
|
||||
.max_vs_entries = 2560,
|
||||
.max_gs_entries = 960,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct brw_device_info brw_device_info_bdw_gt2 = {
|
||||
GEN8_FEATURES, .gt = 2,
|
||||
.urb = {
|
||||
.size = 384,
|
||||
.min_vs_entries = 64,
|
||||
.max_vs_entries = 2560,
|
||||
.max_gs_entries = 960,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct brw_device_info brw_device_info_bdw_gt3 = {
|
||||
GEN8_FEATURES, .gt = 3,
|
||||
.urb = {
|
||||
.size = 384,
|
||||
.min_vs_entries = 64,
|
||||
.max_vs_entries = 2560,
|
||||
.max_gs_entries = 960,
|
||||
}
|
||||
};
|
||||
|
||||
/* Thread counts and URB limits are placeholders, and may not be accurate.
|
||||
|
@@ -243,7 +243,8 @@ void gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
|
||||
void gen8_init_vtable_surface_functions(struct brw_context *brw);
|
||||
|
||||
/* brw_wm_sampler_state.c */
|
||||
uint32_t translate_wrap_mode(GLenum wrap, bool using_nearest);
|
||||
uint32_t translate_wrap_mode(struct brw_context *brw,
|
||||
GLenum wrap, bool using_nearest);
|
||||
void upload_default_color(struct brw_context *brw,
|
||||
struct gl_sampler_object *sampler,
|
||||
int unit,
|
||||
|
@@ -352,7 +352,8 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
|
||||
if (alpha_depth || (brw->gen < 8 && !brw->is_haswell))
|
||||
key->swizzles[s] = brw_get_texture_swizzle(ctx, t);
|
||||
|
||||
if (sampler->MinFilter != GL_NEAREST &&
|
||||
if (brw->gen < 8 &&
|
||||
sampler->MinFilter != GL_NEAREST &&
|
||||
sampler->MagFilter != GL_NEAREST) {
|
||||
if (sampler->WrapS == GL_CLAMP)
|
||||
key->gl_clamp_mask[0] |= 1 << s;
|
||||
|
@@ -46,7 +46,7 @@
|
||||
|
||||
|
||||
uint32_t
|
||||
translate_wrap_mode(GLenum wrap, bool using_nearest)
|
||||
translate_wrap_mode(struct brw_context *brw, GLenum wrap, bool using_nearest)
|
||||
{
|
||||
switch( wrap ) {
|
||||
case GL_REPEAT:
|
||||
@@ -55,9 +55,16 @@ translate_wrap_mode(GLenum wrap, bool using_nearest)
|
||||
/* GL_CLAMP is the weird mode where coordinates are clamped to
|
||||
* [0.0, 1.0], so linear filtering of coordinates outside of
|
||||
* [0.0, 1.0] give you half edge texel value and half border
|
||||
* color. The fragment shader will clamp the coordinates, and
|
||||
* we set clamp_border here, which gets the result desired. We
|
||||
* just use clamp(_to_edge) for nearest, because for nearest
|
||||
* color.
|
||||
*
|
||||
* Gen8+ supports this natively.
|
||||
*/
|
||||
if (brw->gen >= 8)
|
||||
return GEN8_TEXCOORDMODE_HALF_BORDER;
|
||||
|
||||
/* On Gen4-7.5, we clamp the coordinates in the fragment shader
|
||||
* and set clamp_border here, which gets the result desired.
|
||||
* We just use clamp(_to_edge) for nearest, because for nearest
|
||||
* clamping to 1.0 gives border color instead of the desired
|
||||
* edge texels.
|
||||
*/
|
||||
@@ -276,11 +283,11 @@ static void brw_update_sampler_state(struct brw_context *brw,
|
||||
}
|
||||
}
|
||||
|
||||
sampler->ss1.r_wrap_mode = translate_wrap_mode(gl_sampler->WrapR,
|
||||
sampler->ss1.r_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapR,
|
||||
using_nearest);
|
||||
sampler->ss1.s_wrap_mode = translate_wrap_mode(gl_sampler->WrapS,
|
||||
sampler->ss1.s_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapS,
|
||||
using_nearest);
|
||||
sampler->ss1.t_wrap_mode = translate_wrap_mode(gl_sampler->WrapT,
|
||||
sampler->ss1.t_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapT,
|
||||
using_nearest);
|
||||
|
||||
if (brw->gen >= 6 &&
|
||||
|
@@ -103,11 +103,11 @@ gen7_update_sampler_state(struct brw_context *brw, int unit, int ss_index,
|
||||
}
|
||||
}
|
||||
|
||||
sampler->ss3.r_wrap_mode = translate_wrap_mode(gl_sampler->WrapR,
|
||||
sampler->ss3.r_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapR,
|
||||
using_nearest);
|
||||
sampler->ss3.s_wrap_mode = translate_wrap_mode(gl_sampler->WrapS,
|
||||
sampler->ss3.s_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapS,
|
||||
using_nearest);
|
||||
sampler->ss3.t_wrap_mode = translate_wrap_mode(gl_sampler->WrapT,
|
||||
sampler->ss3.t_wrap_mode = translate_wrap_mode(brw, gl_sampler->WrapT,
|
||||
using_nearest);
|
||||
|
||||
/* Cube-maps on 965 and later must use the same wrap mode for all 3
|
||||
|
@@ -847,6 +847,16 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
|
||||
v->value_int = ctx->Array.VAO->IndexBufferObj->Name;
|
||||
break;
|
||||
|
||||
/* ARB_vertex_array_bgra */
|
||||
case GL_COLOR_ARRAY_SIZE:
|
||||
array = &ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR0];
|
||||
v->value_int = array->Format == GL_BGRA ? GL_BGRA : array->Size;
|
||||
break;
|
||||
case GL_SECONDARY_COLOR_ARRAY_SIZE:
|
||||
array = &ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR1];
|
||||
v->value_int = array->Format == GL_BGRA ? GL_BGRA : array->Size;
|
||||
break;
|
||||
|
||||
/* ARB_copy_buffer */
|
||||
case GL_COPY_READ_BUFFER:
|
||||
v->value_int = ctx->CopyReadBuffer->Name;
|
||||
|
@@ -52,7 +52,7 @@ def print_header():
|
||||
(prime_factor, prime_step)
|
||||
|
||||
def print_params(params):
|
||||
print "static struct value_desc values[] = {"
|
||||
print "static const struct value_desc values[] = {"
|
||||
for p in params:
|
||||
print " { %s, %s }," % (p[0], p[1])
|
||||
|
||||
|
@@ -199,7 +199,7 @@ descriptor=[
|
||||
[ "NORMAL_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_NORMAL].Type), NO_EXTRA" ],
|
||||
[ "NORMAL_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_NORMAL].Stride), NO_EXTRA" ],
|
||||
[ "COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR0].Enabled), NO_EXTRA" ],
|
||||
[ "COLOR_ARRAY_SIZE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR0].Size), NO_EXTRA" ],
|
||||
[ "COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
|
||||
[ "COLOR_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR0].Type), NO_EXTRA" ],
|
||||
[ "COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR0].Stride), NO_EXTRA" ],
|
||||
[ "TEXTURE_COORD_ARRAY", "LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_client_array, Enabled), NO_EXTRA" ],
|
||||
@@ -552,7 +552,7 @@ descriptor=[
|
||||
[ "SECONDARY_COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR1].Enabled), NO_EXTRA" ],
|
||||
[ "SECONDARY_COLOR_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR1].Type), NO_EXTRA" ],
|
||||
[ "SECONDARY_COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR1].Stride), NO_EXTRA" ],
|
||||
[ "SECONDARY_COLOR_ARRAY_SIZE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR1].Size), NO_EXTRA" ],
|
||||
[ "SECONDARY_COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
|
||||
|
||||
# GL_EXT_fog_coord
|
||||
[ "CURRENT_FOG_COORDINATE", "CONTEXT_FLOAT(Current.Attrib[VERT_ATTRIB_FOG][0]), extra_flush_current" ],
|
||||
|
Reference in New Issue
Block a user