| .. | .. |
|---|
| 1998 | 1998 | |
|---|
| 1999 | 1999 | cmd = container_of(header, typeof(*cmd), header); |
|---|
| 2000 | 2000 | |
|---|
| 2001 | | - if (cmd->body.type >= SVGA3D_SHADERTYPE_PREDX_MAX) { |
|---|
| 2001 | + if (!vmw_shadertype_is_valid(VMW_SM_LEGACY, cmd->body.type)) { |
|---|
| 2002 | 2002 | VMW_DEBUG_USER("Illegal shader type %u.\n", |
|---|
| 2003 | 2003 | (unsigned int) cmd->body.type); |
|---|
| 2004 | 2004 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 2120 | 2120 | SVGA3dCmdHeader *header) |
|---|
| 2121 | 2121 | { |
|---|
| 2122 | 2122 | VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetSingleConstantBuffer); |
|---|
| 2123 | | - SVGA3dShaderType max_shader_num = has_sm5_context(dev_priv) ? |
|---|
| 2124 | | - SVGA3D_NUM_SHADERTYPE : SVGA3D_NUM_SHADERTYPE_DX10; |
|---|
| 2125 | 2123 | |
|---|
| 2126 | 2124 | struct vmw_resource *res = NULL; |
|---|
| 2127 | 2125 | struct vmw_ctx_validation_info *ctx_node = VMW_GET_CTX_NODE(sw_context); |
|---|
| .. | .. |
|---|
| 2138 | 2136 | if (unlikely(ret != 0)) |
|---|
| 2139 | 2137 | return ret; |
|---|
| 2140 | 2138 | |
|---|
| 2139 | + if (!vmw_shadertype_is_valid(dev_priv->sm_type, cmd->body.type) || |
|---|
| 2140 | + cmd->body.slot >= SVGA3D_DX_MAX_CONSTBUFFERS) { |
|---|
| 2141 | + VMW_DEBUG_USER("Illegal const buffer shader %u slot %u.\n", |
|---|
| 2142 | + (unsigned int) cmd->body.type, |
|---|
| 2143 | + (unsigned int) cmd->body.slot); |
|---|
| 2144 | + return -EINVAL; |
|---|
| 2145 | + } |
|---|
| 2146 | + |
|---|
| 2141 | 2147 | binding.bi.ctx = ctx_node->ctx; |
|---|
| 2142 | 2148 | binding.bi.res = res; |
|---|
| 2143 | 2149 | binding.bi.bt = vmw_ctx_binding_cb; |
|---|
| .. | .. |
|---|
| 2145 | 2151 | binding.offset = cmd->body.offsetInBytes; |
|---|
| 2146 | 2152 | binding.size = cmd->body.sizeInBytes; |
|---|
| 2147 | 2153 | binding.slot = cmd->body.slot; |
|---|
| 2148 | | - |
|---|
| 2149 | | - if (binding.shader_slot >= max_shader_num || |
|---|
| 2150 | | - binding.slot >= SVGA3D_DX_MAX_CONSTBUFFERS) { |
|---|
| 2151 | | - VMW_DEBUG_USER("Illegal const buffer shader %u slot %u.\n", |
|---|
| 2152 | | - (unsigned int) cmd->body.type, |
|---|
| 2153 | | - (unsigned int) binding.slot); |
|---|
| 2154 | | - return -EINVAL; |
|---|
| 2155 | | - } |
|---|
| 2156 | 2154 | |
|---|
| 2157 | 2155 | vmw_binding_add(ctx_node->staged, &binding.bi, binding.shader_slot, |
|---|
| 2158 | 2156 | binding.slot); |
|---|
| .. | .. |
|---|
| 2174 | 2172 | { |
|---|
| 2175 | 2173 | VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetShaderResources) = |
|---|
| 2176 | 2174 | container_of(header, typeof(*cmd), header); |
|---|
| 2177 | | - SVGA3dShaderType max_allowed = has_sm5_context(dev_priv) ? |
|---|
| 2178 | | - SVGA3D_SHADERTYPE_MAX : SVGA3D_SHADERTYPE_DX10_MAX; |
|---|
| 2179 | 2175 | |
|---|
| 2180 | 2176 | u32 num_sr_view = (cmd->header.size - sizeof(cmd->body)) / |
|---|
| 2181 | 2177 | sizeof(SVGA3dShaderResourceViewId); |
|---|
| 2182 | 2178 | |
|---|
| 2183 | 2179 | if ((u64) cmd->body.startView + (u64) num_sr_view > |
|---|
| 2184 | 2180 | (u64) SVGA3D_DX_MAX_SRVIEWS || |
|---|
| 2185 | | - cmd->body.type >= max_allowed) { |
|---|
| 2181 | + !vmw_shadertype_is_valid(dev_priv->sm_type, cmd->body.type)) { |
|---|
| 2186 | 2182 | VMW_DEBUG_USER("Invalid shader binding.\n"); |
|---|
| 2187 | 2183 | return -EINVAL; |
|---|
| 2188 | 2184 | } |
|---|
| .. | .. |
|---|
| 2206 | 2202 | SVGA3dCmdHeader *header) |
|---|
| 2207 | 2203 | { |
|---|
| 2208 | 2204 | VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXSetShader); |
|---|
| 2209 | | - SVGA3dShaderType max_allowed = has_sm5_context(dev_priv) ? |
|---|
| 2210 | | - SVGA3D_SHADERTYPE_MAX : SVGA3D_SHADERTYPE_DX10_MAX; |
|---|
| 2211 | 2205 | struct vmw_resource *res = NULL; |
|---|
| 2212 | 2206 | struct vmw_ctx_validation_info *ctx_node = VMW_GET_CTX_NODE(sw_context); |
|---|
| 2213 | 2207 | struct vmw_ctx_bindinfo_shader binding; |
|---|
| .. | .. |
|---|
| 2218 | 2212 | |
|---|
| 2219 | 2213 | cmd = container_of(header, typeof(*cmd), header); |
|---|
| 2220 | 2214 | |
|---|
| 2221 | | - if (cmd->body.type >= max_allowed || |
|---|
| 2222 | | - cmd->body.type < SVGA3D_SHADERTYPE_MIN) { |
|---|
| 2215 | + if (!vmw_shadertype_is_valid(dev_priv->sm_type, cmd->body.type)) { |
|---|
| 2223 | 2216 | VMW_DEBUG_USER("Illegal shader type %u.\n", |
|---|
| 2224 | 2217 | (unsigned int) cmd->body.type); |
|---|
| 2225 | 2218 | return -EINVAL; |
|---|