ReactOS 0.4.17-dev-966-gf06eace
d3dcompiler_private.h File Reference
#include "wine/debug.h"
#include "wine/list.h"
#include "wine/rbtree.h"
#include "windef.h"
#include "winbase.h"
#include "objbase.h"
#include "d3dcompiler.h"
#include "utils.h"
#include <assert.h>
#include <stdint.h>
#include <vkd3d_shader.h>
Include dependency graph for d3dcompiler_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  constant
 
struct  shader_reg
 
struct  instruction
 
struct  declaration
 
struct  samplerdecl
 
struct  bwriter_shader
 
struct  rel_reg
 
struct  src_regs
 
struct  asmparser_backend
 
struct  compilation_messages
 
struct  asm_parser
 

Macros

#define COBJMACROS
 
#define D3DERR_INVALIDCALL   0x8876086c
 
#define MAX_SRC_REGS   4
 
#define MESSAGEBUFFER_INITIAL_SIZE   256
 
#define PRINTF_ATTR(fmt, args)
 
#define SWIZZLE_ERR   ~0U
 
#define BWRITERSP_WRITEMASK_0   0x1 /* .x r */
 
#define BWRITERSP_WRITEMASK_1   0x2 /* .y g */
 
#define BWRITERSP_WRITEMASK_2   0x4 /* .z b */
 
#define BWRITERSP_WRITEMASK_3   0x8 /* .w a */
 
#define BWRITERSP_WRITEMASK_ALL   0xf /* all */
 
#define BWRITERSI_TEXLD_PROJECT   1
 
#define BWRITERSI_TEXLD_BIAS   2
 
#define BWRITER_SM1_VS   0xfffeu
 
#define BWRITER_SM1_PS   0xffffu
 
#define BWRITERPS_VERSION(major, minor)   ((BWRITER_SM1_PS << 16) | ((major) << 8) | (minor))
 
#define BWRITERVS_VERSION(major, minor)   ((BWRITER_SM1_VS << 16) | ((major) << 8) | (minor))
 
#define BWRITERVS_X_X   (0)
 
#define BWRITERVS_X_Y   (1)
 
#define BWRITERVS_X_Z   (2)
 
#define BWRITERVS_X_W   (3)
 
#define BWRITERVS_Y_X   (0 << 2)
 
#define BWRITERVS_Y_Y   (1 << 2)
 
#define BWRITERVS_Y_Z   (2 << 2)
 
#define BWRITERVS_Y_W   (3 << 2)
 
#define BWRITERVS_Z_X   (0 << 4)
 
#define BWRITERVS_Z_Y   (1 << 4)
 
#define BWRITERVS_Z_Z   (2 << 4)
 
#define BWRITERVS_Z_W   (3 << 4)
 
#define BWRITERVS_W_X   (0 << 6)
 
#define BWRITERVS_W_Y   (1 << 6)
 
#define BWRITERVS_W_Z   (2 << 6)
 
#define BWRITERVS_W_W   (3 << 6)
 
#define BWRITERVS_NOSWIZZLE   (BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z | BWRITERVS_W_W)
 
#define BWRITERVS_SWIZZLE_X   (BWRITERVS_X_X | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X)
 
#define BWRITERVS_SWIZZLE_Y   (BWRITERVS_X_Y | BWRITERVS_Y_Y | BWRITERVS_Z_Y | BWRITERVS_W_Y)
 
#define BWRITERVS_SWIZZLE_Z   (BWRITERVS_X_Z | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z)
 
#define BWRITERVS_SWIZZLE_W   (BWRITERVS_X_W | BWRITERVS_Y_W | BWRITERVS_Z_W | BWRITERVS_W_W)
 
#define T0_REG   2
 
#define T1_REG   3
 
#define T2_REG   4
 
#define T3_REG   5
 
#define DXBC_HEADER_SIZE   (8 * sizeof(uint32_t))
 
#define MAKE_TAG(ch0, ch1, ch2, ch3)
 
#define TAG_Aon9   MAKE_TAG('A', 'o', 'n', '9')
 
#define TAG_DXBC   MAKE_TAG('D', 'X', 'B', 'C')
 
#define TAG_FX10   MAKE_TAG('F', 'X', '1', '0')
 
#define TAG_ISGN   MAKE_TAG('I', 'S', 'G', 'N')
 
#define TAG_OSGN   MAKE_TAG('O', 'S', 'G', 'N')
 
#define TAG_OSG5   MAKE_TAG('O', 'S', 'G', '5')
 
#define TAG_PCSG   MAKE_TAG('P', 'C', 'S', 'G')
 
#define TAG_RDEF   MAKE_TAG('R', 'D', 'E', 'F')
 
#define TAG_SDBG   MAKE_TAG('S', 'D', 'B', 'G')
 
#define TAG_SHDR   MAKE_TAG('S', 'H', 'D', 'R')
 
#define TAG_SHEX   MAKE_TAG('S', 'H', 'E', 'X')
 
#define TAG_STAT   MAKE_TAG('S', 'T', 'A', 'T')
 
#define TAG_XNAP   MAKE_TAG('X', 'N', 'A', 'P')
 
#define TAG_XNAS   MAKE_TAG('X', 'N', 'A', 'S')
 

Enumerations

enum  shader_type { ST_UNKNOWN , ST_VERTEX , ST_PIXEL }
 
enum  bwriter_comparison_type {
  BWRITER_COMPARISON_NONE , BWRITER_COMPARISON_GT , BWRITER_COMPARISON_EQ , BWRITER_COMPARISON_GE ,
  BWRITER_COMPARISON_LT , BWRITER_COMPARISON_NE , BWRITER_COMPARISON_LE
}
 
enum  parse_status { PARSE_SUCCESS = 0 , PARSE_WARN = 1 , PARSE_ERR = 2 }
 
enum  bwritershader_instruction_opcode_type {
  BWRITERSIO_NOP , BWRITERSIO_MOV , BWRITERSIO_ADD , BWRITERSIO_SUB ,
  BWRITERSIO_MAD , BWRITERSIO_MUL , BWRITERSIO_RCP , BWRITERSIO_RSQ ,
  BWRITERSIO_DP3 , BWRITERSIO_DP4 , BWRITERSIO_MIN , BWRITERSIO_MAX ,
  BWRITERSIO_SLT , BWRITERSIO_SGE , BWRITERSIO_EXP , BWRITERSIO_LOG ,
  BWRITERSIO_LIT , BWRITERSIO_DST , BWRITERSIO_LRP , BWRITERSIO_FRC ,
  BWRITERSIO_M4x4 , BWRITERSIO_M4x3 , BWRITERSIO_M3x4 , BWRITERSIO_M3x3 ,
  BWRITERSIO_M3x2 , BWRITERSIO_CALL , BWRITERSIO_CALLNZ , BWRITERSIO_LOOP ,
  BWRITERSIO_RET , BWRITERSIO_ENDLOOP , BWRITERSIO_LABEL , BWRITERSIO_DCL ,
  BWRITERSIO_POW , BWRITERSIO_CRS , BWRITERSIO_SGN , BWRITERSIO_ABS ,
  BWRITERSIO_NRM , BWRITERSIO_SINCOS , BWRITERSIO_REP , BWRITERSIO_ENDREP ,
  BWRITERSIO_IF , BWRITERSIO_IFC , BWRITERSIO_ELSE , BWRITERSIO_ENDIF ,
  BWRITERSIO_BREAK , BWRITERSIO_BREAKC , BWRITERSIO_MOVA , BWRITERSIO_DEFB ,
  BWRITERSIO_DEFI , BWRITERSIO_TEXCOORD , BWRITERSIO_TEXKILL , BWRITERSIO_TEX ,
  BWRITERSIO_TEXBEM , BWRITERSIO_TEXBEML , BWRITERSIO_TEXREG2AR , BWRITERSIO_TEXREG2GB ,
  BWRITERSIO_TEXM3x2PAD , BWRITERSIO_TEXM3x2TEX , BWRITERSIO_TEXM3x3PAD , BWRITERSIO_TEXM3x3TEX ,
  BWRITERSIO_TEXM3x3SPEC , BWRITERSIO_TEXM3x3VSPEC , BWRITERSIO_EXPP , BWRITERSIO_LOGP ,
  BWRITERSIO_CND , BWRITERSIO_DEF , BWRITERSIO_TEXREG2RGB , BWRITERSIO_TEXDP3TEX ,
  BWRITERSIO_TEXM3x2DEPTH , BWRITERSIO_TEXDP3 , BWRITERSIO_TEXM3x3 , BWRITERSIO_TEXDEPTH ,
  BWRITERSIO_CMP , BWRITERSIO_BEM , BWRITERSIO_DP2ADD , BWRITERSIO_DSX ,
  BWRITERSIO_DSY , BWRITERSIO_TEXLDD , BWRITERSIO_SETP , BWRITERSIO_TEXLDL ,
  BWRITERSIO_BREAKP , BWRITERSIO_TEXLDP , BWRITERSIO_TEXLDB , BWRITERSIO_PHASE ,
  BWRITERSIO_COMMENT , BWRITERSIO_END
}
 
enum  bwritershader_param_register_type {
  BWRITERSPR_TEMP , BWRITERSPR_INPUT , BWRITERSPR_CONST , BWRITERSPR_ADDR ,
  BWRITERSPR_TEXTURE , BWRITERSPR_RASTOUT , BWRITERSPR_ATTROUT , BWRITERSPR_TEXCRDOUT ,
  BWRITERSPR_OUTPUT , BWRITERSPR_CONSTINT , BWRITERSPR_COLOROUT , BWRITERSPR_DEPTHOUT ,
  BWRITERSPR_SAMPLER , BWRITERSPR_CONSTBOOL , BWRITERSPR_LOOP , BWRITERSPR_MISCTYPE ,
  BWRITERSPR_LABEL , BWRITERSPR_PREDICATE
}
 
enum  bwritervs_rastout_offsets { BWRITERSRO_POSITION , BWRITERSRO_FOG , BWRITERSRO_POINT_SIZE }
 
enum  bwritershader_param_dstmod_type { BWRITERSPDM_NONE = 0 , BWRITERSPDM_SATURATE = 1 , BWRITERSPDM_PARTIALPRECISION = 2 , BWRITERSPDM_MSAMPCENTROID = 4 }
 
enum  bwritersampler_texture_type {
  BWRITERSTT_UNKNOWN = 0 , BWRITERSTT_1D = 1 , BWRITERSTT_2D = 2 , BWRITERSTT_CUBE = 3 ,
  BWRITERSTT_VOLUME = 4
}
 
