// 레지스터들 // .이름. .R/W/Use. .Role. // v0 ~ 입력 r 정점입력 // r0 ~ 임시 rw 임시보관 // c0 ~ 실수형 상수 r 상수 // b0 ~ 불형 상수 use 불값 // i0 ~ 정수형 상수 use 루프용 정수 // a0 ~ 어드레스 r/use 4차벡터 어드레스 // aL 루프 카운터 use 루프카운터 // p0 프레디케이션 r/use 조건분기 // // (*) 상수는 SetVertexShaderConstantF()로 설정 // 출력레지스터 // oPos w 투영좌표 // oD0, oD1 w 정점색 // oT0~0T7 w 텍스쳐좌표 // oFog w 포그농도 // oPts w 스프라이트(?)크기 // 설정명령 // vs 버젼정보 // dcl_usage 입력데이터선언 // def 상수 정의 // defb 불형 상수 정의 // defi 정수형 상수 정의 // 산술명령 // nop, mov, add, sub, mul, min, max // mova 정수로 형변환 // mad 곱하고 더함 // dp3 3차형 내적 // dp4 4차형 내적 // dst 거리 // rcp 역수 // rsp 역수 평방근(?) // sge 이상 // sit 미만 // 매크로 // m3x2, m3x3, m3x4, m4x3, m4x4 행렬곱 // abs 절대부호 // sgn 부호 // crs 외적 // nrm 정규화 // lrp 선형보간(lerp) // expp 2의지수(낮은정밀16bit) // exp 2의지수(높은정밀) // logp 2의로그(낮은정밀16bit) // log 2의로그(높은정밀) // pow 제곱 // sincos 사인,코사인 // frc 소수부
// [입력레지스터 (1_1)] // v0, v1 보간된 정점색 R // t0~t3 보간된 텍스쳐좌표 R/W // r0~r1 임시 - 중간결과 저장 R/W // c0 ~ c7 상수 - 고정소수점상수 R // //(*) 상수 : 'def'로 설정. // : c? : SetPixelShaderConstant() // // [입력레지스터 (2_0)] // v0, v1 보간된 정점색 R // t0~t7 보간된 텍스쳐좌표 R/W // r0~r11 임시 - 중간결과 저장 R/W // c0~c31 상수 - 고정소수점상수 R // s0~s15 텍스쳐읽기 R (샘플링 Status 레지스터) // //(*) 상수 : 'def'로 설정. // : c? : SetPixelShaderConstantF() // // [입력레지스터 (2_x)] // v0, v1 보간된 정점색 R // t0~t7 보간된 텍스쳐좌표 R/W // r0~r31 임시 - 중간결과 저장 R/W // c0~c223 상수 - 고정소수점상수 R // s0~s15 텍스쳐읽기 R (샘플링 Status 레지스터) // i0~i15 정수형상수 R // b0~b15 불형상수 R // aL 루프카운터 Use // P 프리디케이션 R // //(*) 상수 : 'def'로 설정. // : c? : SetPixelShaderConstantF() // : i? : SetPixelShaderConstantI() // : b? : SetPixelShaderConstantB() // : -1 ~ +1 값 설정 // // [VertexShader -> PixelShader 색 전달] // 1stColor 2ndColor TexCoord // VertexShader oD0 oD1 oT0, oT1,.. // PixelShader v0 v1 t0,t1,.. // // [출력레지스터] // oC0~oC3 // oDepth 깊이정보 // * 번호가 작은 순서대로 출력해야 한다. // * oC2에 색을 출력하려면, oC0, oC1에도 출력값이 있어야 한다. // [성분] // * r0 = r0.r, r0.g, r0.b, r0.a // * 하나의 성분에 값을 넣고 모두 대입할 수 있다. // * mov r0, c0.a // c0.a 값이 r0의 모든 성분에 대입 // * 2_0에서 사용가능한 성분 // * .rgba , .r, .g, .b, .a, .gbra, .brga, .abgr
셰이더 명령 수행 후, 레지스터에 쓰기 전에 수정 작업인터럽트?을 한다.
add_x2 r1, r0, c0 // r1 = (r0 + c0) x 2
// r1 = sat((r0 + c0) * 2) // sat : 0~1 사이 값으로 변경 add_x2_sat r1, r0, c0
mov r0.rgb, c0 mov r0.a, c1
2_0,2_x 에서는 모두 삭제. 뭐 그럼 필요 없는 명령 아닌가?
이해 잘 안되는데, 명령어를 일단 메모.
_dz x,y 성분을 z 성분으로 나눈다 t0_dz _db t0_db _dw x,y 성분을 w 성분으로 나눈다 t0_dw _da t0_da
텍스쳐 어드레싱 명령
HLSL이 있으니까 그냥 읽어보고만 가자.