사용자 도구

사이트 도구


language:shader:shader_low_keyword

Vertex Shader

// 레지스터들
// .이름.			.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		소수부

Pixel Shader

// [입력레지스터 (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

수식자(Modifiers)

명령 수식자

셰이더 명령 수행 후, 레지스터에 쓰기 전에 수정 작업인터럽트?을 한다.

명령수식자
1개 이상을 붙여서 사용 가능
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
  • 나열 순서를 r, g, b, a순으로 가야한다. r0.argb같은 방식은 안됨.
  • r,g,b,a 대신 x,y,z,w도 사용 가능

텍스쳐 레지스터 수식자(Modifiers)

2_0,2_x 에서는 모두 삭제. 뭐 그럼 필요 없는 명령 아닌가?
  • texld, texcrd 명령을 위한 수식자
  • 입력 인수 수식자 : 투시변환 전의 좌표가 텍스쳐 레지스터에 입력 되었을때, 텍스쳐좌표로 변환하기 위해서 사용

이해 잘 안되는데, 명령어를 일단 메모.

_dz    x,y 성분을 z 성분으로 나눈다   t0_dz
_db                                   t0_db
_dw    x,y 성분을 w 성분으로 나눈다   t0_dw
_da                                   t0_da

명령어

텍스쳐 어드레싱 명령

HLSL이 있으니까 그냥 읽어보고만 가자. 

상위레벨셰이더언어(HLSL)

language/shader/shader_low_keyword.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1