Lines Matching refs:This
5 * copy of this software and associated documentation files (the "Software"),
11 * The above copyright notice and this permission notice (including the next
36 NineVertexShader9_ctor( struct NineVertexShader9 *This,
46 DBG("This=%p pParams=%p pFunction=%p cso=%p\n",
47 This, pParams, pFunction, cso);
49 hr = NineUnknown_ctor(&This->base, pParams);
54 This->ff_cso = cso;
58 device = This->base.device;
89 This->byte_code.version = info.version;
90 This->swvp_only = info.swvp_on;
92 This->byte_code.tokens = mem_dup(pFunction, info.byte_size);
93 if (!This->byte_code.tokens)
95 This->byte_code.size = info.byte_size;
97 This->variant.cso = info.cso;
98 This->variant.const_ranges = info.const_ranges;
99 This->variant.const_used_size = info.const_used_size;
100 This->last_cso = info.cso;
101 This->last_const_ranges = info.const_ranges;
102 This->last_const_used_size = info.const_used_size;
103 This->last_key = (uint32_t) (info.swvp_on << 9);
105 This->lconstf = info.lconstf;
106 This->sampler_mask = info.sampler_mask;
107 This->position_t = info.position_t;
108 This->point_size = info.point_size;
110 memcpy(This->int_slots_used, info.int_slots_used, sizeof(This->int_slots_used));
111 memcpy(This->bool_slots_used, info.bool_slots_used, sizeof(This->bool_slots_used));
113 This->const_int_slots = info.const_int_slots;
114 This->const_bool_slots = info.const_bool_slots;
116 This->c_combinations = NULL;
118 for (i = 0; i < info.num_inputs && i < ARRAY_SIZE(This->input_map); ++i)
119 This->input_map[i].ndecl = info.input_map[i];
120 This->num_inputs = i;
126 NineVertexShader9_dtor( struct NineVertexShader9 *This )
128 DBG("This=%p\n", This);
130 if (This->base.device) {
131 struct pipe_context *pipe = nine_context_get_pipe_multithread(This->base.device);
132 struct nine_shader_variant *var = &This->variant;
133 struct nine_shader_variant_so *var_so = &This->variant_so;
137 if (This->base.device->context.cso_shader.vs == var->cso)
147 This->base.device->pipe_sw->delete_vs_state(This->base.device->pipe_sw, var_so->cso);
152 if (This->ff_cso) {
153 if (This->ff_cso == This->base.device->context.cso_shader.vs)
155 pipe->delete_vs_state(pipe, This->ff_cso);
158 nine_shader_variants_free(&This->variant);
159 nine_shader_variants_so_free(&This->variant_so);
161 nine_shader_constant_combination_free(This->c_combinations);
163 FREE((void *)This->byte_code.tokens); /* const_cast */
165 FREE(This->lconstf.data);
166 FREE(This->lconstf.ranges);
168 NineUnknown_dtor(&This->base);
172 NineVertexShader9_GetFunction( struct NineVertexShader9 *This,
179 *pSizeOfData = This->byte_code.size;
182 user_assert(*pSizeOfData >= This->byte_code.size, D3DERR_INVALIDCALL);
184 memcpy(pData, This->byte_code.tokens, This->byte_code.size);
190 NineVertexShader9_GetVariant( struct NineVertexShader9 *This,
196 struct pipe_context *pipe = This->base.device->context.pipe;
200 key = This->next_key;
201 if (key == This->last_key) {
202 *const_ranges = This->last_const_ranges;
203 *const_used_size = This->last_const_used_size;
204 return This->last_cso;
207 cso = nine_shader_variant_get(&This->variant, const_ranges, const_used_size, key);
209 struct NineDevice9 *device = This->base.device;
216 info.byte_code = This->byte_code.tokens;
223 nine_shader_constant_combination_get(This->c_combinations, (key >> 16) & 0xff);
224 info.add_constants_defs.int_const_added = &This->int_slots_used;
225 info.add_constants_defs.bool_const_added = &This->bool_slots_used;
229 hr = nine_translate_shader(This->base.device, &info, pipe);
232 nine_shader_variant_add(&This->variant, key, info.cso,
239 This->last_key = key;
240 This->last_cso = cso;
241 This->last_const_ranges = *const_ranges;
242 This->last_const_used_size = *const_used_size;
248 NineVertexShader9_GetVariantProcessVertices( struct NineVertexShader9 *This,
256 cso = nine_shader_variant_so_get(&This->variant_so, vdecl_out, so);
263 info.byte_code = This->byte_code.tokens;
275 hr = nine_translate_shader(This->base.device, &info, This->base.device->pipe_sw);
279 nine_shader_variant_so_add(&This->variant_so, vdecl_out, so, info.cso);