wined3d: Get rid of the local_constant typedef.

This commit is contained in:
Henri Verbeet 2011-10-31 19:48:13 +01:00 committed by Alexandre Julliard
parent fcf96b634a
commit b49e08aa8d
4 changed files with 40 additions and 39 deletions

View File

@ -368,7 +368,7 @@ static unsigned int reserved_vs_const(const struct arb_vshader_private *shader_d
static unsigned int shader_arb_load_constantsF(struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, static unsigned int shader_arb_load_constantsF(struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info,
GLuint target_type, unsigned int max_constants, const float *constants, char *dirty_consts) GLuint target_type, unsigned int max_constants, const float *constants, char *dirty_consts)
{ {
local_constant* lconst; struct wined3d_shader_lconst *lconst;
DWORD i, j; DWORD i, j;
unsigned int ret; unsigned int ret;
@ -458,7 +458,7 @@ static unsigned int shader_arb_load_constantsF(struct wined3d_shader *shader, co
{ {
if (TRACE_ON(d3d_shader)) if (TRACE_ON(d3d_shader))
{ {
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
GLfloat* values = (GLfloat*)lconst->value; GLfloat* values = (GLfloat*)lconst->value;
TRACE_(d3d_constants)("Loading local constants %i: %f, %f, %f, %f\n", lconst->idx, TRACE_(d3d_constants)("Loading local constants %i: %f, %f, %f, %f\n", lconst->idx,
@ -467,7 +467,7 @@ static unsigned int shader_arb_load_constantsF(struct wined3d_shader *shader, co
} }
/* Immediate constants are clamped for 1.X shaders at loading times */ /* Immediate constants are clamped for 1.X shaders at loading times */
ret = 0; ret = 0;
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
dirty_consts[lconst->idx] = 1; /* Dirtify so the non-immediate constant overwrites it next time */ dirty_consts[lconst->idx] = 1; /* Dirtify so the non-immediate constant overwrites it next time */
ret = max(ret, lconst->idx + 1); ret = max(ret, lconst->idx + 1);
@ -702,9 +702,9 @@ static void shader_arb_update_float_pixel_constants(struct wined3d_device *devic
static DWORD *local_const_mapping(const struct wined3d_shader *shader) static DWORD *local_const_mapping(const struct wined3d_shader *shader)
{ {
const struct wined3d_shader_lconst *lconst;
DWORD *ret; DWORD *ret;
DWORD idx = 0; DWORD idx = 0;
const local_constant *lconst;
if (shader->load_local_constsF || list_empty(&shader->constantsF)) if (shader->load_local_constsF || list_empty(&shader->constantsF))
return NULL; return NULL;
@ -716,7 +716,7 @@ static DWORD *local_const_mapping(const struct wined3d_shader *shader)
return NULL; return NULL;
} }
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
ret[lconst->idx] = idx++; ret[lconst->idx] = idx++;
} }
@ -731,8 +731,8 @@ static DWORD shader_generate_arb_declarations(struct wined3d_shader *shader,
{ {
DWORD i, next_local = 0; DWORD i, next_local = 0;
char pshader = shader_is_pshader_version(reg_maps->shader_version.type); char pshader = shader_is_pshader_version(reg_maps->shader_version.type);
const struct wined3d_shader_lconst *lconst;
unsigned max_constantsF; unsigned max_constantsF;
const local_constant *lconst;
DWORD map; DWORD map;
/* In pixel shaders, all private constants are program local, we don't need anything /* In pixel shaders, all private constants are program local, we don't need anything
@ -825,7 +825,7 @@ static DWORD shader_generate_arb_declarations(struct wined3d_shader *shader,
*/ */
if (lconst_map) if (lconst_map)
{ {
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
shader_addline(buffer, "PARAM C%u = program.local[%u];\n", lconst->idx, shader_addline(buffer, "PARAM C%u = program.local[%u];\n", lconst->idx,
lconst_map[lconst->idx]); lconst_map[lconst->idx]);
@ -3429,9 +3429,9 @@ static void arbfp_add_sRGB_correction(struct wined3d_shader_buffer *buffer, cons
static const DWORD *find_loop_control_values(const struct wined3d_shader *shader, DWORD idx) static const DWORD *find_loop_control_values(const struct wined3d_shader *shader, DWORD idx)
{ {
const local_constant *constant; const struct wined3d_shader_lconst *constant;
LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, local_constant, entry) LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry)
{ {
if (constant->idx == idx) if (constant->idx == idx)
{ {
@ -3521,8 +3521,8 @@ static GLuint shader_arb_generate_pshader(struct wined3d_shader *shader,
const struct arb_ps_compile_args *args, struct arb_ps_compiled_shader *compiled) const struct arb_ps_compile_args *args, struct arb_ps_compiled_shader *compiled)
{ {
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps; const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
const struct wined3d_shader_lconst *lconst;
const DWORD *function = shader->function; const DWORD *function = shader->function;
const local_constant *lconst;
GLuint retval; GLuint retval;
char fragcolor[16]; char fragcolor[16];
DWORD *lconst_map = local_const_mapping(shader), next_local; DWORD *lconst_map = local_const_mapping(shader), next_local;
@ -3848,7 +3848,7 @@ static GLuint shader_arb_generate_pshader(struct wined3d_shader *shader,
/* Load immediate constants */ /* Load immediate constants */
if (lconst_map) if (lconst_map)
{ {
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
const float *value = (const float *)lconst->value; const float *value = (const float *)lconst->value;
GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, lconst_map[lconst->idx], value)); GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, lconst_map[lconst->idx], value));
@ -4108,8 +4108,8 @@ static GLuint shader_arb_generate_vshader(struct wined3d_shader *shader,
{ {
const struct arb_vshader_private *shader_data = shader->backend_data; const struct arb_vshader_private *shader_data = shader->backend_data;
const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps; const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps;
const struct wined3d_shader_lconst *lconst;
const DWORD *function = shader->function; const DWORD *function = shader->function;
const local_constant *lconst;
GLuint ret; GLuint ret;
DWORD next_local, *lconst_map = local_const_mapping(shader); DWORD next_local, *lconst_map = local_const_mapping(shader);
struct shader_arb_ctx_priv priv_ctx; struct shader_arb_ctx_priv priv_ctx;
@ -4255,7 +4255,7 @@ static GLuint shader_arb_generate_vshader(struct wined3d_shader *shader,
/* Load immediate constants */ /* Load immediate constants */
if (lconst_map) if (lconst_map)
{ {
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
const float *value = (const float *)lconst->value; const float *value = (const float *)lconst->value;
GL_EXTCALL(glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, lconst_map[lconst->idx], value)); GL_EXTCALL(glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, lconst_map[lconst->idx], value));
@ -5130,15 +5130,15 @@ static BOOL get_bool_const(const struct wined3d_shader_instruction *ins,
{ {
const struct wined3d_shader_reg_maps *reg_maps = ins->ctx->reg_maps; const struct wined3d_shader_reg_maps *reg_maps = ins->ctx->reg_maps;
BOOL vshader = shader_is_vshader_version(reg_maps->shader_version.type); BOOL vshader = shader_is_vshader_version(reg_maps->shader_version.type);
const struct wined3d_shader_lconst *constant;
WORD bools = 0; WORD bools = 0;
WORD flag = (1 << idx); WORD flag = (1 << idx);
const local_constant *constant;
struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; struct shader_arb_ctx_priv *priv = ins->ctx->backend_data;
if (reg_maps->local_bool_consts & flag) if (reg_maps->local_bool_consts & flag)
{ {
/* What good is a if(bool) with a hardcoded local constant? I don't know, but handle it */ /* What good is a if(bool) with a hardcoded local constant? I don't know, but handle it */
LIST_FOR_EACH_ENTRY(constant, &shader->constantsB, local_constant, entry) LIST_FOR_EACH_ENTRY(constant, &shader->constantsB, struct wined3d_shader_lconst, entry)
{ {
if (constant->idx == idx) if (constant->idx == idx)
{ {
@ -5166,9 +5166,9 @@ static void get_loop_control_const(const struct wined3d_shader_instruction *ins,
* type specific compile args. */ * type specific compile args. */
if (reg_maps->local_int_consts & (1 << idx)) if (reg_maps->local_int_consts & (1 << idx))
{ {
const local_constant *constant; const struct wined3d_shader_lconst *constant;
LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, local_constant, entry) LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry)
{ {
if (constant->idx == idx) if (constant->idx == idx)
{ {

View File

@ -517,7 +517,7 @@ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, con
const float *constants, const GLint *constant_locations, const struct constant_heap *heap, const float *constants, const GLint *constant_locations, const struct constant_heap *heap,
unsigned char *stack, UINT version) unsigned char *stack, UINT version)
{ {
const local_constant *lconst; const struct wined3d_shader_lconst *lconst;
/* 1.X pshaders have the constants clamped to [-1;1] implicitly. */ /* 1.X pshaders have the constants clamped to [-1;1] implicitly. */
if (shader->reg_maps.shader_version.major == 1 if (shader->reg_maps.shader_version.major == 1
@ -533,7 +533,7 @@ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, con
} }
/* Immediate constants are clamped to [-1;1] at shader creation time if needed */ /* Immediate constants are clamped to [-1;1] at shader creation time if needed */
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
GLint location = constant_locations[lconst->idx]; GLint location = constant_locations[lconst->idx];
/* We found this uniform name in the program - go ahead and send the data */ /* We found this uniform name in the program - go ahead and send the data */
@ -566,7 +566,7 @@ static void shader_glsl_load_constantsI(const struct wined3d_shader *shader, con
ptr = list_head(&shader->constantsI); ptr = list_head(&shader->constantsI);
while (ptr) while (ptr)
{ {
const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry); const struct wined3d_shader_lconst *lconst = LIST_ENTRY(ptr, const struct wined3d_shader_lconst, entry);
unsigned int idx = lconst->idx; unsigned int idx = lconst->idx;
const GLint *values = (const GLint *)lconst->value; const GLint *values = (const GLint *)lconst->value;
@ -636,7 +636,7 @@ static void shader_glsl_load_constantsB(const struct wined3d_shader *shader, con
ptr = list_head(&shader->constantsB); ptr = list_head(&shader->constantsB);
while (ptr) while (ptr)
{ {
const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry); const struct wined3d_shader_lconst *lconst = LIST_ENTRY(ptr, const struct wined3d_shader_lconst, entry);
unsigned int idx = lconst->idx; unsigned int idx = lconst->idx;
const GLint *values = (const GLint *)lconst->value; const GLint *values = (const GLint *)lconst->value;
@ -901,7 +901,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_gl_info *gl_info = context->gl_info;
const struct wined3d_fb_state *fb = &shader->device->fb; const struct wined3d_fb_state *fb = &shader->device->fb;
unsigned int i, extra_constants_needed = 0; unsigned int i, extra_constants_needed = 0;
const local_constant *lconst; const struct wined3d_shader_lconst *lconst;
DWORD map; DWORD map;
/* There are some minor differences between pixel and vertex shaders */ /* There are some minor differences between pixel and vertex shaders */
@ -1179,7 +1179,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
*/ */
if (!shader->load_local_constsF) if (!shader->load_local_constsF)
{ {
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
shader_addline(buffer, "uniform vec4 %cLC%u;\n", prefix, lconst->idx); shader_addline(buffer, "uniform vec4 %cLC%u;\n", prefix, lconst->idx);
} }
@ -2826,9 +2826,9 @@ static void shader_glsl_loop(const struct wined3d_shader_instruction *ins)
{ {
struct wined3d_shader_loop_state *loop_state = ins->ctx->loop_state; struct wined3d_shader_loop_state *loop_state = ins->ctx->loop_state;
const struct wined3d_shader *shader = ins->ctx->shader; const struct wined3d_shader *shader = ins->ctx->shader;
const struct wined3d_shader_lconst *constant;
struct glsl_src_param src1_param; struct glsl_src_param src1_param;
const DWORD *control_values = NULL; const DWORD *control_values = NULL;
const local_constant *constant;
shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param); shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param);
@ -2839,7 +2839,7 @@ static void shader_glsl_loop(const struct wined3d_shader_instruction *ins)
*/ */
if (ins->src[1].reg.type == WINED3DSPR_CONSTINT) if (ins->src[1].reg.type == WINED3DSPR_CONSTINT)
{ {
LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, local_constant, entry) LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry)
{ {
if (constant->idx == ins->src[1].reg.idx) if (constant->idx == ins->src[1].reg.idx)
{ {
@ -2911,14 +2911,14 @@ static void shader_glsl_rep(const struct wined3d_shader_instruction *ins)
{ {
const struct wined3d_shader *shader = ins->ctx->shader; const struct wined3d_shader *shader = ins->ctx->shader;
struct wined3d_shader_loop_state *loop_state = ins->ctx->loop_state; struct wined3d_shader_loop_state *loop_state = ins->ctx->loop_state;
const struct wined3d_shader_lconst *constant;
struct glsl_src_param src0_param; struct glsl_src_param src0_param;
const DWORD *control_values = NULL; const DWORD *control_values = NULL;
const local_constant *constant;
/* Try to hardcode local values to help the GLSL compiler to unroll and optimize the loop */ /* Try to hardcode local values to help the GLSL compiler to unroll and optimize the loop */
if (ins->src[0].reg.type == WINED3DSPR_CONSTINT) if (ins->src[0].reg.type == WINED3DSPR_CONSTINT)
{ {
LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, local_constant, entry) LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry)
{ {
if (constant->idx == ins->src[0].reg.idx) if (constant->idx == ins->src[0].reg.idx)
{ {
@ -3950,12 +3950,12 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer
static void hardcode_local_constants(const struct wined3d_shader *shader, static void hardcode_local_constants(const struct wined3d_shader *shader,
const struct wined3d_gl_info *gl_info, GLhandleARB programId, char prefix) const struct wined3d_gl_info *gl_info, GLhandleARB programId, char prefix)
{ {
const local_constant *lconst; const struct wined3d_shader_lconst *lconst;
GLint tmp_loc; GLint tmp_loc;
const float *value; const float *value;
char glsl_name[8]; char glsl_name[8];
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
value = (const float *)lconst->value; value = (const float *)lconst->value;
snprintf(glsl_name, sizeof(glsl_name), "%cLC%u", prefix, lconst->idx); snprintf(glsl_name, sizeof(glsl_name), "%cLC%u", prefix, lconst->idx);

View File

@ -327,13 +327,13 @@ static unsigned int shader_get_float_offset(WINED3DSHADER_PARAM_REGISTER_TYPE re
static void shader_delete_constant_list(struct list *clist) static void shader_delete_constant_list(struct list *clist)
{ {
struct local_constant *constant; struct wined3d_shader_lconst *constant;
struct list *ptr; struct list *ptr;
ptr = list_head(clist); ptr = list_head(clist);
while (ptr) while (ptr)
{ {
constant = LIST_ENTRY(ptr, struct local_constant, entry); constant = LIST_ENTRY(ptr, struct wined3d_shader_lconst, entry);
ptr = list_next(clist, ptr); ptr = list_next(clist, ptr);
HeapFree(GetProcessHeap(), 0, constant); HeapFree(GetProcessHeap(), 0, constant);
} }
@ -530,7 +530,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
@ -560,7 +560,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
@ -577,7 +577,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
struct wined3d_shader_src_param rel_addr; struct wined3d_shader_src_param rel_addr;
struct wined3d_shader_dst_param dst; struct wined3d_shader_dst_param dst;
local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst));
if (!lconst) return E_OUTOFMEMORY; if (!lconst) return E_OUTOFMEMORY;
fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
@ -1705,7 +1705,7 @@ HRESULT CDECL wined3d_shader_set_local_constants_float(struct wined3d_shader *sh
for (i = start_idx; i < end_idx; ++i) for (i = start_idx; i < end_idx; ++i)
{ {
struct local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant)); struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst));
if (!lconst) if (!lconst)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;

View File

@ -2539,11 +2539,12 @@ unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN; void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
typedef struct local_constant { struct wined3d_shader_lconst
{
struct list entry; struct list entry;
unsigned int idx; unsigned int idx;
DWORD value[4]; DWORD value[4];
} local_constant; };
struct wined3d_shader_limits struct wined3d_shader_limits
{ {
@ -2711,12 +2712,12 @@ static inline void shader_get_position_fixup(const struct wined3d_context *conte
static inline BOOL shader_constant_is_local(const struct wined3d_shader *shader, DWORD reg) static inline BOOL shader_constant_is_local(const struct wined3d_shader *shader, DWORD reg)
{ {
struct local_constant *lconst; struct wined3d_shader_lconst *lconst;
if (shader->load_local_constsF) if (shader->load_local_constsF)
return FALSE; return FALSE;
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, local_constant, entry) LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
{ {
if (lconst->idx == reg) if (lconst->idx == reg)
return TRUE; return TRUE;