vkd3d-shader: Implement EVAL_SNAPPED

Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
Joshua Ashton 2020-10-20 07:24:38 +01:00
parent 0a70cb32ba
commit b6daa072b9
4 changed files with 9 additions and 0 deletions

View File

@ -1253,6 +1253,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},

View File

@ -9160,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);
@ -9622,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:

View File

@ -124,6 +124,7 @@ static const char * const shader_opcode_names[] =
/* 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",

View File

@ -147,6 +147,7 @@ enum VKD3D_SHADER_INSTRUCTION_HANDLER
VKD3DSIH_EQ,
VKD3DSIH_EVAL_CENTROID,
VKD3DSIH_EVAL_SAMPLE_INDEX,
VKD3DSIH_EVAL_SNAPPED,
VKD3DSIH_EXP,
VKD3DSIH_F16TOF32,
VKD3DSIH_F32TOF16,