Compare commits
5 Commits
master
...
implement-
Author | SHA1 | Date |
---|---|---|
Joshua Ashton | 51c8d8bdba | |
Joshua Ashton | 9a878c0194 | |
Joshua Ashton | b6daa072b9 | |
Joshua Ashton | 0a70cb32ba | |
Joshua Ashton | f78eb45f2a |
|
@ -1046,6 +1046,7 @@ static const struct vkd3d_sm4_opcode_info opcode_table[] =
|
|||
{VKD3D_SM4_OP_DP4, VKD3DSIH_DP4, "f", "ff"},
|
||||
{VKD3D_SM4_OP_ELSE, VKD3DSIH_ELSE, "", ""},
|
||||
{VKD3D_SM4_OP_EMIT, VKD3DSIH_EMIT, "", ""},
|
||||
{VKD3D_SM4_OP_EMIT_THEN_CUT, VKD3DSIH_EMIT_THEN_CUT, "", ""},
|
||||
{VKD3D_SM4_OP_ENDIF, VKD3DSIH_ENDIF, "", ""},
|
||||
{VKD3D_SM4_OP_ENDLOOP, VKD3DSIH_ENDLOOP, "", ""},
|
||||
{VKD3D_SM4_OP_ENDSWITCH, VKD3DSIH_ENDSWITCH, "", ""},
|
||||
|
@ -1110,6 +1111,7 @@ static const struct vkd3d_sm4_opcode_info opcode_table[] =
|
|||
{VKD3D_SM4_OP_ULT, VKD3DSIH_ULT, "u", "uu"},
|
||||
{VKD3D_SM4_OP_UGE, VKD3DSIH_UGE, "u", "uu"},
|
||||
{VKD3D_SM4_OP_UMUL, VKD3DSIH_UMUL, "uu", "uu"},
|
||||
{VKD3D_SM4_OP_UMAD, VKD3DSIH_UMAD, "u", "uuu"},
|
||||
{VKD3D_SM4_OP_UMAX, VKD3DSIH_UMAX, "u", "uu"},
|
||||
{VKD3D_SM4_OP_UMIN, VKD3DSIH_UMIN, "u", "uu"},
|
||||
{VKD3D_SM4_OP_USHR, VKD3DSIH_USHR, "u", "uu"},
|
||||
|
@ -1161,6 +1163,7 @@ static const struct vkd3d_sm4_opcode_info opcode_table[] =
|
|||
{VKD3D_SM5_OP_HS_JOIN_PHASE, VKD3DSIH_HS_JOIN_PHASE, "", ""},
|
||||
{VKD3D_SM5_OP_EMIT_STREAM, VKD3DSIH_EMIT_STREAM, "", "f"},
|
||||
{VKD3D_SM5_OP_CUT_STREAM, VKD3DSIH_CUT_STREAM, "", "f"},
|
||||
{VKD3D_SM5_OP_EMIT_THEN_CUT_STREAM, VKD3DSIH_EMIT_THEN_CUT_STREAM, "", "f"},
|
||||
{VKD3D_SM5_OP_FCALL, VKD3DSIH_FCALL, "", "O",
|
||||
shader_sm5_read_fcall},
|
||||
{VKD3D_SM5_OP_BUFINFO, VKD3DSIH_BUFINFO, "i", "U"},
|
||||
|
@ -1252,6 +1255,7 @@ static const struct vkd3d_sm4_opcode_info opcode_table[] =
|
|||
{VKD3D_SM5_OP_SYNC, VKD3DSIH_SYNC, "", "",
|
||||
shader_sm5_read_sync},
|
||||
{VKD3D_SM5_OP_EVAL_SAMPLE_INDEX, VKD3DSIH_EVAL_SAMPLE_INDEX, "f", "fi"},
|
||||
{VKD3D_SM5_OP_EVAL_SNAPPED, VKD3DSIH_EVAL_SNAPPED, "f", "fi"},
|
||||
{VKD3D_SM5_OP_EVAL_CENTROID, VKD3DSIH_EVAL_CENTROID, "f", "f"},
|
||||
{VKD3D_SM5_OP_DCL_GS_INSTANCES, VKD3DSIH_DCL_GS_INSTANCES, "", "",
|
||||
shader_sm4_read_declaration_count},
|
||||
|
|
|
@ -6961,10 +6961,9 @@ static void vkd3d_dxbc_compiler_emit_imad(struct vkd3d_dxbc_compiler *compiler,
|
|||
const struct vkd3d_shader_dst_param *dst = instruction->dst;
|
||||
const struct vkd3d_shader_src_param *src = instruction->src;
|
||||
uint32_t type_id, val_id, src_ids[3];
|
||||
unsigned int i, component_count;
|
||||
unsigned int i;
|
||||
|
||||
component_count = vkd3d_write_mask_component_count(dst->write_mask);
|
||||
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_INT, component_count);
|
||||
type_id = vkd3d_dxbc_compiler_get_type_id_for_dst(compiler, dst);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(src_ids); ++i)
|
||||
src_ids[i] = vkd3d_dxbc_compiler_emit_load_src(compiler, &src[i], dst->write_mask);
|
||||
|
@ -9161,6 +9160,11 @@ static void vkd3d_dxbc_compiler_emit_eval_attrib(struct vkd3d_dxbc_compiler *com
|
|||
{
|
||||
op = GLSLstd450InterpolateAtCentroid;
|
||||
}
|
||||
else if (instruction->handler_idx == VKD3DSIH_EVAL_SNAPPED)
|
||||
{
|
||||
op = GLSLstd450InterpolateAtOffset;
|
||||
src_ids[src_count++] = vkd3d_dxbc_compiler_emit_load_src(compiler, &src[1], VKD3DSP_WRITEMASK_0 | VKD3DSP_WRITEMASK_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(instruction->handler_idx == VKD3DSIH_EVAL_SAMPLE_INDEX);
|
||||
|
@ -9229,7 +9233,7 @@ static void vkd3d_dxbc_compiler_emit_emit_stream(struct vkd3d_dxbc_compiler *com
|
|||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
unsigned int stream_idx;
|
||||
|
||||
if (instruction->handler_idx == VKD3DSIH_EMIT_STREAM)
|
||||
if (instruction->handler_idx == VKD3DSIH_EMIT_STREAM || instruction->handler_idx == VKD3DSIH_EMIT_THEN_CUT_STREAM)
|
||||
stream_idx = instruction->src[0].reg.idx[0].offset;
|
||||
else
|
||||
stream_idx = 0;
|
||||
|
@ -9250,7 +9254,7 @@ static void vkd3d_dxbc_compiler_emit_cut_stream(struct vkd3d_dxbc_compiler *comp
|
|||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
unsigned int stream_idx;
|
||||
|
||||
if (instruction->handler_idx == VKD3DSIH_CUT_STREAM)
|
||||
if (instruction->handler_idx == VKD3DSIH_CUT_STREAM || instruction->handler_idx == VKD3DSIH_EMIT_THEN_CUT_STREAM)
|
||||
stream_idx = instruction->src[0].reg.idx[0].offset;
|
||||
else
|
||||
stream_idx = 0;
|
||||
|
@ -9472,9 +9476,11 @@ int vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler,
|
|||
case VKD3DSIH_SINCOS:
|
||||
vkd3d_dxbc_compiler_emit_sincos(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_UMUL:
|
||||
case VKD3DSIH_IMUL:
|
||||
vkd3d_dxbc_compiler_emit_imul(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_UMAD:
|
||||
case VKD3DSIH_IMAD:
|
||||
vkd3d_dxbc_compiler_emit_imad(compiler, instruction);
|
||||
break;
|
||||
|
@ -9621,6 +9627,7 @@ int vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler,
|
|||
break;
|
||||
case VKD3DSIH_EVAL_CENTROID:
|
||||
case VKD3DSIH_EVAL_SAMPLE_INDEX:
|
||||
case VKD3DSIH_EVAL_SNAPPED:
|
||||
vkd3d_dxbc_compiler_emit_eval_attrib(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_SYNC:
|
||||
|
@ -9630,6 +9637,11 @@ int vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler,
|
|||
case VKD3DSIH_EMIT_STREAM:
|
||||
vkd3d_dxbc_compiler_emit_emit_stream(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_EMIT_THEN_CUT:
|
||||
case VKD3DSIH_EMIT_THEN_CUT_STREAM:
|
||||
vkd3d_dxbc_compiler_emit_emit_stream(compiler, instruction);
|
||||
vkd3d_dxbc_compiler_emit_cut_stream(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_CUT:
|
||||
case VKD3DSIH_CUT_STREAM:
|
||||
vkd3d_dxbc_compiler_emit_cut_stream(compiler, instruction);
|
||||
|
|
|
@ -117,13 +117,16 @@ static const char * const shader_opcode_names[] =
|
|||
/* VKD3DSIH_DSY_FINE */ "deriv_rty_fine",
|
||||
/* VKD3DSIH_ELSE */ "else",
|
||||
/* VKD3DSIH_EMIT */ "emit",
|
||||
/* VKD3DSIH_EMIT_THEN_CUT */ "emit_then_cut",
|
||||
/* VKD3DSIH_EMIT_STREAM */ "emit_stream",
|
||||
/* VKD3DSIH_EMIT_THEN_CUT_STREAM */ "emit_then_cut_stream",
|
||||
/* VKD3DSIH_ENDIF */ "endif",
|
||||
/* VKD3DSIH_ENDLOOP */ "endloop",
|
||||
/* VKD3DSIH_ENDSWITCH */ "endswitch",
|
||||
/* VKD3DSIH_EQ */ "eq",
|
||||
/* VKD3DSIH_EVAL_CENTROID */ "eval_centroid",
|
||||
/* VKD3DSIH_EVAL_SAMPLE_INDEX */ "eval_sample_index",
|
||||
/* VKD3DSIH_EVAL_SNAPPED */ "eval_snapped",
|
||||
/* VKD3DSIH_EXP */ "exp",
|
||||
/* VKD3DSIH_F16TOF32 */ "f16tof32",
|
||||
/* VKD3DSIH_F32TOF16 */ "f32tof16",
|
||||
|
@ -230,6 +233,7 @@ static const char * const shader_opcode_names[] =
|
|||
/* VKD3DSIH_UMAX */ "umax",
|
||||
/* VKD3DSIH_UMIN */ "umin",
|
||||
/* VKD3DSIH_UMUL */ "umul",
|
||||
/* VKD3DSIH_UMAD */ "umad",
|
||||
/* VKD3DSIH_USHR */ "ushr",
|
||||
/* VKD3DSIH_UTOF */ "utof",
|
||||
/* VKD3DSIH_XOR */ "xor",
|
||||
|
|
|
@ -140,13 +140,16 @@ enum VKD3D_SHADER_INSTRUCTION_HANDLER
|
|||
VKD3DSIH_DSY_FINE,
|
||||
VKD3DSIH_ELSE,
|
||||
VKD3DSIH_EMIT,
|
||||
VKD3DSIH_EMIT_THEN_CUT,
|
||||
VKD3DSIH_EMIT_STREAM,
|
||||
VKD3DSIH_EMIT_THEN_CUT_STREAM,
|
||||
VKD3DSIH_ENDIF,
|
||||
VKD3DSIH_ENDLOOP,
|
||||
VKD3DSIH_ENDSWITCH,
|
||||
VKD3DSIH_EQ,
|
||||
VKD3DSIH_EVAL_CENTROID,
|
||||
VKD3DSIH_EVAL_SAMPLE_INDEX,
|
||||
VKD3DSIH_EVAL_SNAPPED,
|
||||
VKD3DSIH_EXP,
|
||||
VKD3DSIH_F16TOF32,
|
||||
VKD3DSIH_F32TOF16,
|
||||
|
@ -268,6 +271,7 @@ enum VKD3D_SHADER_INSTRUCTION_HANDLER
|
|||
VKD3DSIH_UMAX,
|
||||
VKD3DSIH_UMIN,
|
||||
VKD3DSIH_UMUL,
|
||||
VKD3DSIH_UMAD,
|
||||
VKD3DSIH_USHR,
|
||||
VKD3DSIH_UTOF,
|
||||
VKD3DSIH_XOR,
|
||||
|
|
Loading…
Reference in New Issue