43 context->texShaderBumpMap |= (1u << stage);
47 context->texShaderBumpMap &= ~(1u << stage);
50 if (
state->textures[stage])
52 switch (
state->textures[stage]->target)
57 checkGLcall(
"glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, ...)");
62 checkGLcall(
"glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, ...)");
66 checkGLcall(
"glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, GL_TEXTURE_3D)");
70 checkGLcall(
"glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, GL_TEXTURE_CUBE_MAP_ARB)");
77 checkGLcall(
"glTexEnvi(GL_TEXTURE_SHADER_NV, GL_SHADER_OPERATION_NV, GL_NONE)");
112 FIXME(
"WINED3DTA_CONSTANT, not properly supported.\n");
116 FIXME(
"Unrecognized texture arg %#x\n", d3dta);
138 else *component_usage =
GL_RGB;
151 TRACE(
"stage %d, is_alpha %d, op %s, arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d\n",
181 ERR(
"Shouldn't be called for WINED3D_TSS_COLOR_OP (WINED3DTOP_DISABLE).\n");
333 ERR(
"Only supported for WINED3D_TSS_COLOR_OP (WINED3DTOP_MODULATEALPHA_ADDCOLOR).\n");
351 ERR(
"Only supported for WINED3D_TSS_COLOR_OP (WINED3DTOP_MODULATECOLOR_ADDALPHA).\n");
369 ERR(
"Only supported for WINED3D_TSS_COLOR_OP (WINED3DTOP_MODULATEINVALPHA_ADDCOLOR).\n");
387 ERR(
"Only supported for WINED3D_TSS_COLOR_OP (WINED3DTOP_MODULATEINVCOLOR_ADDALPHA).\n");
451 WARN(
"BUMPENVMAP requires GL_NV_texture_shader in this codepath\n");
470 FIXME(
"Unhandled texture op: stage %d, is_alpha %d, op %s (%#x), arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d.\n",
481 BOOL tex_used =
context->fixed_function_usage_map & (1u << stage);
485 TRACE(
"Setting color op for stage %u.\n", stage);
490 if (stage != mapped_stage)
WARN(
"Using non 1:1 mapping: %d -> %d!\n", stage, mapped_stage);
494 if (tex_used && mapped_stage >= gl_info->
limits.textures)
496 FIXME(
"Attempt to enable unsupported stage!\n");
502 if (
context->lowest_disabled_stage > 0)
511 if (stage >=
context->lowest_disabled_stage)
513 TRACE(
"Stage disabled\n");
529 checkGLcall(
"glDisable(GL_TEXTURE_RECTANGLE_ARB)");
574 BOOL usedBump = !!(
context->texShaderBumpMap & 1u << (stage + 1));
575 if (usesBump != usedBump)
588 TRACE(
"Setting result arg for stage %u.\n", stage);
631 if (mapped_stage < gl_info->
limits.textures)
642 checkGLcall(
"glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, mat)");
666 checkGLcall(
"glDisable(GL_REGISTER_COMBINERS_NV)");
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, unsigned int unit)
void state_nop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void apply_pixelshader(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_fogstartend(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_fogcolor(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_fog_fragpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void tex_alphaop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_alpha_test(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_fogdensity(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void state_shademode(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void texture_activate_dimensions(const struct wined3d_texture *texture, const struct wined3d_gl_info *gl_info)
BOOL is_invalid_op(const struct wined3d_state *state, int stage, enum wined3d_texture_op op, DWORD arg1, DWORD arg2, DWORD arg3)
const char * debug_d3dtop(enum wined3d_texture_op d3dtop)
void sampler_texdim(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
#define GL_SCALE_BY_TWO_NV
#define GL_SECONDARY_COLOR_NV
#define GL_CONSTANT_COLOR0_NV
#define GL_OFFSET_TEXTURE_2D_NV
GLuint GLuint GLuint GLuint arg1
#define GL_PRIMARY_COLOR_NV
#define GL_OFFSET_TEXTURE_MATRIX_NV
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
#define GL_TEXTURE_SHADER_NV
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
#define GL_SIGNED_NEGATE_NV
#define GL_TEXTURE_CUBE_MAP_ARB
#define GL_CONSTANT_COLOR1_NV
#define GL_REGISTER_COMBINERS_NV
#define GL_UNSIGNED_IDENTITY_NV
#define GL_NUM_GENERAL_COMBINERS_NV
#define GL_EXPAND_NORMAL_NV
#define GL_UNSIGNED_INVERT_NV
GLenum GLenum GLenum GLenum mapping
#define GL_TEXTURE_RECTANGLE_ARB
#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
#define GL_SCALE_BY_FOUR_NV
GLenum GLenum GLenum input
#define GL_SHADER_OPERATION_NV
static BOOL nvts_color_fixup_supported(struct color_fixup_desc fixup)
static DWORD nvrc_fragment_get_emul_mask(const struct wined3d_gl_info *gl_info)
static void nvrc_resultarg(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
const struct fragment_pipeline nvts_fragment_pipeline
static void nvts_texdim(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
static void nvts_bumpenvmat(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
static void nvts_activate_dimensions(const struct wined3d_state *state, DWORD stage, struct wined3d_context *context)
static void nvrc_texfactor(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
void set_tex_op_nvrc(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state, BOOL is_alpha, int stage, enum wined3d_texture_op op, DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx, DWORD dst)
static void nvrc_fragment_free(struct wined3d_device *device)
const struct fragment_pipeline nvrc_fragment_pipeline
static void nvrc_context_free(struct wined3d_context *context)
static void nvrc_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
static BOOL nvrc_context_alloc(struct wined3d_context *context)
static GLenum d3dta_to_combiner_input(DWORD d3dta, DWORD stage, INT texture_idx)
static const struct StateEntryTemplate nvrc_fragmentstate_template[]
static void * nvrc_fragment_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv)
static GLenum invert_mapping(GLenum mapping)
static void nvrc_colorop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
static void get_src_and_opr_nvrc(DWORD stage, DWORD arg, BOOL is_alpha, GLenum *input, GLenum *mapping, GLenum *component_usage, INT texture_idx)
static void nvts_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
static void nvrc_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
DWORD MaxSimultaneousTextures
DWORD MaxTextureBlendStages
GLenum component_usage[3]
BOOL supported[WINED3D_GL_EXT_COUNT]
struct opengl_funcs gl_ops
struct wined3d_gl_limits limits
#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR
#define WINED3DTEXOPCAPS_ADD
#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA
#define WINED3DTA_SPECULAR
#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA
#define WINED3DTA_COMPLEMENT
#define WINED3DPMISCCAPS_PERSTAGECONSTANT
@ WINED3D_RS_TEXTUREFACTOR
@ WINED3D_RS_COLORKEYENABLE
@ WINED3D_RS_SRGBWRITEENABLE
@ WINED3D_RS_FOGTABLEMODE
@ WINED3D_RS_FOGVERTEXMODE
@ WINED3D_RS_ALPHATESTENABLE
#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA
#define WINED3DTEXOPCAPS_MODULATE2X
#define WINED3DTA_SELECTMASK
#define WINED3DTEXOPCAPS_DISABLE
#define WINED3DTEXOPCAPS_SELECTARG1
#define WINED3DTA_TFACTOR
#define WINED3DTEXOPCAPS_SUBTRACT
@ WINED3D_TSS_BUMPENV_MAT11
@ WINED3D_TSS_BUMPENV_MAT10
@ WINED3D_TSS_BUMPENV_MAT01
@ WINED3D_TSS_BUMPENV_MAT00
#define WINED3DTEXOPCAPS_BUMPENVMAP
#define WINED3DTA_CURRENT
#define WINED3DTEXOPCAPS_ADDSIGNED2X
#define WINED3DTEXOPCAPS_MODULATE4X
@ WINED3D_TOP_SELECT_ARG1
@ WINED3D_TOP_BLEND_DIFFUSE_ALPHA
@ WINED3D_TOP_BLEND_TEXTURE_ALPHA_PM
@ WINED3D_TOP_BLEND_CURRENT_ALPHA
@ WINED3D_TOP_ADD_SIGNED_2X
@ WINED3D_TOP_MODULATE_INVCOLOR_ADD_ALPHA
@ WINED3D_TOP_MULTIPLY_ADD
@ WINED3D_TOP_MODULATE_INVALPHA_ADD_COLOR
@ WINED3D_TOP_BUMPENVMAP_LUMINANCE
@ WINED3D_TOP_MODULATE_COLOR_ADD_ALPHA
@ WINED3D_TOP_MODULATE_4X
@ WINED3D_TOP_SELECT_ARG2
@ WINED3D_TOP_MODULATE_ALPHA_ADD_COLOR
@ WINED3D_TOP_BLEND_TEXTURE_ALPHA
@ WINED3D_TOP_DOTPRODUCT3
@ WINED3D_TOP_MODULATE_2X
@ WINED3D_TOP_BLEND_FACTOR_ALPHA
#define WINED3DTEXOPCAPS_ADDSMOOTH
#define WINED3DTA_ALPHAREPLICATE
#define WINED3DPMISCCAPS_TSSARGTEMP
#define WINED3DTEXOPCAPS_MULTIPLYADD
#define WINED3D_HIGHEST_TEXTURE_STATE
#define WINED3DTEXOPCAPS_BLENDFACTORALPHA
#define WINED3DTA_DIFFUSE
#define WINED3DTEXOPCAPS_ADDSIGNED
#define WINED3DTEXOPCAPS_DOTPRODUCT3
#define WINED3DTA_CONSTANT
#define WINED3DTEXOPCAPS_LERP
#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM
#define WINED3DTEXOPCAPS_SELECTARG2
#define WINED3DTEXOPCAPS_MODULATE
#define WINED3DTA_TEXTURE
#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA
#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA
#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR
static void context_apply_state(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
#define GL_EXT_EMUL_EXT_FOG_COORD
#define GL_EXT_EMUL_ARB_MULTITEXTURE
#define STATE_SAMPLER(num)
static void wined3d_color_from_d3dcolor(struct wined3d_color *wined3d_color, DWORD d3d_color)
static BOOL is_identity_fixup(struct color_fixup_desc fixup)
@ WINED3D_SHADER_TYPE_PIXEL
static BOOL use_ps(const struct wined3d_state *state)
#define STATE_TEXTURESTAGE(stage, num)
static BOOL isStateDirty(const struct wined3d_context *context, DWORD state)
#define WINED3D_UNMAPPED_STAGE