static enum piglit_result same_reg_written_twice(void *data) { bool pass = true; glBeginFragmentShaderATI(); glPassTexCoordATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_NO_ERROR); glPassTexCoordATI(GL_REG_0_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_INVALID_OPERATION); /* note: Mesa requires at least 1 arith instruction, * but this is not in the spec */ glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); glEndFragmentShaderATI(); glBeginFragmentShaderATI(); glPassTexCoordATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_NO_ERROR); glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_INVALID_OPERATION); /* note: Mesa requires at least 1 arith instruction, * but this is not in the spec */ glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); glEndFragmentShaderATI(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
static enum piglit_result too_many_passes(void *data) { bool pass = true; glBeginFragmentShaderATI(); glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); glPassTexCoordATI(GL_REG_0_ATI, GL_REG_0_ATI, GL_SWIZZLE_STR_ATI); glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); pass &= piglit_check_gl_error(GL_NO_ERROR); glPassTexCoordATI(GL_REG_0_ATI, GL_REG_0_ATI, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_INVALID_OPERATION); glEndFragmentShaderATI(); glBeginFragmentShaderATI(); glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); glPassTexCoordATI(GL_REG_0_ATI, GL_REG_0_ATI, GL_SWIZZLE_STR_ATI); glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE); pass &= piglit_check_gl_error(GL_NO_ERROR); glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); pass &= piglit_check_gl_error(GL_INVALID_OPERATION); glEndFragmentShaderATI(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
void ToneMap::makeShadersPS14ATI() { // Really slow--appears to be implemented in software! gammaShaderPS14ATI = glGenFragmentShadersATI(1); glBindFragmentShaderATI(gammaShaderPS14ATI); glBeginFragmentShaderATI(); // Pass 1 // R0 = texture0[texcoord0] glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); // Move the blue component of R0 into the red component of R3 glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_3_ATI, GL_RED_BIT_ATI, GL_NONE, GL_REG_0_ATI, GL_BLUE, GL_NONE); // R1 = texture1[R0] // R2 = texture2[R3] glSampleMapATI(GL_REG_1_ATI, GL_REG_0_ATI, GL_SWIZZLE_STR_ATI); glSampleMapATI(GL_REG_2_ATI, GL_REG_3_ATI, GL_SWIZZLE_STR_ATI); // At this point, R1 contains the gamma corrected red and green channels // and R2 contains the corrected blue channel. Combine them: // R0 = R1 + R2 glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE, GL_REG_2_ATI, GL_NONE, GL_NONE); // R0 = texcoord 0 //glPassTexCoordATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); // //glPassTexCoordATI(GL_REG_1_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI); glEndFragmentShaderATI(); }
static void glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) { glColorFragmentOp1ATI ( op, dst, GL_ALPHA, dstMod, arg1, arg1Rep, arg1Mod); }
static void glColorFragmentOp3ATI (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) { char str[128] = "\0"; sOpUsed = 1; switch(op) { // Unary operators - fall back to Op1 routine. case GL_MOV_ATI: glColorFragmentOp1ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod); return; // Binary operators - fall back to Op2 routine. case GL_ADD_ATI: case GL_MUL_ATI: case GL_SUB_ATI: case GL_DOT3_ATI: case GL_DOT4_ATI: glColorFragmentOp2ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod); break; // Ternary operators case GL_MAD_ATI: sprintf(str, " MAD r%d", dst - GL_REG_0_ATI); break; case GL_LERP_ATI: sprintf(str, " LERP r%d", dst - GL_REG_0_ATI); break; case GL_CND_ATI: sprintf(str, " CND r%d", dst - GL_REG_0_ATI); break; case GL_CND0_ATI: sprintf(str, " CND0 r%d", dst - GL_REG_0_ATI); break; case GL_DOT2_ADD_ATI: sprintf(str, " DOT2ADD r%d", dst - GL_REG_0_ATI); break; default: common->Warning("glColorFragmentOp3ATI invalid op;"); break; } if(dstMask != GL_NONE) { strcat(str, makeMaskStr(dstMask)); } else { strcat(str, ".rgb" ); } if(dstMod != GL_NONE) { strcat(str, makeDstModStr(dstMod)); } strcat(str, ", "); strcat(str, makeArgStr(arg1)); if(arg1Rep != GL_NONE) { strcat(str, makeMaskStr(arg1Rep)); } if(arg1Mod != GL_NONE) { strcat(str, makeArgModStr(arg1Mod)); } strcat(str, ", "); strcat(str, makeArgStr(arg2)); if(arg2Rep != GL_NONE) { strcat(str, makeMaskStr(arg2Rep)); } if(arg2Mod != GL_NONE) { strcat(str, makeArgModStr(arg2Mod)); } strcat(str, ", "); strcat(str, makeArgStr(arg3)); if(arg3Rep != GL_NONE) { strcat(str, makeMaskStr(arg3Rep)); } if(arg3Mod != GL_NONE) { strcat(str, makeArgModStr(arg3Mod)); } strcat(str, ";\n"); strcat(sPassString[sCurrentPass], str); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ATIFragmentShader_nglColorFragmentOp1ATI(JNIEnv *env, jclass clazz, jint op, jint dst, jint dstMask, jint dstMod, jint arg1, jint arg1Rep, jint arg1Mod, jlong function_pointer) { glColorFragmentOp1ATIPROC glColorFragmentOp1ATI = (glColorFragmentOp1ATIPROC)((intptr_t)function_pointer); glColorFragmentOp1ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod); }