enum  bwritershader_param_srcmod_type {
  BWRITERSPSM_NONE = 0 , BWRITERSPSM_NEG , BWRITERSPSM_BIAS , BWRITERSPSM_BIASNEG ,
  BWRITERSPSM_SIGN , BWRITERSPSM_SIGNNEG , BWRITERSPSM_COMP , BWRITERSPSM_X2 ,
  BWRITERSPSM_X2NEG , BWRITERSPSM_DZ , BWRITERSPSM_DW , BWRITERSPSM_ABS ,
  BWRITERSPSM_ABSNEG , BWRITERSPSM_NOT
}
 
enum  bwriterdeclusage {
  BWRITERDECLUSAGE_POSITION , BWRITERDECLUSAGE_BLENDWEIGHT , BWRITERDECLUSAGE_BLENDINDICES , BWRITERDECLUSAGE_NORMAL ,
  BWRITERDECLUSAGE_PSIZE , BWRITERDECLUSAGE_TEXCOORD , BWRITERDECLUSAGE_TANGENT , BWRITERDECLUSAGE_BINORMAL ,
  BWRITERDECLUSAGE_TESSFACTOR , BWRITERDECLUSAGE_POSITIONT , BWRITERDECLUSAGE_COLOR , BWRITERDECLUSAGE_FOG ,
  BWRITERDECLUSAGE_DEPTH , BWRITERDECLUSAGE_SAMPLE
}
 

Functions

const char * debug_d3dcompiler_d3d_blob_part (D3D_BLOB_PART part)
 
const char * debug_d3dcompiler_shader_variable_class (D3D_SHADER_VARIABLE_CLASS c)
 
const char * debug_d3dcompiler_shader_variable_type (D3D_SHADER_VARIABLE_TYPE t)
 
struct instruction * alloc_instr (unsigned int srcs)
 
BOOL add_instruction (struct bwriter_shader *shader, struct instruction *instr)
 
BOOL add_constF (struct bwriter_shader *shader, uint32_t reg, float x, float y, float z, float w)
 
BOOL add_constI (struct bwriter_shader *shader, uint32_t reg, int x, int y, int z, int w)
 
BOOL add_constB (struct bwriter_shader *shader, uint32_t reg, BOOL x)
 
BOOL record_declaration (struct bwriter_shader *shader, uint32_t usage, uint32_t usage_idx, uint32_t mod, BOOL output, uint32_t regnum, uint32_t writemask, BOOL builtin)
 
BOOL record_sampler (struct bwriter_shader *shader, uint32_t samptype, uint32_t mod, uint32_t regnum)
 
void create_vs10_parser (struct asm_parser *ret)
 
void create_vs11_parser (struct asm_parser *ret)
 
void create_vs20_parser (struct asm_parser *ret)
 
void create_vs2x_parser (struct asm_parser *ret)
 
void create_vs30_parser (struct asm_parser *ret)
 
void create_ps10_parser (struct asm_parser *ret)
 
void create_ps11_parser (struct asm_parser *ret)
 
void create_ps12_parser (struct asm_parser *ret)
 
void create_ps13_parser (struct asm_parser *ret)
 
void create_ps14_parser (struct asm_parser *ret)
 
void create_ps20_parser (struct asm_parser *ret)
 
void create_ps2x_parser (struct asm_parser *ret)
 
void create_ps30_parser (struct asm_parser *ret)
 
struct bwriter_shader * parse_asm_shader (char **messages)
 
void compilation_message (struct compilation_messages *msg, const char *fmt, va_list args)
 
void WINAPIV asmparser_message (struct asm_parser *ctx, const char *fmt,...) PRINTF_ATTR(2
 
void WINAPIV static void set_parse_status (enum parse_status *current, enum parse_status update)
 
const char * debug_print_srcmod (uint32_t mod)
 
const char * debug_print_dstmod (uint32_t mod)
 
const char * debug_print_shift (uint32_t shift)
 
const char * debug_print_dstreg (const struct shader_reg *reg)
 
const char * debug_print_srcreg (const struct shader_reg *reg)
 
const char * debug_print_comp (uint32_t comp)
 
const char * debug_print_opcode (uint32_t opcode)
 
struct bwriter_shader * SlAssembleShader (const char *text, char **messages)
 
HRESULT shader_write_bytecode (const struct bwriter_shader *shader, uint32_t **result, uint32_t *size)
 
void SlDeleteShader (struct bwriter_shader *shader)
 

Variables

struct asm_parser asm_ctx
 

Macro Definition Documentation

◆ BWRITER_SM1_PS

#define BWRITER_SM1_PS   0xffffu

Definition at line 459 of file d3dcompiler_private.h.

◆ BWRITER_SM1_VS

#define BWRITER_SM1_VS   0xfffeu

Definition at line 458 of file d3dcompiler_private.h.

◆ BWRITERPS_VERSION

#define BWRITERPS_VERSION (   major,
  minor 
)    ((BWRITER_SM1_PS << 16) | ((major) << 8) | (minor))

Definition at line 461 of file d3dcompiler_private.h.

◆ BWRITERSI_TEXLD_BIAS

#define BWRITERSI_TEXLD_BIAS   2

Definition at line 438 of file d3dcompiler_private.h.

◆ BWRITERSI_TEXLD_PROJECT

#define BWRITERSI_TEXLD_PROJECT   1

Definition at line 437 of file d3dcompiler_private.h.

◆ BWRITERSP_WRITEMASK_0

#define BWRITERSP_WRITEMASK_0   0x1 /* .x r */

Definition at line 414 of file d3dcompiler_private.h.

◆ BWRITERSP_WRITEMASK_1

#define BWRITERSP_WRITEMASK_1   0x2 /* .y g */

Definition at line 415 of file d3dcompiler_private.h.

◆ BWRITERSP_WRITEMASK_2

#define BWRITERSP_WRITEMASK_2   0x4 /* .z b */

Definition at line 416 of file d3dcompiler_private.h.

◆ BWRITERSP_WRITEMASK_3

#define BWRITERSP_WRITEMASK_3   0x8 /* .w a */

Definition at line 417 of file d3dcompiler_private.h.

◆ BWRITERSP_WRITEMASK_ALL

#define BWRITERSP_WRITEMASK_ALL   0xf /* all */

Definition at line 418 of file d3dcompiler_private.h.

◆ BWRITERVS_NOSWIZZLE

#define BWRITERVS_NOSWIZZLE   (BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z | BWRITERVS_W_W)

Definition at line 484 of file d3dcompiler_private.h.

◆ BWRITERVS_SWIZZLE_W

#define BWRITERVS_SWIZZLE_W   (BWRITERVS_X_W | BWRITERVS_Y_W | BWRITERVS_Z_W | BWRITERVS_W_W)

Definition at line 489 of file d3dcompiler_private.h.

◆ BWRITERVS_SWIZZLE_X

#define BWRITERVS_SWIZZLE_X   (BWRITERVS_X_X | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X)

Definition at line 486 of file d3dcompiler_private.h.

◆ BWRITERVS_SWIZZLE_Y

#define BWRITERVS_SWIZZLE_Y   (BWRITERVS_X_Y | BWRITERVS_Y_Y | BWRITERVS_Z_Y | BWRITERVS_W_Y)

Definition at line 487 of file d3dcompiler_private.h.

◆ BWRITERVS_SWIZZLE_Z

#define BWRITERVS_SWIZZLE_Z   (BWRITERVS_X_Z | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z)

Definition at line 488 of file d3dcompiler_private.h.

◆ BWRITERVS_VERSION

#define BWRITERVS_VERSION (   major,
  minor 
)    ((BWRITER_SM1_VS << 16) | ((major) << 8) | (minor))

Definition at line 462 of file d3dcompiler_private.h.

◆ BWRITERVS_W_W

#define BWRITERVS_W_W   (3 << 6)

Definition at line 482 of file d3dcompiler_private.h.

◆ BWRITERVS_W_X

#define BWRITERVS_W_X   (0 << 6)

Definition at line 479 of file d3dcompiler_private.h.

◆ BWRITERVS_W_Y

#define BWRITERVS_W_Y   (1 << 6)

Definition at line 480 of file d3dcompiler_private.h.

◆ BWRITERVS_W_Z

#define BWRITERVS_W_Z   (2 << 6)

Definition at line 481 of file d3dcompiler_private.h.

◆ BWRITERVS_X_W

#define BWRITERVS_X_W   (3)

Definition at line 467 of file d3dcompiler_private.h.

◆ BWRITERVS_X_X

#define BWRITERVS_X_X   (0)

Definition at line 464 of file d3dcompiler_private.h.

◆ BWRITERVS_X_Y

#define BWRITERVS_X_Y   (1)

Definition at line 465 of file d3dcompiler_private.h.

◆ BWRITERVS_X_Z

#define BWRITERVS_X_Z   (2)

Definition at line 466 of file d3dcompiler_private.h.

◆ BWRITERVS_Y_W

#define BWRITERVS_Y_W   (3 << 2)

Definition at line 472 of file d3dcompiler_private.h.

◆ BWRITERVS_Y_X

#define BWRITERVS_Y_X   (0 << 2)

Definition at line 469 of file d3dcompiler_private.h.

◆ BWRITERVS_Y_Y

#define BWRITERVS_Y_Y   (1 << 2)

Definition at line 470 of file d3dcompiler_private.h.

◆ BWRITERVS_Y_Z

#define BWRITERVS_Y_Z   (2 << 2)

Definition at line 471 of file d3dcompiler_private.h.

◆ BWRITERVS_Z_W

#define BWRITERVS_Z_W   (3 << 4)

Definition at line 477 of file d3dcompiler_private.h.

◆ BWRITERVS_Z_X

#define BWRITERVS_Z_X   (0 << 4)

Definition at line 474 of file d3dcompiler_private.h.

◆ BWRITERVS_Z_Y

#define BWRITERVS_Z_Y   (1 << 4)

Definition at line 475 of file d3dcompiler_private.h.

◆ BWRITERVS_Z_Z

#define BWRITERVS_Z_Z   (2 << 4)

Definition at line 476 of file d3dcompiler_private.h.

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file d3dcompiler_private.h.

◆ D3DERR_INVALIDCALL

#define D3DERR_INVALIDCALL   0x8876086c

Definition at line 47 of file d3dcompiler_private.h.

◆ DXBC_HEADER_SIZE

#define DXBC_HEADER_SIZE   (8 * sizeof(uint32_t))

Definition at line 519 of file d3dcompiler_private.h.

◆ MAKE_TAG

