Could you please tell us more detailed what your a looking for? In general a disassembled D3D10 shader doesn’t look that different from a D3D9 shader.
Anyway all you can do with a disassembled D3D10 shader is to look at it or let it parse from another program. But most of the information you can get from this can be obtained more easily with the shader reflection interfaces.
I know it but for my project I need to know how directX10 compile the geometry shader that is kind different from vertex and pixel shader (it has an inout list for example).
What I need is an fx file (one of the fx shader in the october SDK for example) and its compilation with fxc10 (fxc10 /T fx4_0 filename)
In that way I can see in assembly what it does. I've october SDK but fxc10 need directX10 installed and actually I can't install Vista on my machine to test personally.
Thank you
Here we go. The FX file was taken from Tutorial 13.
technique10 Render
{
pass P0
{
VertexShader = asm {
//
// Generated by Microsoft (R) HLSL Shader Compiler
//
//
// Buffer Definitions:
//
// cbuffer cbChangesEveryFrame
// {
//
// float4x4 World; // Offset: 0 Size: 64
// float4x4 View; // Offset: 64 Size: 64
// float4x4 Projection; // Offset: 128 Size: 64
// float Time; // Offset: 192 Size: 4
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim Slot Elements
// - - - - - --
// cbChangesEveryFrame cbuffer NA NA 0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// POSITION 0 xyz 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
// TEXCOORD0 0 xy 2 NONE float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD0 0 xyz 1 NONE float xyz
// TEXCOORD1 0 xy 2 NONE float xy
//
vs_4_0
dcl_input v0.xyz
dcl_input v1.xyz
dcl_input v2.xy
dcl_output_siv o0.xyzw , position
dcl_output o1.xyz
dcl_output o2.xy
dcl_constantbuffer cb0[13]
dcl_temps 1
mov r0.xyz, v0.xyzx
mov r0.w, l(1.000000)
dp4 o0.x, r0.xyzw, cb0[0].xyzw
dp4 o0.y, r0.xyzw, cb0[1].xyzw
dp4 o0.z, r0.xyzw, cb0[2].xyzw
dp4 o0.w, r0.xyzw, cb0[3].xyzw
dp3 o1.x, v1.xyzx, cb0[0].xyzx
dp3 o1.y, v1.xyzx, cb0[1].xyzx
dp3 o1.z, v1.xyzx, cb0[2].xyzx
mov o2.xy, v2.xyxx
};
GeometryShader = asm {
//
// Generated by Microsoft (R) HLSL Shader Compiler
//
//
// Buffer Definitions:
//
// cbuffer cbChangesEveryFrame
// {
//
// float4x4 World; // Offset: 0 Size: 64
// float4x4 View; // Offset: 64 Size: 64
// float4x4 Projection; // Offset: 128 Size: 64
// float Time; // Offset: 192 Size: 4
//
// }
//
// cbuffer cbUserChanges
// {
//
// float Explode; // Offset: 0 Size: 4
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim Slot Elements
// - - - - - --
// cbChangesEveryFrame cbuffer NA NA 0 1
// cbUserChanges cbuffer NA NA 1 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD0 0 xyz 1 NONE float xyz
// TEXCOORD1 0 xy 2 NONE float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD0 0 xyz 1 NONE float xyz
// TEXCOORD1 0 xy 2 NONE float xy
//
gs_4_0
dcl_input_siv v[3][0].xyzw , position
dcl_input v[3][1].xyz
dcl_input v[3][2].xy
dcl_output_siv o0.xyzw , position
dcl_output o1.xyz
dcl_output o2.xy
dcl_constantbuffer cb0[13]
dcl_constantbuffer cb1[1]
dcl_temps 6
dcl_inputprimitive triangle
dcl_outputtopology triangestrip
dcl_maxout 12
add r0.xyz, -v[0][0].xyzx, v[1][0].xyzx
add r1.xyz, -v[0][0].xyzx, v[2][0].xyzx
mul r2.xyz, r0.zxyz, r1.yzxy
mad r0.xyz, r0.yzxy, r1.zxyz, -r2.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r0.w, r0.w
mul r0.xyz, r0.xyzx, r0.wwww
mul r1.xyz, r0.xyzx, cb1[0].xxxx
add r2.xyz, v[0][0].xyzx, v[1][0].xyzx
add r2.xyz, r2.xyzx, v[2][0].xyzx
div r2.xyz, r2.xyzx, l(3.000000, 3.000000, 3.000000, 0.000000)
add r3.xy, v[0][2].xyxx, v[1][2].xyxx
add r3.xy, r3.xyxx, v[2][2].xyxx
div r3.xy, r3.xyxx, l(3.000000, 3.000000, 0.000000, 0.000000)
add r2.xyz, r1.xyzx, r2.xyzx
add r2.xyz, r1.xyzx, r2.xyzx
mov r2.w, l(1.000000)
dp4 r4.x, r2.xyzw, cb0[4].xyzw
dp4 r4.y, r2.xyzw, cb0[5].xyzw
dp4 r4.z, r2.xyzw, cb0
.xyzw
dp4 r4.w, r2.xyzw, cb0[7].xyzw
dp4 r2.x, r4.xyzw, cb0
.xyzw
dp4 r2.y, r4.xyzw, cb0[9].xyzw
dp4 r2.z, r4.xyzw, cb0[10].xyzw
dp4 r2.w, r4.xyzw, cb0[11].xyzw
mov r0.w, l(0)
loop
ilt r1.w, r0.w, l(3)
breakc_z r1.w
add r4.xyz, r1.xyzx, v[r0.w + 0][0].xyzx
mov r4.w, v[r0.w + 0][0].w
dp4 r5.x, r4.xyzw, cb0[4].xyzw
dp4 r5.y, r4.xyzw, cb0[5].xyzw
dp4 r5.z, r4.xyzw, cb0
.xyzw
dp4 r5.w, r4.xyzw, cb0[7].xyzw
dp4 r4.x, r5.xyzw, cb0
.xyzw
dp4 r4.y, r5.xyzw, cb0[9].xyzw
dp4 r4.z, r5.xyzw, cb0[10].xyzw
dp4 r4.w, r5.xyzw, cb0[11].xyzw
mov o0.xyzw, r4.xyzw
mov o1.xyz, v[r0.w + 0][1].xyzx
mov o2.xy, v[r0.w + 0][2].xyxx
emit
iadd r0.w, r0.w, l(1)
ineg r1.w, r0.w
imax r1.w, r1.w, r0.w
udiv null, r1.w, r1.w, l(3)
ineg r3.z, r1.w
movc r1.w, l(0), r3.z, r1.w
add r4.xyz, r1.xyzx, v[r1.w + 0][0].xyzx
mov r4.w, v[r1.w + 0][0].w
dp4 r5.x, r4.xyzw, cb0[4].xyzw
dp4 r5.y, r4.xyzw, cb0[5].xyzw
dp4 r5.z, r4.xyzw, cb0
.xyzw
dp4 r5.w, r4.xyzw, cb0[7].xyzw
dp4 r4.x, r5.xyzw, cb0
.xyzw
dp4 r4.y, r5.xyzw, cb0[9].xyzw
dp4 r4.z, r5.xyzw, cb0[10].xyzw
dp4 r4.w, r5.xyzw, cb0[11].xyzw
mov o0.xyzw, r4.xyzw
mov o1.xyz, v[r1.w + 0][1].xyzx
mov o2.xy, v[r1.w + 0][2].xyxx
emit
mov o0.xyzw, r2.xyzw
mov o1.xyz, r0.xyzx
mov o2.xy, r3.xyxx
emit
cut
endloop
mov r0.x, l(2)
loop
ige r0.y, r0.x, l(0)
breakc_z r0.y
add r2.xyz, r1.xyzx, v[r0.x + 0][0].xyzx
mov r2.w, v[r0.x + 0][0].w
dp4 r3.x, r2.xyzw, cb0[4].xyzw
dp4 r3.y, r2.xyzw, cb0[5].xyzw
dp4 r3.z, r2.xyzw, cb0
.xyzw
dp4 r3.w, r2.xyzw, cb0[7].xyzw
dp4 r2.x, r3.xyzw, cb0
.xyzw
dp4 r2.y, r3.xyzw, cb0[9].xyzw
dp4 r2.z, r3.xyzw, cb0[10].xyzw
dp4 r2.w, r3.xyzw, cb0[11].xyzw
mov o0.xyzw, r2.xyzw
mov o1.xyz, -v[r0.x + 0][1].xyzx
mov o2.xy, v[r0.x + 0][2].xyxx
emit
iadd r0.x, r0.x, l(-1)
endloop
cut
};
PixelShader = asm {
//
// Generated by Microsoft (R) HLSL Shader Compiler
//
//
// Buffer Definitions:
//
// cbuffer cbConstant
// {
//
// float3 vLightDir; // Offset: 0 Size: 12
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim Slot Elements
// - - - - - --
// samLinear sampler NA NA 0 1
// g_txDiffuse texture float 2dms 0 1
// cbConstant cbuffer NA NA 0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD0 0 xyz 1 NONE float xyz
// TEXCOORD1 0 xy 2 NONE float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// - -- - -- -- -
// SV_Target 0 xyzw 0 NONE float xyzw
//
ps_4_0
dcl_input linear v1.xyz
dcl_input linear v2.xy
dcl_output o0.xyzw
dcl_constantbuffer cb0[1]
dcl_resource_texture2d ( float , float , float , float ) t0
dcl_sampler s0
dcl_temps 2
dp3_sat r0.x, v1.xyzx, cb0[0].xyzx
sample r1.xyzw, v2.xyxx, t0.xyzw, s0
mul r0.xyz, r0.xxxx, r1.xyzx
mov r0.w, l(1.000000)
mov o0.xyzw, r0.xyzw
};
}
}
