Skip to content

Commit d2e90ab

Browse files
deepak-rawatRoland Scheidegger
authored andcommitted
drm/vmwgfx: Support SM5 shader type in command buffer
Virtual device now supports new shader types, allow them as valid shader type in command buffer. Also add per shader bind info in binding manager state for new shader type. Signed-off-by: Deepak Rawat <[email protected]> Reviewed-by: Thomas Hellström (VMware) <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Signed-off-by: Roland Scheidegger <[email protected]>
1 parent 7ebb47c commit d2e90ab

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

drivers/gpu/drm/vmwgfx/vmwgfx_binding.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ struct vmw_ctx_binding_state {
9898
struct vmw_ctx_bindinfo_so so_targets[SVGA3D_DX_MAX_SOTARGETS];
9999
struct vmw_ctx_bindinfo_vb vertex_buffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
100100
struct vmw_ctx_bindinfo_ib index_buffer;
101-
struct vmw_dx_shader_bindings per_shader[SVGA3D_NUM_SHADERTYPE_DX10];
101+
struct vmw_dx_shader_bindings per_shader[SVGA3D_NUM_SHADERTYPE];
102102

103103
unsigned long dirty;
104104
DECLARE_BITMAP(dirty_vb, SVGA3D_DX_MAX_VERTEXBUFFERS);
@@ -151,6 +151,9 @@ static const size_t vmw_binding_shader_offsets[] = {
151151
offsetof(struct vmw_ctx_binding_state, per_shader[0].shader),
152152
offsetof(struct vmw_ctx_binding_state, per_shader[1].shader),
153153
offsetof(struct vmw_ctx_binding_state, per_shader[2].shader),
154+
offsetof(struct vmw_ctx_binding_state, per_shader[3].shader),
155+
offsetof(struct vmw_ctx_binding_state, per_shader[4].shader),
156+
offsetof(struct vmw_ctx_binding_state, per_shader[5].shader),
154157
};
155158
static const size_t vmw_binding_rt_offsets[] = {
156159
offsetof(struct vmw_ctx_binding_state, render_targets),
@@ -162,6 +165,9 @@ static const size_t vmw_binding_cb_offsets[] = {
162165
offsetof(struct vmw_ctx_binding_state, per_shader[0].const_buffers),
163166
offsetof(struct vmw_ctx_binding_state, per_shader[1].const_buffers),
164167
offsetof(struct vmw_ctx_binding_state, per_shader[2].const_buffers),
168+
offsetof(struct vmw_ctx_binding_state, per_shader[3].const_buffers),
169+
offsetof(struct vmw_ctx_binding_state, per_shader[4].const_buffers),
170+
offsetof(struct vmw_ctx_binding_state, per_shader[5].const_buffers),
165171
};
166172
static const size_t vmw_binding_dx_ds_offsets[] = {
167173
offsetof(struct vmw_ctx_binding_state, ds_view),
@@ -170,6 +176,9 @@ static const size_t vmw_binding_sr_offsets[] = {
170176
offsetof(struct vmw_ctx_binding_state, per_shader[0].shader_res),
171177
offsetof(struct vmw_ctx_binding_state, per_shader[1].shader_res),
172178
offsetof(struct vmw_ctx_binding_state, per_shader[2].shader_res),
179+
offsetof(struct vmw_ctx_binding_state, per_shader[3].shader_res),
180+
offsetof(struct vmw_ctx_binding_state, per_shader[4].shader_res),
181+
offsetof(struct vmw_ctx_binding_state, per_shader[5].shader_res),
173182
};
174183
static const size_t vmw_binding_so_offsets[] = {
175184
offsetof(struct vmw_ctx_binding_state, so_targets),

drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,6 +2118,9 @@ vmw_cmd_dx_set_single_constant_buffer(struct vmw_private *dev_priv,
21182118
SVGA3dCmdHeader *header)
21192119
{
21202120
VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetSingleConstantBuffer);
2121+
SVGA3dShaderType max_shader_num = has_sm5_context(dev_priv) ?
2122+
SVGA3D_NUM_SHADERTYPE : SVGA3D_NUM_SHADERTYPE_DX10;
2123+
21212124
struct vmw_resource *res = NULL;
21222125
struct vmw_ctx_validation_info *ctx_node = VMW_GET_CTX_NODE(sw_context);
21232126
struct vmw_ctx_bindinfo_cb binding;
@@ -2141,7 +2144,7 @@ vmw_cmd_dx_set_single_constant_buffer(struct vmw_private *dev_priv,
21412144
binding.size = cmd->body.sizeInBytes;
21422145
binding.slot = cmd->body.slot;
21432146

2144-
if (binding.shader_slot >= SVGA3D_NUM_SHADERTYPE_DX10 ||
2147+
if (binding.shader_slot >= max_shader_num ||
21452148
binding.slot >= SVGA3D_DX_MAX_CONSTBUFFERS) {
21462149
VMW_DEBUG_USER("Illegal const buffer shader %u slot %u.\n",
21472150
(unsigned int) cmd->body.type,
@@ -2169,12 +2172,15 @@ static int vmw_cmd_dx_set_shader_res(struct vmw_private *dev_priv,
21692172
{
21702173
VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetShaderResources) =
21712174
container_of(header, typeof(*cmd), header);
2175+
SVGA3dShaderType max_allowed = has_sm5_context(dev_priv) ?
2176+
SVGA3D_SHADERTYPE_MAX : SVGA3D_SHADERTYPE_DX10_MAX;
2177+
21722178
u32 num_sr_view = (cmd->header.size - sizeof(cmd->body)) /
21732179
sizeof(SVGA3dShaderResourceViewId);
21742180

21752181
if ((u64) cmd->body.startView + (u64) num_sr_view >
21762182
(u64) SVGA3D_DX_MAX_SRVIEWS ||
2177-
cmd->body.type >= SVGA3D_SHADERTYPE_DX10_MAX) {
2183+
cmd->body.type >= max_allowed) {
21782184
VMW_DEBUG_USER("Invalid shader binding.\n");
21792185
return -EINVAL;
21802186
}
@@ -2198,6 +2204,8 @@ static int vmw_cmd_dx_set_shader(struct vmw_private *dev_priv,
21982204
SVGA3dCmdHeader *header)
21992205
{
22002206
VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetShader);
2207+
SVGA3dShaderType max_allowed = has_sm5_context(dev_priv) ?
2208+
SVGA3D_SHADERTYPE_MAX : SVGA3D_SHADERTYPE_DX10_MAX;
22012209
struct vmw_resource *res = NULL;
22022210
struct vmw_ctx_validation_info *ctx_node = VMW_GET_CTX_NODE(sw_context);
22032211
struct vmw_ctx_bindinfo_shader binding;
@@ -2208,7 +2216,7 @@ static int vmw_cmd_dx_set_shader(struct vmw_private *dev_priv,
22082216

22092217
cmd = container_of(header, typeof(*cmd), header);
22102218

2211-
if (cmd->body.type >= SVGA3D_SHADERTYPE_DX10_MAX ||
2219+
if (cmd->body.type >= max_allowed ||
22122220
cmd->body.type < SVGA3D_SHADERTYPE_MIN) {
22132221
VMW_DEBUG_USER("Illegal shader type %u.\n",
22142222
(unsigned int) cmd->body.type);

0 commit comments

Comments
 (0)