#define MAKE_TAG (   ch0,
  ch1,
  ch2,
  ch3 
)
Value:
((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \
((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DWORD
Definition: nt_native.h:44

Definition at line 521 of file d3dcompiler_private.h.

◆ MAX_SRC_REGS

#define MAX_SRC_REGS   4

Definition at line 169 of file d3dcompiler_private.h.

◆ MESSAGEBUFFER_INITIAL_SIZE

#define MESSAGEBUFFER_INITIAL_SIZE   256

Definition at line 215 of file d3dcompiler_private.h.

◆ PRINTF_ATTR

#define PRINTF_ATTR (   fmt,
  args 
)

Definition at line 266 of file d3dcompiler_private.h.

◆ SWIZZLE_ERR

#define SWIZZLE_ERR   ~0U

Definition at line 289 of file d3dcompiler_private.h.

◆ T0_REG

#define T0_REG   2

Definition at line 510 of file d3dcompiler_private.h.

◆ T1_REG

#define T1_REG   3

Definition at line 511 of file d3dcompiler_private.h.

◆ T2_REG

#define T2_REG   4

Definition at line 512 of file d3dcompiler_private.h.

◆ T3_REG

#define T3_REG   5

Definition at line 513 of file d3dcompiler_private.h.

◆ TAG_Aon9

#define TAG_Aon9   MAKE_TAG('A', 'o', 'n', '9')

Definition at line 524 of file d3dcompiler_private.h.

◆ TAG_DXBC

#define TAG_DXBC   MAKE_TAG('D', 'X', 'B', 'C')

Definition at line 525 of file d3dcompiler_private.h.

◆ TAG_FX10

#define TAG_FX10   MAKE_TAG('F', 'X', '1', '0')

Definition at line 526 of file d3dcompiler_private.h.

◆ TAG_ISGN

#define TAG_ISGN   MAKE_TAG('I', 'S', 'G', 'N')

Definition at line 527 of file d3dcompiler_private.h.

◆ TAG_OSG5

#define TAG_OSG5   MAKE_TAG('O', 'S', 'G', '5')

Definition at line 529 of file d3dcompiler_private.h.

◆ TAG_OSGN

#define TAG_OSGN   MAKE_TAG('O', 'S', 'G', 'N')

Definition at line 528 of file d3dcompiler_private.h.

◆ TAG_PCSG

#define TAG_PCSG   MAKE_TAG('P', 'C', 'S', 'G')

Definition at line 530 of file d3dcompiler_private.h.

◆ TAG_RDEF

#define TAG_RDEF   MAKE_TAG('R', 'D', 'E', 'F')

Definition at line 531 of file d3dcompiler_private.h.

◆ TAG_SDBG

#define TAG_SDBG   MAKE_TAG('S', 'D', 'B', 'G')

Definition at line 532 of file d3dcompiler_private.h.

◆ TAG_SHDR

#define TAG_SHDR   MAKE_TAG('S', 'H', 'D', 'R')

Definition at line 533 of file d3dcompiler_private.h.

◆ TAG_SHEX

#define TAG_SHEX   MAKE_TAG('S', 'H', 'E', 'X')

Definition at line 534 of file d3dcompiler_private.h.

◆ TAG_STAT

#define TAG_STAT   MAKE_TAG('S', 'T', 'A', 'T')

Definition at line 535 of file d3dcompiler_private.h.

◆ TAG_XNAP

#define TAG_XNAP   MAKE_TAG('X', 'N', 'A', 'P')

Definition at line 536 of file d3dcompiler_private.h.

◆ TAG_XNAS

#define TAG_XNAS   MAKE_TAG('X', 'N', 'A', 'S')

Definition at line 537 of file d3dcompiler_private.h.

Enumeration Type Documentation

◆ bwriter_comparison_type

Enumerator
BWRITER_COMPARISON_NONE 
BWRITER_COMPARISON_GT 
BWRITER_COMPARISON_EQ 
BWRITER_COMPARISON_GE 
BWRITER_COMPARISON_LT 
BWRITER_COMPARISON_NE 
BWRITER_COMPARISON_LE 

Definition at line 61 of file d3dcompiler_private.h.

◆ bwriterdeclusage

Enumerator
BWRITERDECLUSAGE_POSITION 
BWRITERDECLUSAGE_BLENDWEIGHT 
BWRITERDECLUSAGE_BLENDINDICES 
BWRITERDECLUSAGE_NORMAL 
BWRITERDECLUSAGE_PSIZE 
BWRITERDECLUSAGE_TEXCOORD 
BWRITERDECLUSAGE_TANGENT 
BWRITERDECLUSAGE_BINORMAL 
BWRITERDECLUSAGE_TESSFACTOR 
BWRITERDECLUSAGE_POSITIONT 
BWRITERDECLUSAGE_COLOR 
BWRITERDECLUSAGE_FOG 
BWRITERDECLUSAGE_DEPTH 
BWRITERDECLUSAGE_SAMPLE 

Definition at line 491 of file d3dcompiler_private.h.

492{
507};
@ BWRITERDECLUSAGE_BLENDWEIGHT
@ BWRITERDECLUSAGE_FOG
@ BWRITERDECLUSAGE_NORMAL
@ BWRITERDECLUSAGE_PSIZE
@ BWRITERDECLUSAGE_COLOR
@ BWRITERDECLUSAGE_POSITION
@ BWRITERDECLUSAGE_BINORMAL
@ BWRITERDECLUSAGE_TANGENT
@ BWRITERDECLUSAGE_TESSFACTOR
@ BWRITERDECLUSAGE_DEPTH
@ BWRITERDECLUSAGE_BLENDINDICES
@ BWRITERDECLUSAGE_POSITIONT
@ BWRITERDECLUSAGE_TEXCOORD
@ BWRITERDECLUSAGE_SAMPLE

◆ bwritersampler_texture_type

Enumerator
BWRITERSTT_UNKNOWN 
BWRITERSTT_1D 
BWRITERSTT_2D 
BWRITERSTT_CUBE 
BWRITERSTT_VOLUME 

Definition at line 428 of file d3dcompiler_private.h.

429{
431 BWRITERSTT_1D = 1,
432 BWRITERSTT_2D = 2,
433 BWRITERSTT_CUBE = 3,
435};
@ BWRITERSTT_CUBE
@ BWRITERSTT_UNKNOWN
@ BWRITERSTT_VOLUME
@ BWRITERSTT_2D
@ BWRITERSTT_1D

◆ bwritershader_instruction_opcode_type

Enumerator
BWRITERSIO_NOP 
BWRITERSIO_MOV 
BWRITERSIO_ADD 
BWRITERSIO_SUB 
BWRITERSIO_MAD 
BWRITERSIO_MUL 
BWRITERSIO_RCP 
BWRITERSIO_RSQ 
BWRITERSIO_DP3 
BWRITERSIO_DP4 
BWRITERSIO_MIN 
BWRITERSIO_MAX 
BWRITERSIO_SLT 
BWRITERSIO_SGE 
BWRITERSIO_EXP 
BWRITERSIO_LOG 
BWRITERSIO_LIT 
BWRITERSIO_DST 
BWRITERSIO_LRP 
BWRITERSIO_FRC 
BWRITERSIO_M4x4 
BWRITERSIO_M4x3 
BWRITERSIO_M3x4 
BWRITERSIO_M3x3 
BWRITERSIO_M3x2 
BWRITERSIO_CALL 
BWRITERSIO_CALLNZ 
BWRITERSIO_LOOP 
BWRITERSIO_RET 
BWRITERSIO_ENDLOOP 
BWRITERSIO_LABEL 
BWRITERSIO_DCL 
BWRITERSIO_POW 
BWRITERSIO_CRS 
BWRITERSIO_SGN 
BWRITERSIO_ABS 
BWRITERSIO_NRM 
BWRITERSIO_SINCOS 
BWRITERSIO_REP 
BWRITERSIO_ENDREP 
BWRITERSIO_IF 
BWRITERSIO_IFC 
BWRITERSIO_ELSE 
BWRITERSIO_ENDIF 
BWRITERSIO_BREAK 
BWRITERSIO_BREAKC 
BWRITERSIO_MOVA 
BWRITERSIO_DEFB 
BWRITERSIO_DEFI 
BWRITERSIO_TEXCOORD 
BWRITERSIO_TEXKILL 
BWRITERSIO_TEX 
BWRITERSIO_TEXBEM 
BWRITERSIO_TEXBEML 
BWRITERSIO_TEXREG2AR 
BWRITERSIO_TEXREG2GB 
BWRITERSIO_TEXM3x2PAD 
BWRITERSIO_TEXM3x2TEX 
BWRITERSIO_TEXM3x3PAD 
BWRITERSIO_TEXM3x3TEX 
BWRITERSIO_TEXM3x3SPEC 
BWRITERSIO_TEXM3x3VSPEC 
BWRITERSIO_EXPP 
BWRITERSIO_LOGP 
BWRITERSIO_CND 
BWRITERSIO_DEF 
BWRITERSIO_TEXREG2RGB 
BWRITERSIO_TEXDP3TEX 
BWRITERSIO_TEXM3x2DEPTH 
BWRITERSIO_TEXDP3 
BWRITERSIO_TEXM3x3 
BWRITERSIO_TEXDEPTH 
BWRITERSIO_CMP 
BWRITERSIO_BEM 
BWRITERSIO_DP2ADD 
BWRITERSIO_DSX 
BWRITERSIO_DSY 
BWRITERSIO_TEXLDD 
BWRITERSIO_SETP 
BWRITERSIO_TEXLDL 
BWRITERSIO_BREAKP 
BWRITERSIO_TEXLDP 
BWRITERSIO_TEXLDB 
BWRITERSIO_PHASE 
BWRITERSIO_COMMENT 
BWRITERSIO_END 

Definition at line 293 of file d3dcompiler_private.h.

294{
344
379
383};
@ BWRITERSIO_EXP
@ BWRITERSIO_TEXBEML
@ BWRITERSIO_DSX
@ BWRITERSIO_LRP
@ BWRITERSIO_MAX
@ BWRITERSIO_TEXLDB
@ BWRITERSIO_BEM
@ BWRITERSIO_RCP
@ BWRITERSIO_MOV
@ BWRITERSIO_POW
@ BWRITERSIO_NRM
@ BWRITERSIO_DEF
@ BWRITERSIO_TEXM3x3TEX
@ BWRITERSIO_DEFB
@ BWRITERSIO_MIN
@ BWRITERSIO_TEXM3x2PAD
@ BWRITERSIO_DP2ADD
@ BWRITERSIO_SGE
@ BWRITERSIO_CALLNZ
@ BWRITERSIO_MUL
@ BWRITERSIO_BREAK
@ BWRITERSIO_END
@ BWRITERSIO_CALL
@ BWRITERSIO_TEXM3x3PAD
@ BWRITERSIO_ENDREP
@ BWRITERSIO_CND
@ BWRITERSIO_BREAKP
@ BWRITERSIO_SGN
@ BWRITERSIO_M3x4
@ BWRITERSIO_TEXDP3
@ BWRITERSIO_LOOP
@ BWRITERSIO_TEX
@ BWRITERSIO_TEXREG2AR
@ BWRITERSIO_TEXLDD
@ BWRITERSIO_TEXM3x3SPEC
@ BWRITERSIO_DCL
@ BWRITERSIO_TEXM3x2DEPTH
@ BWRITERSIO_EXPP
@ BWRITERSIO_TEXCOORD
@ BWRITERSIO_MOVA
@ BWRITERSIO_ENDIF
@ BWRITERSIO_TEXREG2RGB
@ BWRITERSIO_IFC
@ BWRITERSIO_TEXBEM
@ BWRITERSIO_MAD
@ BWRITERSIO_CRS
@ BWRITERSIO_FRC
@ BWRITERSIO_LABEL
@ BWRITERSIO_SINCOS
@ BWRITERSIO_ADD
@ BWRITERSIO_M4x3
@ BWRITERSIO_M3x2
@ BWRITERSIO_TEXM3x3VSPEC
@ BWRITERSIO_TEXLDL
@ BWRITERSIO_DSY
@ BWRITERSIO_SUB
@ BWRITERSIO_TEXDP3TEX
@ BWRITERSIO_TEXDEPTH
@ BWRITERSIO_TEXKILL
@ BWRITERSIO_M4x4
@ BWRITERSIO_DP4
@ BWRITERSIO_ELSE
@ BWRITERSIO_LIT
@ BWRITERSIO_IF
@ BWRITERSIO_LOGP
@ BWRITERSIO_RET
@ BWRITERSIO_CMP
@ BWRITERSIO_DP3
@ BWRITERSIO_LOG
@ BWRITERSIO_PHASE
@ BWRITERSIO_M3x3
@ BWRITERSIO_TEXLDP
@ BWRITERSIO_REP
@ BWRITERSIO_DEFI
@ BWRITERSIO_ENDLOOP
@ BWRITERSIO_TEXM3x2TEX
@ BWRITERSIO_SETP
@ BWRITERSIO_RSQ
@ BWRITERSIO_TEXM3x3
@ BWRITERSIO_COMMENT
@ BWRITERSIO_TEXREG2GB
@ BWRITERSIO_BREAKC
@ BWRITERSIO_ABS
@ BWRITERSIO_DST
@ BWRITERSIO_SLT
@ BWRITERSIO_NOP

◆ bwritershader_param_dstmod_type

Enumerator
BWRITERSPDM_NONE 
BWRITERSPDM_SATURATE 
BWRITERSPDM_PARTIALPRECISION 
BWRITERSPDM_MSAMPCENTROID 

Definition at line 420 of file d3dcompiler_private.h.

421{
426};
@ BWRITERSPDM_SATURATE
@ BWRITERSPDM_PARTIALPRECISION
@ BWRITERSPDM_MSAMPCENTROID
@ BWRITERSPDM_NONE

◆ bwritershader_param_register_type

Enumerator
BWRITERSPR_TEMP 
BWRITERSPR_INPUT 
BWRITERSPR_CONST 
BWRITERSPR_ADDR 
BWRITERSPR_TEXTURE 
BWRITERSPR_RASTOUT 
BWRITERSPR_ATTROUT 
BWRITERSPR_TEXCRDOUT 
BWRITERSPR_OUTPUT 
BWRITERSPR_CONSTINT 
BWRITERSPR_COLOROUT 
BWRITERSPR_DEPTHOUT 
BWRITERSPR_SAMPLER 
BWRITERSPR_CONSTBOOL 
BWRITERSPR_LOOP 
BWRITERSPR_MISCTYPE 
BWRITERSPR_LABEL 
BWRITERSPR_PREDICATE 

Definition at line 385 of file d3dcompiler_private.h.

386{
405};
@ BWRITERSPR_TEXCRDOUT
@ BWRITERSPR_CONSTINT
@ BWRITERSPR_MISCTYPE
@ BWRITERSPR_RASTOUT
@ BWRITERSPR_LOOP
@ BWRITERSPR_CONSTBOOL
@ BWRITERSPR_COLOROUT
@ BWRITERSPR_SAMPLER
@ BWRITERSPR_CONST
@ BWRITERSPR_TEXTURE
@ BWRITERSPR_DEPTHOUT
@ BWRITERSPR_ADDR
@ BWRITERSPR_ATTROUT
@ BWRITERSPR_TEMP
@ BWRITERSPR_INPUT
@ BWRITERSPR_PREDICATE
@ BWRITERSPR_LABEL
@ BWRITERSPR_OUTPUT

◆ bwritershader_param_srcmod_type

Enumerator
BWRITERSPSM_NONE 
BWRITERSPSM_NEG 
BWRITERSPSM_BIAS 
BWRITERSPSM_BIASNEG 
BWRITERSPSM_SIGN 
BWRITERSPSM_SIGNNEG 
BWRITERSPSM_COMP 
BWRITERSPSM_X2 
BWRITERSPSM_X2NEG 
BWRITERSPSM_DZ 
BWRITERSPSM_DW 
BWRITERSPSM_ABS 
BWRITERSPSM_ABSNEG 
BWRITERSPSM_NOT 

Definition at line 440 of file d3dcompiler_private.h.

441{
456};
@ BWRITERSPSM_COMP
@ BWRITERSPSM_X2
@ BWRITERSPSM_ABS
@ BWRITERSPSM_NONE
@ BWRITERSPSM_BIAS
@ BWRITERSPSM_X2NEG
@ BWRITERSPSM_NEG
@ BWRITERSPSM_SIGNNEG
@ BWRITERSPSM_BIASNEG
@ BWRITERSPSM_DZ
@ BWRITERSPSM_ABSNEG
@ BWRITERSPSM_NOT
@ BWRITERSPSM_SIGN
@ BWRITERSPSM_DW

◆ bwritervs_rastout_offsets

Enumerator
BWRITERSRO_POSITION 
BWRITERSRO_FOG 
BWRITERSRO_POINT_SIZE 

Definition at line 407 of file d3dcompiler_private.h.

408{
412};
@ BWRITERSRO_POSITION
@ BWRITERSRO_FOG
@ BWRITERSRO_POINT_SIZE

◆ parse_status

Enumerator
PARSE_SUCCESS 
PARSE_WARN 
PARSE_ERR 

Definition at line 217 of file d3dcompiler_private.h.

218{
219 PARSE_SUCCESS = 0,
220 PARSE_WARN = 1,
221 PARSE_ERR = 2
222};
@ PARSE_WARN
@ PARSE_SUCCESS
@ PARSE_ERR

◆ shader_type

Enumerator
ST_UNKNOWN 
ST_VERTEX 
ST_PIXEL 

Definition at line 54 of file d3dcompiler_private.h.

55{
59};
@ ST_VERTEX
@ ST_UNKNOWN
@ ST_PIXEL

Function Documentation

◆ add_constB()

BOOL add_constB ( struct bwriter_shader *  shader,
uint32_t  reg,
BOOL  x 
)

Definition at line 200 of file bytecodewriter.c.

201{
202 struct constant *newconst;
203
204 if (shader->num_cb)
205 {
206 struct constant **newarray;
207 newarray = realloc(shader->constB, sizeof(*shader->constB) * (shader->num_cb + 1));
208 if (!newarray)
209 {
210 ERR("Failed to grow the constants array\n");
211 return FALSE;
212 }
213 shader->constB = newarray;
214 }
215 else
216 {
217 shader->constB = calloc(1, sizeof(*shader->constB));
218 if (!shader->constB)
219 {
220 ERR("Failed to allocate the constants array\n");
221 return FALSE;
222 }
223 }
224
225 newconst = calloc(1, sizeof(*newconst));
226 if (!newconst)
227 {
228 ERR("Failed to allocate a new constant\n");
229 return FALSE;
230 }
231 newconst->regnum = reg;
232 newconst->value[0].b = x;
233 shader->constB[shader->num_cb] = newconst;
234
235 shader->num_cb++;
236 return TRUE;
237}
#define ERR(fmt,...)
Definition: precomp.h:57
#define realloc
Definition: debug_ros.c:6
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint shader
Definition: glext.h:6030
static int reg
Definition: i386-dis.c:1290
#define calloc
Definition: rosglue.h:14
union constant::@270 value[4]
unsigned int regnum

Referenced by asmparser_constB().

◆ add_constF()

BOOL add_constF ( struct bwriter_shader *  shader,
uint32_t  reg,
float  x,
float  y,
float  z,
float  w 
)

Definition at line 116 of file bytecodewriter.c.

117{
118 struct constant *newconst;
119
120 if (shader->num_cf)
121 {
122 struct constant **newarray;
123 newarray = realloc(shader->constF, sizeof(*shader->constF) * (shader->num_cf + 1));
124 if (!newarray)
125 {
126 ERR("Failed to grow the constants array\n");
127 return FALSE;
128 }
129 shader->constF = newarray;
130 }
131 else
132 {
133 shader->constF = calloc(1, sizeof(*shader->constF));
134 if (!shader->constF)
135 {
136 ERR("Failed to allocate the constants array\n");
137 return FALSE;
138 }
139 }
140
141 newconst = calloc(1, sizeof(*newconst));
142 if (!newconst)
143 {
144 ERR("Failed to allocate a new constant\n");
145 return FALSE;
146 }
147 newconst->regnum = reg;
148 newconst->value[0].f = x;
149 newconst->value[1].f = y;
150 newconst->value[2].f = z;
151 newconst->value[3].f = w;
152 shader->constF[shader->num_cf] = newconst;
153
154 shader->num_cf++;
155 return TRUE;
156}
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLdouble GLdouble z
Definition: glext.h:5874

Referenced by asmparser_constF().

◆ add_constI()

BOOL add_constI ( struct bwriter_shader *  shader,
uint32_t  reg,
int  x,
int  y,
int  z,
int  w 
)

Definition at line 158 of file bytecodewriter.c.

159{
160 struct constant *newconst;
161
162 if (shader->num_ci)
163 {
164 struct constant **newarray;
165 newarray = realloc(shader->constI, sizeof(*shader->constI) * (shader->num_ci + 1));
166 if (!newarray)
167 {
168 ERR("Failed to grow the constants array\n");
169 return FALSE;
170 }
171 shader->constI = newarray;
172 }
173 else
174 {
175 shader->constI = calloc(1, sizeof(*shader->constI));
176 if (!shader->constI)
177 {
178 ERR("Failed to allocate the constants array\n");
179 return FALSE;
180 }
181 }
182
183 newconst = calloc(1, sizeof(*newconst));
184 if (!newconst)
185 {
186 ERR("Failed to allocate a new constant\n");
187 return FALSE;
188 }
189 newconst->regnum = reg;
190 newconst->value[0].i = x;
191 newconst->value[1].i = y;
192 newconst->value[2].i = z;
193 newconst->value[3].i = w;
194 shader->constI[shader->num_ci] = newconst;
195
196 shader->num_ci++;
197 return TRUE;
198}

Referenced by asmparser_constI().

◆ add_instruction()

BOOL add_instruction ( struct bwriter_shader *  shader,
struct instruction *  instr 
)

Definition at line 104 of file bytecodewriter.c.

104 {
105 if(!shader) return FALSE;
106
107 if (!array_reserve((void **)&shader->instr, &shader->instr_alloc_size,
108 shader->num_instrs + 1, sizeof(*shader->instr)))
109 return FALSE;
110
111 shader->instr[shader->num_instrs] = instr;
112 shader->num_instrs++;
113 return TRUE;
114}
static BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int count, unsigned int size)

Referenced by asmparser_instr(), asmparser_sincos(), asmparser_texcoord(), asmparser_texcrd(), asmparser_texhelper(), asmparser_texkill(), and asmparser_texld14().

◆ alloc_instr()

struct instruction * alloc_instr ( unsigned int  srcs)

Definition at line 73 of file bytecodewriter.c.

73 {
74 struct instruction *ret = calloc(1, sizeof(*ret));
75 if(!ret) {
76 ERR("Failed to allocate memory for an instruction structure\n");
77 return NULL;
78 }
79
80 if(srcs) {
81 ret->src = calloc(1, srcs * sizeof(*ret->src));
82 if(!ret->src) {
83 ERR("Failed to allocate memory for instruction registers\n");
84 free(ret);
85 return NULL;
86 }
87 ret->num_srcs = srcs;
88 }
89 return ret;
90}
#define free
Definition: debug_ros.c:5
#define NULL
Definition: types.h:112
return ret
Definition: mutex.c:147

Referenced by asmparser_instr(), asmparser_sincos(), asmparser_texcoord(), asmparser_texcrd(), asmparser_texhelper(), asmparser_texkill(), and asmparser_texld14().

◆ asmparser_message()

◆ compilation_message()

void compilation_message ( struct compilation_messages *  msg,
const char *  fmt,
va_list  args 
)

Definition at line 529 of file utils.c.

530{
531 char* buffer;
532 int rc, size;
533
534 if (msg->capacity == 0)
535 {
537 if (msg->string == NULL)
538 {
539 ERR("Error allocating memory for parser messages\n");
540 return;
541 }
543 }
544
545 while (1)
546 {
547 rc = vsnprintf(msg->string + msg->size,
548 msg->capacity - msg->size, fmt, args);
549
550 if (rc < 0 || rc >= msg->capacity - msg->size)
551 {
552 size = msg->capacity * 2;
553 buffer = realloc(msg->string, size);
554 if (buffer == NULL)
555 {
556 ERR("Error reallocating memory for parser messages\n");
557 return;
558 }
559 msg->string = buffer;
560 msg->capacity = size;
561 }
562 else
563 {
564 TRACE("%s", msg->string + msg->size);
565 msg->size += rc;
566 return;
567 }
568 }
569}
#define vsnprintf
Definition: acwin.h:108
#define msg(x)
Definition: auth_time.c:54
#define MESSAGEBUFFER_INITIAL_SIZE
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
#define TRACE(s)
Definition: solgame.cpp:4
Definition: match.c:390
Definition: dsound.c:943

◆ create_ps10_parser()

void create_ps10_parser ( struct asm_parser *  ret)

Definition at line 1516 of file asmparser.c.

1516 {
1517 TRACE_(parsed_shader)("ps_1_0\n");
1518
1519 ret->shader = calloc(1, sizeof(*ret->shader));
1520 if(!ret->shader) {
1521 ERR("Failed to allocate memory for the shader\n");
1522 set_parse_status(&ret->status, PARSE_ERR);
1523 return;
1524 }
1525
1526 ret->shader->type = ST_PIXEL;
1527 ret->shader->major_version = 1;
1528 ret->shader->minor_version = 0;
1529 ret->funcs = &parser_ps_1_0123;
1530 gen_oldps_input(ret->shader, 4);
1531}
static const struct asmparser_backend parser_ps_1_0123
Definition: asmparser.c:1292
static void gen_oldps_input(struct bwriter_shader *shader, uint32_t texcoords)
Definition: asmparser.c:1408
void WINAPIV static void set_parse_status(enum parse_status *current, enum parse_status update)
#define TRACE_(x)
Definition: compat.h:76

◆ create_ps11_parser()

void create_ps11_parser ( struct asm_parser *  ret)

Definition at line 1533 of file asmparser.c.

1533 {
1534 TRACE_(parsed_shader)("ps_1_1\n");
1535
1536 ret->shader = calloc(1, sizeof(*ret->shader));
1537 if(!ret->shader) {
1538 ERR("Failed to allocate memory for the shader\n");
1539 set_parse_status(&ret->status, PARSE_ERR);
1540 return;
1541 }
1542
1543 ret->shader->type = ST_PIXEL;
1544 ret->shader->major_version = 1;
1545 ret->shader->minor_version = 1;
1546 ret->funcs = &parser_ps_1_0123;
1547 gen_oldps_input(ret->shader, 4);
1548}

◆ create_ps12_parser()

void create_ps12_parser ( struct asm_parser *  ret)

Definition at line 1550 of file asmparser.c.

1550 {
1551 TRACE_(parsed_shader)("ps_1_2\n");
1552
1553 ret->shader = calloc(1, sizeof(*ret->shader));
1554 if(!ret->shader) {
1555 ERR("Failed to allocate memory for the shader\n");
1556 set_parse_status(&ret->status, PARSE_ERR);
1557 return;
1558 }
1559
1560 ret->shader->type = ST_PIXEL;
1561 ret->shader->major_version = 1;
1562 ret->shader->minor_version = 2;
1563 ret->funcs = &parser_ps_1_0123;
1564 gen_oldps_input(ret->shader, 4);
1565}

◆ create_ps13_parser()

void create_ps13_parser ( struct asm_parser *  ret)

Definition at line 1567 of file asmparser.c.

1567 {
1568 TRACE_(parsed_shader)("ps_1_3\n");
1569
1570 ret->shader = calloc(1, sizeof(*ret->shader));
1571 if(!ret->shader) {
1572 ERR("Failed to allocate memory for the shader\n");
1573 set_parse_status(&ret->status, PARSE_ERR);
1574 return;
1575 }
1576
1577 ret->shader->type = ST_PIXEL;
1578 ret->shader->major_version = 1;
1579 ret->shader->minor_version = 3;
1580 ret->funcs = &parser_ps_1_0123;
1581 gen_oldps_input(ret->shader, 4);
1582}

◆ create_ps14_parser()

void create_ps14_parser ( struct asm_parser *  ret)

Definition at line 1584 of file asmparser.c.

1584 {
1585 TRACE_(parsed_shader)("ps_1_4\n");
1586
1587 ret->shader = calloc(1, sizeof(*ret->shader));
1588 if(!ret->shader) {
1589 ERR("Failed to allocate memory for the shader\n");
1590 set_parse_status(&ret->status, PARSE_ERR);
1591 return;
1592 }
1593
1594 ret->shader->type = ST_PIXEL;
1595 ret->shader->major_version = 1;
1596 ret->shader->minor_version = 4;
1597 ret->funcs = &parser_ps_1_4;
1598 gen_oldps_input(ret->shader, 6);
1599}
static const struct asmparser_backend parser_ps_1_4
Definition: asmparser.c:1312

◆ create_ps20_parser()

void create_ps20_parser ( struct asm_parser *  ret)

Definition at line 1601 of file asmparser.c.

1601 {
1602 TRACE_(parsed_shader)("ps_2_0\n");
1603
1604 ret->shader = calloc(1, sizeof(*ret->shader));
1605 if(!ret->shader) {
1606 ERR("Failed to allocate memory for the shader\n");
1607 set_parse_status(&ret->status, PARSE_ERR);
1608 return;
1609 }
1610
1611 ret->shader->type = ST_PIXEL;
1612 ret->shader->major_version = 2;
1613 ret->shader->minor_version = 0;
1614 ret->funcs = &parser_ps_2;
1615 gen_oldps_input(ret->shader, 8);
1616}
static const struct asmparser_backend parser_ps_2
Definition: asmparser.c:1332

◆ create_ps2x_parser()

void create_ps2x_parser ( struct asm_parser *  ret)

Definition at line 1618 of file asmparser.c.

1618 {
1619 TRACE_(parsed_shader)("ps_2_x\n");
1620
1621 ret->shader = calloc(1, sizeof(*ret->shader));
1622 if(!ret->shader) {
1623 ERR("Failed to allocate memory for the shader\n");
1624 set_parse_status(&ret->status, PARSE_ERR);
1625 return;
1626 }
1627
1628 ret->shader->type = ST_PIXEL;
1629 ret->shader->major_version = 2;
1630 ret->shader->minor_version = 1;
1631 ret->funcs = &parser_ps_2_x;
1632 gen_oldps_input(ret->shader, 8);
1633}
static const struct asmparser_backend parser_ps_2_x
Definition: asmparser.c:1352

◆ create_ps30_parser()

void create_ps30_parser ( struct asm_parser *  ret)

Definition at line 1635 of file asmparser.c.

1635 {
1636 TRACE_(parsed_shader)("ps_3_0\n");
1637
1638 ret->shader = calloc(1, sizeof(*ret->shader));
1639 if(!ret->shader) {
1640 ERR("Failed to allocate memory for the shader\n");
1641 set_parse_status(&ret->status, PARSE_ERR);
1642 return;
1643 }
1644
1645 ret->shader->type = ST_PIXEL;
1646 ret->shader->major_version = 3;
1647 ret->shader->minor_version = 0;
1648 ret->funcs = &parser_ps_3;
1649}
static const struct asmparser_backend parser_ps_3
Definition: asmparser.c:1372

◆ create_vs10_parser()

void create_vs10_parser ( struct asm_parser *  ret)

Definition at line 1432 of file asmparser.c.

1432 {
1433 TRACE_(parsed_shader)("vs_1_0\n");
1434
1435 ret->shader = calloc(1, sizeof(*ret->shader));
1436 if(!ret->shader) {
1437 ERR("Failed to allocate memory for the shader\n");
1438 set_parse_status(&ret->status, PARSE_ERR);
1439 return;
1440 }
1441
1442 ret->shader->type = ST_VERTEX;
1443 ret->shader->major_version = 1;
1444 ret->shader->minor_version = 0;
1445 ret->funcs = &parser_vs_1;
1446 gen_oldvs_output(ret->shader);
1447}
static const struct asmparser_backend parser_vs_1
Definition: asmparser.c:1232
static void gen_oldvs_output(struct bwriter_shader *shader)
Definition: asmparser.c:1392

◆ create_vs11_parser()

void create_vs11_parser ( struct asm_parser *  ret)

Definition at line 1449 of file asmparser.c.

1449 {
1450 TRACE_(parsed_shader)("vs_1_1\n");
1451
1452 ret->shader = calloc(1, sizeof(*ret->shader));
1453 if(!ret->shader) {
1454 ERR("Failed to allocate memory for the shader\n");
1455 set_parse_status(&ret->status, PARSE_ERR);
1456 return;
1457 }
1458
1459 ret->shader->type = ST_VERTEX;
1460 ret->shader->major_version = 1;
1461 ret->shader->minor_version = 1;
1462 ret->funcs = &parser_vs_1;
1463 gen_oldvs_output(ret->shader);
1464}

◆ create_vs20_parser()

void create_vs20_parser ( struct asm_parser *  ret)

Definition at line 1466 of file asmparser.c.

1466 {
1467 TRACE_(parsed_shader)("vs_2_0\n");
1468
1469 ret->shader = calloc(1, sizeof(*ret->shader));
1470 if(!ret->shader) {
1471 ERR("Failed to allocate memory for the shader\n");
1472 set_parse_status(&ret->status, PARSE_ERR);
1473 return;
1474 }
1475
1476 ret->shader->type = ST_VERTEX;
1477 ret->shader->major_version = 2;
1478 ret->shader->minor_version = 0;
1479 ret->funcs = &parser_vs_2;
1480 gen_oldvs_output(ret->shader);
1481}
static const struct asmparser_backend parser_vs_2
Definition: asmparser.c:1252

◆ create_vs2x_parser()

void create_vs2x_parser ( struct asm_parser *  ret)

Definition at line 1483 of file asmparser.c.

1483 {
1484 TRACE_(parsed_shader)("vs_2_x\n");
1485
1486 ret->shader = calloc(1, sizeof(*ret->shader));
1487 if(!ret->shader) {
1488 ERR("Failed to allocate memory for the shader\n");
1489 set_parse_status(&ret->status, PARSE_ERR);
1490 return;
1491 }
1492
1493 ret->shader->type = ST_VERTEX;
1494 ret->shader->major_version = 2;
1495 ret->shader->minor_version = 1;
1496 ret->funcs = &parser_vs_2;
1497 gen_oldvs_output(ret->shader);
1498}

◆ create_vs30_parser()

void create_vs30_parser ( struct asm_parser *  ret)

Definition at line 1500 of file asmparser.c.

1500 {
1501 TRACE_(parsed_shader)("vs_3_0\n");
1502
1503 ret->shader = calloc(1, sizeof(*ret->shader));
1504 if(!ret->shader) {
1505 ERR("Failed to allocate memory for the shader\n");
1506 set_parse_status(&ret->status, PARSE_ERR);
1507 return;
1508 }
1509
1510 ret->shader->type = ST_VERTEX;
1511 ret->shader->major_version = 3;
1512 ret->shader->minor_version = 0;
1513 ret->funcs = &parser_vs_3;
1514}
static const struct asmparser_backend parser_vs_3
Definition: asmparser.c:1272

◆ debug_d3dcompiler_d3d_blob_part()

const char * debug_d3dcompiler_d3d_blob_part ( D3D_BLOB_PART  part)

Definition at line 106 of file utils.c.

107{
108 switch(part)
109 {
123
128 default:
129 FIXME("Unrecognized D3D_BLOB_PART %#x\n", part);
130 return "unrecognized";
131 }
132}
#define FIXME(fmt,...)
Definition: precomp.h:53
@ D3D_BLOB_ALL_SIGNATURE_BLOB
Definition: d3dcompiler.h:117
@ D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB
Definition: d3dcompiler.h:115
@ D3D_BLOB_DEBUG_NAME
Definition: d3dcompiler.h:125
@ D3D_BLOB_TEST_COMPILE_PERF
Definition: d3dcompiler.h:128
@ D3D_BLOB_ROOT_SIGNATURE
Definition: d3dcompiler.h:124
@ D3D_BLOB_TEST_ALTERNATE_SHADER
Definition: d3dcompiler.h:126
@ D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB
Definition: d3dcompiler.h:116
@ D3D_BLOB_XNA_SHADER
Definition: d3dcompiler.h:121
@ D3D_BLOB_PRIVATE_DATA
Definition: d3dcompiler.h:123
@ D3D_BLOB_TEST_COMPILE_DETAILS
Definition: d3dcompiler.h:127
@ D3D_BLOB_INPUT_SIGNATURE_BLOB
Definition: d3dcompiler.h:113
@ D3D_BLOB_OUTPUT_SIGNATURE_BLOB
Definition: d3dcompiler.h:114
@ D3D_BLOB_DEBUG_INFO
Definition: d3dcompiler.h:118
@ D3D_BLOB_TEST_COMPILE_REPORT
Definition: d3dcompiler.h:129
@ D3D_BLOB_PDB
Definition: d3dcompiler.h:122
@ D3D_BLOB_XNA_PREPASS_SHADER
Definition: d3dcompiler.h:120
@ D3D_BLOB_LEGACY_SHADER
Definition: d3dcompiler.h:119
#define WINE_D3DCOMPILER_TO_STR(x)
Definition: utils.c:30

Referenced by check_blob_part(), d3dcompiler_get_blob_part(), and D3DGetBlobPart().

◆ debug_d3dcompiler_shader_variable_class()

const char * debug_d3dcompiler_shader_variable_class ( D3D_SHADER_VARIABLE_CLASS  c)

Definition at line 32 of file utils.c.

33{
34 switch (c)
35 {
44 default:
45 FIXME("Unrecognized D3D_SHADER_VARIABLE_CLASS %#x.\n", c);
46 return "unrecognized";
47 }
48}
@ D3D_SVC_VECTOR
Definition: d3dcommon.idl:135
@ D3D_SVC_MATRIX_COLUMNS
Definition: d3dcommon.idl:137
@ D3D_SVC_SCALAR
Definition: d3dcommon.idl:134
@ D3D_SVC_STRUCT
Definition: d3dcommon.idl:139
@ D3D_SVC_MATRIX_ROWS
Definition: d3dcommon.idl:136
@ D3D_SVC_OBJECT
Definition: d3dcommon.idl:138
@ D3D_SVC_INTERFACE_CLASS
Definition: d3dcommon.idl:140
@ D3D_SVC_INTERFACE_POINTER
Definition: d3dcommon.idl:141
const GLubyte * c
Definition: glext.h:8905

Referenced by d3dcompiler_parse_type().

◆ debug_d3dcompiler_shader_variable_type()

const char * debug_d3dcompiler_shader_variable_type ( D3D_SHADER_VARIABLE_TYPE  t)

Definition at line 50 of file utils.c.

51{
52 switch (t)
53 {
100 default:
101 FIXME("Unrecognized D3D_SHADER_VARIABLE_TYPE %#x.\n", t);
102 return "unrecognized";
103 }
104}
@ D3D_SVT_RWSTRUCTURED_BUFFER
Definition: d3dcommon.idl:217
@ D3D_SVT_INT
Definition: d3dcommon.idl:170
@ D3D_SVT_RWBUFFER
Definition: d3dcommon.idl:213
@ D3D_SVT_RWTEXTURE3D
Definition: d3dcommon.idl:212
@ D3D_SVT_BLEND
Definition: d3dcommon.idl:192
@ D3D_SVT_TEXTURECUBEARRAY
Definition: d3dcommon.idl:202
@ D3D_SVT_STRUCTURED_BUFFER
Definition: d3dcommon.idl:216
@ D3D_SVT_DOMAINSHADER
Definition: d3dcommon.idl:204
@ D3D_SVT_DEPTHSTENCILVIEW
Definition: d3dcommon.idl:199
@ D3D_SVT_APPEND_STRUCTURED_BUFFER
Definition: d3dcommon.idl:218
@ D3D_SVT_CBUFFER
Definition: d3dcommon.idl:194
@ D3D_SVT_UINT8
Definition: d3dcommon.idl:188
@ D3D_SVT_TEXTURE1DARRAY
Definition: d3dcommon.idl:196
@ D3D_SVT_RWTEXTURE1D
Definition: d3dcommon.idl:208
@ D3D_SVT_VERTEXSHADER
Definition: d3dcommon.idl:184
@ D3D_SVT_UINT
Definition: d3dcommon.idl:187
@ D3D_SVT_VOID
Definition: d3dcommon.idl:168
@ D3D_SVT_TEXTURE1D
Definition: d3dcommon.idl:174
@ D3D_SVT_FLOAT
Definition: d3dcommon.idl:171
@ D3D_SVT_RWTEXTURE2D
Definition: d3dcommon.idl:210
@ D3D_SVT_TEXTURE2DARRAY
Definition: d3dcommon.idl:197
@ D3D_SVT_DOUBLE
Definition: d3dcommon.idl:207
@ D3D_SVT_BUFFER
Definition: d3dcommon.idl:193
@ D3D_SVT_INTERFACE_POINTER
Definition: d3dcommon.idl:205
@ D3D_SVT_RASTERIZER
Definition: d3dcommon.idl:190
@ D3D_SVT_TEXTURECUBE
Definition: d3dcommon.idl:177
@ D3D_SVT_TEXTURE2D
Definition: d3dcommon.idl:175
@ D3D_SVT_DEPTHSTENCIL
Definition: d3dcommon.idl:191
@ D3D_SVT_RWTEXTURE2DARRAY
Definition: d3dcommon.idl:211
@ D3D_SVT_STRING
Definition: d3dcommon.idl:172
@ D3D_SVT_TEXTURE
Definition: d3dcommon.idl:173
@ D3D_SVT_BOOL
Definition: d3dcommon.idl:169
@ D3D_SVT_TEXTURE2DMS
Definition: d3dcommon.idl:200
@ D3D_SVT_BYTEADDRESS_BUFFER
Definition: d3dcommon.idl:214
@ D3D_SVT_SAMPLER
Definition: d3dcommon.idl:178
@ D3D_SVT_TEXTURE3D
Definition: d3dcommon.idl:176
@ D3D_SVT_TEXTURE2DMSARRAY
Definition: d3dcommon.idl:201
@ D3D_SVT_HULLSHADER
Definition: d3dcommon.idl:203
@ D3D_SVT_CONSUME_STRUCTURED_BUFFER
Definition: d3dcommon.idl:219
@ D3D_SVT_RENDERTARGETVIEW
Definition: d3dcommon.idl:198
@ D3D_SVT_TBUFFER
Definition: d3dcommon.idl:195
@ D3D_SVT_GEOMETRYSHADER
Definition: d3dcommon.idl:189
@ D3D_SVT_RWTEXTURE1DARRAY
Definition: d3dcommon.idl:209
@ D3D_SVT_RWBYTEADDRESS_BUFFER
Definition: d3dcommon.idl:215
@ D3D_SVT_COMPUTESHADER
Definition: d3dcommon.idl:206
@ D3D_SVT_PIXELSHADER
Definition: d3dcommon.idl:183
GLdouble GLdouble t
Definition: gl.h:2047

Referenced by d3dcompiler_parse_type().

◆ debug_print_comp()

const char * debug_print_comp ( uint32_t  comp)

Definition at line 407 of file utils.c.

408{
409 switch (comp)
410 {
411 case BWRITER_COMPARISON_NONE: return "";
412 case BWRITER_COMPARISON_GT: return "_gt";
413 case BWRITER_COMPARISON_EQ: return "_eq";
414 case BWRITER_COMPARISON_GE: return "_ge";
415 case BWRITER_COMPARISON_LT: return "_lt";
416 case BWRITER_COMPARISON_NE: return "_ne";
417 case BWRITER_COMPARISON_LE: return "_le";
418 default: return "_unknown";
419 }
420}

Referenced by asmparser_instr().

◆ debug_print_dstmod()

const char * debug_print_dstmod ( uint32_t  mod)

Definition at line 159 of file utils.c.

160{
161 switch (mod)
162 {
163 case 0:
164 return "";
166 return "_sat";
168 return "_pp";
170 return "_centroid";
172 return "_sat_pp";
174 return "_sat_centroid";
176 return "_pp_centroid";
178 return "_sat_pp_centroid";
179 default:
180 return "Unexpected modifier\n";
181 }
182}
std::map< E_MODULE, HMODULE > mod
Definition: LocaleTests.cpp:68

Referenced by asmparser_instr(), and check_ps_dstmod().

◆ debug_print_dstreg()

const char * debug_print_dstreg ( const struct shader_reg *  reg)

Definition at line 336 of file utils.c.

337{
338 return wine_dbg_sprintf("%s%s%s", get_regname(reg),
340 debug_print_writemask(reg->writemask));
341}
static const char * get_regname(const struct shader_reg *reg)
Definition: utils.c:208
static const char * debug_print_writemask(uint32_t mask)
Definition: utils.c:264
static const char * debug_print_relarg(const struct shader_reg *reg)
Definition: utils.c:321
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296

Referenced by asmparser_dstreg_ps_1_0123(), asmparser_dstreg_ps_1_4(), asmparser_dstreg_ps_2(), asmparser_dstreg_ps_2_x(), asmparser_dstreg_ps_3(), asmparser_dstreg_vs_1(), asmparser_dstreg_vs_2(), asmparser_dstreg_vs_3(), and asmparser_instr().

◆ debug_print_opcode()

const char * debug_print_opcode ( uint32_t  opcode)

Definition at line 422 of file utils.c.

423{
424 switch (opcode)
425 {
426 case BWRITERSIO_NOP: return "nop";
427 case BWRITERSIO_MOV: return "mov";
428 case BWRITERSIO_ADD: return "add";
429 case BWRITERSIO_SUB: return "sub";
430 case BWRITERSIO_MAD: return "mad";
431 case BWRITERSIO_MUL: return "mul";
432 case BWRITERSIO_RCP: return "rcp";
433 case BWRITERSIO_RSQ: return "rsq";
434 case BWRITERSIO_DP3: return "dp3";
435 case BWRITERSIO_DP4: return "dp4";
436 case BWRITERSIO_MIN: return "min";
437 case BWRITERSIO_MAX: return "max";
438 case BWRITERSIO_SLT: return "slt";
439 case BWRITERSIO_SGE: return "sge";
440 case BWRITERSIO_EXP: return "exp";
441 case BWRITERSIO_LOG: return "log";
442 case BWRITERSIO_LIT: return "lit";
443 case BWRITERSIO_DST: return "dst";
444 case BWRITERSIO_LRP: return "lrp";
445 case BWRITERSIO_FRC: return "frc";
446 case BWRITERSIO_M4x4: return "m4x4";
447 case BWRITERSIO_M4x3: return "m4x3";
448 case BWRITERSIO_M3x4: return "m3x4";
449 case BWRITERSIO_M3x3: return "m3x3";
450 case BWRITERSIO_M3x2: return "m3x2";
451 case BWRITERSIO_CALL: return "call";
452 case BWRITERSIO_CALLNZ: return "callnz";
453 case BWRITERSIO_LOOP: return "loop";
454 case BWRITERSIO_RET: return "ret";
455 case BWRITERSIO_ENDLOOP: return "endloop";
456 case BWRITERSIO_LABEL: return "label";
457 case BWRITERSIO_DCL: return "dcl";
458 case BWRITERSIO_POW: return "pow";
459 case BWRITERSIO_CRS: return "crs";
460 case BWRITERSIO_SGN: return "sgn";
461 case BWRITERSIO_ABS: return "abs";
462 case BWRITERSIO_NRM: return "nrm";
463 case BWRITERSIO_SINCOS: return "sincos";
464 case BWRITERSIO_REP: return "rep";
465 case BWRITERSIO_ENDREP: return "endrep";
466 case BWRITERSIO_IF: return "if";
467 case BWRITERSIO_IFC: return "ifc";
468 case BWRITERSIO_ELSE: return "else";
469 case BWRITERSIO_ENDIF: return "endif";
470 case BWRITERSIO_BREAK: return "break";
471 case BWRITERSIO_BREAKC: return "breakc";
472 case BWRITERSIO_MOVA: return "mova";
473 case BWRITERSIO_DEFB: return "defb";
474 case BWRITERSIO_DEFI: return "defi";
475 case BWRITERSIO_TEXCOORD: return "texcoord";
476 case BWRITERSIO_TEXKILL: return "texkill";
477 case BWRITERSIO_TEX: return "tex";
478 case BWRITERSIO_TEXBEM: return "texbem";
479 case BWRITERSIO_TEXBEML: return "texbeml";
480 case BWRITERSIO_TEXREG2AR: return "texreg2ar";
481 case BWRITERSIO_TEXREG2GB: return "texreg2gb";
482 case BWRITERSIO_TEXM3x2PAD: return "texm3x2pad";
483 case BWRITERSIO_TEXM3x2TEX: return "texm3x2tex";
484 case BWRITERSIO_TEXM3x3PAD: return "texm3x3pad";
485 case BWRITERSIO_TEXM3x3TEX: return "texm3x3tex";
486 case BWRITERSIO_TEXM3x3SPEC: return "texm3x3vspec";
487 case BWRITERSIO_TEXM3x3VSPEC: return "texm3x3vspec";
488 case BWRITERSIO_EXPP: return "expp";
489 case BWRITERSIO_LOGP: return "logp";
490 case BWRITERSIO_CND: return "cnd";
491 case BWRITERSIO_DEF: return "def";
492 case BWRITERSIO_TEXREG2RGB: return "texreg2rgb";
493 case BWRITERSIO_TEXDP3TEX: return "texdp3tex";
494 case BWRITERSIO_TEXM3x2DEPTH: return "texm3x2depth";
495 case BWRITERSIO_TEXDP3: return "texdp3";
496 case BWRITERSIO_TEXM3x3: return "texm3x3";
497 case BWRITERSIO_TEXDEPTH: return "texdepth";
498 case BWRITERSIO_CMP: return "cmp";
499 case BWRITERSIO_BEM: return "bem";
500 case BWRITERSIO_DP2ADD: return "dp2add";
501 case BWRITERSIO_DSX: return "dsx";
502 case BWRITERSIO_DSY: return "dsy";
503 case BWRITERSIO_TEXLDD: return "texldd";
504 case BWRITERSIO_SETP: return "setp";
505 case BWRITERSIO_TEXLDL: return "texldl";
506 case BWRITERSIO_BREAKP: return "breakp";
507 case BWRITERSIO_PHASE: return "phase";
508
509 case BWRITERSIO_TEXLDP: return "texldp";
510 case BWRITERSIO_TEXLDB: return "texldb";
511
512 default: return "unknown";
513 }
514}

Referenced by asmparser_instr(), and call_instr_handler().

◆ debug_print_shift()

const char * debug_print_shift ( uint32_t  shift)

Definition at line 184 of file utils.c.

185{
186 static const char * const shiftstrings[] =
187 {
188 "",
189 "_x2",
190 "_x4",
191 "_x8",
192 "_x16",
193 "_x32",
194 "",
195 "",
196 "",
197 "",
198 "",
199 "",
200 "_d16",
201 "_d8",
202 "_d4",
203 "_d2",
204 };
205 return shiftstrings[shift];
206}
#define shift
Definition: input.c:3280

Referenced by asmparser_instr().

◆ debug_print_srcmod()

◆ debug_print_srcreg()

const char * debug_print_srcreg ( const struct shader_reg *  reg)

Definition at line 343 of file utils.c.

344{
345 switch (reg->srcmod)
346 {
347 case BWRITERSPSM_NONE:
348 return wine_dbg_sprintf("%s%s%s", get_regname(reg),
350 debug_print_swizzle(reg->swizzle));
351 case BWRITERSPSM_NEG:
352 return wine_dbg_sprintf("-%s%s%s", get_regname(reg),
354 debug_print_swizzle(reg->swizzle));
355 case BWRITERSPSM_BIAS:
356 return wine_dbg_sprintf("%s%s_bias%s", get_regname(reg),
358 debug_print_swizzle(reg->swizzle));
360 return wine_dbg_sprintf("-%s%s_bias%s", get_regname(reg),
362 debug_print_swizzle(reg->swizzle));
363 case BWRITERSPSM_SIGN:
364 return wine_dbg_sprintf("%s%s_bx2%s", get_regname(reg),
366 debug_print_swizzle(reg->swizzle));
368 return wine_dbg_sprintf("-%s%s_bx2%s", get_regname(reg),
370 debug_print_swizzle(reg->swizzle));
371 case BWRITERSPSM_COMP:
372 return wine_dbg_sprintf("1 - %s%s%s", get_regname(reg),
374 debug_print_swizzle(reg->swizzle));
375 case BWRITERSPSM_X2:
376 return wine_dbg_sprintf("%s%s_x2%s", get_regname(reg),
378 debug_print_swizzle(reg->swizzle));
380 return wine_dbg_sprintf("-%s%s_x2%s", get_regname(reg),
382 debug_print_swizzle(reg->swizzle));
383 case BWRITERSPSM_DZ:
384 return wine_dbg_sprintf("%s%s_dz%s", get_regname(reg),
386 debug_print_swizzle(reg->swizzle));
387 case BWRITERSPSM_DW:
388 return wine_dbg_sprintf("%s%s_dw%s", get_regname(reg),
390 debug_print_swizzle(reg->swizzle));
391 case BWRITERSPSM_ABS:
392 return wine_dbg_sprintf("%s%s_abs%s", get_regname(reg),
394 debug_print_swizzle(reg->swizzle));
396 return wine_dbg_sprintf("-%s%s_abs%s", get_regname(reg),
398 debug_print_swizzle(reg->swizzle));
399 case BWRITERSPSM_NOT:
400 return wine_dbg_sprintf("!%s%s%s", get_regname(reg),
402 debug_print_swizzle(reg->swizzle));
403 }
404 return "Unknown modifier";
405}
static const char * debug_print_swizzle(uint32_t arg)
Definition: utils.c:280

Referenced by asmparser_instr(), asmparser_srcreg_ps_1_0123(), asmparser_srcreg_ps_1_4(), asmparser_srcreg_ps_2(), asmparser_srcreg_ps_2_x(), asmparser_srcreg_ps_3(), asmparser_srcreg_vs_1(), asmparser_srcreg_vs_2(), and asmparser_srcreg_vs_3().

◆ parse_asm_shader()

struct bwriter_shader * parse_asm_shader ( char **  messages)

◆ record_declaration()

BOOL record_declaration ( struct bwriter_shader *  shader,
uint32_t  usage,
uint32_t  usage_idx,
uint32_t  mod,
BOOL  output,
uint32_t  regnum,
uint32_t  writemask,
BOOL  builtin 
)

Definition at line 239 of file bytecodewriter.c.

241{
242 struct declaration **decl;
243 unsigned int i, *num;
244
245 if (!shader)
246 return FALSE;
247
248 if (output)
249 {
250 num = &shader->num_outputs;
251 decl = &shader->outputs;
252 }
253 else
254 {
255 num = &shader->num_inputs;
256 decl = &shader->inputs;
257 }
258
259 if (*num == 0)
260 {
261 *decl = calloc(1, sizeof(**decl));
262 if (!*decl)
263 {
264 ERR("Error allocating declarations array\n");
265 return FALSE;
266 }
267 }
268 else
269 {
270 struct declaration *newdecl;
271
272 for (i = 0; i < *num; i++)
273 {
274 if ((*decl)[i].regnum == regnum && ((*decl)[i].writemask & writemask))
275 WARN("Declaration of register %u already exists, writemask match 0x%x\n",
276 regnum, (*decl)[i].writemask & writemask);
277 }
278
279 newdecl = realloc(*decl, sizeof(**decl) * ((*num) + 1));
280 if (!newdecl)
281 {
282 ERR("Error reallocating declarations array\n");
283 return FALSE;
284 }
285 *decl = newdecl;
286 }
287 (*decl)[*num].usage = usage;
288 (*decl)[*num].usage_idx = usage_idx;
289 (*decl)[*num].regnum = regnum;
290 (*decl)[*num].mod = mod;
291 (*decl)[*num].writemask = writemask;
292 (*decl)[*num].builtin = builtin;
293 (*num)++;
294
295 return TRUE;
296}
#define WARN(fmt,...)
Definition: precomp.h:61
BYTE usage_idx
GLuint GLuint num
Definition: glext.h:9618
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
struct vkd3d_spirv_builtin builtin
Definition: spirv.c:4840

Referenced by asmparser_dcl_input(), asmparser_dcl_input_ps_2(), asmparser_dcl_output(), gen_oldps_input(), and gen_oldvs_output().

◆ record_sampler()

BOOL record_sampler ( struct bwriter_shader *  shader,
uint32_t  samptype,
uint32_t  mod,
uint32_t  regnum 
)

Definition at line 298 of file bytecodewriter.c.

298 {
299 unsigned int i;
300
301 if (!shader)
302 return FALSE;
303
304 if (shader->num_samplers == 0)
305 {
306 shader->samplers = calloc(1, sizeof(*shader->samplers));
307 if (!shader->samplers)
308 {
309 ERR("Error allocating samplers array\n");
310 return FALSE;
311 }
312 }
313 else
314 {
315 struct samplerdecl *newarray;
316
317 for (i = 0; i < shader->num_samplers; i++)
318 {
319 if (shader->samplers[i].regnum == regnum)
320 {
321 WARN("Sampler %u already declared\n", regnum);
322 /* This is not an error as far as the assembler is concerned.
323 * Direct3D might refuse to load the compiled shader though */
324 }
325 }
326
327 newarray = realloc(shader->samplers, sizeof(*shader->samplers) * (shader->num_samplers + 1));
328 if (!newarray)
329 {
330 ERR("Error reallocating samplers array\n");
331 return FALSE;
332 }
333 shader->samplers = newarray;
334 }
335
336 shader->samplers[shader->num_samplers].type = samptype;
337 shader->samplers[shader->num_samplers].mod = mod;
338 shader->samplers[shader->num_samplers].regnum = regnum;
339 shader->num_samplers++;
340 return TRUE;
341}

Referenced by asmparser_dcl_sampler().

◆ set_parse_status()

void WINAPIV static void set_parse_status ( enum parse_status *  current,
enum parse_status  update 
)
inlinestatic

Definition at line 271 of file d3dcompiler_private.h.

272{
273 if (update == PARSE_ERR)
275 else if (update == PARSE_WARN && *current == PARSE_SUCCESS)
277}
struct task_struct * current
Definition: linux.c:32

Referenced by asmparser_coissue_supported(), asmparser_coissue_unsupported(), asmparser_constB(), asmparser_constF(), asmparser_constI(), asmparser_dcl_input(), asmparser_dcl_input_ps_2(), asmparser_dcl_input_unsupported(), asmparser_dcl_output(), asmparser_dcl_output_unsupported(), asmparser_dcl_sampler(), asmparser_dcl_sampler_unsupported(), asmparser_dstreg_ps_1_0123(), asmparser_dstreg_ps_1_4(), asmparser_dstreg_ps_2(), asmparser_dstreg_ps_2_x(), asmparser_dstreg_ps_3(), asmparser_dstreg_vs_1(), asmparser_dstreg_vs_2(), asmparser_dstreg_vs_3(), asmparser_instr(), asmparser_predicate_unsupported(), asmparser_sincos(), asmparser_srcreg_ps_1_0123(), asmparser_srcreg_ps_1_4(), asmparser_srcreg_ps_2(), asmparser_srcreg_ps_2_x(), asmparser_srcreg_ps_3(), asmparser_srcreg_vs_1(), asmparser_srcreg_vs_2(), asmparser_srcreg_vs_3(), asmparser_texcoord(), asmparser_texcrd(), asmparser_texhelper(), asmparser_texkill(), asmparser_texld14(), check_abs_srcmod(), check_legacy_srcmod(), check_loop_swizzle(), check_ps_dstmod(), check_shift_dstmod(), create_ps10_parser(), create_ps11_parser(), create_ps12_parser(), create_ps13_parser(), create_ps14_parser(), create_ps20_parser(), create_ps2x_parser(), create_ps30_parser(), create_vs10_parser(), create_vs11_parser(), create_vs20_parser(), create_vs2x_parser(), and create_vs30_parser().

◆ shader_write_bytecode()

HRESULT shader_write_bytecode ( const struct bwriter_shader *  shader,
uint32_t **  result,
uint32_t *  size 
)

Definition at line 2479 of file bytecodewriter.c.

2480{
2481 struct bc_writer *writer;
2482 struct bytecode_buffer *buffer = NULL;
2483 HRESULT hr;
2484 unsigned int i;
2485
2486 if(!shader){
2487 ERR("NULL shader structure, aborting\n");
2488 return E_FAIL;
2489 }
2490
2491 if (!(writer = calloc(1, sizeof(*writer))))
2492 return E_OUTOFMEMORY;
2493
2494 for (i = 0; i < ARRAY_SIZE(shader_backends); ++i)
2495 {
2496 if (shader->type == shader_backends[i].type
2497 && shader->major_version == shader_backends[i].major
2498 && shader->minor_version == shader_backends[i].minor)
2499 {
2500 writer->funcs = shader_backends[i].backend;
2501 break;
2502 }
2503 }
2504
2505 if (!writer->funcs)
2506 {
2507 FIXME("Unsupported shader type %#x, version %u.%u.\n",
2508 shader->type, shader->major_version, shader->minor_version);
2509 free(writer);
2510 return E_NOTIMPL;
2511 }
2512
2513 writer->shader = shader;
2514 *result = NULL;
2515
2517 if(!buffer) {
2518 WARN("Failed to allocate a buffer for the shader bytecode\n");
2519 hr = E_FAIL;
2520 goto error;
2521 }
2522
2523 /* Write shader type and version */
2525
2526 writer->funcs->header(writer, shader, buffer);
2527 if(FAILED(writer->state)) {
2528 hr = writer->state;
2529 goto error;
2530 }
2531
2532 for(i = 0; i < shader->num_instrs; i++) {
2533 hr = call_instr_handler(writer, shader->instr[i], buffer);
2534 if(FAILED(hr)) {
2535 goto error;
2536 }
2537 }
2538
2539 if(FAILED(writer->state)) {
2540 hr = writer->state;
2541 goto error;
2542 }
2543
2544 writer->funcs->end(writer, shader, buffer);
2545
2546 if(FAILED(buffer->state)) {
2547 hr = buffer->state;
2548 goto error;
2549 }
2550
2551 *size = buffer->size * sizeof(uint32_t);
2552 *result = buffer->data;
2553 buffer->data = NULL;
2554 hr = S_OK;
2555
2556error:
2557 if(buffer) {
2558 free(buffer->data);
2559 free(buffer);
2560 }
2561 free(writer);
2562 return hr;
2563}
#define ARRAY_SIZE(A)
Definition: main.h:20
static void put_u32(struct bytecode_buffer *buffer, uint32_t value)
static const struct @269 shader_backends[]
static HRESULT call_instr_handler(struct bc_writer *writer, const struct instruction *instr, struct bytecode_buffer *buffer)
static uint32_t sm1_version(const struct bwriter_shader *shader)
static struct bytecode_buffer * allocate_buffer(void)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
GLuint64EXT * result
Definition: glext.h:11304
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define error(str)
Definition: mkdosfs.c:1605
#define uint32_t
Definition: nsiface.idl:61
const struct bwriter_shader * shader
const struct bytecode_backend * funcs
HRESULT state

Referenced by assemble_shader().

◆ SlAssembleShader()

struct bwriter_shader * SlAssembleShader ( const char *  text,
char **  messages 
)

Referenced by assemble_shader().

◆ SlDeleteShader()

void SlDeleteShader ( struct bwriter_shader *  shader)

Definition at line 2565 of file bytecodewriter.c.

2565 {
2566 unsigned int i, j;
2567
2568 TRACE("Deleting shader %p\n", shader);
2569
2570 for(i = 0; i < shader->num_cf; i++) {
2571 free(shader->constF[i]);
2572 }
2573 free(shader->constF);
2574 for(i = 0; i < shader->num_ci; i++) {
2575 free(shader->constI[i]);
2576 }
2577 free(shader->constI);
2578 for(i = 0; i < shader->num_cb; i++) {
2579 free(shader->constB[i]);
2580 }
2581 free(shader->constB);
2582
2583 free(shader->inputs);
2584 free(shader->outputs);
2585 free(shader->samplers);
2586
2587 for(i = 0; i < shader->num_instrs; i++) {
2588 for(j = 0; j < shader->instr[i]->num_srcs; j++) {
2589 free(shader->instr[i]->src[j].rel_reg);
2590 }
2591 free(shader->instr[i]->src);
2592 free(shader->instr[i]->dst.rel_reg);
2593 free(shader->instr[i]);
2594 }
2595 free(shader->instr);
2596
2597 free(shader);
2598}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250

Referenced by assemble_shader().

Variable Documentation

◆ asm_ctx

struct asm_parser asm_ctx
extern