Lines Matching refs:opcode

55 #define OP_SATURATE (1 << 1) /* saturate in opcode specific control */
56 #define OP_TEST_BOOLEAN (1 << 2) /* test boolean in opcode specific control */
57 #define OP_DCL (1 << 3) /* custom opcode specific control */
286 struct Shader_opcode *opcode)
298 memset(opcode, 0, sizeof *opcode);
301 opcode->type = DECODE_D3D10_SB_OPCODE_TYPE(*curr);
303 if (opcode->type == D3D10_SB_OPCODE_CUSTOMDATA) {
304 opcode->customdata._class = DECODE_D3D10_SB_CUSTOMDATA_CLASS(*curr);
307 assert(opcode->customdata._class == D3D10_SB_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER);
309 opcode->customdata.u.constbuf.count = *curr - 2;
312 opcode->customdata.u.constbuf.data = MALLOC(opcode->customdata.u.constbuf.count * sizeof(unsigned));
313 assert(opcode->customdata.u.constbuf.data);
315 memcpy(opcode->customdata.u.constbuf.data,
317 opcode->customdata.u.constbuf.count * sizeof(unsigned));
318 curr += opcode->customdata.u.constbuf.count;
324 opcode->dcl_siv_name = D3D10_SB_NAME_UNDEFINED;
326 /* Lookup extra information based on opcode type. */
327 assert(opcode->type < D3D10_SB_NUM_OPCODES);
328 info = &opcode_info[opcode->type];
331 switch (opcode->type) {
333 opcode->specific.dcl_resource_dimension = DECODE_D3D10_SB_RESOURCE_DIMENSION(*curr);
336 opcode->specific.dcl_sampler_mode = DECODE_D3D10_SB_SAMPLER_MODE(*curr);
339 opcode->specific.dcl_gs_output_primitive_topology = DECODE_D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY(*curr);
342 opcode->specific.dcl_gs_input_primitive = DECODE_D3D10_SB_GS_INPUT_PRIMITIVE(*curr);
346 opcode->specific.dcl_in_ps_interp = DECODE_D3D10_SB_INPUT_INTERPOLATION_MODE(*curr);
349 opcode->specific.global_flags.refactoring_allowed = DECODE_D3D10_SB_GLOBAL_FLAGS(*curr) ? 1 : 0;
352 /* Parse opcode-specific control bits */
356 opcode->saturate =
359 opcode->specific.test_boolean =
362 opcode->specific.resinfo_ret_type =
365 /* Warn if there are bits set in the opcode-specific controls (bits 23:11 inclusive)*/
367 debug_printf("warning: unexpected opcode-specific control in opcode %s\n",
379 switch (opcode->type) {
381 opcode->specific.dcl_cb_access_pattern =
401 opcode->imm_texel_offset.u = DECODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_U, *curr);
402 opcode->imm_texel_offset.v = DECODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_V, *curr);
403 opcode->imm_texel_offset.w = DECODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_W, *curr);
413 /* XXX: Need to figure out the number of operands for this opcode.
418 opcode->num_dst = 0;
419 opcode->num_src = 0;
423 opcode->num_dst = info->num_dst;
424 opcode->num_src = info->num_src;
439 opcode->dst[i].mask = DECODE_D3D10_SB_OPERAND_4_COMPONENT_MASK(*curr);
444 opcode->dst[i].mask = D3D10_SB_OPERAND_4_COMPONENT_MASK_X;
447 parse_operand(&curr, &opcode->dst[i].base);
448 parse_operand_index(&curr, &opcode->dst[i].base);
465 opcode->src[i].swizzle[0] = DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SOURCE(*curr, 0);
466 opcode->src[i].swizzle[1] = DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SOURCE(*curr, 1);
467 opcode->src[i].swizzle[2] = DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SOURCE(*curr, 2);
468 opcode->src[i].swizzle[3] = DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SOURCE(*curr, 3);
470 opcode->src[i].swizzle[0] =
471 opcode->src[i].swizzle[1] =
472 opcode->src[i].swizzle[2] =
473 opcode->src[i].swizzle[3] = DECODE_D3D10_SB_OPERAND_4_COMPONENT_SELECT_1(*curr);
483 opcode->src[i].swizzle[0] = D3D10_SB_4_COMPONENT_X;
484 opcode->src[i].swizzle[1] = D3D10_SB_4_COMPONENT_Y;
485 opcode->src[i].swizzle[2] = D3D10_SB_4_COMPONENT_Z;
486 opcode->src[i].swizzle[3] = D3D10_SB_4_COMPONENT_W;
489 opcode->src[i].swizzle[0] =
490 opcode->src[i].swizzle[1] =
491 opcode->src[i].swizzle[2] =
492 opcode->src[i].swizzle[3] = D3D10_SB_4_COMPONENT_X;
500 opcode->src[i].swizzle[0] = D3D10_SB_4_COMPONENT_X;
501 opcode->src[i].swizzle[1] = D3D10_SB_4_COMPONENT_Y;
502 opcode->src[i].swizzle[2] = D3D10_SB_4_COMPONENT_Z;
503 opcode->src[i].swizzle[3] = D3D10_SB_4_COMPONENT_W;
506 parse_operand(&curr, &opcode->src[i].base);
508 opcode->src[i].modifier = D3D10_SB_OPERAND_MODIFIER_NONE;
519 opcode->src[i].modifier = DECODE_D3D10_SB_OPERAND_MODIFIER(*curr);
529 parse_operand_index(&curr, &opcode->src[i].base);
531 if (opcode->src[i].base.type == D3D10_SB_OPERAND_TYPE_IMMEDIATE32) {
534 opcode->src[i].imm[0].u32 =
535 opcode->src[i].imm[1].u32 =
536 opcode->src[i].imm[2].u32 =
537 opcode->src[i].imm[3].u32 = *curr++;
541 opcode->src[i].imm[0].u32 = *curr++;
542 opcode->src[i].imm[1].u32 = *curr++;
543 opcode->src[i].imm[2].u32 = *curr++;
544 opcode->src[i].imm[3].u32 = *curr++;
556 switch (opcode->type) {
558 opcode->dcl_resource_ret_type[0] = DECODE_D3D10_SB_RESOURCE_RETURN_TYPE(*curr, 0);
559 opcode->dcl_resource_ret_type[1] = DECODE_D3D10_SB_RESOURCE_RETURN_TYPE(*curr, 1);
560 opcode->dcl_resource_ret_type[2] = DECODE_D3D10_SB_RESOURCE_RETURN_TYPE(*curr, 2);
561 opcode->dcl_resource_ret_type[3] = DECODE_D3D10_SB_RESOURCE_RETURN_TYPE(*curr, 3);
565 opcode->specific.dcl_max_output_vertex_count = *curr;
574 opcode->dcl_siv_name = DECODE_D3D10_SB_NAME(*curr);
578 opcode->specific.dcl_num_temps = *curr;
582 opcode->specific.dcl_indexable_temp.index = *curr++;
583 opcode->specific.dcl_indexable_temp.count = *curr++;
584 opcode->specific.dcl_indexable_temp.components = *curr++;
587 opcode->specific.index_range_count = *curr++;
596 /* Advance to the next opcode. */
603 Shader_opcode_free(struct Shader_opcode *opcode)
605 if (opcode->type == D3D10_SB_OPCODE_CUSTOMDATA) {
606 if (opcode->customdata._class == D3D10_SB_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER) {
607 FREE(opcode->customdata.u.constbuf.data);